##// END OF EJS Templates
diff parser: match the header order of hg diff --git patches...
diff parser: match the header order of hg diff --git patches The output might look like: diff --git a/A b/B old mode 100644 new mode 100755 rename from A rename to B --- a/A +++ b/B Such files were shown as 'modified binary file chmod 100644 => 100755' without diff. Now the chmod and diff will be shown ... but still not the rename. Correct parsing of headers do require a better parser - one do not just use a regexp.

File last commit:

r3796:2b5f94fc beta
r3817:631e8000 beta
Show More
workdir.py
31 lines | 1.1 KiB | text/x-python | PythonLexer
import re
from rhodecode.lib.vcs.backends.base import BaseWorkdir
from rhodecode.lib.vcs.exceptions import RepositoryError
from rhodecode.lib.vcs.exceptions import BranchDoesNotExistError
class GitWorkdir(BaseWorkdir):
def get_branch(self):
headpath = self.repository._repo.refs.refpath('HEAD')
try:
content = open(headpath).read()
match = re.match(r'^ref: refs/heads/(?P<branch>.+)\n$', content)
if match:
return match.groupdict()['branch']
else:
raise RepositoryError("Couldn't compute workdir's branch")
except IOError:
# Try naive way...
raise RepositoryError("Couldn't compute workdir's branch")
def get_changeset(self):
wk_dir_id = self.repository._repo.refs.as_dict().get('HEAD')
return self.repository.get_changeset(wk_dir_id)
def checkout_branch(self, branch=None):
if branch is None:
branch = self.repository.DEFAULT_BRANCH_NAME
if branch not in self.repository.branches:
raise BranchDoesNotExistError
self.repository.run_git_command(['checkout', branch])