comparison hgext/convert/git.py @ 10986:610f047326b9 stable

convert/git: check status when reading the whole output
author Patrick Mezard <pmezard@gmail.com>
date Sun, 25 Apr 2010 22:59:50 +0200
parents 7fab6ae3f688
children b3af02b1f19f
comparison
equal deleted inserted replaced
10985:7fab6ae3f688 10986:610f047326b9
28 os.environ['GIT_DIR'] = prevgitdir 28 os.environ['GIT_DIR'] = prevgitdir
29 else: 29 else:
30 def gitopen(self, s): 30 def gitopen(self, s):
31 return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb') 31 return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb')
32 32
33 def gitread(self, s):
34 fh = self.gitopen(s)
35 data = fh.read()
36 return data, fh.close()
37
33 def __init__(self, ui, path, rev=None): 38 def __init__(self, ui, path, rev=None):
34 super(convert_git, self).__init__(ui, path, rev=rev) 39 super(convert_git, self).__init__(ui, path, rev=rev)
35 40
36 if os.path.isdir(path + "/.git"): 41 if os.path.isdir(path + "/.git"):
37 path += "/.git" 42 path += "/.git"
42 47
43 self.path = path 48 self.path = path
44 49
45 def getheads(self): 50 def getheads(self):
46 if not self.rev: 51 if not self.rev:
47 fh = self.gitopen('git rev-parse --branches --remotes') 52 heads, ret = self.gitread('git rev-parse --branches --remotes')
48 return fh.read().splitlines() 53 heads = heads.splitlines()
49 else: 54 else:
50 fh = self.gitopen("git rev-parse --verify %s" % self.rev) 55 heads, ret = self.gitread("git rev-parse --verify %s" % self.rev)
51 return [fh.read()[:-1]] 56 heads = [heads[:-1]]
57 if ret:
58 raise util.Abort(_('cannot retrieve git heads'))
59 return heads
52 60
53 def catfile(self, rev, type): 61 def catfile(self, rev, type):
54 if rev == "0" * 40: 62 if rev == "0" * 40:
55 raise IOError() 63 raise IOError()
56 fh = self.gitopen("git cat-file %s %s" % (type, rev)) 64 data, ret = self.gitread("git cat-file %s %s" % (type, rev))
57 return fh.read() 65 if ret:
66 raise util.Abort(_('cannot read %r object at %s') % (type, rev))
67 return data
58 68
59 def getfile(self, name, rev): 69 def getfile(self, name, rev):
60 return self.catfile(rev, "blob") 70 return self.catfile(rev, "blob")
61 71
62 def getmode(self, name, rev): 72 def getmode(self, name, rev):