~mdw
/
stgit
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make diff flags handling more modular.
[stgit]
/
stgit
/
git.py
diff --git
a/stgit/git.py
b/stgit/git.py
index
d7eb48e
..
7358fae
100644
(file)
--- a/
stgit/git.py
+++ b/
stgit/git.py
@@
-74,7
+74,7
@@
class Commit:
def __init__(self, id_hash):
self.__id_hash = id_hash
def __init__(self, id_hash):
self.__id_hash = id_hash
- lines = _output_lines(
'git-cat-file commit %s' % id_hash
)
+ lines = _output_lines(
['git-cat-file', 'commit', id_hash]
)
for i in range(len(lines)):
line = lines[i]
if line == '\n':
for i in range(len(lines)):
line = lines[i]
if line == '\n':
@@
-102,8
+102,8
@@
class Commit:
return None
def get_parents(self):
return None
def get_parents(self):
- return _output_lines(
'git-rev-list --parents --max-count=1 %s'
-
% self.__id_hash
)[0].split()[1:]
+ return _output_lines(
['git-rev-list', '--parents', '--max-count=1',
+
self.__id_hash]
)[0].split()[1:]
def get_author(self):
return self.__author
def get_author(self):
return self.__author
@@
-220,9
+220,8
@@
def __tree_status(files = None, tree_id = 'HEAD', unknown = False,
noexclude = True, verbose = False):
"""Returns a list of pairs - [status, filename]
"""
noexclude = True, verbose = False):
"""Returns a list of pairs - [status, filename]
"""
- if verbose and sys.stdout.isatty():
- print 'Checking for changes in the working directory...',
- sys.stdout.flush()
+ if verbose:
+ out.start('Checking for changes in the working directory')
refresh_index()
refresh_index()
@@
-260,8
+259,8
@@
def __tree_status(files = None, tree_id = 'HEAD', unknown = False,
if fs[1] not in conflicts:
cache_files.append(fs)
if fs[1] not in conflicts:
cache_files.append(fs)
- if verbose
and sys.stdout.isatty()
:
- print 'done'
+ if verbose:
+ out.done()
return cache_files
return cache_files
@@
-286,7
+285,7
@@
def get_head_file():
"""Returns the name of the file pointed to by the HEAD link
"""
return strip_prefix('refs/heads/',
"""Returns the name of the file pointed to by the HEAD link
"""
return strip_prefix('refs/heads/',
- _output_one_line(
'git-symbolic-ref HEAD'
))
+ _output_one_line(
['git-symbolic-ref', 'HEAD']
))
def set_head_file(ref):
"""Resets HEAD to point to a new ref
def set_head_file(ref):
"""Resets HEAD to point to a new ref
@@
-298,14
+297,18
@@
def set_head_file(ref):
[os.path.join('refs', 'heads', ref)]) != 0:
raise GitException, 'Could not set head to "%s"' % ref
[os.path.join('refs', 'heads', ref)]) != 0:
raise GitException, 'Could not set head to "%s"' % ref
+def set_branch(branch, val):
+ """Point branch at a new commit object."""
+ if __run('git-update-ref', [branch, val]) != 0:
+ raise GitException, 'Could not update %s to "%s".' % (branch, val)
+
def __set_head(val):
"""Sets the HEAD value
"""
global __head
if not __head or __head != val:
def __set_head(val):
"""Sets the HEAD value
"""
global __head
if not __head or __head != val:
- if __run('git-update-ref HEAD', [val]) != 0:
- raise GitException, 'Could not update HEAD to "%s".' % val
+ set_branch('HEAD', val)
__head = val
# only allow SHA1 hashes
__head = val
# only allow SHA1 hashes
@@
-445,8
+448,7
@@
def __copy_single(source, target, target2=''):
for f in [f.strip() for f in realfiles]:
m = prefix_regexp.match(f)
if not m:
for f in [f.strip() for f in realfiles]:
m = prefix_regexp.match(f)
if not m:
- print '"%s" does not match "%s"' % (f, re_string)
- assert(m)
+ raise Exception, '"%s" does not match "%s"' % (f, re_string)
newname = target+target2+'/'+m.group(1)
if not os.path.exists(os.path.dirname(newname)):
os.makedirs(os.path.dirname(newname))
newname = target+target2+'/'+m.group(1)
if not os.path.exists(os.path.dirname(newname)):
os.makedirs(os.path.dirname(newname))
@@
-615,27
+617,27
@@
def commit(message, files = None, parents = None, allowempty = False,
must_switch = True
# write the index to repository
if tree_id == None:
must_switch = True
# write the index to repository
if tree_id == None:
- tree_id = _output_one_line(
'git-write-tree'
)
+ tree_id = _output_one_line(
['git-write-tree']
)
else:
must_switch = False
# the commit
else:
must_switch = False
# the commit
- cmd =
''
+ cmd =
['env']
if author_name:
if author_name:
- cmd +=
'GIT_AUTHOR_NAME="%s" ' % author_name
+ cmd +=
['GIT_AUTHOR_NAME=%s' % author_name]
if author_email:
if author_email:
- cmd +=
'GIT_AUTHOR_EMAIL="%s" ' % author_email
+ cmd +=
['GIT_AUTHOR_EMAIL=%s' % author_email]
if author_date:
if author_date:
- cmd +=
'GIT_AUTHOR_DATE="%s" ' % author_date
+ cmd +=
['GIT_AUTHOR_DATE=%s' % author_date]
if committer_name:
if committer_name:
- cmd +=
'GIT_COMMITTER_NAME="%s" ' % committer_name
+ cmd +=
['GIT_COMMITTER_NAME=%s' % committer_name]
if committer_email:
if committer_email:
- cmd +=
'GIT_COMMITTER_EMAIL="%s" ' % committer_email
- cmd +=
'git-commit-tree %s' % tree_id
+ cmd +=
['GIT_COMMITTER_EMAIL=%s' % committer_email]
+ cmd +=
['git-commit-tree', tree_id]
# get the parents
for p in parents:
# get the parents
for p in parents:
- cmd +=
' -p %s' % p
+ cmd +=
['-p', p]
commit_id = _output_one_line(cmd, message)
if must_switch:
commit_id = _output_one_line(cmd, message)
if must_switch:
@@
-650,9
+652,9
@@
def apply_diff(rev1, rev2, check_index = True, files = None):
the pushing would fall back to the three-way merge.
"""
if check_index:
the pushing would fall back to the three-way merge.
"""
if check_index:
- index_opt =
'--index'
+ index_opt =
['--index']
else:
else:
- index_opt =
''
+ index_opt =
[]
if not files:
files = []
if not files:
files = []
@@
-660,7
+662,7
@@
def apply_diff(rev1, rev2, check_index = True, files = None):
diff_str = diff(files, rev1, rev2)
if diff_str:
try:
diff_str = diff(files, rev1, rev2)
if diff_str:
try:
- _input_str(
'git-apply %s' %
index_opt, diff_str)
+ _input_str(
['git-apply'] +
index_opt, diff_str)
except GitException:
return False
except GitException:
return False
@@
-678,7
+680,7
@@
def merge(base, head1, head2, recursive = False):
# general when pushing or picking patches)
try:
# use _output() to mask the verbose prints of the tool
# general when pushing or picking patches)
try:
# use _output() to mask the verbose prints of the tool
- _output(
'git-merge-recursive %s -- %s %s' % (base, head1, head2)
)
+ _output(
['git-merge-recursive', base, '--', head1, head2]
)
except GitException, ex:
err_output = str(ex)
pass
except GitException, ex:
err_output = str(ex)
pass
@@
-694,7
+696,7
@@
def merge(base, head1, head2, recursive = False):
files = {}
stages_re = re.compile('^([0-7]+) ([0-9a-f]{40}) ([1-3])\t(.*)$', re.S)
files = {}
stages_re = re.compile('^([0-7]+) ([0-9a-f]{40}) ([1-3])\t(.*)$', re.S)
- for line in _output(
'git-ls-files --unmerged --stage -z'
).split('\0'):
+ for line in _output(
['git-ls-files', '--unmerged', '--stage', '-z']
).split('\0'):
if not line:
continue
if not line:
continue
@@
-763,24
+765,28
@@
def status(files = None, modified = False, new = False, deleted = False,
if files and not fs[1] in files:
continue
if all:
if files and not fs[1] in files:
continue
if all:
-
print '%s %s' % (fs[0], fs[1]
)
+
out.stdout('%s %s' % (fs[0], fs[1])
)
else:
else:
- print '%s' % fs[1]
+ out.stdout('%s' % fs[1])
-def diff(files = None, rev1 = 'HEAD', rev2 = None, out_fd = None):
+def diff(files = None, rev1 = 'HEAD', rev2 = None, out_fd = None,
+ diff_flags = []):
"""Show the diff between rev1 and rev2
"""
if not files:
files = []
if rev1 and rev2:
"""Show the diff between rev1 and rev2
"""
if not files:
files = []
if rev1 and rev2:
- diff_str = _output(['git-diff-tree', '-p', rev1, rev2, '--'] + files)
+ diff_str = _output(['git-diff-tree', '-p'] + diff_flags
+ + [rev1, rev2, '--'] + files)
elif rev1 or rev2:
refresh_index()
if rev2:
elif rev1 or rev2:
refresh_index()
if rev2:
- diff_str = _output(['git-diff-index', '-p', '-R', rev2, '--'] + files)
+ diff_str = _output(['git-diff-index', '-p', '-R']
+ + diff_flags + [rev2, '--'] + files)
else:
else:
- diff_str = _output(['git-diff-index', '-p', rev1, '--'] + files)
+ diff_str = _output(['git-diff-index', '-p']
+ + diff_flags + [rev1, '--'] + files)
else:
diff_str = ''
else:
diff_str = ''
@@
-808,7
+814,7
@@
def files(rev1, rev2):
"""
result = ''
"""
result = ''
- for line in _output_lines(
'git-diff-tree -r %s %s' % (rev1, rev2)
):
+ for line in _output_lines(
['git-diff-tree', '-r', rev1, rev2]
):
result += '%s %s\n' % tuple(line.rstrip().split(' ',4)[-1].split('\t',1))
return result.rstrip()
result += '%s %s\n' % tuple(line.rstrip().split(' ',4)[-1].split('\t',1))
return result.rstrip()
@@
-818,7
+824,7
@@
def barefiles(rev1, rev2):
"""
result = ''
"""
result = ''
- for line in _output_lines(
'git-diff-tree -r %s %s' % (rev1, rev2)
):
+ for line in _output_lines(
['git-diff-tree', '-r', rev1, rev2]
):
result += '%s\n' % line.rstrip().split(' ',4)[-1].split('\t',1)[-1]
return result.rstrip()
result += '%s\n' % line.rstrip().split(' ',4)[-1].split('\t',1)[-1]
return result.rstrip()
@@
-937,7
+943,7
@@
def apply_patch(filename = None, diff = None, base = None,
refresh_index()
try:
refresh_index()
try:
- _input_str(
'git-apply --index'
, diff)
+ _input_str(
['git-apply', '--index']
, diff)
except GitException:
if base:
switch(orig_head)
except GitException:
if base:
switch(orig_head)
@@
-946,7
+952,7
@@
def apply_patch(filename = None, diff = None, base = None,
f = file('.stgit-failed.patch', 'w+')
f.write(diff)
f.close()
f = file('.stgit-failed.patch', 'w+')
f.write(diff)
f.close()
- print >> sys.stderr, 'Diff written to the .stgit-failed.patch file'
+ out.warn('Diff written to the .stgit-failed.patch file')
raise
raise