Mercurial > hg
comparison mercurial/localrepo.py @ 1736:50de0887bbcd
add preoutgoing and outgoing hooks.
preoutgoing lets prevent pull over http or ssh.
outgoing lets notify after pull.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Fri, 17 Feb 2006 08:26:21 -0800 |
parents | d3e6da334b85 |
children | 2c9872a4f3fd |
comparison
equal
deleted
inserted
replaced
1735:791405fe9991 | 1736:50de0887bbcd |
---|---|
955 if not fetch: | 955 if not fetch: |
956 self.ui.status(_("no changes found\n")) | 956 self.ui.status(_("no changes found\n")) |
957 return 1 | 957 return 1 |
958 | 958 |
959 if heads is None: | 959 if heads is None: |
960 cg = remote.changegroup(fetch) | 960 cg = remote.changegroup(fetch, 'pull') |
961 else: | 961 else: |
962 cg = remote.changegroupsubset(fetch, heads) | 962 cg = remote.changegroupsubset(fetch, heads, 'pull') |
963 return self.addchangegroup(cg) | 963 return self.addchangegroup(cg) |
964 | 964 |
965 def push(self, remote, force=False): | 965 def push(self, remote, force=False): |
966 lock = remote.lock() | 966 lock = remote.lock() |
967 | 967 |
982 self.ui.warn(_("abort: push creates new remote branches!\n")) | 982 self.ui.warn(_("abort: push creates new remote branches!\n")) |
983 self.ui.status(_("(did you forget to merge?" | 983 self.ui.status(_("(did you forget to merge?" |
984 " use push -f to force)\n")) | 984 " use push -f to force)\n")) |
985 return 1 | 985 return 1 |
986 | 986 |
987 cg = self.changegroup(update) | 987 cg = self.changegroup(update, 'push') |
988 return remote.addchangegroup(cg) | 988 return remote.addchangegroup(cg) |
989 | 989 |
990 def changegroupsubset(self, bases, heads): | 990 def changegroupsubset(self, bases, heads, source): |
991 """This function generates a changegroup consisting of all the nodes | 991 """This function generates a changegroup consisting of all the nodes |
992 that are descendents of any of the bases, and ancestors of any of | 992 that are descendents of any of the bases, and ancestors of any of |
993 the heads. | 993 the heads. |
994 | 994 |
995 It is fairly complex as determining which filenodes and which | 995 It is fairly complex as determining which filenodes and which |
996 manifest nodes need to be included for the changeset to be complete | 996 manifest nodes need to be included for the changeset to be complete |
997 is non-trivial. | 997 is non-trivial. |
998 | 998 |
999 Another wrinkle is doing the reverse, figuring out which changeset in | 999 Another wrinkle is doing the reverse, figuring out which changeset in |
1000 the changegroup a particular filenode or manifestnode belongs to.""" | 1000 the changegroup a particular filenode or manifestnode belongs to.""" |
1001 | |
1002 self.hook('preoutgoing', throw=True, source=source) | |
1001 | 1003 |
1002 # Set up some initial variables | 1004 # Set up some initial variables |
1003 # Make it easy to refer to self.changelog | 1005 # Make it easy to refer to self.changelog |
1004 cl = self.changelog | 1006 cl = self.changelog |
1005 # msng is short for missing - compute the list of changesets in this | 1007 # msng is short for missing - compute the list of changesets in this |
1249 # Don't need this anymore, toss it to free memory. | 1251 # Don't need this anymore, toss it to free memory. |
1250 del msng_filenode_set[fname] | 1252 del msng_filenode_set[fname] |
1251 # Signal that no more groups are left. | 1253 # Signal that no more groups are left. |
1252 yield struct.pack(">l", 0) | 1254 yield struct.pack(">l", 0) |
1253 | 1255 |
1256 self.hook('outgoing', node=hex(msng_cl_lst[0]), source=source) | |
1257 | |
1254 return util.chunkbuffer(gengroup()) | 1258 return util.chunkbuffer(gengroup()) |
1255 | 1259 |
1256 def changegroup(self, basenodes): | 1260 def changegroup(self, basenodes, source): |
1257 """Generate a changegroup of all nodes that we have that a recipient | 1261 """Generate a changegroup of all nodes that we have that a recipient |
1258 doesn't. | 1262 doesn't. |
1259 | 1263 |
1260 This is much easier than the previous function as we can assume that | 1264 This is much easier than the previous function as we can assume that |
1261 the recipient has any changenode we aren't sending them.""" | 1265 the recipient has any changenode we aren't sending them.""" |
1266 | |
1267 self.hook('preoutgoing', throw=True, source=source) | |
1268 | |
1262 cl = self.changelog | 1269 cl = self.changelog |
1263 nodes = cl.nodesbetween(basenodes, None)[0] | 1270 nodes = cl.nodesbetween(basenodes, None)[0] |
1264 revset = dict.fromkeys([cl.rev(n) for n in nodes]) | 1271 revset = dict.fromkeys([cl.rev(n) for n in nodes]) |
1265 | 1272 |
1266 def identity(x): | 1273 def identity(x): |
1308 lookup = lookuprevlink_func(filerevlog) | 1315 lookup = lookuprevlink_func(filerevlog) |
1309 for chnk in filerevlog.group(nodeiter, lookup): | 1316 for chnk in filerevlog.group(nodeiter, lookup): |
1310 yield chnk | 1317 yield chnk |
1311 | 1318 |
1312 yield struct.pack(">l", 0) | 1319 yield struct.pack(">l", 0) |
1320 self.hook('outgoing', node=hex(nodes[0]), source=source) | |
1313 | 1321 |
1314 return util.chunkbuffer(gengroup()) | 1322 return util.chunkbuffer(gengroup()) |
1315 | 1323 |
1316 def addchangegroup(self, source): | 1324 def addchangegroup(self, source): |
1317 | 1325 |