##// END OF EJS Templates
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara -
r34462:c67db5dc default
parent child Browse files
Show More
@@ -13,6 +13,7 b' import hashlib'
13 import os
13 import os
14 import re
14 import re
15 import socket
15 import socket
16 import subprocess
16 import weakref
17 import weakref
17
18
18 from .i18n import _
19 from .i18n import _
@@ -1038,20 +1039,18 b' def extdatasource(repo, source):'
1038 raise error.Abort(_("unknown extdata source '%s'") % source)
1039 raise error.Abort(_("unknown extdata source '%s'") % source)
1039
1040
1040 data = {}
1041 data = {}
1041 if spec.startswith("shell:"):
1042 src = proc = None
1042 # external commands should be run relative to the repo root
1043 cmd = spec[6:]
1044 cwd = os.getcwd()
1045 os.chdir(repo.root)
1046 try:
1047 src = util.popen(cmd)
1048 finally:
1049 os.chdir(cwd)
1050 else:
1051 # treat as a URL or file
1052 src = url.open(repo.ui, spec)
1053
1054 try:
1043 try:
1044 if spec.startswith("shell:"):
1045 # external commands should be run relative to the repo root
1046 cmd = spec[6:]
1047 proc = subprocess.Popen(cmd, shell=True, bufsize=-1,
1048 close_fds=util.closefds,
1049 stdout=subprocess.PIPE, cwd=repo.root)
1050 src = proc.stdout
1051 else:
1052 # treat as a URL or file
1053 src = url.open(repo.ui, spec)
1055 for l in src:
1054 for l in src:
1056 if " " in l:
1055 if " " in l:
1057 k, v = l.strip().split(" ", 1)
1056 k, v = l.strip().split(" ", 1)
@@ -1064,7 +1063,10 b' def extdatasource(repo, source):'
1064 except (error.LookupError, error.RepoLookupError):
1063 except (error.LookupError, error.RepoLookupError):
1065 pass # we ignore data for nodes that don't exist locally
1064 pass # we ignore data for nodes that don't exist locally
1066 finally:
1065 finally:
1067 src.close()
1066 if proc:
1067 proc.communicate()
1068 if src:
1069 src.close()
1068
1070
1069 return data
1071 return data
1070
1072
General Comments 0
You need to be logged in to leave comments. Login now