# HG changeset patch # User Patrick Mezard # Date 1226701104 21600 # Node ID 05a0c4f6060fc5996730f6270fcdd648f9fbe17e # Parent 01e747937d35232a532706826bb9ca6b36da1809 push_cmd: consider only dirs with added/removed files for addition or deletion diff --git a/push_cmd.py b/push_cmd.py --- a/push_cmd.py +++ b/push_cmd.py @@ -103,12 +103,16 @@ def _getdirchanges(svn, branchpath, pare return dirs deleted, added = [], [] - if not changedfiles: - return added, deleted changeddirs = {} for f in changedfiles: + if f in parentctx and f in ctx: + # Updated files cannot cause directories to be created + # or removed. + continue for d in finddirs(f): changeddirs[d] = 1 + if not changeddirs: + return added, deleted olddirs = getctxdirs(parentctx, changeddirs) newdirs = getctxdirs(ctx, changeddirs) diff --git a/tests/test_push_dirs.py b/tests/test_push_dirs.py --- a/tests/test_push_dirs.py +++ b/tests/test_push_dirs.py @@ -27,6 +27,15 @@ class TestPushDirectories(test_util.Test 'd31/d32', 'd31/d32/a', 'd31/d32/d33', 'd31/d32/d33/d34', 'd31/d32/d33/d34/a']) + # Add one revision with changed files only, no directory addition + # or deletion. + changes = [ + ('d1/a', 'd1/a', 'aa\n'), + ('d2/a', 'd2/a', 'aa\n'), + ] + self.commitchanges(changes) + self.pushrevisions() + changes = [ # Remove single file in single directory ('d1/a', None, None),