summaryrefslogtreecommitdiffstats
path: root/layman
diff options
context:
space:
mode:
authordol-sen <brian.dolbec@gmail.com>2011-08-07 01:38:34 -0700
committerdol-sen <brian.dolbec@gmail.com>2011-08-07 01:47:00 -0700
commitacc9c9163a0ff4fe3e19e4cb49228b93f1c5999e (patch)
tree23b28c954b624047e62a8f11b5bbc800a693a1b8 /layman
parent8f850f20af9c1b6360500b36ffada70e07ce45e9 (diff)
downloadlayman-acc9c9163a0ff4fe3e19e4cb49228b93f1c5999e.tar.gz
layman-acc9c9163a0ff4fe3e19e4cb49228b93f1c5999e.tar.bz2
layman-acc9c9163a0ff4fe3e19e4cb49228b93f1c5999e.zip
run "svn cleanup..." for keyboard interrupts, bug 377035
Diffstat (limited to 'layman')
-rw-r--r--layman/overlays/source.py9
-rw-r--r--layman/overlays/svn.py22
2 files changed, 25 insertions, 6 deletions
diff --git a/layman/overlays/source.py b/layman/overlays/source.py
index a57baf4..71e75fc 100644
--- a/layman/overlays/source.py
+++ b/layman/overlays/source.py
@@ -126,10 +126,12 @@ class OverlaySource(object):
return self.config['%s_command' % self.__class__.type_key]
def run_command(self, command, args, **kwargs):
+ self.output.debug("OverlaySource.run_command(): " + command, 6)
file_to_run = _resolve_command(command, self.output.error)[1]
args = [file_to_run] + args
assert('pwd' not in kwargs) # Bug detector
+ self.output.debug("OverlaySource.run_command(): cleared 'assert'", 7)
cwd = kwargs.get('cwd', None)
env = None
env_updates = None
@@ -172,6 +174,8 @@ class OverlaySource(object):
result = proc.wait()
except KeyboardInterrupt:
self.output.info('Interrupted manually', 2)
+ self.output.warn("Checking for cleanup actions to perform", 4)
+ self.cleanup()
result = 1
except Exception as err:
self.output.error(
@@ -207,3 +211,8 @@ class OverlaySource(object):
def to_xml_hook(self, repo_elem):
pass
+
+ def cleanup(self):
+ '''cleanup a failed/interrupted process
+ overridden in subclass if it is needed.'''
+ pass
diff --git a/layman/overlays/svn.py b/layman/overlays/svn.py
index 97f03d6..b9a5a34 100644
--- a/layman/overlays/svn.py
+++ b/layman/overlays/svn.py
@@ -55,7 +55,7 @@ class SvnOverlay(OverlaySource):
super(SvnOverlay, self).add(base)
cfg_opts = self.config["svn_addopts"]
- target = path([base, self.parent.name])
+ self.target = path([base, self.parent.name])
args = ['co']
if quiet:
@@ -63,11 +63,11 @@ class SvnOverlay(OverlaySource):
if len(cfg_opts):
args.append(cfg_opts)
args.append(self.src + '/@')
- args.append(target)
+ args.append(self.target)
return self.postsync(
self.run_command(self.command(), args, cmd=self.type),
- cwd=target)
+ cwd=self.target)
def sync(self, base, quiet = False):
'''Sync overlay.'''
@@ -84,7 +84,7 @@ class SvnOverlay(OverlaySource):
return path([base, repo_part])
cfg_opts = self.config["svn_syncopts"]
- target = checkout_location()
+ self.target = checkout_location()
# svn up [-q] TARGET
args = ['up']
@@ -92,11 +92,11 @@ class SvnOverlay(OverlaySource):
args.append('-q')
if len(cfg_opts):
args.append(cfg_opts)
- args.append(target)
+ args.append(self.target)
return self.postsync(
self.run_command(self.command(), args, cmd=self.type),
- cwd=target)
+ cwd=self.target)
def supported(self):
'''Overlay type supported?'''
@@ -104,3 +104,13 @@ class SvnOverlay(OverlaySource):
return require_supported(
[(self.command(), 'svn','dev-vcs/subversion'),],
self.output.warn)
+
+ def cleanup(self):
+ '''Code to run in the event of a keyboard interrupt.
+ runs svn cleanup
+ '''
+ self.output.warn("SVN: preparing to run cleanup()", 2)
+ args = ["cleanup"]
+ args.append(self.target)
+ cleanup = self.run_command(self.command(), args, cmd="svn cleanup")
+ return