https://bz.mercurial-scm.org/show_bug.cgi?id=6123

            Bug ID: 6123
           Summary: hg shelve has no information about branches
           Product: Mercurial
           Version: 4.9
          Hardware: PC
                OS: Linux
            Status: UNCONFIRMED
          Severity: feature
          Priority: wish
         Component: shelve
          Assignee: bugzi...@mercurial-scm.org
          Reporter: fah...@faheem.info
                CC: mercurial-devel@mercurial-scm.org

The shelve extension is of significant importance to everyday workflows,
because when one is switching from one branch to another, either named branches
or topic branches, Mercurial will often prevent one from doing so, saying that
there are conflicting changes. This typically looks like:

abort: conflicting changes
(commit or update --clean to discard changes)

So, in many cases, one is forced to save local changes before switching
branches. The usual tool to do so appears to be the shelve extension. If there
is something better, please let me know.

But if one has shelved on branch A, and unwittingly tries to unshelve on branch
B, which is easy to do, because the shelved changes do not by default,
themselves contain any information about which branch they originate from, one
runs into the kind of situation shown in the transcript below.

faheem@orwell:~/personal/business$ hg unshelve
unshelving change 'default-01'
rebasing shelved changes
file 'business/foo.tex' was deleted in local [shelve] but was modified in other
[working-copy].
What do you want to do?
use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
faheem@orwell:~/personal/business$ hg shelve 
abort: unshelve already in progress
(use 'hg unshelve --continue' or 'hg unshelve --abort')
faheem@orwell:~/personal/business$ hg unshelve --abort
unshelve of 'default-01' aborted
faheem@orwell:~/personal/business$ hg shelve 
nothing changed

Notice:

a) currently `hg shelve` doesn't give one a clean option to back out if things
look dicey. You first have to attempt an unshelve, choose the unresolved option
(which isn't obviously the right choice), and after that, one can do a
`unshelve --abort`, which the extension does not tell one about till one tries
to do a shelve.

b) `hg unshelve` makes no attempt to warn the user that these local changes
come from another branch. I suppose, again, because it does not have that
information.

It's possible an approach that is more integrated with version control would be
better. Or maybe one is supposed to just keep committing everything all the
time, so this situation doesn't arise. But I don't think the latter is a
reasonable expectation. Regardless, if one is to use `hg shelve`, a version
that records branch information and refuses to proceed if the recorded branch
does not match the current branch would be much preferable to the current state
of affairs.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to