annotate tests/test_hooks.py @ 1340:db9d85618d3d

wrapper: delay marker creation in push Before this patch we were creating obsolescence markers when pulling the changesets from subversion. The counterpart stripping logic (when obsolescence is not available) was done after pushing everything. This patch moves the marker creation to the end of the push, to: 1) Make the code more readable (the marker creation and the stripping should be in the same place) 2) Fix a behavior issue with inhibit(evolve) (see below) With inhibit + hgsubversion enabled. When pushing to subversion we were creating markers as expected but inhibiting the marker on the commit that was the parent of the working copy making it therefore visible. By delaying the marker creation to after the update we avoid this issue.
author Laurent Charignon <lcharignon@fb.com>
date Wed, 08 Jul 2015 13:30:16 -0700
parents 20850abfb91a
children 4f1461428334
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
919
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
1 import sys
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
2 import test_util
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
3 import unittest
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
4
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
5 from mercurial import hg
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
6 from mercurial import commands
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
7
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
8 class TestHooks(test_util.TestBase):
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
9 def setUp(self):
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
10 super(TestHooks, self).setUp()
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
11
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
12 def _loadupdate(self, fixture_name, *args, **kwargs):
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
13 kwargs = kwargs.copy()
1067
20850abfb91a test_hooks: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
14 kwargs.update(noupdate=False)
919
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
15 repo, repo_path = self.load_and_fetch(fixture_name, *args, **kwargs)
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
16 return repo, repo_path
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
17
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
18 def test_updatemetahook(self):
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
19 repo, repo_path = self._loadupdate('single_rev.svndump')
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
20 state = repo.parents()
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
21 self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
22 commands.pull(self.repo.ui, self.repo)
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
23
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
24 # Clone to a new repository and add a hook
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
25 new_wc_path = "%s-2" % self.wc_path
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
26 commands.clone(self.repo.ui, self.wc_path, new_wc_path)
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
27 newrepo = hg.repository(test_util.testui(), new_wc_path)
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
28 newrepo.ui.setconfig('hooks', 'changegroup.meta',
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
29 'python:hgsubversion.hooks.updatemeta.hook')
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
30
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
31 # Commit a rev that should trigger svn meta update
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
32 self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed Again'})
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
33 commands.pull(self.repo.ui, self.repo)
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
34
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
35 self.called = False
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
36 import hgsubversion.svncommands
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
37 oldupdatemeta = hgsubversion.svncommands.updatemeta
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
38 def _updatemeta(ui, repo, args=[]):
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
39 self.called = True
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
40 hgsubversion.svncommands.updatemeta = _updatemeta
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
41
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
42 # Pull and make sure our updatemeta function gets called
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
43 commands.pull(newrepo.ui, newrepo)
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
44 hgsubversion.svncommands.updatemeta = oldupdatemeta
92bd7b3678ea Add a changegroup hook to update svn metadata
Brad Hall <bhall@fb.com>
parents:
diff changeset
45 self.assertTrue(self.called)