def _rebase(orig, ui, repo, *pats, **opts): if not opts.get("date") and not ui.configbool("tweakdefaults", "rebasekeepdate"): opts["date"] = currentdate() if opts.get("continue") or opts.get("abort") or opts.get("restack"): return orig(ui, repo, *pats, **opts) # 'hg rebase' w/o args should do nothing if not opts.get("dest"): raise error.Abort("you must specify a destination (-d) for the rebase") # 'hg rebase' can fast-forward bookmark prev = repo["."] # Only fast-forward the bookmark if no source nodes were explicitly # specified. if not (opts.get("base") or opts.get("source") or opts.get("rev")): dest = scmutil.revsingle(repo, opts.get("dest")) common = dest.ancestor(prev) if prev == common: activebookmark = repo._activebookmark result = hg.updatetotally(ui, repo, dest.node(), activebookmark) if activebookmark: with repo.wlock(): bookmarks.update(repo, [prev.node()], dest.node()) return result return orig(ui, repo, *pats, **opts)
def rebaseorfastforward(orig, ui, repo, dest, **args): """Wrapper for rebasemodule.rebase that fast-forwards the working directory and any active bookmark to the rebase destination if there is actually nothing to rebase. """ prev = repo["."] destrev = scmutil.revsingle(repo, dest) common = destrev.ancestor(prev) if prev == common and destrev != prev: result = hg.update(repo, destrev.node()) if repo._activebookmark: with repo.wlock(): bookmarks.update(repo, [prev.node()], destrev.node()) ui.status(_("nothing to rebase - fast-forwarded to %s\n") % dest) return result return orig(ui, repo, dest=dest, **args)