Show More
@@ -0,0 +1,153 b'' | |||||
|
1 | ============================================ | |||
|
2 | Testing various race condition while pushing | |||
|
3 | ============================================ | |||
|
4 | ||||
|
5 | $ cat << EOF >> $HGRCPATH | |||
|
6 | > [command-templates] | |||
|
7 | > log={rev}:{node|short} {desc|firstline} {bookmarks} | |||
|
8 | > [ui] | |||
|
9 | > timeout = 20 | |||
|
10 | > [phases] | |||
|
11 | > publish=False | |||
|
12 | > EOF | |||
|
13 | ||||
|
14 | Initial Setup | |||
|
15 | ============= | |||
|
16 | ||||
|
17 | $ hg init dst | |||
|
18 | $ echo a > dst/a-file | |||
|
19 | $ hg --cwd dst add a-file | |||
|
20 | $ hg --cwd dst commit -m root | |||
|
21 | $ hg --cwd dst bookmark my-book | |||
|
22 | $ hg --cwd dst bookmarks | |||
|
23 | * my-book 0:a64e49638499 | |||
|
24 | $ hg --cwd dst log -G | |||
|
25 | @ 0:a64e49638499 root my-book | |||
|
26 | ||||
|
27 | ||||
|
28 | $ hg clone ssh://user@dummy/dst src | |||
|
29 | requesting all changes | |||
|
30 | adding changesets | |||
|
31 | adding manifests | |||
|
32 | adding file changes | |||
|
33 | added 1 changesets with 1 changes to 1 files | |||
|
34 | new changesets a64e49638499 (1 drafts) | |||
|
35 | updating to branch default | |||
|
36 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
37 | $ hg --cwd src update my-book | |||
|
38 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
39 | (activating bookmark my-book) | |||
|
40 | $ hg --cwd src log -G | |||
|
41 | @ 0:a64e49638499 root my-book | |||
|
42 | ||||
|
43 | ||||
|
44 | $ echo b > src/a-file | |||
|
45 | $ hg --cwd src commit -m cA0_ | |||
|
46 | $ hg --cwd src log -G | |||
|
47 | @ 1:e89d3a6ed79b cA0_ my-book | |||
|
48 | | | |||
|
49 | o 0:a64e49638499 root | |||
|
50 | ||||
|
51 | ||||
|
52 | Race condition while pushing a forward moving bookmarks | |||
|
53 | ======================================================= | |||
|
54 | ||||
|
55 | This is currently slightly broken as we eventually don't push the bookmark. | |||
|
56 | However at least we do not delete the remote one. | |||
|
57 | ||||
|
58 | $ echo c > src/a-file | |||
|
59 | $ hg --cwd src push -B my-book --config hooks.prelock="hg commit -m cA1_" | |||
|
60 | pushing to ssh://user@dummy/dst | |||
|
61 | searching for changes | |||
|
62 | remote: adding changesets | |||
|
63 | remote: adding manifests | |||
|
64 | remote: adding file changes | |||
|
65 | remote: added 1 changesets with 1 changes to 1 files | |||
|
66 | $ hg --cwd src log -G | |||
|
67 | @ 2:08d837bbfe8d cA1_ my-book | |||
|
68 | | | |||
|
69 | o 1:e89d3a6ed79b cA0_ | |||
|
70 | | | |||
|
71 | o 0:a64e49638499 root | |||
|
72 | ||||
|
73 | $ hg --cwd dst log -G | |||
|
74 | o 1:e89d3a6ed79b cA0_ | |||
|
75 | | | |||
|
76 | @ 0:a64e49638499 root my-book | |||
|
77 | ||||
|
78 | ||||
|
79 | create a side-moving bookmark | |||
|
80 | Race condition while pushing a side moving bookmarks | |||
|
81 | ======================================================= | |||
|
82 | ||||
|
83 | resynchronize the repo and setup test | |||
|
84 | ------------------------------------- | |||
|
85 | ||||
|
86 | $ hg --cwd src push -B my-book | |||
|
87 | pushing to ssh://user@dummy/dst | |||
|
88 | searching for changes | |||
|
89 | remote: adding changesets | |||
|
90 | remote: adding manifests | |||
|
91 | remote: adding file changes | |||
|
92 | remote: added 1 changesets with 1 changes to 1 files | |||
|
93 | updating bookmark my-book | |||
|
94 | $ hg --cwd dst log -G | |||
|
95 | o 2:08d837bbfe8d cA1_ my-book | |||
|
96 | | | |||
|
97 | o 1:e89d3a6ed79b cA0_ | |||
|
98 | | | |||
|
99 | @ 0:a64e49638499 root | |||
|
100 | ||||
|
101 | ||||
|
102 | $ hg --cwd src up 'desc("root")' | |||
|
103 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
104 | (leaving bookmark my-book) | |||
|
105 | $ echo d > src/a-file | |||
|
106 | $ hg --cwd src commit -m cB0_ | |||
|
107 | created new head | |||
|
108 | $ hg --cwd src bookmark --force my-book | |||
|
109 | $ echo e > src/a-file | |||
|
110 | $ hg --cwd src log -G | |||
|
111 | @ 3:726401661fe5 cB0_ my-book | |||
|
112 | | | |||
|
113 | | o 2:08d837bbfe8d cA1_ | |||
|
114 | | | | |||
|
115 | | o 1:e89d3a6ed79b cA0_ | |||
|
116 | |/ | |||
|
117 | o 0:a64e49638499 root | |||
|
118 | ||||
|
119 | ||||
|
120 | Push the bookmark while a commit is being made | |||
|
121 | ---------------------------------------------- | |||
|
122 | ||||
|
123 | This is currently slightly broken as we eventually don't push the bookmark. | |||
|
124 | However at least we do not delete the remote one. | |||
|
125 | ||||
|
126 | $ hg --cwd src push -f -r 'desc("cB0_")' -B my-book --config hooks.prelock="hg commit -m cB1_" | |||
|
127 | pushing to ssh://user@dummy/dst | |||
|
128 | searching for changes | |||
|
129 | remote: adding changesets | |||
|
130 | remote: adding manifests | |||
|
131 | remote: adding file changes | |||
|
132 | remote: added 1 changesets with 1 changes to 1 files (+1 heads) | |||
|
133 | $ hg --cwd src log -G | |||
|
134 | @ 4:a7f9cbf631a0 cB1_ my-book | |||
|
135 | | | |||
|
136 | o 3:726401661fe5 cB0_ | |||
|
137 | | | |||
|
138 | | o 2:08d837bbfe8d cA1_ | |||
|
139 | | | | |||
|
140 | | o 1:e89d3a6ed79b cA0_ | |||
|
141 | |/ | |||
|
142 | o 0:a64e49638499 root | |||
|
143 | ||||
|
144 | ||||
|
145 | $ hg --cwd dst log -G | |||
|
146 | o 3:726401661fe5 cB0_ | |||
|
147 | | | |||
|
148 | | o 2:08d837bbfe8d cA1_ my-book | |||
|
149 | | | | |||
|
150 | | o 1:e89d3a6ed79b cA0_ | |||
|
151 | |/ | |||
|
152 | @ 0:a64e49638499 root | |||
|
153 |
@@ -717,12 +717,18 b' def _processcompared(pushop, pushed, exp' | |||||
717 | if bookmod.isdivergent(b): |
|
717 | if bookmod.isdivergent(b): | |
718 | pushop.ui.warn(_(b'cannot push divergent bookmark %s!\n') % b) |
|
718 | pushop.ui.warn(_(b'cannot push divergent bookmark %s!\n') % b) | |
719 | pushop.bkresult = 2 |
|
719 | pushop.bkresult = 2 | |
|
720 | elif pushed and repo[scid].rev() not in pushed: | |||
|
721 | # in case of race or secret | |||
|
722 | msg = _(b'cannot push bookmark X without its revision: %s!\n') | |||
|
723 | pushop.ui.warn(msg % b) | |||
|
724 | pushop.bkresult = 2 | |||
720 | else: |
|
725 | else: | |
721 | pushop.outbookmarks.append((b, b'', scid)) |
|
726 | pushop.outbookmarks.append((b, b'', scid)) | |
722 | # search for overwritten bookmark |
|
727 | # search for overwritten bookmark | |
723 | for b, scid, dcid in list(advdst) + list(diverge) + list(differ): |
|
728 | for b, scid, dcid in list(advdst) + list(diverge) + list(differ): | |
724 | if b in explicit: |
|
729 | if b in explicit: | |
725 | explicit.remove(b) |
|
730 | explicit.remove(b) | |
|
731 | if not pushed or repo[scid].rev() in pushed: | |||
726 | pushop.outbookmarks.append((b, dcid, scid)) |
|
732 | pushop.outbookmarks.append((b, dcid, scid)) | |
727 | # search for bookmark to delete |
|
733 | # search for bookmark to delete | |
728 | for b, scid, dcid in adddst: |
|
734 | for b, scid, dcid in adddst: |
General Comments 0
You need to be logged in to leave comments.
Login now