~mdw
/
stgit
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add mbox support to "import"
[stgit]
/
stgit
/
git.py
diff --git
a/stgit/git.py
b/stgit/git.py
index
025d15d
..
f5e2f32
100644
(file)
--- a/
stgit/git.py
+++ b/
stgit/git.py
@@
-22,6
+22,7
@@
import sys, os, popen2, re, gitmergeonefile
from stgit import basedir
from stgit.utils import *
from stgit import basedir
from stgit.utils import *
+from stgit.config import config
# git exception class
class GitException(Exception):
# git exception class
class GitException(Exception):
@@
-78,6
+79,9
@@
class Commit:
def get_log(self):
return self.__log
def get_log(self):
return self.__log
+ def __str__(self):
+ return self.get_id_hash()
+
# dictionary of Commit objects, used to avoid multiple calls to git
__commits = dict()
# dictionary of Commit objects, used to avoid multiple calls to git
__commits = dict()
@@
-691,34
+695,43
@@
def pull(repository = 'origin', refspec = None):
if refspec:
args.append(refspec)
if refspec:
args.append(refspec)
- if __run(
'git-pull'
, args) != 0:
+ if __run(
config.get('stgit', 'pullcmd')
, args) != 0:
raise GitException, 'Failed "git-pull %s"' % repository
raise GitException, 'Failed "git-pull %s"' % repository
-def apply_patch(filename = None, base = None):
+def apply_patch(filename = None, diff = None, base = None,
+ fail_dump = True):
"""Apply a patch onto the current or given index. There must not
be any local changes in the tree, otherwise the command fails
"""
"""Apply a patch onto the current or given index. There must not
be any local changes in the tree, otherwise the command fails
"""
- def __apply_patch():
- if filename:
- return __run('git-apply --index', [filename]) == 0
- else:
- try:
- _input('git-apply --index', sys.stdin)
- except GitException:
- return False
- return True
-
if base:
orig_head = get_head()
switch(base)
else:
if base:
orig_head = get_head()
switch(base)
else:
- refresh_index()
# needed since __apply_patch() doesn't do it
+ refresh_index()
- if not __apply_patch():
+ if diff is None:
+ if filename:
+ f = file(filename)
+ else:
+ f = sys.stdin
+ diff = f.read()
+ if filename:
+ f.close()
+
+ try:
+ _input_str('git-apply --index', diff)
+ except GitException:
if base:
switch(orig_head)
if base:
switch(orig_head)
- raise GitException, 'Patch does not apply cleanly'
- elif base:
+ if fail_dump:
+ # write the failed diff to a file
+ f = file('.stgit-failed.patch', 'w+')
+ f.write(diff)
+ f.close()
+
+ raise
+
+ if base:
top = commit(message = 'temporary commit used for applying a patch',
parents = [base])
switch(orig_head)
top = commit(message = 'temporary commit used for applying a patch',
parents = [base])
switch(orig_head)