##// END OF EJS Templates
Warn on pushing unsynced repo or adding new heads...
mpm@selenic.com -
r816:8674b780 default
parent child Browse files
Show More
@@ -0,0 +1,28 b''
1 #!/bin/sh
2
3 mkdir a
4 cd a
5 hg init
6 echo foo > t1
7 hg add t1
8 hg commit -m "1" -d "0 0"
9
10 cd ..
11 hg clone a b
12
13 cd a
14 echo foo > t2
15 hg add t2
16 hg commit -m "2" -d "0 0"
17
18 cd ../b
19 echo foo > t3
20 hg add t3
21 hg commit -m "3" -d "0 0"
22
23 hg push ../a
24 hg pull ../a
25 hg push ../a
26 hg up -m
27 hg commit -m "4" -d "0 0"
28 hg push ../a
@@ -0,0 +1,35 b''
1 + hg init
2 + hg add t1
3 + hg commit -m 1 -d 0 0
4 + hg clone a b
5 + hg add t2
6 + hg commit -m 2 -d 0 0
7 + hg add t3
8 + hg commit -m 3 -d 0 0
9 + hg push ../a
10 pushing to ../a
11 searching for changes
12 abort: unsynced remote changes!
13 (did you forget to sync? use push -f to force)
14 + hg pull ../a
15 pulling from ../a
16 searching for changes
17 adding changesets
18 adding manifests
19 adding file changes
20 added 1 changesets with 1 changes to 1 files
21 (run 'hg update' to get a working copy)
22 + hg push ../a
23 pushing to ../a
24 searching for changes
25 abort: push creates new remote branches!
26 (did you forget to merge? use push -f to force)
27 + hg up -m
28 + hg commit -m 4 -d 0 0
29 + hg push ../a
30 pushing to ../a
31 searching for changes
32 adding changesets
33 adding manifests
34 adding file changes
35 added 2 changesets with 2 changes to 2 files
@@ -1048,17 +1048,22 b' class localrepository:'
1048 1048
1049 1049 return nl
1050 1050
1051 def findincoming(self, remote, base={}):
1051 def findincoming(self, remote, base=None, heads=None):
1052 1052 m = self.changelog.nodemap
1053 1053 search = []
1054 1054 fetch = []
1055 1055 seen = {}
1056 1056 seenbranch = {}
1057 if base == None:
1058 base = {}
1057 1059
1058 1060 # assume we're closer to the tip than the root
1059 1061 # and start by examining the heads
1060 1062 self.ui.status("searching for changes\n")
1061 heads = remote.heads()
1063
1064 if not heads:
1065 heads = remote.heads()
1066
1062 1067 unknown = []
1063 1068 for h in heads:
1064 1069 if h not in m:
@@ -1160,9 +1165,11 b' class localrepository:'
1160 1165
1161 1166 return fetch
1162 1167
1163 def findoutgoing(self, remote):
1164 base = {}
1165 self.findincoming(remote, base)
1168 def findoutgoing(self, remote, base=None, heads=None):
1169 if base == None:
1170 base = {}
1171 self.findincoming(remote, base, heads)
1172
1166 1173 remain = dict.fromkeys(self.changelog.nodemap)
1167 1174
1168 1175 # prune everything remote has from the tree
@@ -1202,12 +1209,27 b' class localrepository:'
1202 1209 cg = remote.changegroup(fetch)
1203 1210 return self.addchangegroup(cg)
1204 1211
1205 def push(self, remote):
1212 def push(self, remote, force=False):
1206 1213 lock = remote.lock()
1207 update = self.findoutgoing(remote)
1214
1215 base = {}
1216 heads = remote.heads()
1217 inc = self.findincoming(remote, base, heads)
1218 if not force and inc:
1219 self.ui.warn("abort: unsynced remote changes!\n")
1220 self.ui.status("(did you forget to sync? use push -f to force)\n")
1221 return 1
1222
1223 update = self.findoutgoing(remote, base)
1208 1224 if not update:
1209 1225 self.ui.status("no changes found\n")
1210 1226 return 1
1227 elif not force:
1228 if len(heads) < len(self.changelog.heads()):
1229 self.ui.warn("abort: push creates new remote branches!\n")
1230 self.ui.status("(did you forget to merge?" +
1231 " use push -f to force)\n")
1232 return 1
1211 1233
1212 1234 cg = self.changegroup(update)
1213 1235 return remote.addchangegroup(cg)
General Comments 0
You need to be logged in to leave comments. Login now