Index: checkout.py |
diff --git a/checkout.py b/checkout.py |
index fa732e8c77fc19d4313e9c713dba3bf55f540cb8..2260ab3480f8b9a738b9fe67247e59cd6a6d37e8 100644 |
--- a/checkout.py |
+++ b/checkout.py |
@@ -49,11 +49,24 @@ def get_code_review_setting(path, key, |
class PatchApplicationFailed(Exception): |
"""Patch failed to be applied.""" |
- def __init__(self, filename, status): |
- super(PatchApplicationFailed, self).__init__(filename, status) |
- self.filename = filename |
+ def __init__(self, p, status): |
+ super(PatchApplicationFailed, self).__init__(p, status) |
+ self.patch = p |
self.status = status |
+ @property |
+ def filename(self): |
+ if self.patch: |
+ return self.patch.filename |
+ |
+ def __str__(self): |
+ out = [] |
+ if self.filename: |
+ out.append('Failed to apply patch for %s:' % self.filename) |
+ if self.status: |
+ out.append(self.status) |
+ return '\n'.join(out) |
+ |
class CheckoutBase(object): |
# Set to None to have verbose output. |
@@ -140,12 +153,12 @@ class RawCheckout(CheckoutBase): |
if p.source_filename: |
if not p.is_new: |
raise PatchApplicationFailed( |
- p.filename, |
+ p, |
'File has a source filename specified but is not new') |
# Copy the file first. |
if os.path.isfile(filepath): |
raise PatchApplicationFailed( |
- p.filename, 'File exist but was about to be overwriten') |
+ p, 'File exist but was about to be overwriten') |
shutil.copy2( |
os.path.join(self.project_path, p.source_filename), filepath) |
if p.diff_hunks: |
@@ -160,10 +173,10 @@ class RawCheckout(CheckoutBase): |
for post in post_processors: |
post(self, p) |
except OSError, e: |
- raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
+ raise PatchApplicationFailed(p, '%s%s' % (stdout, e)) |
except subprocess.CalledProcessError, e: |
raise PatchApplicationFailed( |
- p.filename, '%s%s' % (stdout, getattr(e, 'stdout', None))) |
+ p, '%s%s' % (stdout, getattr(e, 'stdout', None))) |
def commit(self, commit_message, user): |
"""Stubbed out.""" |
@@ -307,12 +320,12 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
if p.source_filename: |
if not p.is_new: |
raise PatchApplicationFailed( |
- p.filename, |
+ p, |
'File has a source filename specified but is not new') |
# Copy the file first. |
if os.path.isfile(filepath): |
raise PatchApplicationFailed( |
- p.filename, 'File exist but was about to be overwriten') |
+ p, 'File exist but was about to be overwriten') |
self._check_output_svn( |
[ |
'copy', |
@@ -347,10 +360,10 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
for post in post_processors: |
post(self, p) |
except OSError, e: |
- raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
+ raise PatchApplicationFailed(p, '%s%s' % (stdout, e)) |
except subprocess.CalledProcessError, e: |
raise PatchApplicationFailed( |
- p.filename, |
+ p, |
'While running %s;\n%s%s' % ( |
' '.join(e.cmd), stdout, getattr(e, 'stdout', ''))) |
@@ -503,10 +516,10 @@ class GitCheckoutBase(CheckoutBase): |
for post in post_processors: |
post(self, p) |
except OSError, e: |
- raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
+ raise PatchApplicationFailed(p, '%s%s' % (stdout, e)) |
except subprocess.CalledProcessError, e: |
raise PatchApplicationFailed( |
- p.filename, '%s%s' % (stdout, getattr(e, 'stdout', None))) |
+ p, '%s%s' % (stdout, getattr(e, 'stdout', None))) |
# Once all the patches are processed and added to the index, commit the |
# index. |
self._check_call_git(['commit', '-m', 'Committed patch']) |