##// END OF EJS Templates
copies: choose target directory based on longest match...
Martin von Zweigbergk -
r47379:ad30b29b default
parent child Browse files
Show More
@@ -1096,11 +1096,17 b' def _dir_renames(repo, ctx, copy, fullco'
1096 b" discovered dir src: '%s' -> dst: '%s'\n" % (d, dirmove[d])
1096 b" discovered dir src: '%s' -> dst: '%s'\n" % (d, dirmove[d])
1097 )
1097 )
1098
1098
1099 # Sort the directories in reverse order, so we find children first
1100 # For example, if dir1/ was renamed to dir2/, and dir1/subdir1/
1101 # was renamed to dir2/subdir2/, we want to move dir1/subdir1/file
1102 # to dir2/subdir2/file (not dir2/subdir1/file)
1103 dirmove_children_first = sorted(dirmove, reverse=True)
1104
1099 movewithdir = {}
1105 movewithdir = {}
1100 # check unaccounted nonoverlapping files against directory moves
1106 # check unaccounted nonoverlapping files against directory moves
1101 for f in addedfilesfn():
1107 for f in addedfilesfn():
1102 if f not in fullcopy:
1108 if f not in fullcopy:
1103 for d in dirmove:
1109 for d in dirmove_children_first:
1104 if f.startswith(d):
1110 if f.startswith(d):
1105 # new file added in a directory that was moved, move it
1111 # new file added in a directory that was moved, move it
1106 df = dirmove[d] + f[len(d) :]
1112 df = dirmove[d] + f[len(d) :]
@@ -294,3 +294,45 b' status to list copies here.'
294 M t/t
294 M t/t
295 R a/s
295 R a/s
296 R a/t
296 R a/t
297
298 $ cd ..
299
300
301 Test that files are moved to a new directory based on the path prefix that
302 matches the most. dir1/ below gets renamed to dir2/, and dir1/subdir1/ gets
303 renamed to dir2/subdir2/. We want dir1/subdir1/newfile to move to
304 dir2/subdir2/ (not to dir2/subdir1/ as we would infer based on just the rename
305 of dir1/ to dir2/).
306
307 $ hg init nested-renames
308 $ cd nested-renames
309 $ mkdir dir1
310 $ echo a > dir1/file1
311 $ echo b > dir1/file2
312 $ mkdir dir1/subdir1
313 $ echo c > dir1/subdir1/file3
314 $ echo d > dir1/subdir1/file4
315 $ hg ci -Aqm initial
316 $ hg mv dir1 dir2
317 moving dir1/file1 to dir2/file1
318 moving dir1/file2 to dir2/file2
319 moving dir1/subdir1/file3 to dir2/subdir1/file3
320 moving dir1/subdir1/file4 to dir2/subdir1/file4
321 $ hg mv dir2/subdir1 dir2/subdir2
322 moving dir2/subdir1/file3 to dir2/subdir2/file3
323 moving dir2/subdir1/file4 to dir2/subdir2/file4
324 $ hg ci -m 'move dir1/ to dir2/ and dir1/subdir1/ to dir2/subdir2/'
325 $ hg co 0
326 4 files updated, 0 files merged, 4 files removed, 0 files unresolved
327 $ echo e > dir1/subdir1/file5
328 $ hg ci -Aqm 'add file in dir1/subdir1/'
329 $ hg merge 1
330 5 files updated, 0 files merged, 4 files removed, 0 files unresolved
331 (branch merge, don't forget to commit)
332 $ hg files
333 dir2/file1
334 dir2/file2
335 dir2/subdir2/file3
336 dir2/subdir2/file4
337 dir2/subdir2/file5
338 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now