Show More
@@ -6,6 +6,7 b'' | |||||
6 | # GNU General Public License version 2 or any later version. |
|
6 | # GNU General Public License version 2 or any later version. | |
7 |
|
7 | |||
8 | import os |
|
8 | import os | |
|
9 | import subprocess | |||
9 | from mercurial import util, config |
|
10 | from mercurial import util, config | |
10 | from mercurial.node import hex, nullid |
|
11 | from mercurial.node import hex, nullid | |
11 | from mercurial.i18n import _ |
|
12 | from mercurial.i18n import _ | |
@@ -29,13 +30,15 b' class convert_git(converter_source):' | |||||
29 | # cannot remove environment variable. Just assume none have |
|
30 | # cannot remove environment variable. Just assume none have | |
30 | # both issues. |
|
31 | # both issues. | |
31 | if util.safehasattr(os, 'unsetenv'): |
|
32 | if util.safehasattr(os, 'unsetenv'): | |
32 |
def gitopen(self, s, |
|
33 | def gitopen(self, s, err=None): | |
33 | prevgitdir = os.environ.get('GIT_DIR') |
|
34 | prevgitdir = os.environ.get('GIT_DIR') | |
34 | os.environ['GIT_DIR'] = self.path |
|
35 | os.environ['GIT_DIR'] = self.path | |
35 | try: |
|
36 | try: | |
36 |
if |
|
37 | if err == subprocess.PIPE: | |
37 | (stdin, stdout, stderr) = util.popen3(s) |
|
38 | (stdin, stdout, stderr) = util.popen3(s) | |
38 | return stdout |
|
39 | return stdout | |
|
40 | elif err == subprocess.STDOUT: | |||
|
41 | return self.popen_with_stderr(s) | |||
39 | else: |
|
42 | else: | |
40 | return util.popen(s, 'rb') |
|
43 | return util.popen(s, 'rb') | |
41 | finally: |
|
44 | finally: | |
@@ -44,13 +47,25 b' class convert_git(converter_source):' | |||||
44 | else: |
|
47 | else: | |
45 | os.environ['GIT_DIR'] = prevgitdir |
|
48 | os.environ['GIT_DIR'] = prevgitdir | |
46 | else: |
|
49 | else: | |
47 |
def gitopen(self, s, |
|
50 | def gitopen(self, s, err=None): | |
48 |
if |
|
51 | if err == subprocess.PIPE: | |
49 | (sin, so, se) = util.popen3('GIT_DIR=%s %s' % (self.path, s)) |
|
52 | (sin, so, se) = util.popen3('GIT_DIR=%s %s' % (self.path, s)) | |
50 | return so |
|
53 | return so | |
|
54 | elif err == subprocess.STDOUT: | |||
|
55 | return self.popen_with_stderr(s) | |||
51 | else: |
|
56 | else: | |
52 | return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb') |
|
57 | return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb') | |
53 |
|
58 | |||
|
59 | def popen_with_stderr(self, s): | |||
|
60 | p = subprocess.Popen(s, shell=True, bufsize=-1, | |||
|
61 | close_fds=util.closefds, | |||
|
62 | stdin=subprocess.PIPE, | |||
|
63 | stdout=subprocess.PIPE, | |||
|
64 | stderr=subprocess.STDOUT, | |||
|
65 | universal_newlines=False, | |||
|
66 | env=None) | |||
|
67 | return p.stdout | |||
|
68 | ||||
54 | def gitread(self, s): |
|
69 | def gitread(self, s): | |
55 | fh = self.gitopen(s) |
|
70 | fh = self.gitopen(s) | |
56 | data = fh.read() |
|
71 | data = fh.read() | |
@@ -209,12 +224,15 b' class convert_git(converter_source):' | |||||
209 | def gettags(self): |
|
224 | def gettags(self): | |
210 | tags = {} |
|
225 | tags = {} | |
211 | alltags = {} |
|
226 | alltags = {} | |
212 |
fh = self.gitopen('git ls-remote --tags "%s"' % self.path |
|
227 | fh = self.gitopen('git ls-remote --tags "%s"' % self.path, | |
|
228 | err=subprocess.STDOUT) | |||
213 | prefix = 'refs/tags/' |
|
229 | prefix = 'refs/tags/' | |
214 |
|
230 | |||
215 | # Build complete list of tags, both annotated and bare ones |
|
231 | # Build complete list of tags, both annotated and bare ones | |
216 | for line in fh: |
|
232 | for line in fh: | |
217 | line = line.strip() |
|
233 | line = line.strip() | |
|
234 | if line.startswith("error:"): | |||
|
235 | raise util.Abort(_('cannot read tags from %s') % self.path) | |||
218 | node, tag = line.split(None, 1) |
|
236 | node, tag = line.split(None, 1) | |
219 | if not tag.startswith(prefix): |
|
237 | if not tag.startswith(prefix): | |
220 | continue |
|
238 | continue | |
@@ -266,7 +284,7 b' class convert_git(converter_source):' | |||||
266 | # Origin heads |
|
284 | # Origin heads | |
267 | for reftype in gitcmd: |
|
285 | for reftype in gitcmd: | |
268 | try: |
|
286 | try: | |
269 |
fh = self.gitopen(gitcmd[reftype], |
|
287 | fh = self.gitopen(gitcmd[reftype], err=subprocess.PIPE) | |
270 | for line in fh: |
|
288 | for line in fh: | |
271 | line = line.strip() |
|
289 | line = line.strip() | |
272 | rev, name = line.split(None, 1) |
|
290 | rev, name = line.split(None, 1) |
General Comments 0
You need to be logged in to leave comments.
Login now