From 4fa19ce27a3be4b15de637e2f90a72b99b3c8261 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 24 Oct 2013 10:30:52 -0400 Subject: [PATCH] revert bugfix: revert deleted items in order by status but added/modified items in reverse order --- jsvn | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/jsvn b/jsvn index c450a67..6c034eb 100755 --- a/jsvn +++ b/jsvn @@ -1232,23 +1232,26 @@ def revert_h(argv, svn, out, config): if target.endswith('/'): argv[i] = target[:-1] p = Popen([svn, 'status'], stdout=PIPE) - status_lines = [] + modified_files = [] for line in iter(p.stdout.readline, ''): - status_lines.append(line) - for line in reversed(status_lines): m = re.match(STATUS_LINE_REGEX, line) if m is not None: action = line[0] prop_action = line[1] if action in ('A', 'M', 'D', '!') or prop_action == 'M': fname = m.group(1) - for target in argv: - if fname.startswith(os.getcwd() + os.sep): - fname = fname[len(os.getcwd() + os.sep):] - if target == '.' or target == fname or fname.startswith(target + os.sep): - Popen([svn, 'revert', fname]).wait() - did_something = True - break + if action in ('D', '!'): + modified_files.append(fname) + else: + modified_files.insert(0, fname) + for fname in modified_files: + for target in argv: + if fname.startswith(os.getcwd() + os.sep): + fname = fname[len(os.getcwd() + os.sep):] + if target == '.' or target == fname or fname.startswith(target + os.sep): + Popen([svn, 'revert', fname]).wait() + did_something = True + break return RET_OK if did_something else RET_REEXEC def get_svn_contents_to_stash(targets, svn, out, keep, patch, externals):