Mercurial > hg
changeset 816:8674b7803714
Warn on pushing unsynced repo or adding new heads
By popular demand
author | mpm@selenic.com |
---|---|
date | Mon, 01 Aug 2005 23:17:22 -0800 |
parents | 5a55e3011772 |
children | cf1d9a01dd92 |
files | mercurial/hg.py tests/test-push-warn tests/test-push-warn.out |
diffstat | 3 files changed, 92 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hg.py Sat Jul 30 09:01:59 2005 -0800 +++ b/mercurial/hg.py Mon Aug 01 23:17:22 2005 -0800 @@ -1048,17 +1048,22 @@ return nl - def findincoming(self, remote, base={}): + def findincoming(self, remote, base=None, heads=None): m = self.changelog.nodemap search = [] fetch = [] seen = {} seenbranch = {} + if base == None: + base = {} # assume we're closer to the tip than the root # and start by examining the heads self.ui.status("searching for changes\n") - heads = remote.heads() + + if not heads: + heads = remote.heads() + unknown = [] for h in heads: if h not in m: @@ -1160,9 +1165,11 @@ return fetch - def findoutgoing(self, remote): - base = {} - self.findincoming(remote, base) + def findoutgoing(self, remote, base=None, heads=None): + if base == None: + base = {} + self.findincoming(remote, base, heads) + remain = dict.fromkeys(self.changelog.nodemap) # prune everything remote has from the tree @@ -1202,12 +1209,27 @@ cg = remote.changegroup(fetch) return self.addchangegroup(cg) - def push(self, remote): + def push(self, remote, force=False): lock = remote.lock() - update = self.findoutgoing(remote) + + base = {} + heads = remote.heads() + inc = self.findincoming(remote, base, heads) + if not force and inc: + self.ui.warn("abort: unsynced remote changes!\n") + self.ui.status("(did you forget to sync? use push -f to force)\n") + return 1 + + update = self.findoutgoing(remote, base) if not update: self.ui.status("no changes found\n") return 1 + elif not force: + if len(heads) < len(self.changelog.heads()): + self.ui.warn("abort: push creates new remote branches!\n") + self.ui.status("(did you forget to merge?" + + " use push -f to force)\n") + return 1 cg = self.changegroup(update) return remote.addchangegroup(cg)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-push-warn Mon Aug 01 23:17:22 2005 -0800 @@ -0,0 +1,28 @@ +#!/bin/sh + +mkdir a +cd a +hg init +echo foo > t1 +hg add t1 +hg commit -m "1" -d "0 0" + +cd .. +hg clone a b + +cd a +echo foo > t2 +hg add t2 +hg commit -m "2" -d "0 0" + +cd ../b +echo foo > t3 +hg add t3 +hg commit -m "3" -d "0 0" + +hg push ../a +hg pull ../a +hg push ../a +hg up -m +hg commit -m "4" -d "0 0" +hg push ../a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-push-warn.out Mon Aug 01 23:17:22 2005 -0800 @@ -0,0 +1,35 @@ ++ hg init ++ hg add t1 ++ hg commit -m 1 -d 0 0 ++ hg clone a b ++ hg add t2 ++ hg commit -m 2 -d 0 0 ++ hg add t3 ++ hg commit -m 3 -d 0 0 ++ hg push ../a +pushing to ../a +searching for changes +abort: unsynced remote changes! +(did you forget to sync? use push -f to force) ++ hg pull ../a +pulling from ../a +searching for changes +adding changesets +adding manifests +adding file changes +added 1 changesets with 1 changes to 1 files +(run 'hg update' to get a working copy) ++ hg push ../a +pushing to ../a +searching for changes +abort: push creates new remote branches! +(did you forget to merge? use push -f to force) ++ hg up -m ++ hg commit -m 4 -d 0 0 ++ hg push ../a +pushing to ../a +searching for changes +adding changesets +adding manifests +adding file changes +added 2 changesets with 2 changes to 2 files