Index: checkout.py |
diff --git a/checkout.py b/checkout.py |
index 09ea9c3fabba116c7d25c571260ae198f98aedee..9f21acc906d4c6ff19146db67e677169c75d73ca 100644 |
--- a/checkout.py |
+++ b/checkout.py |
@@ -59,7 +59,12 @@ class CheckoutBase(object): |
# Set to None to have verbose output. |
VOID = subprocess2.VOID |
- def __init__(self, root_dir, project_name): |
+ def __init__(self, root_dir, project_name, post_processors): |
+ """ |
+ Args: |
+ post_processor: list of lambda(checkout, patches) to call on each of the |
+ modified files. |
+ """ |
self.root_dir = root_dir |
self.project_name = project_name |
if self.project_name is None: |
@@ -68,6 +73,7 @@ class CheckoutBase(object): |
self.project_path = os.path.join(self.root_dir, self.project_name) |
# Only used for logging purposes. |
self._last_seen_revision = None |
+ self.post_processors = None |
assert self.root_dir |
assert self.project_path |
@@ -82,7 +88,7 @@ class CheckoutBase(object): |
""" |
raise NotImplementedError() |
- def apply_patch(self, patches, post_processor=None): |
+ def apply_patch(self, patches): |
"""Applies a patch and returns the list of modified files. |
This function should throw patch.UnsupportedPatchFormat or |
@@ -90,8 +96,6 @@ class CheckoutBase(object): |
Args: |
patches: patch.PatchSet object. |
- post_processor: list of lambda(checkout, patches) to call on each of the |
- modified files. |
""" |
raise NotImplementedError() |
@@ -109,9 +113,8 @@ class RawCheckout(CheckoutBase): |
"""Stubbed out.""" |
pass |
- def apply_patch(self, patches, post_processor=None): |
+ def apply_patch(self, patches): |
"""Ignores svn properties.""" |
- post_processor = post_processor or [] |
for p in patches: |
try: |
stdout = '' |
@@ -137,7 +140,7 @@ class RawCheckout(CheckoutBase): |
elif p.is_new and not os.path.exists(filepath): |
# There is only a header. Just create the file. |
open(filepath, 'w').close() |
- for post in post_processor: |
+ for post in (self.post_processors or []): |
post(self, p) |
except OSError, e: |
raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
@@ -233,8 +236,9 @@ class SvnMixIn(object): |
class SvnCheckout(CheckoutBase, SvnMixIn): |
"""Manages a subversion checkout.""" |
- def __init__(self, root_dir, project_name, commit_user, commit_pwd, svn_url): |
- super(SvnCheckout, self).__init__(root_dir, project_name) |
+ def __init__(self, root_dir, project_name, commit_user, commit_pwd, svn_url, |
+ post_processors=None): |
+ super(SvnCheckout, self).__init__(root_dir, project_name, post_processors) |
self.commit_user = commit_user |
self.commit_pwd = commit_pwd |
self.svn_url = svn_url |
@@ -252,8 +256,7 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
self._last_seen_revision = revision |
return revision |
- def apply_patch(self, patches, post_processor=None): |
- post_processor = post_processor or [] |
+ def apply_patch(self, patches): |
for p in patches: |
try: |
# It is important to use credentials=False otherwise credentials could |
@@ -306,7 +309,7 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
params = value.split('=', 1) |
stdout += self._check_output_svn( |
['propset'] + params + [p.filename], credentials=False) |
- for post in post_processor: |
+ for post in (self.post_processors or []): |
post(self, p) |
except OSError, e: |
raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
@@ -369,8 +372,10 @@ class SvnCheckout(CheckoutBase, SvnMixIn): |
class GitCheckoutBase(CheckoutBase): |
"""Base class for git checkout. Not to be used as-is.""" |
- def __init__(self, root_dir, project_name, remote_branch): |
- super(GitCheckoutBase, self).__init__(root_dir, project_name) |
+ def __init__(self, root_dir, project_name, remote_branch, |
+ post_processors=None): |
+ super(GitCheckoutBase, self).__init__( |
+ root_dir, project_name, post_processors) |
# There is no reason to not hardcode it. |
self.remote = 'origin' |
self.remote_branch = remote_branch |
@@ -391,14 +396,13 @@ class GitCheckoutBase(CheckoutBase): |
if self.working_branch in branches: |
self._call_git(['branch', '-D', self.working_branch]) |
- def apply_patch(self, patches, post_processor=None): |
+ def apply_patch(self, patches): |
"""Applies a patch on 'working_branch' and switch to it. |
Also commits the changes on the local branch. |
Ignores svn properties and raise an exception on unexpected ones. |
""" |
- post_processor = post_processor or [] |
# It this throws, the checkout is corrupted. Maybe worth deleting it and |
# trying again? |
if self.remote_branch: |
@@ -435,7 +439,7 @@ class GitCheckoutBase(CheckoutBase): |
p.filename, |
'Cannot apply svn property %s to file %s.' % ( |
prop[0], p.filename)) |
- for post in post_processor: |
+ for post in (self.post_processors or []): |
post(self, p) |
except OSError, e: |
raise PatchApplicationFailed(p.filename, '%s%s' % (stdout, e)) |
@@ -492,10 +496,10 @@ class GitSvnCheckoutBase(GitCheckoutBase, SvnMixIn): |
def __init__(self, |
root_dir, project_name, remote_branch, |
commit_user, commit_pwd, |
- svn_url, trunk): |
+ svn_url, trunk, post_processors=None): |
"""trunk is optional.""" |
super(GitSvnCheckoutBase, self).__init__( |
- root_dir, project_name + '.git', remote_branch) |
+ root_dir, project_name + '.git', remote_branch, post_processors) |
self.commit_user = commit_user |
self.commit_pwd = commit_pwd |
# svn_url in this case is the root of the svn repository. |
@@ -583,11 +587,11 @@ class GitSvnPremadeCheckout(GitSvnCheckoutBase): |
def __init__(self, |
root_dir, project_name, remote_branch, |
commit_user, commit_pwd, |
- svn_url, trunk, git_url): |
+ svn_url, trunk, git_url, post_processors=None): |
super(GitSvnPremadeCheckout, self).__init__( |
root_dir, project_name, remote_branch, |
commit_user, commit_pwd, |
- svn_url, trunk) |
+ svn_url, trunk, post_processors) |
self.git_url = git_url |
assert self.git_url |
@@ -627,11 +631,11 @@ class GitSvnCheckout(GitSvnCheckoutBase): |
def __init__(self, |
root_dir, project_name, |
commit_user, commit_pwd, |
- svn_url, trunk): |
+ svn_url, trunk, post_processors=None): |
super(GitSvnCheckout, self).__init__( |
root_dir, project_name, 'trunk', |
commit_user, commit_pwd, |
- svn_url, trunk) |
+ svn_url, trunk, post_processors) |
def prepare(self): |
"""Creates the initial checkout for the repo.""" |
@@ -663,8 +667,8 @@ class ReadOnlyCheckout(object): |
def get_settings(self, key): |
return self.checkout.get_settings(key) |
- def apply_patch(self, patches, post_processor=None): |
- return self.checkout.apply_patch(patches, post_processor) |
+ def apply_patch(self, patches): |
+ return self.checkout.apply_patch(patches) |
def commit(self, message, user): # pylint: disable=R0201 |
logging.info('Would have committed for %s with message: %s' % ( |