Kaydet (Commit) c0c01f79 authored tarafından Guido van Rossum's avatar Guido van Rossum

more elegant way to treat exit status

üst a176f585
...@@ -53,7 +53,11 @@ class RCS: ...@@ -53,7 +53,11 @@ class RCS:
""" """
f = self._open(name_rev, 'rlog ' + otherflags) f = self._open(name_rev, 'rlog ' + otherflags)
data = f.read() data = f.read()
self._closepipe(f) status = self._closepipe(f)
if status:
data = data + "%s: %s" % status
elif data[-1] == '\n':
data = data[:-1]
return data return data
def head(self, name_rev): def head(self, name_rev):
...@@ -84,7 +88,9 @@ class RCS: ...@@ -84,7 +88,9 @@ class RCS:
if i > 0: if i > 0:
key, value = line[:i], string.strip(line[i+1:]) key, value = line[:i], string.strip(line[i+1:])
dict[key] = value dict[key] = value
self._closepipe(f) status = self._closepipe(f)
if status:
raise IOError, status
return dict return dict
# --- Methods that change files --- # --- Methods that change files ---
...@@ -215,7 +221,9 @@ class RCS: ...@@ -215,7 +221,9 @@ class RCS:
""" """
f = self._open(name_rev, 'rlog -L -R') f = self._open(name_rev, 'rlog -L -R')
line = f.readline() line = f.readline()
self._closepipe(f) status = self._closepipe(f)
if status:
raise IOError, status
if not line: return None if not line: return None
return self.realname(name_rev) == self.realname(line) return self.realname(name_rev) == self.realname(line)
...@@ -247,7 +255,7 @@ class RCS: ...@@ -247,7 +255,7 @@ class RCS:
namev = self.rcsname(name) namev = self.rcsname(name)
if rev: if rev:
cmd = cmd + ' ' + rflag + rev cmd = cmd + ' ' + rflag + rev
return os.popen('%s %s' % (cmd, `namev`)) return os.popen("%s %s" % (cmd, `namev`))
def _unmangle(self, name_rev): def _unmangle(self, name_rev):
"""INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple. """INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple.
...@@ -270,8 +278,18 @@ class RCS: ...@@ -270,8 +278,18 @@ class RCS:
def _closepipe(self, f): def _closepipe(self, f):
"""INTERNAL: Close PIPE and print its exit status if nonzero.""" """INTERNAL: Close PIPE and print its exit status if nonzero."""
sts = f.close() sts = f.close()
if sts: if not sts: return None
raise IOError, "Exit status %d" % sts detail, reason = divmod(sts, 256)
if reason == 0: return 'exit', detail # Exit status
signal = reason&0x7F
if signal == 0x7F:
code = 'stopped'
signal = detail
else:
code = 'killed'
if reason&0x80:
code = code + '(coredump)'
return code, signal
def _system(self, cmd): def _system(self, cmd):
"""INTERNAL: run COMMAND in a subshell. """INTERNAL: run COMMAND in a subshell.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment