annotate rhodecode/lib/vcs/backends/git/repository.py @ 4089:a5888ca796b5

Fixed spelling of get's to gets
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 16 Jul 2013 21:54:28 +0200
parents 7c73f1868318
children ffd45b185016
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 """
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
3 vcs.backends.git.repository
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
6 Git repository implementation.
2007
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
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
15 import urllib
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
16 import urllib2
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
17 import logging
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
18 import posixpath
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
19 import string
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
20
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
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
22 from dulwich.repo import Repo, NotGitRepository
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
23
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
24 from rhodecode.lib.vcs import subprocessio
3747
600ffde2634c changelog pagination with branch filtering now uses
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
25 from rhodecode.lib.vcs.backends.base import BaseRepository, CollectionGenerator
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
26 from rhodecode.lib.vcs.conf import settings
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
27
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
28 from rhodecode.lib.vcs.exceptions import (
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
29 BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError,
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
30 RepositoryError, TagAlreadyExistError, TagDoesNotExistError
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
31 )
2007
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
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
33 from rhodecode.lib.vcs.utils.lazy import LazyProperty
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
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
35 from rhodecode.lib.vcs.utils.paths import abspath, get_user_home
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
36
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
37 from rhodecode.lib.vcs.utils.hgcompat import (
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
38 hg_url, httpbasicauthhandler, httpdigestauthhandler
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
39 )
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
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
41 from .changeset import GitChangeset
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
42 from .config import ConfigFile
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
43 from .inmemory import GitInMemoryChangeset
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
44 from .workdir import GitWorkdir
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
45
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
46 SHA_PATTERN = re.compile(r'^[[0-9a-fA-F]{12}|[0-9a-fA-F]{40}]$')
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
47
2676
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
48 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
49
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 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
52 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53 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
54 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55 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
56 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
57
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
58 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
59 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
60
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
61 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
62 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
63 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
64
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
65 @property
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
66 def _config_files(self):
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
67 return [
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
68 self.bare and abspath(self.path, 'config')
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
69 or abspath(self.path, '.git', 'config'),
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
70 abspath(get_user_home(), '.gitconfig'),
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
71 ]
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
72
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
73 @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
74 def _repo(self):
3577
238486bb71ab Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents: 3575
diff changeset
75 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
76
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
77 @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
78 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
79 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
80 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
81 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
82 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
83
3835
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
84 @property
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
85 def _empty(self):
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
86 """
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
87 Checks if repository is empty ie. without any changesets
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
88 """
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
89
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
90 try:
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
91 self.revisions[0]
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
92 except (KeyError, IndexError):
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
93 return True
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
94 return False
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
95
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
96 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
97 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
98 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
99 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
100 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
101 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
102 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
103
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
104 @classmethod
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
105 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
106 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
107 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
108 (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
109
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
110 :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
111 :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
112 """
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
113
3397
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
114 if '_bare' in opts:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
115 _copts = []
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
116 del opts['_bare']
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
117 else:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
118 _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
119 safe_call = False
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
120 if '_safe' in opts:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
121 #no exc on failure
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
122 del opts['_safe']
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
123 safe_call = True
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
124
2200
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
125 _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
126 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
127 cmd = [cmd]
2200
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
128 _str_cmd = True
2367
86aa4f1f130b white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2325
diff changeset
129
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
130 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
131 # 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
132 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
133 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
134 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
135
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
136 _git_path = settings.GIT_EXECUTABLE_PATH
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
137 cmd = [_git_path] + _copts + cmd
2200
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
138 if _str_cmd:
d7a4c7e3528e fixed git-command wrapper
Marcin Kuzminski <marcin@python-works.com>
parents: 2199
diff changeset
139 cmd = ' '.join(cmd)
3830
08d439bfbd8c fixed handling shell argument in subprocess calls, it always was hardcoded even when passed properly in arguments
Marcin Kuzminski <marcin@python-works.com>
parents: 3805
diff changeset
140
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
141 try:
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
142 _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
143 env=gitenv,
3830
08d439bfbd8c fixed handling shell argument in subprocess calls, it always was hardcoded even when passed properly in arguments
Marcin Kuzminski <marcin@python-works.com>
parents: 3805
diff changeset
144 shell=True,
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
145 )
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
146 _opts.update(opts)
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
147 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
148 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
149 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
150 "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
151 log.error(tb_err)
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
152 if safe_call:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
153 return '', err
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
154 else:
64c194492aad --version command should be safe, and bare no modifications
Marcin Kuzminski <marcin@python-works.com>
parents: 3396
diff changeset
155 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
156
2760
fd5f2b217488 get stderr also for git commands, pass in shell = False
Marcin Kuzminski <marcin@python-works.com>
parents: 2706
diff changeset
157 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
158
3376
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
159 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
160 opts = {}
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
161 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
162 opts['cwd'] = self.path
e67b2ef07a8e git executable is now configurable via .ini files
Marcin Kuzminski <marcin@python-works.com>
parents: 3178
diff changeset
163 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
164
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
165 @classmethod
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
166 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
167 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
168 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
169 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
170 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
171 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
172
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
173 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
174 """
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
175
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
176 # 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
177 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
178 return True
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
179
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
180 if('+' in url[:url.find('://')]):
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
181 url = url[url.find('+') + 1:]
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
182
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
183 handlers = []
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
184 test_uri, authinfo = hg_url(url).authinfo()
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
185 if not test_uri.endswith('info/refs'):
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
186 test_uri = test_uri.rstrip('/') + '/info/refs'
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
187 if authinfo:
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
188 #create a password manager
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
189 passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
190 passmgr.add_password(*authinfo)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
191
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
192 handlers.extend((httpbasicauthhandler(passmgr),
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
193 httpdigestauthhandler(passmgr)))
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
194
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
195 o = urllib2.build_opener(*handlers)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
196 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
197
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
198 q = {"service": 'git-upload-pack'}
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
199 qs = '?%s' % urllib.urlencode(q)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
200 cu = "%s%s" % (test_uri, qs)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
201 req = urllib2.Request(cu, None, {})
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
202
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
203 try:
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
204 resp = o.open(req)
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
205 return resp.code == 200
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
206 except Exception, e:
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
207 # means it cannot be cloned
2706
22f79562836c Fixed validators for remote repos
Marcin Kuzminski <marcin@python-works.com>
parents: 2704
diff changeset
208 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
209
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
210 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
211 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
212 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
213 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
214 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
215 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
216 "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
217 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
218 if create and src_url:
2704
959d0daa44da Added url validator for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2676
diff changeset
219 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
220 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
221 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
222 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
223 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
224 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
225 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
226 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
227 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
228 else:
3396
3faf7a7eebb3 use cache repo when creating GitRepository instances
Marcin Kuzminski <marcin@python-works.com>
parents: 3376
diff changeset
229 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
230 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
231 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
232
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
233 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
234 # 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
235 # 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
236 # errors
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
237 try:
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
238 self._repo.head()
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
239 except KeyError:
1f4d4b8d72f5 switched git_command to subprocession for non-blocking Popen.
Marcin Kuzminski <marcin@python-works.com>
parents: 2616
diff changeset
240 return []
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
241
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
242 rev_filter = _git_path = settings.GIT_REV_FILTER
3561
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
243 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
244 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
245 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
246 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
247 # 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
248 return []
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
249 return so.splitlines()
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
250
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
251 def _get_all_revisions2(self):
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
252 #alternate implementation using dulwich
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
253 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
254 if x[1][1] != 'T']
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
255 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
256
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
257 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
258 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
259 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
260 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
261 """
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
262
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
263 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
264
3835
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
265 if self._empty:
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
266 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
267
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
268 if revision in (None, '', 'tip', 'HEAD', 'head', -1):
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
269 return self.revisions[-1]
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
270
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
271 is_bstr = isinstance(revision, (str, unicode))
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
272 if ((is_bstr and revision.isdigit() and len(revision) < 12)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
273 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
274 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
275 revision = self.revisions[int(revision)]
3631
10b4e34841a4 Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents: 3579
diff changeset
276 except Exception:
3575
ca7785fae354 avoid %r markup of unicode strings in user facing messages
Mads Kiilerich <madski@unity3d.com>
parents: 3574
diff changeset
277 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
278 "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
279
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
280 elif is_bstr:
2536
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
281 # 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
282 _ref_revision = self._parsed_refs.get(revision)
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
283 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
284 return _ref_revision[0]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
285
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
286 _tags_shas = self.tags.values()
2536
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
287 # maybe it's a tag ? we don't have them in self.revisions
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
288 if revision in _tags_shas:
2536
aaa41736ae51 Fixed lookup by Tag sha in git backend
Marcin Kuzminski <marcin@python-works.com>
parents: 2535
diff changeset
289 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
290
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
291 elif not SHA_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
292 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
293 "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
294
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
295 # Ensure we return full id
3805
a5c234e934c5 synced with latest vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3797
diff changeset
296 if not SHA_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
297 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
298 % revision)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
299 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
300
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
301 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
302
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
303 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
304 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
305
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
306 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
307 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
308 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
309 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
310 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
311 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
312 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
313 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
314 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
315
3456
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
316 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
317 """
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
318 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
319 """
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
320 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
321 if not self.bare:
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
322 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
323 return loc
cf1fbc9fed89 Added get_hook_location method for easier hook extraction
Marcin Kuzminski <marcin@python-works.com>
parents: 3397
diff changeset
324
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
325 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
326 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
327 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
328
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
329 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
330 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
331 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
332 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
333 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
334 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
335
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 _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
337 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
338 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
339 except RepositoryError:
2320
48d93ea1e245 fixed issues with support of bare-repos by vcs lib
Marcin Kuzminski <marcin@python-works.com>
parents: 2235
diff changeset
340 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
341 # 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
342 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
343 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
344 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
345 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
346 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
347 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
348
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
349 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
350 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
351 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
352 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
353 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
354 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
355 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
356 else:
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 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
358
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
359 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
360 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
361 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
362 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
363
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
364 @property
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
365 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
366 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
367 return {}
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
368 sortkey = lambda ctx: ctx[0]
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
369 _branches = [(x[0], x[1][0])
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
370 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
371 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
372
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
373 @LazyProperty
4020
218ed589e44a branch selectors: show closed branches too
Mads Kiilerich <madski@unity3d.com>
parents: 3890
diff changeset
374 def closed_branches(self):
218ed589e44a branch selectors: show closed branches too
Mads Kiilerich <madski@unity3d.com>
parents: 3890
diff changeset
375 return {}
218ed589e44a branch selectors: show closed branches too
Mads Kiilerich <madski@unity3d.com>
parents: 3890
diff changeset
376
218ed589e44a branch selectors: show closed branches too
Mads Kiilerich <madski@unity3d.com>
parents: 3890
diff changeset
377 @LazyProperty
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
378 def tags(self):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
379 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
380
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
381 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
382 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
383 return {}
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
384
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
385 sortkey = lambda ctx: ctx[0]
2535
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
386 _tags = [(x[0], x[1][0])
b24b1f0fa505 Get tags and branches using _parsed_refs
Marcin Kuzminski <marcin@python-works.com>
parents: 2453
diff changeset
387 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
388 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
389
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
390 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
391 **kwargs):
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
392 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
393 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
394
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
395 :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
396 :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
397 :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
398 :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
399 :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
400
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
401 :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
402 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
403 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
404 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
405 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
406 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
407 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
408 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
409
2539
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
410 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
411 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
412 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
413
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
414 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
415 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
416 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
417
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
418 :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
419 :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
420 :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
421 :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
422
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
423 :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
424 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
425 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
426 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
427 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
428 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
429 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
430 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
431 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
432 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
433 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
434
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
435 @LazyProperty
4088
7c73f1868318 Add bookmarks property to git branch, it makes it consistent with other property
Marcin Kuzminski <marcin@python-works.com>
parents: 4020
diff changeset
436 def bookmarks(self):
7c73f1868318 Add bookmarks property to git branch, it makes it consistent with other property
Marcin Kuzminski <marcin@python-works.com>
parents: 4020
diff changeset
437 """
4089
a5888ca796b5 Fixed spelling of get's to gets
Marcin Kuzminski <marcin@python-works.com>
parents: 4088
diff changeset
438 Gets bookmarks for this repository
4088
7c73f1868318 Add bookmarks property to git branch, it makes it consistent with other property
Marcin Kuzminski <marcin@python-works.com>
parents: 4020
diff changeset
439 """
7c73f1868318 Add bookmarks property to git branch, it makes it consistent with other property
Marcin Kuzminski <marcin@python-works.com>
parents: 4020
diff changeset
440 return {}
7c73f1868318 Add bookmarks property to git branch, it makes it consistent with other property
Marcin Kuzminski <marcin@python-works.com>
parents: 4020
diff changeset
441
7c73f1868318 Add bookmarks property to git branch, it makes it consistent with other property
Marcin Kuzminski <marcin@python-works.com>
parents: 4020
diff changeset
442 @LazyProperty
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
443 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
444 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
445
da18c423b100 Invalidate gits parsed_refs cache after commit, tagging or tag remove
Marcin Kuzminski <marcin@python-works.com>
parents: 2536
diff changeset
446 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
447 # 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
448 _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
449 refs = _repo.get_refs()
2453
d2a528b60e50 whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2449
diff changeset
450 keys = [('refs/heads/', 'H'),
2449
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
451 ('refs/remotes/origin/', 'RH'),
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
452 ('refs/tags/', 'T')]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
453 _refs = {}
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
454 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
455 for k, type_ in keys:
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
456 if ref.startswith(k):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
457 _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
458 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
459 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
460 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
461 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
462 _refs[_key] = [sha, type_]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
463 break
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
464 return _refs
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
465
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
466 def _heads(self, reverse=False):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
467 refs = self._repo.get_refs()
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
468 heads = {}
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
469
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
470 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
471 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
472 if key.startswith(ref_key):
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
473 n = key[len(ref_key):]
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
474 if n not in ['HEAD']:
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
475 heads[n] = val
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
476
08fc67c1c948 added discovery by branches and tags for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2384
diff changeset
477 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
478
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
479 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
480 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
481 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
482 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
483 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
484 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
485 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
486 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
487 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
488 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
489
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
490 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
491 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
492 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
493 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
494 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
495
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
496 :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
497 :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
498 :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
499 ``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
500 :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
501 ``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
502 :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
503 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
504 :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
505 (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
506
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
507 :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
508 exist.
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
509 :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
510 ``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
511
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
512 """
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 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
514 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
515 % branch_name)
3835
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
516 # actually we should check now if it's not an empty repo to not spaw
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
517 # subprocess commands
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
518 if self._empty:
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
519 raise EmptyRepositoryError("There are no changesets yet")
42981614c624 vcs: fixed issues with calling get_changesets method doesn't
Marcin Kuzminski <marcin@python-works.com>
parents: 3830
diff changeset
520
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
521 # %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
522 # 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
523 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
524 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
525 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
526 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
527 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
528 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
529 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
530 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
531 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
532 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
533 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
534 else:
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
535 rev_filter = _git_path = settings.GIT_REV_FILTER
3561
c04d1d9b6193 made git refs filter configurable ref issue #797
Marcin Kuzminski <marcin@python-works.com>
parents: 3476
diff changeset
536 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
537
3797
d7488551578e synced vcs with upstream
Marcin Kuzminski <marcin@python-works.com>
parents: 3747
diff changeset
538 cmd = string.Template(cmd_template).safe_substitute(**cmd_params)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
539 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
540 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
541 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
542 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
543 _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
544 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
545 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
546 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
547 pass
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
548
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
549 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
550 _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
551 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
552 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
553 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
554 pass
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
555
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
556 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
557 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
558
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
559 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
560 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
561
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
562 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
563 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
564 revs = reversed(revs)
3747
600ffde2634c changelog pagination with branch filtering now uses
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
565 return CollectionGenerator(self, revs)
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
566
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
567 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
568 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
569 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
570 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
571 ``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
572
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
573 :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
574 ``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
575 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
576 :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
577 :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
578 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
579 :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
580 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
581 """
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2975
diff changeset
582 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
583 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
584 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
585
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
586 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
587 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
588
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
589 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
590 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
591
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
592 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
593 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
594 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
595 else:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
596 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
597 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
598 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
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 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
601 cmd += ' -- "%s"' % path
2995
32471bd1f4ee Implemented generation of changesets based
Marcin Kuzminski <marcin@python-works.com>
parents: 2975
diff changeset
602
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
603 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
604 # 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
605 # starts)
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
606 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
607 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
608 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
609 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
610 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
611 break
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
612 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
613 # 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
614 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
615 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
616
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
617 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
618 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
619 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
620 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
621 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
622 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
623
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
624 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
625 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
626 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
627
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
628 :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
629 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
630 :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
631 *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
632 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
633 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
634 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
635 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
636 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
637 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
638 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
639 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
640 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
641 # 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
642 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
643
2209
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
644 def pull(self, url):
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
645 """
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
646 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
647 """
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
648 url = self._get_url(url)
3890
f5a1314886ec replace list appends with list literals when possible
Marcin Kuzminski <marcin@python-works.com>
parents: 3835
diff changeset
649 cmd = ['pull', "--ff-only", url]
2209
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
650 cmd = ' '.join(cmd)
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
651 # 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
652 self.run_git_command(cmd)
19a6c23af14b Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents: 2200
diff changeset
653
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
654 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
655 """
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
656 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
657 """
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
658 url = self._get_url(url)
3178
a64e663abda3 fixed bad merge on git fetch fix
Marcin Kuzminski <marcin@python-works.com>
parents: 3157
diff changeset
659 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
660 refs = []
a73aca2075b8 fixed fetch command for git repos, now it properly fetches from remotes
Marcin Kuzminski <marcin@python-works.com>
parents: 3050
diff changeset
661 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
662 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
663 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
664 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
665 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
666 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
667
2007
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
668 @LazyProperty
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
669 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
670 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
671 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
672 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
673 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
674
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
675 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
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 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
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 :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
680 :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
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 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
685 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
686 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
687 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
688
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
689 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
690 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
691 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
692 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
693 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
694 continue
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
695
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
696 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
697 try:
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
698 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
699 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
700 continue
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
701 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
702
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
703 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
704 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
705 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
706
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
707 :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
708 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
709 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
710 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
711
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
712 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
713 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
714 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
715
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
716 :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
717 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
718 """
324ac367a4da Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
719 return self.get_config_value('user', 'email', config_file)