Mercurial > public > mercurial-scm > hg
view tests/test-pathconflicts-basic.t @ 35168:b175e54c1103 stable
largefiles: pay attention to dropped standin files when updating largefiles
Previously, the largefile for a dropped standin would be deleted here, and then
restored from the cache. This had the effect of clobbering uncommitted changes
if a revert caused the file to be forgotten, which is not what happens with a
normal file. Now the removal and update is skipped for dropped largefiles, and
the corresponding standin is deleted from disk.
This was noticed when working on issue5738 because the forgotten standin files
were left behind, and that changes the behavior of the next rename to that
directory. My first attempt was to cleanup the standins before calling this.
That failed, because this function deletes the largefile if the corresponding
standin is missing.
This function is called by the revert command, merge (and therefore update), and
patch, via the scmutil.marktouched() override. So it should be pretty narrow in
scope.
I didn't mark issue5738 as fixed because the move related issues can still
happen if the main tree and the .hglf subtree get out of sync somehow. I don't
see an easy fix for that, but that should be an edge case. If whoever queues
this thinks it is good enough to close out the bug and can cram it into the
summary, go for it.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 12 Nov 2017 23:45:14 -0500 |
parents | 2a774cae3a03 |
children | 41ef02ba329b |
line wrap: on
line source
Path conflict checking is currently disabled by default because of issue5716. Turn it on for this test. $ cat >> $HGRCPATH << EOF > [experimental] > merge.checkpathconflicts=True > EOF $ hg init repo $ cd repo $ echo base > base $ hg add base $ hg commit -m "base" $ hg bookmark -i base $ echo 1 > a $ hg add a $ hg commit -m "file" $ hg bookmark -i file $ echo 2 > a $ hg commit -m "file2" $ hg bookmark -i file2 $ hg up -q 0 $ mkdir a $ echo 2 > a/b $ hg add a/b $ hg commit -m "dir" created new head $ hg bookmark -i dir Basic merge - local file conflicts with remote directory $ hg up -q file $ hg bookmark -i $ hg merge --verbose dir resolving manifests a: path conflict - a file or link has the same name as a directory the local file has been renamed to a~853701544ac3 resolve manually then use 'hg resolve --mark a' moving a to a~853701544ac3 getting a/b 1 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon [1] $ hg update --clean . 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ rm a~853701544ac3 Basic update - local directory conflicts with remote file $ hg up -q 0 $ mkdir a $ echo 3 > a/b $ hg up file a: untracked directory conflicts with file abort: untracked files in working directory differ from files in requested revision [255] $ hg up --clean file 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark file) Repo state is ok $ hg sum parent: 1:853701544ac3 file branch: default bookmarks: *file commit: (clean) update: 2 new changesets (update) phases: 4 draft Basic update - untracked file conflicts with remote directory $ hg up -q 0 $ echo untracked > a $ hg up --config merge.checkunknown=warn dir a: replacing untracked file 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark dir) $ cat a.orig untracked $ rm -f a.orig Basic clean update - local directory conflicts with changed remote file $ hg up -q file $ rm a $ mkdir a $ echo 4 > a/b $ hg up file2 abort: *: '$TESTTMP/repo/a' (glob) [255] $ hg up --clean file2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark file2) Repo state is ok $ hg sum parent: 2:f64e09fac717 file2 branch: default bookmarks: *file2 commit: (clean) update: 1 new changesets, 2 branch heads (merge) phases: 4 draft