diff options
author | Guido van Rossum <guido@python.org> | 1995-10-07 20:48:17 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1995-10-07 20:48:17 (GMT) |
commit | c0c01f79c63952206d962a14b78236e5e0ae9147 (patch) | |
tree | 025fc8a719a63a528f7bd77d535247b916d9f1aa /Demo/pdist/rcslib.py | |
parent | a176f585c4643821e4d9af7931eee7e1a6d83818 (diff) | |
download | cpython-c0c01f79c63952206d962a14b78236e5e0ae9147.zip cpython-c0c01f79c63952206d962a14b78236e5e0ae9147.tar.gz cpython-c0c01f79c63952206d962a14b78236e5e0ae9147.tar.bz2 |
more elegant way to treat exit status
Diffstat (limited to 'Demo/pdist/rcslib.py')
-rwxr-xr-x | Demo/pdist/rcslib.py | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/Demo/pdist/rcslib.py b/Demo/pdist/rcslib.py index 4b34fd7..43dcf0a 100755 --- a/Demo/pdist/rcslib.py +++ b/Demo/pdist/rcslib.py @@ -53,7 +53,11 @@ class RCS: """ f = self._open(name_rev, 'rlog ' + otherflags) 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 def head(self, name_rev): @@ -84,7 +88,9 @@ class RCS: if i > 0: key, value = line[:i], string.strip(line[i+1:]) dict[key] = value - self._closepipe(f) + status = self._closepipe(f) + if status: + raise IOError, status return dict # --- Methods that change files --- @@ -215,7 +221,9 @@ class RCS: """ f = self._open(name_rev, 'rlog -L -R') line = f.readline() - self._closepipe(f) + status = self._closepipe(f) + if status: + raise IOError, status if not line: return None return self.realname(name_rev) == self.realname(line) @@ -247,7 +255,7 @@ class RCS: namev = self.rcsname(name) if rev: cmd = cmd + ' ' + rflag + rev - return os.popen('%s %s' % (cmd, `namev`)) + return os.popen("%s %s" % (cmd, `namev`)) def _unmangle(self, name_rev): """INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple. @@ -270,8 +278,18 @@ class RCS: def _closepipe(self, f): """INTERNAL: Close PIPE and print its exit status if nonzero.""" sts = f.close() - if sts: - raise IOError, "Exit status %d" % sts + if not sts: return None + 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): """INTERNAL: run COMMAND in a subshell. |