Changeset - 4185f87f0ee0
[Not reviewed]
default
0 3 0
Thomas De Schampheleire - 11 years ago 2015-04-04 21:29:00
thomas.de.schampheleire@gmail.com
docs/usage: rework section on non-changeable repository URLs and call them 'permanent'
3 files changed with 21 insertions and 20 deletions:
0 comments (0 inline, 0 general)
docs/usage/general.rst
Show inline comments
 
@@ -49,73 +49,74 @@ changelog.
 
Branch filter
 
  By default, the changelog shows revisions from all branches in the
 
  repository. Use the branch filter to restrict to a given branch.
 

	
 
Viewing a changeset
 
  A particular changeset can be opened by clicking on either the changeset
 
  hash or the commit message, or by ticking the checkbox and clicking the
 
  ``Show selected changeset`` button at the top.
 

	
 
Viewing all changes between two changesets
 
  To get a list of all changesets between two selected changesets, along with
 
  the changes in each one of them, tick the checkboxes of the first and
 
  last changeset in the desired range and click the ``Show selected changesets``
 
  button at the top. You can only show the range between the first and last
 
  checkbox (no cherry-picking).
 

	
 
  From that page, you can proceed to viewing the overall delta between the
 
  selected changesets, by clicking the ``Compare revisions`` button.
 

	
 
Creating a pull request
 
  You can create a new pull request for the changes of a particular changeset
 
  (and its ancestors) by selecting it and clicking the ``Open new pull request
 
  for selected changesets`` button.
 

	
 
Non changeable repository urls
 
------------------------------
 
Permanent repository URLs
 
-------------------------
 

	
 
Due to the complicated nature of repository grouping, URLs of repositories
 
can often change.
 

	
 
example::
 
can often change. For example, a repository originally accessible from::
 

	
 
  #before
 
  http://server.com/repo_name
 
  # after insertion to test_group group the url will be
 

	
 
would get a new URL after moving it to test_group::
 

	
 
  http://server.com/test_group/repo_name
 

	
 
This can be an issue for build systems and any other hardcoded scripts, moving
 
a repository to a group leads to a need for changing external systems. To
 
overcome this Kallithea introduces a non-changable replacement URL. It's
 
simply a repository ID prefixed with ``_``. The above URLs are also accessible as::
 
Such moving of a repository to a group can be an issue for build systems and
 
other scripts where the repository paths are hardcoded. To mitigate this,
 
Kallithea provides permanent URLs using the repository ID prefixed with an
 
underscore. In all Kallithea URLs, for example those for the changelog and the
 
file view, a repository name can be replaced by this ``_ID`` string. Since IDs
 
are always the same, moving the repository to a different group will not affect
 
such URLs.
 

	
 
In the example, the repository could also be accessible as::
 

	
 
  http://server.com/_<ID>
 

	
 
Since IDs are always the same, moving the repository will not affect
 
such a URL.  the ``_<ID>`` syntax can be used anywhere in the system so
 
URLs with ``repo_name`` for changelogs and files can be exchanged
 
with the ``_<ID>`` syntax.
 

	
 
The ID of a given repository can be shown from the repository ``Summary`` page,
 
by selecting the ``Show by ID`` button next to ``Clone URL``.
 

	
 
E-mail notifications
 
--------------------
 

	
 
When the administrator correctly specified the e-mail settings in the Kallithea
 
configuration file, Kallithea will send e-mails on user registration and when
 
errors occur.
 

	
 
Mails are also sent for comments on changesets. In this case, an e-mail is sent
 
to the committer of the changeset (if known to Kallithea), to all reviewers of
 
the pull request (if applicable) and to all people mentioned in the comment
 
using @mention notation.
 

	
 

	
 
Trending source files
 
---------------------
 

	
 
Trending source files are calculated based on a pre-defined dict of known
 
types and extensions. If you miss some extension or would like to scan some
 
custom files, it is possible to add new types in the ``LANGUAGES_EXTENSIONS_MAP`` dict
 
located in ``kallithea/lib/celerylib/tasks.py``.
 

	
 

	
 
Cloning remote repositories
kallithea/lib/base.py
Show inline comments
 
@@ -133,49 +133,49 @@ class BasicAuth(paste.auth.basic.AuthBas
 
                return username
 
        return self.build_authentication()
 

	
 
    __call__ = authenticate
 

	
 

	
 
class BaseVCSController(object):
 

	
 
    def __init__(self, application, config):
 
        self.application = application
 
        self.config = config
 
        # base path of repo locations
 
        self.basepath = self.config['base_path']
 
        #authenticate this VCS request using authfunc
 
        self.authenticate = BasicAuth('', auth_modules.authenticate,
 
                                      config.get('auth_ret_code'))
 
        self.ip_addr = '0.0.0.0'
 

	
 
    def _handle_request(self, environ, start_response):
 
        raise NotImplementedError()
 

	
 
    def _get_by_id(self, repo_name):
 
        """
 
        Gets a special pattern _<ID> from clone url and tries to replace it
 
        with a repository_name for support of _<ID> non changeable urls
 
        with a repository_name for support of _<ID> permanent URLs
 

	
 
        :param repo_name:
 
        """
 

	
 
        data = repo_name.split('/')
 
        if len(data) >= 2:
 
            from kallithea.lib.utils import get_repo_by_id
 
            by_id_match = get_repo_by_id(repo_name)
 
            if by_id_match:
 
                data[1] = by_id_match
 

	
 
        return '/'.join(data)
 

	
 
    def _invalidate_cache(self, repo_name):
 
        """
 
        Sets cache for this repository for invalidation on next access
 

	
 
        :param repo_name: full repo name, also a cache key
 
        """
 
        ScmModel().mark_for_invalidation(repo_name)
 

	
 
    def _check_permission(self, action, user, repo_name, ip_addr=None):
 
        """
 
        Checks permissions using action (push/pull) user and repository
kallithea/templates/admin/repos/repo_edit_settings.html
Show inline comments
 
${h.form(url('repo', repo_name=c.repo_info.repo_name),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
            <div class="field">
 
                <div class="label">
 
                    <label for="repo_name">${_('Name')}:</label>
 
                </div>
 
                <div class="input">
 
                    ${h.text('repo_name',class_="medium")}
 
                    <span class="help-block">${_('Non-changeable id')}: `_${c.repo_info.repo_id}` <span><a id="show_more_clone_id" href="#">${_('What is that?')}</a></span></span>
 
                    <span class="help-block">${_('Permanent Repository ID')}: `_${c.repo_info.repo_id}` <span><a id="show_more_clone_id" href="#">${_('What is that?')}</a></span></span>
 
                    <span id="clone_id" class="help-block" style="display: none">
 
                        ${_('URL by id')}: `${c.repo_info.clone_url(with_id=True)}` </br>
 
                        ${_('''In case this repository is renamed or moved into another group the repository URL changes.
 
                               Using the above URL guarantees that this repository will always be accessible under such URL.
 
                               Useful for CI systems, or any other cases that you need to hardcode the URL into 3rd party service.''')}</span>
 
                               Using the above permanent URL guarantees that this repository always will be accessible on that URL.
 
                               This is useful for CI systems, or any other cases that you need to hardcode the URL into a 3rd party service.''')}</span>
 
                </div>
 
           </div>
 
           <div class="field">
 
               <div class="label">
 
                   <label for="clone_uri">${_('Clone URL')}:</label>
 
               </div>
 
               <div class="input">
 
                   %if c.repo_info.clone_uri:
 
                    <div id="clone_uri_hidden" style="font-size: 14px">
 
                        <span id="clone_uri_hidden_value">${c.repo_info.clone_uri_hidden}</span>
 
                        <span style="cursor: pointer; padding: 0px 0px 5px 0px" id="edit_clone_uri"><i class="icon-edit"></i>${_('edit')}</span>
 
                    </div>
 
                    <div id="alter_clone_uri" style="display: none">
 
                        ${h.text('clone_uri',class_="medium",  placeholder=_('new value'))}
 
                    </div>
 
                   %else:
 
                    ## not set yet, display form to set it
 
                    ${h.text('clone_uri',class_="medium")}
 
                    ${h.hidden('clone_uri_change', 'NEW')}
 
                   %endif
 
                 <span id="alter_clone_uri_help_block" class="help-block">${_('URL used for doing remote pulls.')}</span>
 
               </div>
 
            </div>
 
            <div class="field">
0 comments (0 inline, 0 general)