From f2678b5f88c141e0efe7d72aa80dfc6ed8c2dc08 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 11 Mar 2013 22:06:18 -0400 Subject: [PATCH] stash: add -e/--externals option to also stash externals --- jsvn | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/jsvn b/jsvn index dde2306..bb4c3f6 100755 --- a/jsvn +++ b/jsvn @@ -1234,7 +1234,7 @@ def revert_h(argv, svn, out, config): break return RET_OK if did_something else RET_REEXEC -def get_svn_contents_to_stash(targets, svn, out, keep, patch): +def get_svn_contents_to_stash(targets, svn, out, keep, patch, externals): s_fd, s_fname = tempfile.mkstemp(prefix = 'svn.stash.') r_fd, r_fname = tempfile.mkstemp(prefix = 'svn.stash.') os.close(s_fd) @@ -1242,6 +1242,14 @@ def get_svn_contents_to_stash(targets, svn, out, keep, patch): s_fh = open(s_fname, 'w') r_fh = open(r_fname, 'w') + if externals and len(targets) == 0: + targets = ['.'] + proc = Popen([svn, 'status'], stdout=PIPE) + for line in iter(proc.stdout.readline, ''): + m = re.match(r"Performing status on external item at '(.*)':", line) + if m is not None: + targets.append(m.group(1)) + svars = { 'revert_list': [], 'skip_all': not patch, @@ -1358,12 +1366,12 @@ q: quit and abort stash return s_fname, r_fname, svars['revert_list'], svars['n_insertions'], svars['n_deletions'] -def stash_save_h(args, svn, out, config, keep, patch): +def stash_save_h(args, svn, out, config, keep, patch, externals): owd = os.getcwd() wc_dir = get_svn_wc_root(svn) os.chdir(wc_dir) s_fname, r_fname, revert_list, n_insertions, n_deletions = \ - get_svn_contents_to_stash(args, svn, out, keep, patch) + get_svn_contents_to_stash(args, svn, out, keep, patch, externals) if len(revert_list) == 0: out.write('No changes stashed.\n') else: @@ -1512,10 +1520,11 @@ def stash_drop_h(argv, svn, out, config): def stash_h(argv, svn, out, config): argv = argv[1:] # strip 'stash' command - opts, args = getopt.getopt(argv, 'kp', - ['list', 'pop', 'show', 'drop', 'keep', 'patch']) + opts, args = getopt.getopt(argv, 'ekp', + ['list', 'pop', 'show', 'drop', 'externals', 'keep', 'patch']) keep = False patch = False + externals = False for opt, arg in opts: if opt == '--list': return stash_list_h(args, svn, out, config) @@ -1529,7 +1538,9 @@ def stash_h(argv, svn, out, config): keep = True elif opt in ('-p', '--patch'): patch = True - return stash_save_h(args, svn, out, config, keep, patch) + elif opt in ('-e', '--externals'): + externals = True + return stash_save_h(args, svn, out, config, keep, patch, externals) def root_h(argv, svn, out, config): out.write(get_svn_root_url(svn) + '\n')