annotate rhodecode/lib/vcs/backends/git/repository.py @ 3631:10b4e34841a4 beta

Don't catch all exceptions
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 28 Mar 2013 03:34:36 +0100
parents 11feddcd75bb
children 600ffde2634c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
3 vcs.backends.git
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 ~~~~~~~~~~~~~~~~
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
6 Git backend implementation.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
7
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8 :created_on: Apr 8, 2010
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 :copyright: (c) 2010-2011 by Marcin Kuzminski, Lukasz Balcerzak.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
10 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 import os
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 import re
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 import time
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
15 import posixpath
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
16 import logging
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
17 import traceback
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
18 import urllib
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
19 import urllib2
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 from dulwich.repo import Repo, NotGitRepository
2975
e0da2c0ecee1 fixes #625 Git-Tags are not displayed in Shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 2807
diff changeset
21 from dulwich.objects import Tag
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
22 from string import Template
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
23
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
24 import rhodecode
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
25 from rhodecode.lib.vcs.backends.base import BaseRepository
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26 from rhodecode.lib.vcs.exceptions import BranchDoesNotExistError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27 from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
28 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
29 from rhodecode.lib.vcs.exceptions import RepositoryError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
30 from rhodecode.lib.vcs.exceptions import TagAlreadyExistError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
31 from rhodecode.lib.vcs.exceptions import TagDoesNotExistError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
32 from rhodecode.lib.vcs.utils import safe_unicode, makedate, date_fromtimestamp
3050
7ae9939409ab Use ThreadLocal storage for dulwich cached repos, finally fixes issues on concurent opening git pack files via dulwich
Marcin Kuzminski <marcin@python-works.com>
parents: 3046
diff changeset
33 from rhodecode.lib.vcs.utils.lazy import LazyProperty, ThreadLocalLazyProperty
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
34 from rhodecode.lib.vcs.utils.ordered_dict import OrderedDict
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
35 from rhodecode.lib.vcs.utils.paths import abspath
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
36 from rhodecode.lib.vcs.utils.paths import get_user_home
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
37 from .workdir import GitWorkdir
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
38 from .changeset import GitChangeset
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
39 from .inmemory import GitInMemoryChangeset
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
40 from .config import ConfigFile
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
41 from rhodecode.lib import subprocessio
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
42
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
43
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
44 log = logging.getLogger(__name__)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
45
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
46
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
47 class GitRepository(BaseRepository):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
48 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
49 Git repository backend.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
50 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
51 DEFAULT_BRANCH_NAME = 'master'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
52 scm = 'git'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
54 def __init__(self, repo_path, create=False, src_url=None,
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55 update_after_clone=False, bare=False):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
56
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
57 self.path = abspath(repo_path)
3043
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
58 repo = self._get_repo(create, src_url, update_after_clone, bare)
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
59 self.bare = repo.bare
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
60
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
61 self._config_files = [
3046
be781af446af bring back cached Repo() instance due to some other issues it generated
Marcin Kuzminski <marcin@python-works.com>
parents: 3043
diff changeset
62 bare and abspath(self.path, 'config')
be781af446af bring back cached Repo() instance due to some other issues it generated
Marcin Kuzminski <marcin@python-works.com>
parents: 3043
diff changeset
63 or abspath(self.path, '.git', 'config'),
3043
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
64 abspath(get_user_home(), '.gitconfig'),
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
65 ]
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
66
3579
11feddcd75bb after hooks cleanup we don't need to have ui injections into repo so we don't need to cache git repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3577
diff changeset
67 @property
3043
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
68 def _repo(self):
3577
238486bb71ab Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents: 3575
diff changeset
69 return Repo(self.path)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
70
3043
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
71 @property
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
72 def head(self):
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
73 try:
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
74 return self._repo.head()
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
75 except KeyError:
b61824e61e68 Don't cache dulwich Repos, in pararell multithreaded evniroment dulwich pack file openers
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
76 return None
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
77
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
78 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
79 def revisions(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
80 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
81 Returns list of revisions' ids, in ascending order. Being lazy
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
82 attribute allows external tools to inject shas from cache.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
83 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
84 return self._get_all_revisions()
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
85
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
86 @classmethod
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
87 def _run_git_command(cls, cmd, **opts):
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
88 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
89 Runs given ``cmd`` as git command and returns tuple
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
90 (stdout, stderr).
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
91
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
92 :param cmd: git command to be executed
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
93 :param opts: env options to pass into Subprocess command
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
94 """
2183
9d27481228a1 Extend GIT command wrapper with GIT_CONFIG_NOGLOBAL=1 to bypass gitconfig global
Marcin Kuzminski <marcin@python-works.com>
parents: 2047
diff changeset
95
3397
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
96 if '_bare' in opts:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
97 _copts = []
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
98 del opts['_bare']
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
99 else:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
100 _copts = ['-c', 'core.quotepath=false', ]
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
101 safe_call = False
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
102 if '_safe' in opts:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
103 #no exc on failure
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
104 del opts['_safe']
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
105 safe_call = True
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
106
2200
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
107 _str_cmd = False
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
108 if isinstance(cmd, basestring):
2199
31ebf7010566 various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents: 2198
diff changeset
109 cmd = [cmd]
2200
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
110 _str_cmd = True
2367
86aa4f1f130b white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2325
diff changeset
111
2325
18d34a56a736 fix for issue #417, git execution was broken on windows for certain commands.
Marcin Kuzminski <marcin@python-works.com>
parents: 2320
diff changeset
112 gitenv = os.environ
2616
bab7eaa2cd7d Remove GIT_DIT from environ on calling git_command, it can break a lot of stuff
Marcin Kuzminski <marcin@python-works.com>
parents: 2539
diff changeset
113 # need to clean fix GIT_DIR !
bab7eaa2cd7d Remove GIT_DIT from environ on calling git_command, it can break a lot of stuff
Marcin Kuzminski <marcin@python-works.com>
parents: 2539
diff changeset
114 if 'GIT_DIR' in gitenv:
bab7eaa2cd7d Remove GIT_DIT from environ on calling git_command, it can break a lot of stuff
Marcin Kuzminski <marcin@python-works.com>
parents: 2539
diff changeset
115 del gitenv['GIT_DIR']
2325
18d34a56a736 fix for issue #417, git execution was broken on windows for certain commands.
Marcin Kuzminski <marcin@python-works.com>
parents: 2320
diff changeset
116 gitenv['GIT_CONFIG_NOGLOBAL'] = '1'
2199
31ebf7010566 various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents: 2198
diff changeset
117
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
118 _git_path = rhodecode.CONFIG.get('git_path', 'git')
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
119 cmd = [_git_path] + _copts + cmd
2200
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
120 if _str_cmd:
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
121 cmd = ' '.join(cmd)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
122 try:
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
123 _opts = dict(
2325
18d34a56a736 fix for issue #417, git execution was broken on windows for certain commands.
Marcin Kuzminski <marcin@python-works.com>
parents: 2320
diff changeset
124 env=gitenv,
2760
fd5f2b217488 get stderr also for git commands, pass in shell = False
Marcin Kuzminski <marcin@python-works.com>
parents: 2706
diff changeset
125 shell=False,
2325
18d34a56a736 fix for issue #417, git execution was broken on windows for certain commands.
Marcin Kuzminski <marcin@python-works.com>
parents: 2320
diff changeset
126 )
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
127 _opts.update(opts)
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
128 p = subprocessio.SubprocessIOChunker(cmd, **_opts)
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
129 except (EnvironmentError, OSError), err:
3397
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
130 tb_err = ("Couldn't run git command (%s).\n"
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
131 "Original error was:%s\n" % (cmd, err))
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
132 log.error(tb_err)
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
133 if safe_call:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
134 return '', err
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
135 else:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
136 raise RepositoryError(tb_err)
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
137
2760
fd5f2b217488 get stderr also for git commands, pass in shell = False
Marcin Kuzminski <marcin@python-works.com>
parents: 2706
diff changeset
138 return ''.join(p.output), ''.join(p.error)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
139
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
140 def run_git_command(self, cmd):
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
141 opts = {}
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
142 if os.path.isdir(self.path):
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
143 opts['cwd'] = self.path
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
144 return self._run_git_command(cmd, **opts)
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
145
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
146 @classmethod
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
147 def _check_url(cls, url):
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
148 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
149 Functon will check given url and try to verify if it's a valid
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
150 link. Sometimes it may happened that mercurial will issue basic
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
151 auth request that can cause whole API to hang when used from python
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
152 or other external calls.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
153
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
154 On failures it'll raise urllib2.HTTPError
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
155 """
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
156 from mercurial.util import url as Url
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
157
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
158 # those authnadlers are patched for python 2.6.5 bug an
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
159 # infinit looping when given invalid resources
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
160 from mercurial.url import httpbasicauthhandler, httpdigestauthhandler
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
161
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
162 # check first if it's not an local url
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
163 if os.path.isdir(url) or url.startswith('file:'):
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
164 return True
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
165
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
166 if('+' in url[:url.find('://')]):
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
167 url = url[url.find('+') + 1:]
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
168
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
169 handlers = []
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
170 test_uri, authinfo = Url(url).authinfo()
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
171 if not test_uri.endswith('info/refs'):
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
172 test_uri = test_uri.rstrip('/') + '/info/refs'
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
173 if authinfo:
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
174 #create a password manager
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
175 passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
176 passmgr.add_password(*authinfo)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
177
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
178 handlers.extend((httpbasicauthhandler(passmgr),
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
179 httpdigestauthhandler(passmgr)))
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
180
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
181 o = urllib2.build_opener(*handlers)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
182 o.addheaders = [('User-Agent', 'git/1.7.8.0')] # fake some git
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
183
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
184 q = {"service": 'git-upload-pack'}
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
185 qs = '?%s' % urllib.urlencode(q)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
186 cu = "%s%s" % (test_uri, qs)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
187 req = urllib2.Request(cu, None, {})
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
188
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
189 try:
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
190 resp = o.open(req)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
191 return resp.code == 200
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
192 except Exception, e:
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
193 # means it cannot be cloned
2706
22f79562836c Fixed validators for remote repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2704
diff changeset
194 raise urllib2.URLError("[%s] %s" % (url, e))
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
195
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
196 def _get_repo(self, create, src_url=None, update_after_clone=False,
2807
57456b1c215b git forks were not created as bare repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2760
diff changeset
197 bare=False):
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
198 if create and os.path.exists(self.path):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
199 raise RepositoryError("Location already exist")
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
200 if src_url and not create:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
201 raise RepositoryError("Create should be set to True if src_url is "
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
202 "given (clone operation creates repository)")
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
203 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
204 if create and src_url:
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
205 GitRepository._check_url(src_url)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
206 self.clone(src_url, update_after_clone, bare)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
207 return Repo(self.path)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
208 elif create:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
209 os.mkdir(self.path)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
210 if bare:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
211 return Repo.init_bare(self.path)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
212 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
213 return Repo.init(self.path)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
214 else:
3396
3faf7a7eebb3 use cache repo when creating GitRepository instances
Marcin Kuzminski <marcin@python-works.com>
parents: 3376
diff changeset
215 return self._repo
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
216 except (NotGitRepository, OSError), err:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
217 raise RepositoryError(err)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
218
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
219 def _get_all_revisions(self):
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
220 # we must check if this repo is not empty, since later command
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
221 # fails if it is. And it's cheaper to ask than throw the subprocess
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
222 # errors
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
223 try:
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
224 self._repo.head()
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
225 except KeyError:
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
226 return []
3561
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
227 rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter',
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
228 '--all').strip()
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
229 cmd = 'rev-list %s --reverse --date-order' % (rev_filter)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
230 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
231 so, se = self.run_git_command(cmd)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
232 except RepositoryError:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
233 # Can be raised for empty repositories
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
234 return []
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
235 return so.splitlines()
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
236
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
237 def _get_all_revisions2(self):
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
238 #alternate implementation using dulwich
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
239 includes = [x[1][0] for x in self._parsed_refs.iteritems()
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
240 if x[1][1] != 'T']
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
241 return [c.commit.id for c in self._repo.get_walker(include=includes)]
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
242
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
243 def _get_revision(self, revision):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
244 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
245 For git backend we always return integer here. This way we ensure
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
246 that changset's revision attribute would become integer.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
247 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
248 pattern = re.compile(r'^[[0-9a-fA-F]{12}|[0-9a-fA-F]{40}]$')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
249 is_bstr = lambda o: isinstance(o, (str, unicode))
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
250 is_null = lambda o: len(o) == revision.count('0')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
251
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
252 if len(self.revisions) == 0:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
253 raise EmptyRepositoryError("There are no changesets yet")
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
254
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
255 if revision in (None, '', 'tip', 'HEAD', 'head', -1):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
256 revision = self.revisions[-1]
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
257
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
258 if ((is_bstr(revision) and revision.isdigit() and len(revision) < 12)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
259 or isinstance(revision, int) or is_null(revision)):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
260 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
261 revision = self.revisions[int(revision)]
3631
10b4e34841a4 Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents: 3579
diff changeset
262 except Exception:
3575
ca7785fae354 avoid %r markup of unicode strings in user facing messages
Mads Kiilerich <madski@unity3d.com>
parents: 3574
diff changeset
263 raise ChangesetDoesNotExistError("Revision %s does not exist "
3574
000653f7cdf9 avoid displaying repr of internal classes in user facing messages
Mads Kiilerich <madski@unity3d.com>
parents: 3561
diff changeset
264 "for this repository" % (revision))
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
265
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
266 elif is_bstr(revision):
2536
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
267 # get by branch/tag name
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
268 _ref_revision = self._parsed_refs.get(revision)
2536
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
269 _tags_shas = self.tags.values()
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
270 if _ref_revision: # and _ref_revision[1] in ['H', 'RH', 'T']:
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
271 return _ref_revision[0]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
272
2536
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
273 # maybe it's a tag ? we don't have them in self.revisions
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
274 elif revision in _tags_shas:
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
275 return _tags_shas[_tags_shas.index(revision)]
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
276
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
277 elif not pattern.match(revision) or revision not in self.revisions:
3575
ca7785fae354 avoid %r markup of unicode strings in user facing messages
Mads Kiilerich <madski@unity3d.com>
parents: 3574
diff changeset
278 raise ChangesetDoesNotExistError("Revision %s does not exist "
3574
000653f7cdf9 avoid displaying repr of internal classes in user facing messages
Mads Kiilerich <madski@unity3d.com>
parents: 3561
diff changeset
279 "for this repository" % (revision))
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
280
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
281 # Ensure we return full id
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
282 if not pattern.match(str(revision)):
3575
ca7785fae354 avoid %r markup of unicode strings in user facing messages
Mads Kiilerich <madski@unity3d.com>
parents: 3574
diff changeset
283 raise ChangesetDoesNotExistError("Given revision %s not recognized"
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
284 % revision)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
285 return revision
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
286
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
287 def _get_archives(self, archive_name='tip'):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
288
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
289 for i in [('zip', '.zip'), ('gz', '.tar.gz'), ('bz2', '.tar.bz2')]:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
290 yield {"type": i[0], "extension": i[1], "node": archive_name}
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
291
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
292 def _get_url(self, url):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
293 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
294 Returns normalized url. If schema is not given, would fall to
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
295 filesystem (``file:///``) schema.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
296 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
297 url = str(url)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
298 if url != 'default' and not '://' in url:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
299 url = ':///'.join(('file', url))
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
300 return url
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
301
3456
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
302 def get_hook_location(self):
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
303 """
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
304 returns absolute path to location where hooks are stored
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
305 """
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
306 loc = os.path.join(self.path, 'hooks')
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
307 if not self.bare:
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
308 loc = os.path.join(self.path, '.git', 'hooks')
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
309 return loc
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
310
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
311 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
312 def name(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
313 return os.path.basename(self.path)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
314
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
315 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
316 def last_change(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
317 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
318 Returns last change made on this repository as datetime object
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
319 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
320 return date_fromtimestamp(self._get_mtime(), makedate()[1])
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
321
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
322 def _get_mtime(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
323 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
324 return time.mktime(self.get_changeset().date.timetuple())
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
325 except RepositoryError:
2320
48d93ea1e245 fixed issues with support of bare-repos by vcs lib
Marcin Kuzminski <marcin@python-works.com>
parents: 2235
diff changeset
326 idx_loc = '' if self.bare else '.git'
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
327 # fallback to filesystem
2320
48d93ea1e245 fixed issues with support of bare-repos by vcs lib
Marcin Kuzminski <marcin@python-works.com>
parents: 2235
diff changeset
328 in_path = os.path.join(self.path, idx_loc, "index")
48d93ea1e245 fixed issues with support of bare-repos by vcs lib
Marcin Kuzminski <marcin@python-works.com>
parents: 2235
diff changeset
329 he_path = os.path.join(self.path, idx_loc, "HEAD")
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
330 if os.path.exists(in_path):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
331 return os.stat(in_path).st_mtime
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
332 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
333 return os.stat(he_path).st_mtime
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
334
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
335 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
336 def description(self):
2320
48d93ea1e245 fixed issues with support of bare-repos by vcs lib
Marcin Kuzminski <marcin@python-works.com>
parents: 2235
diff changeset
337 idx_loc = '' if self.bare else '.git'
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
338 undefined_description = u'unknown'
2320
48d93ea1e245 fixed issues with support of bare-repos by vcs lib
Marcin Kuzminski <marcin@python-works.com>
parents: 2235
diff changeset
339 description_path = os.path.join(self.path, idx_loc, 'description')
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
340 if os.path.isfile(description_path):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
341 return safe_unicode(open(description_path).read())
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
342 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
343 return undefined_description
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
344
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
345 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
346 def contact(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
347 undefined_contact = u'Unknown'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
348 return undefined_contact
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
349
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
350 @property
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
351 def branches(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
352 if not self.revisions:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
353 return {}
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
354 sortkey = lambda ctx: ctx[0]
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
355 _branches = [(x[0], x[1][0])
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
356 for x in self._parsed_refs.iteritems() if x[1][1] == 'H']
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
357 return OrderedDict(sorted(_branches, key=sortkey, reverse=False))
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
358
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
359 @LazyProperty
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
360 def tags(self):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
361 return self._get_tags()
2198
9784a54a0f5b display current heads of branches for git in changelog and shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 2183
diff changeset
362
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
363 def _get_tags(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
364 if not self.revisions:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
365 return {}
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
366
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
367 sortkey = lambda ctx: ctx[0]
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
368 _tags = [(x[0], x[1][0])
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
369 for x in self._parsed_refs.iteritems() if x[1][1] == 'T']
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
370 return OrderedDict(sorted(_tags, key=sortkey, reverse=True))
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
371
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
372 def tag(self, name, user, revision=None, message=None, date=None,
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
373 **kwargs):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
374 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
375 Creates and returns a tag for the given ``revision``.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
376
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
377 :param name: name for new tag
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
378 :param user: full username, i.e.: "Joe Doe <joe.doe@example.com>"
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
379 :param revision: changeset id for which new tag would be created
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
380 :param message: message of the tag's commit
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
381 :param date: date of tag's commit
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
382
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
383 :raises TagAlreadyExistError: if tag with same name already exists
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
384 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
385 if name in self.tags:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
386 raise TagAlreadyExistError("Tag %s already exists" % name)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
387 changeset = self.get_changeset(revision)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
388 message = message or "Added tag %s for commit %s" % (name,
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
389 changeset.raw_id)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
390 self._repo.refs["refs/tags/%s" % name] = changeset._commit.id
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
391
2539
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
392 self._parsed_refs = self._get_parsed_refs()
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
393 self.tags = self._get_tags()
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
394 return changeset
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
395
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
396 def remove_tag(self, name, user, message=None, date=None):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
397 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
398 Removes tag with the given ``name``.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
399
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
400 :param name: name of the tag to be removed
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
401 :param user: full username, i.e.: "Joe Doe <joe.doe@example.com>"
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
402 :param message: message of the tag's removal commit
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
403 :param date: date of tag's removal commit
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
404
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
405 :raises TagDoesNotExistError: if tag with given name does not exists
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
406 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
407 if name not in self.tags:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
408 raise TagDoesNotExistError("Tag %s does not exist" % name)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
409 tagpath = posixpath.join(self._repo.refs.path, 'refs', 'tags', name)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
410 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
411 os.remove(tagpath)
2539
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
412 self._parsed_refs = self._get_parsed_refs()
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
413 self.tags = self._get_tags()
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
414 except OSError, e:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
415 raise RepositoryError(e.strerror)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
416
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
417 @LazyProperty
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
418 def _parsed_refs(self):
2539
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
419 return self._get_parsed_refs()
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
420
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
421 def _get_parsed_refs(self):
3579
11feddcd75bb after hooks cleanup we don't need to have ui injections into repo so we don't need to cache git repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3577
diff changeset
422 # cache the property
11feddcd75bb after hooks cleanup we don't need to have ui injections into repo so we don't need to cache git repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3577
diff changeset
423 _repo = self._repo
11feddcd75bb after hooks cleanup we don't need to have ui injections into repo so we don't need to cache git repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3577
diff changeset
424 refs = _repo.get_refs()
2453
d2a528b60e50 whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2449
diff changeset
425 keys = [('refs/heads/', 'H'),
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
426 ('refs/remotes/origin/', 'RH'),
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
427 ('refs/tags/', 'T')]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
428 _refs = {}
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
429 for ref, sha in refs.iteritems():
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
430 for k, type_ in keys:
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
431 if ref.startswith(k):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
432 _key = ref[len(k):]
2975
e0da2c0ecee1 fixes #625 Git-Tags are not displayed in Shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 2807
diff changeset
433 if type_ == 'T':
3579
11feddcd75bb after hooks cleanup we don't need to have ui injections into repo so we don't need to cache git repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3577
diff changeset
434 obj = _repo.get_object(sha)
2975
e0da2c0ecee1 fixes #625 Git-Tags are not displayed in Shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 2807
diff changeset
435 if isinstance(obj, Tag):
3579
11feddcd75bb after hooks cleanup we don't need to have ui injections into repo so we don't need to cache git repos
Marcin Kuzminski <marcin@python-works.com>
parents: 3577
diff changeset
436 sha = _repo.get_object(sha).object[1]
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
437 _refs[_key] = [sha, type_]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
438 break
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
439 return _refs
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
440
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
441 def _heads(self, reverse=False):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
442 refs = self._repo.get_refs()
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
443 heads = {}
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
444
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
445 for key, val in refs.items():
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
446 for ref_key in ['refs/heads/', 'refs/remotes/origin/']:
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
447 if key.startswith(ref_key):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
448 n = key[len(ref_key):]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
449 if n not in ['HEAD']:
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
450 heads[n] = val
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
451
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
452 return heads if reverse else dict((y, x) for x, y in heads.iteritems())
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
453
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
454 def get_changeset(self, revision=None):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
455 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
456 Returns ``GitChangeset`` object representing commit from git repository
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
457 at the given revision or head (most recent commit) if None given.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
458 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
459 if isinstance(revision, GitChangeset):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
460 return revision
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
461 revision = self._get_revision(revision)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
462 changeset = GitChangeset(repository=self, revision=revision)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
463 return changeset
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
464
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
465 def get_changesets(self, start=None, end=None, start_date=None,
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
466 end_date=None, branch_name=None, reverse=False):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
467 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
468 Returns iterator of ``GitChangeset`` objects from start to end (both
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
469 are inclusive), in ascending date order (unless ``reverse`` is set).
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
470
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
471 :param start: changeset ID, as str; first returned changeset
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
472 :param end: changeset ID, as str; last returned changeset
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
473 :param start_date: if specified, changesets with commit date less than
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
474 ``start_date`` would be filtered out from returned set
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
475 :param end_date: if specified, changesets with commit date greater than
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
476 ``end_date`` would be filtered out from returned set
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
477 :param branch_name: if specified, changesets not reachable from given
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
478 branch would be filtered out from returned set
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
479 :param reverse: if ``True``, returned generator would be reversed
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
480 (meaning that returned changesets would have descending date order)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
481
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
482 :raise BranchDoesNotExistError: If given ``branch_name`` does not
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
483 exist.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
484 :raise ChangesetDoesNotExistError: If changeset for given ``start`` or
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
485 ``end`` could not be found.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
486
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
487 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
488 if branch_name and branch_name not in self.branches:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
489 raise BranchDoesNotExistError("Branch '%s' not found" \
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
490 % branch_name)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
491 # %H at format means (full) commit hash, initial hashes are retrieved
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
492 # in ascending date order
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
493 cmd_template = 'log --date-order --reverse --pretty=format:"%H"'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
494 cmd_params = {}
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
495 if start_date:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
496 cmd_template += ' --since "$since"'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
497 cmd_params['since'] = start_date.strftime('%m/%d/%y %H:%M:%S')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
498 if end_date:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
499 cmd_template += ' --until "$until"'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
500 cmd_params['until'] = end_date.strftime('%m/%d/%y %H:%M:%S')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
501 if branch_name:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
502 cmd_template += ' $branch_name'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
503 cmd_params['branch_name'] = branch_name
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
504 else:
3561
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
505 rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter',
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
506 '--all').strip()
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
507 cmd_template += ' %s' % (rev_filter)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
508
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
509 cmd = Template(cmd_template).safe_substitute(**cmd_params)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
510 revs = self.run_git_command(cmd)[0].splitlines()
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
511 start_pos = 0
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
512 end_pos = len(revs)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
513 if start:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
514 _start = self._get_revision(start)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
515 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
516 start_pos = revs.index(_start)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
517 except ValueError:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
518 pass
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
519
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
520 if end is not None:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
521 _end = self._get_revision(end)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
522 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
523 end_pos = revs.index(_end)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
524 except ValueError:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
525 pass
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
526
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
527 if None not in [start, end] and start_pos > end_pos:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
528 raise RepositoryError('start cannot be after end')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
529
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
530 if end_pos is not None:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
531 end_pos += 1
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
532
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
533 revs = revs[start_pos:end_pos]
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
534 if reverse:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
535 revs = reversed(revs)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
536 for rev in revs:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
537 yield self.get_changeset(rev)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
538
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
539 def get_diff(self, rev1, rev2, path=None, ignore_whitespace=False,
2233
07fce1930417 fixed issues with gitsubmodule diffs
Marcin Kuzminski <marcin@python-works.com>
parents: 2210
diff changeset
540 context=3):
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
541 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
542 Returns (git like) *diff*, as plain text. Shows changes introduced by
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
543 ``rev2`` since ``rev1``.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
544
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
545 :param rev1: Entry point from which diff is shown. Can be
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
546 ``self.EMPTY_CHANGESET`` - in this case, patch showing all
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
547 the changes since empty state of the repository until ``rev2``
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
548 :param rev2: Until which revision changes should be shown.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
549 :param ignore_whitespace: If set to ``True``, would not show whitespace
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
550 changes. Defaults to ``False``.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
551 :param context: How many lines before/after changed lines should be
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
552 shown. Defaults to ``3``.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
553 """
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2975
diff changeset
554 flags = ['-U%s' % context, '--full-index', '--binary', '-p', '-M', '--abbrev=40']
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
555 if ignore_whitespace:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
556 flags.append('-w')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
557
2384
5563af834d92 Added diff option into git and hg changeset objects, representing git formated patch against parent1
Marcin Kuzminski <marcin@python-works.com>
parents: 2383
diff changeset
558 if hasattr(rev1, 'raw_id'):
5563af834d92 Added diff option into git and hg changeset objects, representing git formated patch against parent1
Marcin Kuzminski <marcin@python-works.com>
parents: 2383
diff changeset
559 rev1 = getattr(rev1, 'raw_id')
5563af834d92 Added diff option into git and hg changeset objects, representing git formated patch against parent1
Marcin Kuzminski <marcin@python-works.com>
parents: 2383
diff changeset
560
5563af834d92 Added diff option into git and hg changeset objects, representing git formated patch against parent1
Marcin Kuzminski <marcin@python-works.com>
parents: 2383
diff changeset
561 if hasattr(rev2, 'raw_id'):
5563af834d92 Added diff option into git and hg changeset objects, representing git formated patch against parent1
Marcin Kuzminski <marcin@python-works.com>
parents: 2383
diff changeset
562 rev2 = getattr(rev2, 'raw_id')
5563af834d92 Added diff option into git and hg changeset objects, representing git formated patch against parent1
Marcin Kuzminski <marcin@python-works.com>
parents: 2383
diff changeset
563
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
564 if rev1 == self.EMPTY_CHANGESET:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
565 rev2 = self.get_changeset(rev2).raw_id
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
566 cmd = ' '.join(['show'] + flags + [rev2])
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
567 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
568 rev1 = self.get_changeset(rev1).raw_id
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
569 rev2 = self.get_changeset(rev2).raw_id
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
570 cmd = ' '.join(['diff'] + flags + [rev1, rev2])
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
571
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
572 if path:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
573 cmd += ' -- "%s"' % path
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2975
diff changeset
574
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
575 stdout, stderr = self.run_git_command(cmd)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
576 # If we used 'show' command, strip first few lines (until actual diff
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
577 # starts)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
578 if rev1 == self.EMPTY_CHANGESET:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
579 lines = stdout.splitlines()
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
580 x = 0
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
581 for line in lines:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
582 if line.startswith('diff'):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
583 break
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
584 x += 1
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
585 # Append new line just like 'diff' command do
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
586 stdout = '\n'.join(lines[x:]) + '\n'
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
587 return stdout
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
588
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
589 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
590 def in_memory_changeset(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
591 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
592 Returns ``GitInMemoryChangeset`` object for this repository.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
593 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
594 return GitInMemoryChangeset(self)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
595
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
596 def clone(self, url, update_after_clone=True, bare=False):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
597 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
598 Tries to clone changes from external location.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
599
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
600 :param update_after_clone: If set to ``False``, git won't checkout
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
601 working directory
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
602 :param bare: If set to ``True``, repository would be cloned into
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
603 *bare* git repository (no working directory at all).
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
604 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
605 url = self._get_url(url)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
606 cmd = ['clone']
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
607 if bare:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
608 cmd.append('--bare')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
609 elif not update_after_clone:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
610 cmd.append('--no-checkout')
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
611 cmd += ['--', '"%s"' % url, '"%s"' % self.path]
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
612 cmd = ' '.join(cmd)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
613 # If error occurs run_git_command raises RepositoryError already
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
614 self.run_git_command(cmd)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
615
2209
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
616 def pull(self, url):
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
617 """
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
618 Tries to pull changes from external location.
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
619 """
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
620 url = self._get_url(url)
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
621 cmd = ['pull']
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
622 cmd.append("--ff-only")
2210
7b458dd6f40d pass in url for remote pull in git
Marcin Kuzminski <marcin@python-works.com>
parents: 2209
diff changeset
623 cmd.append(url)
2209
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
624 cmd = ' '.join(cmd)
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
625 # If error occurs run_git_command raises RepositoryError already
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
626 self.run_git_command(cmd)
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
627
2383
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
628 def fetch(self, url):
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
629 """
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
630 Tries to pull changes from external location.
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
631 """
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
632 url = self._get_url(url)
3178
a64e663abda3 fixed bad merge on git fetch fix
Marcin Kuzminski <marcin@python-works.com>
parents: 3157
diff changeset
633 so, se = self.run_git_command('ls-remote -h %s' % url)
3157
a73aca2075b8 fixed fetch command for git repos, now it properly fetches from remotes
Marcin Kuzminski <marcin@python-works.com>
parents: 3050
diff changeset
634 refs = []
a73aca2075b8 fixed fetch command for git repos, now it properly fetches from remotes
Marcin Kuzminski <marcin@python-works.com>
parents: 3050
diff changeset
635 for line in (x for x in so.splitlines()):
a73aca2075b8 fixed fetch command for git repos, now it properly fetches from remotes
Marcin Kuzminski <marcin@python-works.com>
parents: 3050
diff changeset
636 sha, ref = line.split('\t')
a73aca2075b8 fixed fetch command for git repos, now it properly fetches from remotes
Marcin Kuzminski <marcin@python-works.com>
parents: 3050
diff changeset
637 refs.append(ref)
a73aca2075b8 fixed fetch command for git repos, now it properly fetches from remotes
Marcin Kuzminski <marcin@python-works.com>
parents: 3050
diff changeset
638 refs = ' '.join(('+%s:%s' % (r, r) for r in refs))
3178
a64e663abda3 fixed bad merge on git fetch fix
Marcin Kuzminski <marcin@python-works.com>
parents: 3157
diff changeset
639 cmd = '''fetch %s -- %s''' % (url, refs)
2383
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
640 self.run_git_command(cmd)
e576410f911d Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2367
diff changeset
641
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
642 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
643 def workdir(self):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
644 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
645 Returns ``Workdir`` instance for this repository.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
646 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
647 return GitWorkdir(self)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
648
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
649 def get_config_value(self, section, name, config_file=None):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
650 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
651 Returns configuration value for a given [``section``] and ``name``.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
652
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
653 :param section: Section we want to retrieve value from
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
654 :param name: Name of configuration we want to retrieve
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
655 :param config_file: A path to file which should be used to retrieve
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
656 configuration from (might also be a list of file paths)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
657 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
658 if config_file is None:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
659 config_file = []
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
660 elif isinstance(config_file, basestring):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
661 config_file = [config_file]
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
662
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
663 def gen_configs():
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
664 for path in config_file + self._config_files:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
665 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
666 yield ConfigFile.from_path(path)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
667 except (IOError, OSError, ValueError):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
668 continue
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
669
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
670 for config in gen_configs():
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
671 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
672 return config.get(section, name)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
673 except KeyError:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
674 continue
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
675 return None
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
676
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
677 def get_user_name(self, config_file=None):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
678 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
679 Returns user's name from global configuration file.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
680
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
681 :param config_file: A path to file which should be used to retrieve
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
682 configuration from (might also be a list of file paths)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
683 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
684 return self.get_config_value('user', 'name', config_file)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
685
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
686 def get_user_email(self, config_file=None):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
687 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
688 Returns user's email from global configuration file.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
689
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
690 :param config_file: A path to file which should be used to retrieve
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
691 configuration from (might also be a list of file paths)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
692 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
693 return self.get_config_value('user', 'email', config_file)