Mercurial > hg
view mercurial/templates/template-vars.txt @ 16696:d1afbf03e69a
rebase: allow collapsing branches in place (issue3111)
We allow rebase plus collapse, but not collapse only? I imagine people would
rebase first then collapse once they are sure the rebase is correct and it is
the right time to finish it.
I was reluctant to submit this patch for reasons detailed below, but it
improves rebase --collapse usefulness so much it is worth the ugliness.
The fix is ugly because we should be fixing the collapse code path rather than
the merge. Collapsing by merging changesets repeatedly is inefficient compared
to what commit --amend does: commitctx(), update, strip. The problem with the
latter is, to generate the synthetic changeset, copy records are gathered with
copies.pathcopies(). copies.pathcopies() is still implemented with merging in
mind and discards information like file replaced by the copy of another,
criss-cross copies and so forth. I believe this information should not be lost,
even if we decide not to interpret it fully later, at merge time.
The second issue with improving rebase --collapse is the option should not be
there to begin with. Rebasing and collapsing are orthogonal and a dedicated
command would probably enable a better, simpler ui. We should avoid advertizing
rebase --collapse, but with this fix it becomes the best shipped solution to
collapse changesets.
And for the record, available techniques are:
- revert + commit + strip: lose copies
- mq/qfold: repeated patching() (mostly correct, fragile)
- rebase: repeated merges (mostly correct, fragile)
- collapse: revert + tag rewriting wizardry, lose copies
- histedit: repeated patching() (mostly correct, fragile)
- amend: copies.pathcopies() + commitctx() + update + strip
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Thu, 03 May 2012 15:14:58 +0200 |
parents | 616ad3f6fd33 |
children |
line wrap: on
line source
repo the name of the repo rev a changeset.manifest revision node a changeset node changesets total number of changesets file a filename filerev a file revision filerevs total number of file revisions up the directory of the relevant file path a path in the manifest, starting with "/" basename a short pathname date a date string age age in hours, days, etc line a line of text (escaped) desc a description (escaped, with breaks) shortdesc a short description (escaped) author a name or email addressv(obfuscated) parent a list of the parent child a list of the children tags a list of tag header the global page header footer the global page footer files a list of file links file_copies a list of pairs of name, source filenames dirs a set of directory links diff a diff of one or more files annotate an annotated file entries the entries relevant to the page url base url of hgweb interface logourl base url of logo staticurl base url for static resources Templates and commands: changelog(rev) - a page for browsing changesets naventry - a link for jumping to a changeset number filenodelink - jump to file diff fileellipses - printed after maxfiles changelogentry - an entry in the log manifest - browse a manifest as a directory tree