diff options
author | dol-sen <brian.dolbec@gmail.com> | 2011-08-07 01:38:34 -0700 |
---|---|---|
committer | dol-sen <brian.dolbec@gmail.com> | 2011-08-07 01:47:00 -0700 |
commit | acc9c9163a0ff4fe3e19e4cb49228b93f1c5999e (patch) | |
tree | 23b28c954b624047e62a8f11b5bbc800a693a1b8 /layman | |
parent | 8f850f20af9c1b6360500b36ffada70e07ce45e9 (diff) | |
download | layman-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.py | 9 | ||||
-rw-r--r-- | layman/overlays/svn.py | 22 |
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 |