Show More
@@ -0,0 +1,54 b'' | |||
|
1 | #!/bin/sh | |
|
2 | ||
|
3 | hg init test | |
|
4 | cd test | |
|
5 | echo 0 > afile | |
|
6 | hg add afile | |
|
7 | hg commit -m "0.0" -d "1000000 0" | |
|
8 | echo 1 >> afile | |
|
9 | hg commit -m "0.1" -d "1000000 0" | |
|
10 | echo 2 >> afile | |
|
11 | hg commit -m "0.2" -d "1000000 0" | |
|
12 | echo 3 >> afile | |
|
13 | hg commit -m "0.3" -d "1000000 0" | |
|
14 | hg update -C 0 | |
|
15 | echo 1 >> afile | |
|
16 | hg commit -m "1.1" -d "1000000 0" | |
|
17 | echo 2 >> afile | |
|
18 | hg commit -m "1.2" -d "1000000 0" | |
|
19 | echo "a line" > fred | |
|
20 | echo 3 >> afile | |
|
21 | hg add fred | |
|
22 | hg commit -m "1.3" -d "1000000 0" | |
|
23 | hg mv afile adifferentfile | |
|
24 | hg commit -m "1.3m" -d "1000000 0" | |
|
25 | hg update -C 3 | |
|
26 | hg mv afile anotherfile | |
|
27 | hg commit -m "0.3m" -d "1000000 0" | |
|
28 | hg verify | |
|
29 | cd .. | |
|
30 | hg init empty | |
|
31 | hg -R test bundle full.hg empty | |
|
32 | hg -R test unbundle full.hg | |
|
33 | hg -R empty unbundle full.hg | |
|
34 | hg -R empty heads | |
|
35 | hg -R empty verify | |
|
36 | ||
|
37 | rm -rf empty | |
|
38 | hg init empty | |
|
39 | cd empty | |
|
40 | hg -R bundle://../full.hg log | |
|
41 | #doesn't work (yet ?) | |
|
42 | #hg -R bundle://../full.hg verify | |
|
43 | hg pull bundle://../full.hg | |
|
44 | cd .. | |
|
45 | ||
|
46 | rm -rf empty | |
|
47 | hg init empty | |
|
48 | hg clone -r 3 test partial | |
|
49 | hg clone partial partial2 | |
|
50 | cd partial | |
|
51 | hg -R bundle://../full.hg log | |
|
52 | hg incoming bundle://../full.hg | |
|
53 | hg -R bundle://../full.hg outgoing ../partial2 | |
|
54 | cd .. |
@@ -0,0 +1,203 b'' | |||
|
1 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
2 | 1 files updated, 0 files merged, 2 files removed, 0 files unresolved | |
|
3 | checking changesets | |
|
4 | checking manifests | |
|
5 | crosschecking files in changesets and manifests | |
|
6 | checking files | |
|
7 | 4 files, 9 changesets, 7 total revisions | |
|
8 | searching for changes | |
|
9 | adding changesets | |
|
10 | adding manifests | |
|
11 | adding file changes | |
|
12 | added 0 changesets with 0 changes to 4 files | |
|
13 | (run 'hg update' to get a working copy) | |
|
14 | adding changesets | |
|
15 | adding manifests | |
|
16 | adding file changes | |
|
17 | added 9 changesets with 7 changes to 4 files (+1 heads) | |
|
18 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
|
19 | changeset: 8:836ac62537ab | |
|
20 | tag: tip | |
|
21 | parent: 3:ac69c658229d | |
|
22 | user: test | |
|
23 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
24 | summary: 0.3m | |
|
25 | ||
|
26 | changeset: 7:80fe151401c2 | |
|
27 | user: test | |
|
28 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
29 | summary: 1.3m | |
|
30 | ||
|
31 | checking changesets | |
|
32 | checking manifests | |
|
33 | crosschecking files in changesets and manifests | |
|
34 | checking files | |
|
35 | 4 files, 9 changesets, 7 total revisions | |
|
36 | changeset: 8:836ac62537ab | |
|
37 | tag: tip | |
|
38 | parent: 3:ac69c658229d | |
|
39 | user: test | |
|
40 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
41 | summary: 0.3m | |
|
42 | ||
|
43 | changeset: 7:80fe151401c2 | |
|
44 | user: test | |
|
45 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
46 | summary: 1.3m | |
|
47 | ||
|
48 | changeset: 6:1e3f6b843bd6 | |
|
49 | user: test | |
|
50 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
51 | summary: 1.3 | |
|
52 | ||
|
53 | changeset: 5:024e4e7df376 | |
|
54 | user: test | |
|
55 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
56 | summary: 1.2 | |
|
57 | ||
|
58 | changeset: 4:5f4f3ceb285e | |
|
59 | parent: 0:5649c9d34dd8 | |
|
60 | user: test | |
|
61 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
62 | summary: 1.1 | |
|
63 | ||
|
64 | changeset: 3:ac69c658229d | |
|
65 | user: test | |
|
66 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
67 | summary: 0.3 | |
|
68 | ||
|
69 | changeset: 2:d62976ca1e50 | |
|
70 | user: test | |
|
71 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
72 | summary: 0.2 | |
|
73 | ||
|
74 | changeset: 1:10b2180f755b | |
|
75 | user: test | |
|
76 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
77 | summary: 0.1 | |
|
78 | ||
|
79 | changeset: 0:5649c9d34dd8 | |
|
80 | user: test | |
|
81 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
82 | summary: 0.0 | |
|
83 | ||
|
84 | pulling from bundle://../full.hg | |
|
85 | requesting all changes | |
|
86 | adding changesets | |
|
87 | adding manifests | |
|
88 | adding file changes | |
|
89 | added 9 changesets with 7 changes to 4 files (+1 heads) | |
|
90 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
|
91 | requesting all changes | |
|
92 | adding changesets | |
|
93 | adding manifests | |
|
94 | adding file changes | |
|
95 | added 4 changesets with 4 changes to 1 files | |
|
96 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
97 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
98 | changeset: 8:836ac62537ab | |
|
99 | tag: tip | |
|
100 | parent: 3:ac69c658229d | |
|
101 | user: test | |
|
102 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
103 | summary: 0.3m | |
|
104 | ||
|
105 | changeset: 7:80fe151401c2 | |
|
106 | user: test | |
|
107 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
108 | summary: 1.3m | |
|
109 | ||
|
110 | changeset: 6:1e3f6b843bd6 | |
|
111 | user: test | |
|
112 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
113 | summary: 1.3 | |
|
114 | ||
|
115 | changeset: 5:024e4e7df376 | |
|
116 | user: test | |
|
117 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
118 | summary: 1.2 | |
|
119 | ||
|
120 | changeset: 4:5f4f3ceb285e | |
|
121 | parent: 0:5649c9d34dd8 | |
|
122 | user: test | |
|
123 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
124 | summary: 1.1 | |
|
125 | ||
|
126 | changeset: 3:ac69c658229d | |
|
127 | user: test | |
|
128 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
129 | summary: 0.3 | |
|
130 | ||
|
131 | changeset: 2:d62976ca1e50 | |
|
132 | user: test | |
|
133 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
134 | summary: 0.2 | |
|
135 | ||
|
136 | changeset: 1:10b2180f755b | |
|
137 | user: test | |
|
138 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
139 | summary: 0.1 | |
|
140 | ||
|
141 | changeset: 0:5649c9d34dd8 | |
|
142 | user: test | |
|
143 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
144 | summary: 0.0 | |
|
145 | ||
|
146 | searching for changes | |
|
147 | changeset: 4:5f4f3ceb285e | |
|
148 | parent: 0:5649c9d34dd8 | |
|
149 | user: test | |
|
150 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
151 | summary: 1.1 | |
|
152 | ||
|
153 | changeset: 5:024e4e7df376 | |
|
154 | user: test | |
|
155 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
156 | summary: 1.2 | |
|
157 | ||
|
158 | changeset: 6:1e3f6b843bd6 | |
|
159 | user: test | |
|
160 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
161 | summary: 1.3 | |
|
162 | ||
|
163 | changeset: 7:80fe151401c2 | |
|
164 | user: test | |
|
165 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
166 | summary: 1.3m | |
|
167 | ||
|
168 | changeset: 8:836ac62537ab | |
|
169 | tag: tip | |
|
170 | parent: 3:ac69c658229d | |
|
171 | user: test | |
|
172 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
173 | summary: 0.3m | |
|
174 | ||
|
175 | searching for changes | |
|
176 | changeset: 4:5f4f3ceb285e | |
|
177 | parent: 0:5649c9d34dd8 | |
|
178 | user: test | |
|
179 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
180 | summary: 1.1 | |
|
181 | ||
|
182 | changeset: 5:024e4e7df376 | |
|
183 | user: test | |
|
184 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
185 | summary: 1.2 | |
|
186 | ||
|
187 | changeset: 6:1e3f6b843bd6 | |
|
188 | user: test | |
|
189 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
190 | summary: 1.3 | |
|
191 | ||
|
192 | changeset: 7:80fe151401c2 | |
|
193 | user: test | |
|
194 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
195 | summary: 1.3m | |
|
196 | ||
|
197 | changeset: 8:836ac62537ab | |
|
198 | tag: tip | |
|
199 | parent: 3:ac69c658229d | |
|
200 | user: test | |
|
201 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
202 | summary: 0.3m | |
|
203 |
@@ -0,0 +1,72 b'' | |||
|
1 | #!/bin/sh | |
|
2 | ||
|
3 | hg init a | |
|
4 | cd a | |
|
5 | echo a > a | |
|
6 | hg ci -A -d'1 0' -m a | |
|
7 | ||
|
8 | cd .. | |
|
9 | ||
|
10 | hg init b | |
|
11 | cd b | |
|
12 | echo b > b | |
|
13 | hg ci -A -d'1 0' -m b | |
|
14 | ||
|
15 | cd .. | |
|
16 | ||
|
17 | hg clone a c | |
|
18 | cd c | |
|
19 | hg pull -f ../b | |
|
20 | HGMERGE=merge hg merge | |
|
21 | ||
|
22 | cd .. | |
|
23 | ||
|
24 | echo %% -R/--repository | |
|
25 | hg -R a tip | |
|
26 | hg --repository b tip | |
|
27 | ||
|
28 | echo %% abbrev of long option | |
|
29 | hg --repo c tip | |
|
30 | ||
|
31 | echo %% --cwd | |
|
32 | hg --cwd a parents | |
|
33 | ||
|
34 | echo %% -y/--noninteractive - just be sure it is parsed | |
|
35 | hg --cwd a tip -q --noninteractive | |
|
36 | hg --cwd a tip -q -y | |
|
37 | ||
|
38 | echo %% -q/--quiet | |
|
39 | hg -R a -q tip | |
|
40 | hg -R b -q tip | |
|
41 | hg -R c --quiet parents | |
|
42 | ||
|
43 | echo %% -v/--verbose | |
|
44 | hg --cwd c head -v | |
|
45 | hg --cwd b tip --verbose | |
|
46 | ||
|
47 | echo %% --config | |
|
48 | hg --cwd c --config paths.quuxfoo=bar paths | grep -q quuxfoo && echo quuxfoo | |
|
49 | hg --cwd c --config '' tip -q | |
|
50 | hg --cwd c --config a.b tip -q | |
|
51 | hg --cwd c --config a tip -q | |
|
52 | hg --cwd c --config a.= tip -q | |
|
53 | hg --cwd c --config .b= tip -q | |
|
54 | ||
|
55 | echo %% --debug | |
|
56 | hg --cwd c log --debug | |
|
57 | ||
|
58 | echo %% --traceback | |
|
59 | hg --cwd c --config x --traceback tip 2>&1 | grep -i 'traceback' | |
|
60 | ||
|
61 | echo %% --time | |
|
62 | hg --cwd a --time tip 2>&1 | grep '^Time:' | sed 's/[0-9][0-9]*/x/g' | |
|
63 | ||
|
64 | echo %% --version | |
|
65 | hg --version -q | sed 's/version [a-f0-9+]*/version xxx/' | |
|
66 | ||
|
67 | echo %% -h/--help | |
|
68 | hg -h | |
|
69 | hg --help | |
|
70 | ||
|
71 | echo %% not tested: --debugger | |
|
72 |
@@ -0,0 +1,205 b'' | |||
|
1 | adding a | |
|
2 | adding b | |
|
3 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
4 | pulling from ../b | |
|
5 | searching for changes | |
|
6 | warning: repository is unrelated | |
|
7 | adding changesets | |
|
8 | adding manifests | |
|
9 | adding file changes | |
|
10 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
|
11 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
|
12 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
13 | (branch merge, don't forget to commit) | |
|
14 | %% -R/--repository | |
|
15 | changeset: 0:8580ff50825a | |
|
16 | tag: tip | |
|
17 | user: test | |
|
18 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
19 | summary: a | |
|
20 | ||
|
21 | changeset: 0:b6c483daf290 | |
|
22 | tag: tip | |
|
23 | user: test | |
|
24 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
25 | summary: b | |
|
26 | ||
|
27 | %% abbrev of long option | |
|
28 | changeset: 1:b6c483daf290 | |
|
29 | tag: tip | |
|
30 | user: test | |
|
31 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
32 | summary: b | |
|
33 | ||
|
34 | %% --cwd | |
|
35 | changeset: 0:8580ff50825a | |
|
36 | tag: tip | |
|
37 | user: test | |
|
38 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
39 | summary: a | |
|
40 | ||
|
41 | %% -y/--noninteractive - just be sure it is parsed | |
|
42 | 0:8580ff50825a | |
|
43 | 0:8580ff50825a | |
|
44 | %% -q/--quiet | |
|
45 | 0:8580ff50825a | |
|
46 | 0:b6c483daf290 | |
|
47 | 0:8580ff50825a | |
|
48 | 1:b6c483daf290 | |
|
49 | %% -v/--verbose | |
|
50 | changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a | |
|
51 | tag: tip | |
|
52 | user: test | |
|
53 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
54 | files: b | |
|
55 | description: | |
|
56 | b | |
|
57 | ||
|
58 | ||
|
59 | changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab | |
|
60 | user: test | |
|
61 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
62 | files: a | |
|
63 | description: | |
|
64 | a | |
|
65 | ||
|
66 | ||
|
67 | changeset: 0:b6c483daf2907ce5825c0bb50f5716226281cc1a | |
|
68 | tag: tip | |
|
69 | user: test | |
|
70 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
71 | files: b | |
|
72 | description: | |
|
73 | b | |
|
74 | ||
|
75 | ||
|
76 | %% --config | |
|
77 | quuxfoo | |
|
78 | abort: malformed --config option: | |
|
79 | abort: malformed --config option: a.b | |
|
80 | abort: malformed --config option: a | |
|
81 | abort: malformed --config option: a.= | |
|
82 | abort: malformed --config option: .b= | |
|
83 | %% --debug | |
|
84 | changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a | |
|
85 | tag: tip | |
|
86 | parent: -1:0000000000000000000000000000000000000000 | |
|
87 | parent: -1:0000000000000000000000000000000000000000 | |
|
88 | manifest: 1:23226e7a252cacdc2d99e4fbdc3653441056de49 | |
|
89 | user: test | |
|
90 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
91 | files+: b | |
|
92 | description: | |
|
93 | b | |
|
94 | ||
|
95 | ||
|
96 | changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab | |
|
97 | parent: -1:0000000000000000000000000000000000000000 | |
|
98 | parent: -1:0000000000000000000000000000000000000000 | |
|
99 | manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 | |
|
100 | user: test | |
|
101 | date: Thu Jan 01 00:00:01 1970 +0000 | |
|
102 | files+: a | |
|
103 | description: | |
|
104 | a | |
|
105 | ||
|
106 | ||
|
107 | %% --traceback | |
|
108 | %% --time | |
|
109 | Time: real x.x secs (user x.x+x.x sys x.x+x.x) | |
|
110 | %% --version | |
|
111 | Mercurial Distributed SCM (version xxx) | |
|
112 | %% -h/--help | |
|
113 | Mercurial Distributed SCM | |
|
114 | ||
|
115 | list of commands (use "hg help -v" to show aliases and global options): | |
|
116 | ||
|
117 | add add the specified files on the next commit | |
|
118 | annotate show changeset information per file line | |
|
119 | archive create unversioned archive of a repository revision | |
|
120 | backout reverse effect of earlier changeset | |
|
121 | bundle create a changegroup file | |
|
122 | cat output the latest or given revisions of files | |
|
123 | clone make a copy of an existing repository | |
|
124 | commit commit the specified files or all outstanding changes | |
|
125 | copy mark files as copied for the next commit | |
|
126 | diff diff repository (or selected files) | |
|
127 | export dump the header and diffs for one or more changesets | |
|
128 | grep search for a pattern in specified files and revisions | |
|
129 | heads show current repository heads | |
|
130 | help show help for a given command or all commands | |
|
131 | identify print information about the working copy | |
|
132 | import import an ordered set of patches | |
|
133 | incoming show new changesets found in source | |
|
134 | init create a new repository in the given directory | |
|
135 | locate locate files matching specific patterns | |
|
136 | log show revision history of entire repository or files | |
|
137 | manifest output the latest or given revision of the project manifest | |
|
138 | merge Merge working directory with another revision | |
|
139 | outgoing show changesets not found in destination | |
|
140 | parents show the parents of the working dir or revision | |
|
141 | paths show definition of symbolic path names | |
|
142 | pull pull changes from the specified source | |
|
143 | push push changes to the specified destination | |
|
144 | recover roll back an interrupted transaction | |
|
145 | remove remove the specified files on the next commit | |
|
146 | rename rename files; equivalent of copy + remove | |
|
147 | revert revert files or dirs to their states as of some revision | |
|
148 | rollback roll back the last transaction in this repository | |
|
149 | root print the root (top) of the current working dir | |
|
150 | serve export the repository via HTTP | |
|
151 | status show changed files in the working directory | |
|
152 | tag add a tag for the current tip or a given revision | |
|
153 | tags list repository tags | |
|
154 | tip show the tip revision | |
|
155 | unbundle apply a changegroup file | |
|
156 | update update or merge working directory | |
|
157 | verify verify the integrity of the repository | |
|
158 | version output version and copyright information | |
|
159 | Mercurial Distributed SCM | |
|
160 | ||
|
161 | list of commands (use "hg help -v" to show aliases and global options): | |
|
162 | ||
|
163 | add add the specified files on the next commit | |
|
164 | annotate show changeset information per file line | |
|
165 | archive create unversioned archive of a repository revision | |
|
166 | backout reverse effect of earlier changeset | |
|
167 | bundle create a changegroup file | |
|
168 | cat output the latest or given revisions of files | |
|
169 | clone make a copy of an existing repository | |
|
170 | commit commit the specified files or all outstanding changes | |
|
171 | copy mark files as copied for the next commit | |
|
172 | diff diff repository (or selected files) | |
|
173 | export dump the header and diffs for one or more changesets | |
|
174 | grep search for a pattern in specified files and revisions | |
|
175 | heads show current repository heads | |
|
176 | help show help for a given command or all commands | |
|
177 | identify print information about the working copy | |
|
178 | import import an ordered set of patches | |
|
179 | incoming show new changesets found in source | |
|
180 | init create a new repository in the given directory | |
|
181 | locate locate files matching specific patterns | |
|
182 | log show revision history of entire repository or files | |
|
183 | manifest output the latest or given revision of the project manifest | |
|
184 | merge Merge working directory with another revision | |
|
185 | outgoing show changesets not found in destination | |
|
186 | parents show the parents of the working dir or revision | |
|
187 | paths show definition of symbolic path names | |
|
188 | pull pull changes from the specified source | |
|
189 | push push changes to the specified destination | |
|
190 | recover roll back an interrupted transaction | |
|
191 | remove remove the specified files on the next commit | |
|
192 | rename rename files; equivalent of copy + remove | |
|
193 | revert revert files or dirs to their states as of some revision | |
|
194 | rollback roll back the last transaction in this repository | |
|
195 | root print the root (top) of the current working dir | |
|
196 | serve export the repository via HTTP | |
|
197 | status show changed files in the working directory | |
|
198 | tag add a tag for the current tip or a given revision | |
|
199 | tags list repository tags | |
|
200 | tip show the tip revision | |
|
201 | unbundle apply a changegroup file | |
|
202 | update update or merge working directory | |
|
203 | verify verify the integrity of the repository | |
|
204 | version output version and copyright information | |
|
205 | %% not tested: --debugger |
@@ -0,0 +1,46 b'' | |||
|
1 | #!/bin/sh | |
|
2 | ||
|
3 | mkdir test | |
|
4 | cd test | |
|
5 | hg init | |
|
6 | for i in 0 1 2 3 4 5 6 7 8; do | |
|
7 | echo $i >> foo | |
|
8 | hg commit -A -m $i -d "1000000 0" | |
|
9 | done | |
|
10 | hg verify | |
|
11 | hg serve -p 20059 -d --pid-file=hg.pid | |
|
12 | cd .. | |
|
13 | ||
|
14 | hg init new | |
|
15 | # http incoming | |
|
16 | http_proxy= hg -R new incoming http://localhost:20059/ | |
|
17 | # local incoming | |
|
18 | hg -R new incoming test | |
|
19 | ||
|
20 | # test with --bundle | |
|
21 | http_proxy= hg -R new incoming --bundle test.hg http://localhost:20059/ | |
|
22 | hg -R new incoming --bundle test2.hg test | |
|
23 | ||
|
24 | # test the resulting bundles | |
|
25 | hg init temp | |
|
26 | hg init temp2 | |
|
27 | hg -R temp unbundle test.hg | |
|
28 | hg -R temp2 unbundle test2.hg | |
|
29 | hg -R temp tip | |
|
30 | hg -R temp2 tip | |
|
31 | ||
|
32 | rm -rf temp temp2 new | |
|
33 | ||
|
34 | # test outgoing | |
|
35 | hg clone test test-dev | |
|
36 | cd test-dev | |
|
37 | for i in 9 10 11 12 13; do | |
|
38 | echo $i >> foo | |
|
39 | hg commit -A -m $i -d "1000000 0" | |
|
40 | done | |
|
41 | hg verify | |
|
42 | cd .. | |
|
43 | hg -R test-dev outgoing test | |
|
44 | http_proxy= hg -R test-dev outgoing http://localhost:20059/ | |
|
45 | ||
|
46 | kill `cat test/hg.pid` |
@@ -0,0 +1,272 b'' | |||
|
1 | adding foo | |
|
2 | checking changesets | |
|
3 | checking manifests | |
|
4 | crosschecking files in changesets and manifests | |
|
5 | checking files | |
|
6 | 1 files, 9 changesets, 9 total revisions | |
|
7 | changeset: 0:9cb21d99fe27 | |
|
8 | user: test | |
|
9 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
10 | summary: 0 | |
|
11 | ||
|
12 | changeset: 1:d717f5dfad6a | |
|
13 | user: test | |
|
14 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
15 | summary: 1 | |
|
16 | ||
|
17 | changeset: 2:c0d6b86da426 | |
|
18 | user: test | |
|
19 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
20 | summary: 2 | |
|
21 | ||
|
22 | changeset: 3:dfacbd43b3fe | |
|
23 | user: test | |
|
24 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
25 | summary: 3 | |
|
26 | ||
|
27 | changeset: 4:1f3a964b6022 | |
|
28 | user: test | |
|
29 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
30 | summary: 4 | |
|
31 | ||
|
32 | changeset: 5:c028bcc7a28a | |
|
33 | user: test | |
|
34 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
35 | summary: 5 | |
|
36 | ||
|
37 | changeset: 6:a0c0095f3389 | |
|
38 | user: test | |
|
39 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
40 | summary: 6 | |
|
41 | ||
|
42 | changeset: 7:d4be65f4e891 | |
|
43 | user: test | |
|
44 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
45 | summary: 7 | |
|
46 | ||
|
47 | changeset: 8:92b83e334ef8 | |
|
48 | tag: tip | |
|
49 | user: test | |
|
50 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
51 | summary: 8 | |
|
52 | ||
|
53 | changeset: 0:9cb21d99fe27 | |
|
54 | user: test | |
|
55 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
56 | summary: 0 | |
|
57 | ||
|
58 | changeset: 1:d717f5dfad6a | |
|
59 | user: test | |
|
60 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
61 | summary: 1 | |
|
62 | ||
|
63 | changeset: 2:c0d6b86da426 | |
|
64 | user: test | |
|
65 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
66 | summary: 2 | |
|
67 | ||
|
68 | changeset: 3:dfacbd43b3fe | |
|
69 | user: test | |
|
70 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
71 | summary: 3 | |
|
72 | ||
|
73 | changeset: 4:1f3a964b6022 | |
|
74 | user: test | |
|
75 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
76 | summary: 4 | |
|
77 | ||
|
78 | changeset: 5:c028bcc7a28a | |
|
79 | user: test | |
|
80 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
81 | summary: 5 | |
|
82 | ||
|
83 | changeset: 6:a0c0095f3389 | |
|
84 | user: test | |
|
85 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
86 | summary: 6 | |
|
87 | ||
|
88 | changeset: 7:d4be65f4e891 | |
|
89 | user: test | |
|
90 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
91 | summary: 7 | |
|
92 | ||
|
93 | changeset: 8:92b83e334ef8 | |
|
94 | tag: tip | |
|
95 | user: test | |
|
96 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
97 | summary: 8 | |
|
98 | ||
|
99 | changeset: 0:9cb21d99fe27 | |
|
100 | user: test | |
|
101 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
102 | summary: 0 | |
|
103 | ||
|
104 | changeset: 1:d717f5dfad6a | |
|
105 | user: test | |
|
106 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
107 | summary: 1 | |
|
108 | ||
|
109 | changeset: 2:c0d6b86da426 | |
|
110 | user: test | |
|
111 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
112 | summary: 2 | |
|
113 | ||
|
114 | changeset: 3:dfacbd43b3fe | |
|
115 | user: test | |
|
116 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
117 | summary: 3 | |
|
118 | ||
|
119 | changeset: 4:1f3a964b6022 | |
|
120 | user: test | |
|
121 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
122 | summary: 4 | |
|
123 | ||
|
124 | changeset: 5:c028bcc7a28a | |
|
125 | user: test | |
|
126 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
127 | summary: 5 | |
|
128 | ||
|
129 | changeset: 6:a0c0095f3389 | |
|
130 | user: test | |
|
131 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
132 | summary: 6 | |
|
133 | ||
|
134 | changeset: 7:d4be65f4e891 | |
|
135 | user: test | |
|
136 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
137 | summary: 7 | |
|
138 | ||
|
139 | changeset: 8:92b83e334ef8 | |
|
140 | tag: tip | |
|
141 | user: test | |
|
142 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
143 | summary: 8 | |
|
144 | ||
|
145 | changeset: 0:9cb21d99fe27 | |
|
146 | user: test | |
|
147 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
148 | summary: 0 | |
|
149 | ||
|
150 | changeset: 1:d717f5dfad6a | |
|
151 | user: test | |
|
152 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
153 | summary: 1 | |
|
154 | ||
|
155 | changeset: 2:c0d6b86da426 | |
|
156 | user: test | |
|
157 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
158 | summary: 2 | |
|
159 | ||
|
160 | changeset: 3:dfacbd43b3fe | |
|
161 | user: test | |
|
162 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
163 | summary: 3 | |
|
164 | ||
|
165 | changeset: 4:1f3a964b6022 | |
|
166 | user: test | |
|
167 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
168 | summary: 4 | |
|
169 | ||
|
170 | changeset: 5:c028bcc7a28a | |
|
171 | user: test | |
|
172 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
173 | summary: 5 | |
|
174 | ||
|
175 | changeset: 6:a0c0095f3389 | |
|
176 | user: test | |
|
177 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
178 | summary: 6 | |
|
179 | ||
|
180 | changeset: 7:d4be65f4e891 | |
|
181 | user: test | |
|
182 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
183 | summary: 7 | |
|
184 | ||
|
185 | changeset: 8:92b83e334ef8 | |
|
186 | tag: tip | |
|
187 | user: test | |
|
188 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
189 | summary: 8 | |
|
190 | ||
|
191 | adding changesets | |
|
192 | adding manifests | |
|
193 | adding file changes | |
|
194 | added 9 changesets with 9 changes to 1 files | |
|
195 | (run 'hg update' to get a working copy) | |
|
196 | adding changesets | |
|
197 | adding manifests | |
|
198 | adding file changes | |
|
199 | added 9 changesets with 9 changes to 1 files | |
|
200 | (run 'hg update' to get a working copy) | |
|
201 | changeset: 8:92b83e334ef8 | |
|
202 | tag: tip | |
|
203 | user: test | |
|
204 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
205 | summary: 8 | |
|
206 | ||
|
207 | changeset: 8:92b83e334ef8 | |
|
208 | tag: tip | |
|
209 | user: test | |
|
210 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
211 | summary: 8 | |
|
212 | ||
|
213 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
214 | checking changesets | |
|
215 | checking manifests | |
|
216 | crosschecking files in changesets and manifests | |
|
217 | checking files | |
|
218 | 1 files, 14 changesets, 14 total revisions | |
|
219 | searching for changes | |
|
220 | changeset: 9:3741c3ad1096 | |
|
221 | user: test | |
|
222 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
223 | summary: 9 | |
|
224 | ||
|
225 | changeset: 10:de4143c8d9a5 | |
|
226 | user: test | |
|
227 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
228 | summary: 10 | |
|
229 | ||
|
230 | changeset: 11:0e1c188b9a7a | |
|
231 | user: test | |
|
232 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
233 | summary: 11 | |
|
234 | ||
|
235 | changeset: 12:251354d0fdd3 | |
|
236 | user: test | |
|
237 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
238 | summary: 12 | |
|
239 | ||
|
240 | changeset: 13:bdaadd969642 | |
|
241 | tag: tip | |
|
242 | user: test | |
|
243 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
244 | summary: 13 | |
|
245 | ||
|
246 | searching for changes | |
|
247 | changeset: 9:3741c3ad1096 | |
|
248 | user: test | |
|
249 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
250 | summary: 9 | |
|
251 | ||
|
252 | changeset: 10:de4143c8d9a5 | |
|
253 | user: test | |
|
254 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
255 | summary: 10 | |
|
256 | ||
|
257 | changeset: 11:0e1c188b9a7a | |
|
258 | user: test | |
|
259 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
260 | summary: 11 | |
|
261 | ||
|
262 | changeset: 12:251354d0fdd3 | |
|
263 | user: test | |
|
264 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
265 | summary: 12 | |
|
266 | ||
|
267 | changeset: 13:bdaadd969642 | |
|
268 | tag: tip | |
|
269 | user: test | |
|
270 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
271 | summary: 13 | |
|
272 |
@@ -0,0 +1,52 b'' | |||
|
1 | #!/bin/sh | |
|
2 | # | |
|
3 | # revlog.parseindex must be able to parse the index file even if | |
|
4 | # an index entry is split between two 64k blocks. The ideal test | |
|
5 | # would be to create an index file with inline data where | |
|
6 | # 64k < size < 64k + 64 (64k is the size of the read buffer, 64 is | |
|
7 | # the size of an index entry) and with an index entry starting right | |
|
8 | # before the 64k block boundary, and try to read it. | |
|
9 | # | |
|
10 | # We approximate that by reducing the read buffer to 1 byte. | |
|
11 | # | |
|
12 | ||
|
13 | hg init a | |
|
14 | cd a | |
|
15 | echo abc > foo | |
|
16 | hg add foo | |
|
17 | hg commit -m 'add foo' -d '1000000 0' | |
|
18 | ||
|
19 | echo >> foo | |
|
20 | hg commit -m 'change foo' -d '1000001 0' | |
|
21 | hg log -r 0: | |
|
22 | ||
|
23 | cat >> test.py << EOF | |
|
24 | from mercurial import changelog, util | |
|
25 | from mercurial.node import * | |
|
26 | ||
|
27 | class singlebyteread(object): | |
|
28 | def __init__(self, real): | |
|
29 | self.real = real | |
|
30 | ||
|
31 | def read(self, size=-1): | |
|
32 | if size == 65536: | |
|
33 | size = 1 | |
|
34 | return self.real.read(size) | |
|
35 | ||
|
36 | def __getattr__(self, key): | |
|
37 | return getattr(self.real, key) | |
|
38 | ||
|
39 | def opener(*args): | |
|
40 | o = util.opener(*args) | |
|
41 | def wrapper(*a): | |
|
42 | f = o(*a) | |
|
43 | return singlebyteread(f) | |
|
44 | return wrapper | |
|
45 | ||
|
46 | cl = changelog.changelog(opener('.hg')) | |
|
47 | print cl.count(), 'revisions:' | |
|
48 | for r in xrange(cl.count()): | |
|
49 | print short(cl.node(r)) | |
|
50 | EOF | |
|
51 | ||
|
52 | python test.py |
@@ -0,0 +1,14 b'' | |||
|
1 | changeset: 0:9c2cf2b35aa7 | |
|
2 | user: test | |
|
3 | date: Mon Jan 12 13:46:40 1970 +0000 | |
|
4 | summary: add foo | |
|
5 | ||
|
6 | changeset: 1:3756a9556b89 | |
|
7 | tag: tip | |
|
8 | user: test | |
|
9 | date: Mon Jan 12 13:46:41 1970 +0000 | |
|
10 | summary: change foo | |
|
11 | ||
|
12 | 2 revisions: | |
|
13 | 9c2cf2b35aa7 | |
|
14 | 3756a9556b89 |
@@ -196,6 +196,7 b' proc parsecommit {id contents listed old' | |||
|
196 | 196 | } |
|
197 | 197 | foreach line [split $contents "\n"] { |
|
198 | 198 | if {$inhdr} { |
|
199 | set line [split $line] | |
|
199 | 200 | if {$line == {}} { |
|
200 | 201 | set inhdr 0 |
|
201 | 202 | } else { |
@@ -203,11 +204,11 b' proc parsecommit {id contents listed old' | |||
|
203 | 204 | if {$tag == "author"} { |
|
204 | 205 | set x [expr {[llength $line] - 2}] |
|
205 | 206 | set audate [lindex $line $x] |
|
206 | set auname [lrange $line 1 [expr {$x - 1}]] | |
|
207 | set auname [join [lrange $line 1 [expr {$x - 1}]]] | |
|
207 | 208 | } elseif {$tag == "committer"} { |
|
208 | 209 | set x [expr {[llength $line] - 2}] |
|
209 | 210 | set comdate [lindex $line $x] |
|
210 | set comname [lrange $line 1 [expr {$x - 1}]] | |
|
211 | set comname [join [lrange $line 1 [expr {$x - 1}]]] | |
|
211 | 212 | } |
|
212 | 213 | } |
|
213 | 214 | } else { |
@@ -14,7 +14,7 b'' | |||
|
14 | 14 | </head> |
|
15 | 15 | |
|
16 | 16 | <body> |
|
17 |
<h1>Mercurial version 0. |
|
|
17 | <h1>Mercurial version 0.9 for Windows</h1> | |
|
18 | 18 | |
|
19 | 19 | <p>Welcome to Mercurial for Windows!</p> |
|
20 | 20 |
@@ -4,7 +4,7 b'' | |||
|
4 | 4 | [Setup] |
|
5 | 5 | AppCopyright=Copyright 2005, 2006 Matt Mackall and others |
|
6 | 6 | AppName=Mercurial |
|
7 |
AppVerName=Mercurial version 0. |
|
|
7 | AppVerName=Mercurial version 0.9 | |
|
8 | 8 | InfoAfterFile=contrib/win32/postinstall.txt |
|
9 | 9 | LicenseFile=COPYING |
|
10 | 10 | ShowLanguageDialog=yes |
@@ -14,10 +14,10 b' AppSupportURL=http://www.selenic.com/mer' | |||
|
14 | 14 | AppUpdatesURL=http://www.selenic.com/mercurial |
|
15 | 15 | AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3} |
|
16 | 16 | AppContact=mercurial@selenic.com |
|
17 |
OutputBaseFilename=Mercurial-0. |
|
|
17 | OutputBaseFilename=Mercurial-0.9 | |
|
18 | 18 | DefaultDirName={sd}\Mercurial |
|
19 | 19 | SourceDir=C:\hg\hg-release |
|
20 |
VersionInfoVersion=0. |
|
|
20 | VersionInfoVersion=0.9 | |
|
21 | 21 | VersionInfoDescription=Mercurial distributed SCM |
|
22 | 22 | VersionInfoCopyright=Copyright 2005, 2006 Matt Mackall and others |
|
23 | 23 | VersionInfoCompany=Matt Mackall and others |
@@ -4,10 +4,47 b' Welcome to Mercurial for Windows!' | |||
|
4 | 4 | For configuration and usage directions, please read the ReadMe.html |
|
5 | 5 | file that comes with this package. |
|
6 | 6 | |
|
7 | ||
|
8 | 7 | Release Notes |
|
9 | 8 | ------------- |
|
10 | 9 | |
|
10 | 2006-05-10 v0.9 | |
|
11 | ||
|
12 | * Major changes between Mercurial 0.8.1 and 0.9: | |
|
13 | ||
|
14 | - The repository file format has been improved. | |
|
15 | - This has resulted in an average 40% reduction in disk space usage. | |
|
16 | - The new format (called RevlogNG) is now the default. | |
|
17 | - Mercurial works perfectly with both the old and new repository | |
|
18 | file formats. It can transfer changes transparently between | |
|
19 | repositories of either format. | |
|
20 | - To use the new repository format, simply use `hg clone --pull` to | |
|
21 | clone an existing repository. | |
|
22 | - Note: Versions 0.8.1 and earlier of Mercurial cannot read | |
|
23 | RevlogNG repositories directly, but they can `clone`, `pull` | |
|
24 | from, and `push` to servers that are serving RevlogNG | |
|
25 | repositories. | |
|
26 | - Memory usage has been improved by over 50% for many common operations. | |
|
27 | - Substantial performance improvements on large repositories. | |
|
28 | - New commands: | |
|
29 | - 'archive' - generate a directory tree snapshot, tarball, or zip | |
|
30 | file of a revision | |
|
31 | - Deprecated commands: | |
|
32 | - 'addremove' - replaced by 'add' and 'remove --after' | |
|
33 | - 'forget' - replaced by 'revert' | |
|
34 | - 'undo' - replaced by 'rollback' | |
|
35 | - New extensions: | |
|
36 | - Bugzilla integration hook | |
|
37 | - Email notification hook | |
|
38 | - Nested repositories are now supported. Mercurial will not recurse | |
|
39 | into a subdirectory that contains a '.hg' directory. It is treated | |
|
40 | as a separate repository. | |
|
41 | - The standalone web server, 'hg serve', is now threaded, so it can | |
|
42 | talk to multiple clients at a time. | |
|
43 | - The web server can now display a "message of the day". | |
|
44 | - Support added for hooks written in Python. | |
|
45 | - Many improvements and clarifications to built-in help. | |
|
46 | ||
|
47 | ||
|
11 | 48 | 2006-04-07 v0.8.1 |
|
12 | 49 | |
|
13 | 50 | * Major changes from 0.8 to 0.8.1: |
@@ -135,6 +135,20 b' email::' | |||
|
135 | 135 | from;; |
|
136 | 136 | Optional. Email address to use in "From" header and SMTP envelope |
|
137 | 137 | of outgoing messages. |
|
138 | method;; | |
|
139 | Optional. Method to use to send email messages. If value is | |
|
140 | "smtp" (default), use SMTP (see section "[mail]" for | |
|
141 | configuration). Otherwise, use as name of program to run that | |
|
142 | acts like sendmail (takes "-f" option for sender, list of | |
|
143 | recipients on command line, message on stdin). Normally, setting | |
|
144 | this to "sendmail" or "/usr/sbin/sendmail" is enough to use | |
|
145 | sendmail to send messages. | |
|
146 | ||
|
147 | Email example: | |
|
148 | ||
|
149 | [email] | |
|
150 | from = Joseph User <joe.user@example.com> | |
|
151 | method = /usr/sbin/sendmail | |
|
138 | 152 | |
|
139 | 153 | extensions:: |
|
140 | 154 | Mercurial has an extension mechanism for adding new features. To |
@@ -219,15 +233,24 b' hooks::' | |||
|
219 | 233 | commit to proceed. Non-zero status will cause the transaction to |
|
220 | 234 | be rolled back. ID of changeset is in $HG_NODE. Parent changeset |
|
221 | 235 | IDs are in $HG_PARENT1 and $HG_PARENT2. |
|
236 | preupdate;; | |
|
237 | Run before updating the working directory. Exit status 0 allows | |
|
238 | the update to proceed. Non-zero status will prevent the update. | |
|
239 | Changeset ID of first new parent is in $HG_PARENT1. If merge, ID | |
|
240 | of second new parent is in $HG_PARENT2. | |
|
222 | 241 | tag;; |
|
223 | 242 | Run after a tag is created. ID of tagged changeset is in |
|
224 | 243 | $HG_NODE. Name of tag is in $HG_TAG. Tag is local if |
|
225 | 244 | $HG_LOCAL=1, in repo if $HG_LOCAL=0. |
|
245 | update;; | |
|
246 | Run after updating the working directory. Changeset ID of first | |
|
247 | new parent is in $HG_PARENT1. If merge, ID of second new parent | |
|
248 | is in $HG_PARENT2. If update succeeded, $HG_ERROR=0. If update | |
|
249 | failed (e.g. because conflicts not resolved), $HG_ERROR=1. | |
|
226 | 250 | |
|
227 |
In earlier releases, the names of hook environment variables |
|
|
228 |
have a "HG_" prefix. The |
|
|
229 | the environment for backwards compatibility, but their use is | |
|
230 | deprecated, and they will be removed in a future release. | |
|
251 | Note: In earlier releases, the names of hook environment variables | |
|
252 | did not have a "HG_" prefix. The old unprefixed names are no longer | |
|
253 | provided in the environment. | |
|
231 | 254 | |
|
232 | 255 | The syntax for Python hooks is as follows: |
|
233 | 256 | |
@@ -279,7 +302,15 b' smtp::' | |||
|
279 | 302 | paths:: |
|
280 | 303 | Assigns symbolic names to repositories. The left side is the |
|
281 | 304 | symbolic name, and the right gives the directory or URL that is the |
|
282 | location of the repository. | |
|
305 | location of the repository. Default paths can be declared by | |
|
306 | setting the following entries. | |
|
307 | default;; | |
|
308 | Directory or URL to use when pulling if no source is specified. | |
|
309 | Default is set to repository from which the current repository | |
|
310 | was cloned. | |
|
311 | default-push;; | |
|
312 | Optional. Directory or URL to use when pushing if no destination | |
|
313 | is specified. | |
|
283 | 314 | |
|
284 | 315 | ui:: |
|
285 | 316 | User interface controls. |
@@ -281,7 +281,8 b' class queue:' | |||
|
281 | 281 | message = '\n'.join(message) |
|
282 | 282 | |
|
283 | 283 | try: |
|
284 | f = os.popen("patch -p1 --no-backup-if-mismatch < '%s'" % (pf)) | |
|
284 | pp = util.find_in_path('gpatch', os.environ.get('PATH', ''), 'patch') | |
|
285 | f = os.popen("%s -p1 --no-backup-if-mismatch < '%s'" % (pp, pf)) | |
|
285 | 286 | except: |
|
286 | 287 | self.ui.warn("patch failed, unable to continue (try -v)\n") |
|
287 | 288 | err = 1 |
@@ -228,14 +228,13 b' class notifier(object):' | |||
|
228 | 228 | mail = self.ui.sendmail() |
|
229 | 229 | mail.sendmail(templater.email(msg['From']), self.subs, msgtext) |
|
230 | 230 | |
|
231 | def diff(self, node): | |
|
231 | def diff(self, node, ref): | |
|
232 | 232 | maxdiff = int(self.ui.config('notify', 'maxdiff', 300)) |
|
233 | 233 | if maxdiff == 0: |
|
234 | 234 | return |
|
235 | 235 | fp = templater.stringio() |
|
236 | 236 | prev = self.repo.changelog.parents(node)[0] |
|
237 | commands.dodiff(fp, self.ui, self.repo, prev, | |
|
238 | self.repo.changelog.tip()) | |
|
237 | commands.dodiff(fp, self.ui, self.repo, prev, ref) | |
|
239 | 238 | difflines = fp.getvalue().splitlines(1) |
|
240 | 239 | if maxdiff > 0 and len(difflines) > maxdiff: |
|
241 | 240 | self.sio.write(_('\ndiffs (truncated from %d to %d lines):\n\n') % |
@@ -260,8 +259,9 b' def hook(ui, repo, hooktype, node=None, ' | |||
|
260 | 259 | count = end - start |
|
261 | 260 | for rev in xrange(start, end): |
|
262 | 261 | n.node(repo.changelog.node(rev)) |
|
262 | n.diff(node, repo.changelog.tip()) | |
|
263 | 263 | else: |
|
264 | 264 | count = 1 |
|
265 | 265 | n.node(node) |
|
266 | n.diff(node) | |
|
266 | n.diff(node, node) | |
|
267 | 267 | n.send(node, count) |
@@ -254,8 +254,6 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
254 | 254 | else: |
|
255 | 255 | ui.status('Sending ', m['Subject'], ' ...\n') |
|
256 | 256 | mail.sendmail(sender, to + cc, m.as_string(0)) |
|
257 | if not opts['test'] and not opts['mbox']: | |
|
258 | mail.close() | |
|
259 | 257 | |
|
260 | 258 | cmdtable = { |
|
261 | 259 | 'email': |
@@ -13,7 +13,7 b' of the GNU General Public License, incor' | |||
|
13 | 13 | from node import * |
|
14 | 14 | from i18n import gettext as _ |
|
15 | 15 | from demandload import demandload |
|
16 | demandload(globals(), "changegroup util os struct") | |
|
16 | demandload(globals(), "changegroup util os struct bz2 tempfile") | |
|
17 | 17 | |
|
18 | 18 | import localrepo, changelog, manifest, filelog, revlog |
|
19 | 19 | |
@@ -50,7 +50,7 b' class bundlerevlog(revlog.revlog):' | |||
|
50 | 50 | continue |
|
51 | 51 | for p in (p1, p2): |
|
52 | 52 | if not p in self.nodemap: |
|
53 | raise RevlogError(_("unknown parent %s") % short(p1)) | |
|
53 | raise revlog.RevlogError(_("unknown parent %s") % short(p1)) | |
|
54 | 54 | if linkmapper is None: |
|
55 | 55 | link = n |
|
56 | 56 | else: |
@@ -76,12 +76,12 b' class bundlerevlog(revlog.revlog):' | |||
|
76 | 76 | return False |
|
77 | 77 | return rev in self.basemap |
|
78 | 78 | def bundlebase(self, rev): return self.basemap[rev] |
|
79 | def chunk(self, rev, df=None): | |
|
79 | def chunk(self, rev, df=None, cachelen=4096): | |
|
80 | 80 | # Warning: in case of bundle, the diff is against bundlebase, |
|
81 | 81 | # not against rev - 1 |
|
82 | 82 | # XXX: could use some caching |
|
83 | 83 | if not self.bundle(rev): |
|
84 | return revlog.revlog.chunk(self, rev) | |
|
84 | return revlog.revlog.chunk(self, rev, df, cachelen) | |
|
85 | 85 | self.bundlefile.seek(self.start(rev)) |
|
86 | 86 | return self.bundlefile.read(self.length(rev)) |
|
87 | 87 | |
@@ -123,8 +123,8 b' class bundlerevlog(revlog.revlog):' | |||
|
123 | 123 | |
|
124 | 124 | p1, p2 = self.parents(node) |
|
125 | 125 | if node != revlog.hash(text, p1, p2): |
|
126 | raise RevlogError(_("integrity check failed on %s:%d") | |
|
127 | % (self.datafile, self.rev(node))) | |
|
126 | raise revlog.RevlogError(_("integrity check failed on %s:%d") | |
|
127 | % (self.datafile, self.rev(node))) | |
|
128 | 128 | |
|
129 | 129 | self.cache = (node, self.rev(node), text) |
|
130 | 130 | return text |
@@ -159,19 +159,38 b' class bundlefilelog(bundlerevlog, filelo' | |||
|
159 | 159 | class bundlerepository(localrepo.localrepository): |
|
160 | 160 | def __init__(self, ui, path, bundlename): |
|
161 | 161 | localrepo.localrepository.__init__(self, ui, path) |
|
162 | f = open(bundlename, "rb") | |
|
163 | s = util.fstat(f) | |
|
164 | self.bundlefile = f | |
|
162 | self.tempfile = None | |
|
163 | self.bundlefile = open(bundlename, "rb") | |
|
165 | 164 | header = self.bundlefile.read(6) |
|
166 | 165 | if not header.startswith("HG"): |
|
167 | 166 | raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename) |
|
168 | 167 | elif not header.startswith("HG10"): |
|
169 | 168 | raise util.Abort(_("%s: unknown bundle version") % bundlename) |
|
170 | 169 | elif header == "HG10BZ": |
|
171 | raise util.Abort(_("%s: compressed bundle not supported") | |
|
172 |
|
|
|
170 | fdtemp, temp = tempfile.mkstemp(prefix="hg-bundle-", | |
|
171 | suffix=".hg10un", dir=self.path) | |
|
172 | self.tempfile = temp | |
|
173 | fptemp = os.fdopen(fdtemp, 'wb') | |
|
174 | def generator(f): | |
|
175 | zd = bz2.BZ2Decompressor() | |
|
176 | zd.decompress("BZ") | |
|
177 | for chunk in f: | |
|
178 | yield zd.decompress(chunk) | |
|
179 | gen = generator(util.filechunkiter(self.bundlefile, 4096)) | |
|
180 | ||
|
181 | try: | |
|
182 | fptemp.write("HG10UN") | |
|
183 | for chunk in gen: | |
|
184 | fptemp.write(chunk) | |
|
185 | finally: | |
|
186 | fptemp.close() | |
|
187 | self.bundlefile.close() | |
|
188 | ||
|
189 | self.bundlefile = open(self.tempfile, "rb") | |
|
190 | # seek right after the header | |
|
191 | self.bundlefile.seek(6) | |
|
173 | 192 | elif header == "HG10UN": |
|
174 | # uncompressed bundle supported | |
|
193 | # nothing to do | |
|
175 | 194 | pass |
|
176 | 195 | else: |
|
177 | 196 | raise util.Abort(_("%s: unknown bundle compression type") |
@@ -205,3 +224,9 b' class bundlerepository(localrepo.localre' | |||
|
205 | 224 | def close(self): |
|
206 | 225 | """Close assigned bundle file immediately.""" |
|
207 | 226 | self.bundlefile.close() |
|
227 | ||
|
228 | def __del__(self): | |
|
229 | if not self.bundlefile.closed: | |
|
230 | self.bundlefile.close() | |
|
231 | if self.tempfile is not None: | |
|
232 | os.unlink(self.tempfile) |
@@ -756,13 +756,20 b' def archive(ui, repo, dest, **opts):' | |||
|
756 | 756 | def backout(ui, repo, rev, **opts): |
|
757 | 757 | '''reverse effect of earlier changeset |
|
758 | 758 | |
|
759 | Commit the backed out changes as a new changeset. | |
|
759 | Commit the backed out changes as a new changeset. The new | |
|
760 | changeset is a child of the backed out changeset. | |
|
760 | 761 | |
|
761 | 762 | If you back out a changeset other than the tip, a new head is |
|
762 |
created. Th |
|
|
763 | directory before starting the backout, then merges the new head | |
|
764 | with it afterwards, to save you from doing this by hand. The | |
|
765 | result of this merge is not committed, as for a normal merge.''' | |
|
763 | created. This head is the parent of the working directory. If | |
|
764 | you back out an old changeset, your working directory will appear | |
|
765 | old after the backout. You should merge the backout changeset | |
|
766 | with another head. | |
|
767 | ||
|
768 | The --merge option remembers the parent of the working directory | |
|
769 | before starting the backout, then merges the new head with that | |
|
770 | changeset afterwards. This saves you from doing the merge by | |
|
771 | hand. The result of this merge is not committed, as for a normal | |
|
772 | merge.''' | |
|
766 | 773 | |
|
767 | 774 | bail_if_changed(repo) |
|
768 | 775 | op1, op2 = repo.dirstate.parents() |
@@ -782,6 +789,7 b' def backout(ui, repo, rev, **opts):' | |||
|
782 | 789 | commit_opts['addremove'] = False |
|
783 | 790 | if not commit_opts['message'] and not commit_opts['logfile']: |
|
784 | 791 | commit_opts['message'] = _("Backed out changeset %s") % (hex(node)) |
|
792 | commit_opts['force_editor'] = True | |
|
785 | 793 | commit(ui, repo, **commit_opts) |
|
786 | 794 | def nice(node): |
|
787 | 795 | return '%d:%s' % (repo.changelog.rev(node), short(node)) |
@@ -789,7 +797,7 b' def backout(ui, repo, rev, **opts):' | |||
|
789 | 797 | (nice(repo.changelog.tip()), nice(node))) |
|
790 | 798 | if opts['merge'] and op1 != node: |
|
791 | 799 | ui.status(_('merging with changeset %s\n') % nice(op1)) |
|
792 | update(ui, repo, hex(op1), **opts) | |
|
800 | doupdate(ui, repo, hex(op1), **opts) | |
|
793 | 801 | |
|
794 | 802 | def bundle(ui, repo, fname, dest="default-push", **opts): |
|
795 | 803 | """create a changegroup file |
@@ -939,7 +947,7 b' def clone(ui, source, dest=None, **opts)' | |||
|
939 | 947 | f.close() |
|
940 | 948 | |
|
941 | 949 | if not opts['noupdate']: |
|
942 | update(repo.ui, repo) | |
|
950 | doupdate(repo.ui, repo) | |
|
943 | 951 | |
|
944 | 952 | d.close() |
|
945 | 953 | |
@@ -980,7 +988,8 b' def commit(ui, repo, *pats, **opts):' | |||
|
980 | 988 | else: |
|
981 | 989 | files = [] |
|
982 | 990 | try: |
|
983 |
repo.commit(files, message, opts['user'], opts['date'], match |
|
|
991 | repo.commit(files, message, opts['user'], opts['date'], match, | |
|
992 | force_editor=opts.get('force_editor')) | |
|
984 | 993 | except ValueError, inst: |
|
985 | 994 | raise util.Abort(str(inst)) |
|
986 | 995 | |
@@ -1296,10 +1305,11 b' def debugindexdot(ui, file_):' | |||
|
1296 | 1305 | r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0) |
|
1297 | 1306 | ui.write("digraph G {\n") |
|
1298 | 1307 | for i in range(r.count()): |
|
1299 |
e = r. |
|
|
1300 | ui.write("\t%d -> %d\n" % (r.rev(e[4]), i)) | |
|
1301 | if e[5] != nullid: | |
|
1302 | ui.write("\t%d -> %d\n" % (r.rev(e[5]), i)) | |
|
1308 | node = r.node(i) | |
|
1309 | pp = r.parents(node) | |
|
1310 | ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i)) | |
|
1311 | if pp[1] != nullid: | |
|
1312 | ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i)) | |
|
1303 | 1313 | ui.write("}\n") |
|
1304 | 1314 | |
|
1305 | 1315 | def debugrename(ui, repo, file, rev=None): |
@@ -1947,7 +1957,7 b' def merge(ui, repo, node=None, **opts):' | |||
|
1947 | 1957 | marked as changed for the next commit and a commit must be |
|
1948 | 1958 | performed before any further updates are allowed. |
|
1949 | 1959 | """ |
|
1950 | return update(ui, repo, node=node, merge=True, **opts) | |
|
1960 | return doupdate(ui, repo, node=node, merge=True, **opts) | |
|
1951 | 1961 | |
|
1952 | 1962 | def outgoing(ui, repo, dest="default-push", **opts): |
|
1953 | 1963 | """show changesets not found in destination |
@@ -2026,7 +2036,7 b' def postincoming(ui, repo, modheads, opt' | |||
|
2026 | 2036 | return |
|
2027 | 2037 | if optupdate: |
|
2028 | 2038 | if modheads == 1: |
|
2029 | return update(ui, repo) | |
|
2039 | return doupdate(ui, repo) | |
|
2030 | 2040 | else: |
|
2031 | 2041 | ui.status(_("not updating, since new heads added\n")) |
|
2032 | 2042 | if modheads > 1: |
@@ -2268,6 +2278,7 b' def revert(ui, repo, *pats, **opts):' | |||
|
2268 | 2278 | 'you must specify the revision to revert to')) |
|
2269 | 2279 | else: |
|
2270 | 2280 | node = parent |
|
2281 | pmf = None | |
|
2271 | 2282 | mf = repo.manifest.read(repo.changelog.read(node)[0]) |
|
2272 | 2283 | |
|
2273 | 2284 | wlock = repo.wlock() |
@@ -2350,7 +2361,12 b' def revert(ui, repo, *pats, **opts):' | |||
|
2350 | 2361 | if exact: ui.warn(_('no changes needed to %s\n' % rel)) |
|
2351 | 2362 | continue |
|
2352 | 2363 | if not in_mf: |
|
2353 | handle(remove, False) | |
|
2364 | if pmf is None: | |
|
2365 | # only need parent manifest in this unlikely case, | |
|
2366 | # so do not read by default | |
|
2367 | pmf = repo.manifest.read(repo.changelog.read(parent)[0]) | |
|
2368 | if abs in pmf: | |
|
2369 | handle(remove, False) | |
|
2354 | 2370 | update[abs] = True |
|
2355 | 2371 | |
|
2356 | 2372 | repo.dirstate.forget(forget[0]) |
@@ -2725,15 +2741,19 b' def update(ui, repo, node=None, merge=Fa' | |||
|
2725 | 2741 | there is a linear relationship between the current version and the |
|
2726 | 2742 | requested version, the result is the requested version. |
|
2727 | 2743 | |
|
2728 | Otherwise the result is a merge between the contents of the | |
|
2729 | current working directory and the requested version. Files that | |
|
2730 | changed between either parent are marked as changed for the next | |
|
2731 | commit and a commit must be performed before any further updates | |
|
2732 | are allowed. | |
|
2744 | To merge the working directory with another revision, use the | |
|
2745 | merge command. | |
|
2733 | 2746 | |
|
2734 | 2747 | By default, update will refuse to run if doing so would require |
|
2735 | 2748 | merging or discarding local changes. |
|
2736 | 2749 | """ |
|
2750 | if merge: | |
|
2751 | ui.warn(_('(the -m/--merge option is deprecated; ' | |
|
2752 | 'use the merge command instead)\n')) | |
|
2753 | return doupdate(ui, repo, node, merge, clean, force, branch, **opts) | |
|
2754 | ||
|
2755 | def doupdate(ui, repo, node=None, merge=False, clean=False, force=None, | |
|
2756 | branch=None, **opts): | |
|
2737 | 2757 | if branch: |
|
2738 | 2758 | br = repo.branchlookup(branch=branch) |
|
2739 | 2759 | found = [] |
@@ -3100,7 +3120,7 b' table = {' | |||
|
3100 | 3120 | "^update|up|checkout|co": |
|
3101 | 3121 | (update, |
|
3102 | 3122 | [('b', 'branch', '', _('checkout the head of a specific branch')), |
|
3103 | ('m', 'merge', None, _('allow merging of branches')), | |
|
3123 | ('m', 'merge', None, _('allow merging of branches (DEPRECATED)')), | |
|
3104 | 3124 | ('C', 'clean', None, _('overwrite locally modified files')), |
|
3105 | 3125 | ('f', 'force', None, _('force a merge with outstanding changes'))], |
|
3106 | 3126 | _('hg update [-b TAG] [-m] [-C] [-f] [REV]')), |
@@ -3116,6 +3136,7 b' globalopts = [' | |||
|
3116 | 3136 | _('do not prompt, assume \'yes\' for any required answers')), |
|
3117 | 3137 | ('q', 'quiet', None, _('suppress output')), |
|
3118 | 3138 | ('v', 'verbose', None, _('enable additional output')), |
|
3139 | ('', 'config', [], _('set/override config option')), | |
|
3119 | 3140 | ('', 'debug', None, _('enable debugging output')), |
|
3120 | 3141 | ('', 'debugger', None, _('start debugger')), |
|
3121 | 3142 | ('', 'traceback', None, _('print traceback on exception')), |
@@ -3280,7 +3301,8 b' def dispatch(args):' | |||
|
3280 | 3301 | atexit.register(print_time) |
|
3281 | 3302 | |
|
3282 | 3303 | u.updateopts(options["verbose"], options["debug"], options["quiet"], |
|
3283 |
not options["noninteractive"], options["traceback"] |
|
|
3304 | not options["noninteractive"], options["traceback"], | |
|
3305 | options["config"]) | |
|
3284 | 3306 | |
|
3285 | 3307 | # enter the debugger before command execution |
|
3286 | 3308 | if options['debugger']: |
@@ -684,7 +684,7 b' class hgweb(object):' | |||
|
684 | 684 | mf = self.repo.manifest.read(cs[0]) |
|
685 | 685 | |
|
686 | 686 | def diff(**map): |
|
687 | yield self.diff(p1, n, file) | |
|
687 | yield self.diff(p1, n, [file]) | |
|
688 | 688 | |
|
689 | 689 | yield self.t("filediff", |
|
690 | 690 | file=file, |
@@ -11,6 +11,25 b' from i18n import gettext as _' | |||
|
11 | 11 | from demandload import * |
|
12 | 12 | demandload(globals(), "hg os urllib urllib2 urlparse zlib util httplib") |
|
13 | 13 | |
|
14 | class passwordmgr(urllib2.HTTPPasswordMgr): | |
|
15 | def __init__(self, ui): | |
|
16 | urllib2.HTTPPasswordMgr.__init__(self) | |
|
17 | self.ui = ui | |
|
18 | ||
|
19 | def find_user_password(self, realm, authuri): | |
|
20 | authinfo = urllib2.HTTPPasswordMgr.find_user_password( | |
|
21 | self, realm, authuri) | |
|
22 | if authinfo != (None, None): | |
|
23 | return authinfo | |
|
24 | ||
|
25 | self.ui.write(_("http authorization required\n")) | |
|
26 | self.ui.status(_("realm: %s\n") % realm) | |
|
27 | user = self.ui.prompt(_("user:"), default=None) | |
|
28 | passwd = self.ui.getpass() | |
|
29 | ||
|
30 | self.add_password(realm, authuri, user, passwd) | |
|
31 | return (user, passwd) | |
|
32 | ||
|
14 | 33 | class httprepository(remoterepository): |
|
15 | 34 | def __init__(self, ui, path): |
|
16 | 35 | # fix missing / after hostname |
@@ -53,13 +72,21 b' class httprepository(remoterepository):' | |||
|
53 | 72 | if host and not no_proxy: |
|
54 | 73 | proxy_handler = urllib2.ProxyHandler({"http" : "http://" + host}) |
|
55 | 74 | |
|
56 | authinfo = None | |
|
75 | proxyauthinfo = None | |
|
57 | 76 | if user and passwd: |
|
58 | 77 | passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm() |
|
59 | 78 | passmgr.add_password(None, host, user, passwd) |
|
60 | authinfo = urllib2.ProxyBasicAuthHandler(passmgr) | |
|
79 | proxyauthinfo = urllib2.ProxyBasicAuthHandler(passmgr) | |
|
61 | 80 | |
|
62 | opener = urllib2.build_opener(proxy_handler, authinfo) | |
|
81 | if ui.interactive: | |
|
82 | passmgr = passwordmgr(ui) | |
|
83 | opener = urllib2.build_opener( | |
|
84 | proxy_handler, proxyauthinfo, | |
|
85 | urllib2.HTTPBasicAuthHandler(passmgr), | |
|
86 | urllib2.HTTPDigestAuthHandler(passmgr)) | |
|
87 | else: | |
|
88 | opener = urllib2.build_opener(proxy_handler, proxyauthinfo) | |
|
89 | ||
|
63 | 90 | # 1.0 here is the _protocol_ version |
|
64 | 91 | opener.addheaders = [('User-agent', 'mercurial/proto-1.0')] |
|
65 | 92 | urllib2.install_opener(opener) |
@@ -76,7 +103,10 b' class httprepository(remoterepository):' | |||
|
76 | 103 | q.update(args) |
|
77 | 104 | qs = urllib.urlencode(q) |
|
78 | 105 | cu = "%s?%s" % (self.url, qs) |
|
79 | resp = urllib2.urlopen(cu) | |
|
106 | try: | |
|
107 | resp = urllib2.urlopen(cu) | |
|
108 | except httplib.HTTPException, inst: | |
|
109 | raise IOError(None, _('http error while sending %s command') % cmd) | |
|
80 | 110 | proto = resp.headers['content-type'] |
|
81 | 111 | |
|
82 | 112 | # accept old "text/plain" and "application/hg-changegroup" for now |
@@ -136,8 +136,7 b' class localrepository(object):' | |||
|
136 | 136 | |
|
137 | 137 | def runhook(name, cmd): |
|
138 | 138 | self.ui.note(_("running hook %s: %s\n") % (name, cmd)) |
|
139 |
env = dict([('HG_' + k.upper(), v) for k, v in args.iteritems()] |
|
|
140 | [(k.upper(), v) for k, v in args.iteritems()]) | |
|
139 | env = dict([('HG_' + k.upper(), v) for k, v in args.iteritems()]) | |
|
141 | 140 | r = util.system(cmd, environ=env, cwd=self.root) |
|
142 | 141 | if r: |
|
143 | 142 | desc, r = util.explain_exit(r) |
@@ -446,7 +445,8 b' class localrepository(object):' | |||
|
446 | 445 | self.dirstate.setparents(n, nullid) |
|
447 | 446 | |
|
448 | 447 | def commit(self, files=None, text="", user=None, date=None, |
|
449 |
match=util.always, force=False, lock=None, wlock=None |
|
|
448 | match=util.always, force=False, lock=None, wlock=None, | |
|
449 | force_editor=False): | |
|
450 | 450 | commit = [] |
|
451 | 451 | remove = [] |
|
452 | 452 | changed = [] |
@@ -535,8 +535,11 b' class localrepository(object):' | |||
|
535 | 535 | new.sort() |
|
536 | 536 | |
|
537 | 537 | user = user or self.ui.username() |
|
538 | if not text: | |
|
539 |
edittext = [ |
|
|
538 | if not text or force_editor: | |
|
539 | edittext = [] | |
|
540 | if text: | |
|
541 | edittext.append(text) | |
|
542 | edittext.append("") | |
|
540 | 543 | if p2 != nullid: |
|
541 | 544 | edittext.append("HG: branch merge") |
|
542 | 545 | edittext.extend(["HG: changed %s" % f for f in changed]) |
@@ -1544,8 +1547,9 b' class localrepository(object):' | |||
|
1544 | 1547 | " with %d changes to %d files%s\n") |
|
1545 | 1548 | % (changesets, revisions, files, heads)) |
|
1546 | 1549 | |
|
1547 | self.hook('pretxnchangegroup', throw=True, | |
|
1548 | node=hex(self.changelog.node(cor+1)), source=srctype) | |
|
1550 | if changesets > 0: | |
|
1551 | self.hook('pretxnchangegroup', throw=True, | |
|
1552 | node=hex(self.changelog.node(cor+1)), source=srctype) | |
|
1549 | 1553 | |
|
1550 | 1554 | tr.close() |
|
1551 | 1555 | |
@@ -1563,8 +1567,7 b' class localrepository(object):' | |||
|
1563 | 1567 | moddirstate=True, forcemerge=False, wlock=None, show_stats=True): |
|
1564 | 1568 | pl = self.dirstate.parents() |
|
1565 | 1569 | if not force and pl[1] != nullid: |
|
1566 |
sel |
|
|
1567 | return 1 | |
|
1570 | raise util.Abort(_("outstanding uncommitted merges")) | |
|
1568 | 1571 | |
|
1569 | 1572 | err = False |
|
1570 | 1573 | |
@@ -1592,6 +1595,7 b' class localrepository(object):' | |||
|
1592 | 1595 | if allow and not forcemerge: |
|
1593 | 1596 | if modified or added or removed: |
|
1594 | 1597 | raise util.Abort(_("outstanding uncommitted changes")) |
|
1598 | ||
|
1595 | 1599 | if not forcemerge and not force: |
|
1596 | 1600 | for f in unknown: |
|
1597 | 1601 | if f in m2: |
@@ -1765,6 +1769,13 b' class localrepository(object):' | |||
|
1765 | 1769 | return 1 |
|
1766 | 1770 | branch_merge = True |
|
1767 | 1771 | |
|
1772 | xp1 = hex(p1) | |
|
1773 | xp2 = hex(p2) | |
|
1774 | if p2 == nullid: xxp2 = '' | |
|
1775 | else: xxp2 = xp2 | |
|
1776 | ||
|
1777 | self.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2) | |
|
1778 | ||
|
1768 | 1779 | # get the files we don't need to change |
|
1769 | 1780 | files = get.keys() |
|
1770 | 1781 | files.sort() |
@@ -1785,8 +1796,6 b' class localrepository(object):' | |||
|
1785 | 1796 | failedmerge = [] |
|
1786 | 1797 | files = merge.keys() |
|
1787 | 1798 | files.sort() |
|
1788 | xp1 = hex(p1) | |
|
1789 | xp2 = hex(p2) | |
|
1790 | 1799 | for f in files: |
|
1791 | 1800 | self.ui.status(_("merging %s\n") % f) |
|
1792 | 1801 | my, other, flag = merge[f] |
@@ -1850,6 +1859,7 b' class localrepository(object):' | |||
|
1850 | 1859 | self.ui.status(_("There are unresolved merges with" |
|
1851 | 1860 | " locally modified files.\n")) |
|
1852 | 1861 | |
|
1862 | self.hook('update', parent1=xp1, parent2=xxp2, error=int(err)) | |
|
1853 | 1863 | return err |
|
1854 | 1864 | |
|
1855 | 1865 | def merge3(self, fn, my, other, p1, p2): |
@@ -376,12 +376,7 b' class revlog(object):' | |||
|
376 | 376 | self.index = lazyindex(parser) |
|
377 | 377 | self.nodemap = lazymap(parser) |
|
378 | 378 | else: |
|
379 |
i |
|
|
380 | self.parseindex(i) | |
|
381 | if self.inlinedata(): | |
|
382 | # we've already got the entire data file read in, save it | |
|
383 | # in the chunk data | |
|
384 | self.chunkcache = (0, i) | |
|
379 | self.parseindex(f, st) | |
|
385 | 380 | if self.version != REVLOGV0: |
|
386 | 381 | e = list(self.index[0]) |
|
387 | 382 | type = self.ngtype(e[0]) |
@@ -392,22 +387,47 b' class revlog(object):' | |||
|
392 | 387 | self.index = [] |
|
393 | 388 | |
|
394 | 389 | |
|
395 |
def parseindex(self, |
|
|
390 | def parseindex(self, fp, st): | |
|
396 | 391 | s = struct.calcsize(self.indexformat) |
|
397 | l = len(data) | |
|
398 | 392 | self.index = [] |
|
399 | 393 | self.nodemap = {nullid: -1} |
|
400 | 394 | inline = self.inlinedata() |
|
401 | off = 0 | |
|
402 | 395 | n = 0 |
|
403 | while off < l: | |
|
404 | e = struct.unpack(self.indexformat, data[off:off + s]) | |
|
405 | self.index.append(e) | |
|
406 | self.nodemap[e[-1]] = n | |
|
407 |
|
|
|
408 | off += s | |
|
409 | if inline: | |
|
410 | off += e[1] | |
|
396 | leftover = None | |
|
397 | while True: | |
|
398 | if st: | |
|
399 | data = fp.read(65536) | |
|
400 | else: | |
|
401 | # hack for httprangereader, it doesn't do partial reads well | |
|
402 | data = fp.read() | |
|
403 | if not data: | |
|
404 | break | |
|
405 | if n == 0 and self.inlinedata(): | |
|
406 | # cache the first chunk | |
|
407 | self.chunkcache = (0, data) | |
|
408 | if leftover: | |
|
409 | data = leftover + data | |
|
410 | leftover = None | |
|
411 | off = 0 | |
|
412 | l = len(data) | |
|
413 | while off < l: | |
|
414 | if l - off < s: | |
|
415 | leftover = data[off:] | |
|
416 | break | |
|
417 | cur = data[off:off + s] | |
|
418 | off += s | |
|
419 | e = struct.unpack(self.indexformat, cur) | |
|
420 | self.index.append(e) | |
|
421 | self.nodemap[e[-1]] = n | |
|
422 | n += 1 | |
|
423 | if inline: | |
|
424 | off += e[1] | |
|
425 | if off > l: | |
|
426 | # some things don't seek well, just read it | |
|
427 | fp.read(off - l) | |
|
428 | if not st: | |
|
429 | break | |
|
430 | ||
|
411 | 431 | |
|
412 | 432 | def ngoffset(self, q): |
|
413 | 433 | if q & 0xFFFF: |
@@ -1117,7 +1137,7 b' class revlog(object):' | |||
|
1117 | 1137 | |
|
1118 | 1138 | for p in (p1, p2): |
|
1119 | 1139 | if not p in self.nodemap: |
|
1120 |
raise RevlogError(_("unknown parent %s") % short(p |
|
|
1140 | raise RevlogError(_("unknown parent %s") % short(p)) | |
|
1121 | 1141 | |
|
1122 | 1142 | if not chain: |
|
1123 | 1143 | # retrieve the parent revision of the delta chain |
@@ -8,7 +8,8 b'' | |||
|
8 | 8 | import ConfigParser |
|
9 | 9 | from i18n import gettext as _ |
|
10 | 10 | from demandload import * |
|
11 |
demandload(globals(), "errno os re smtplib socket sys tempfile |
|
|
11 | demandload(globals(), "errno getpass os re smtplib socket sys tempfile") | |
|
12 | demandload(globals(), "templater util") | |
|
12 | 13 | |
|
13 | 14 | class ui(object): |
|
14 | 15 | def __init__(self, verbose=False, debug=False, quiet=False, |
@@ -46,12 +47,23 b' class ui(object):' | |||
|
46 | 47 | return getattr(self.parentui, key) |
|
47 | 48 | |
|
48 | 49 | def updateopts(self, verbose=False, debug=False, quiet=False, |
|
49 | interactive=True, traceback=False): | |
|
50 | interactive=True, traceback=False, config=[]): | |
|
50 | 51 | self.quiet = (self.quiet or quiet) and not verbose and not debug |
|
51 | 52 | self.verbose = (self.verbose or verbose) or debug |
|
52 | 53 | self.debugflag = (self.debugflag or debug) |
|
53 | 54 | self.interactive = (self.interactive and interactive) |
|
54 | 55 | self.traceback = self.traceback or traceback |
|
56 | for cfg in config: | |
|
57 | try: | |
|
58 | name, value = cfg.split('=', 1) | |
|
59 | section, name = name.split('.', 1) | |
|
60 | if not self.cdata.has_section(section): | |
|
61 | self.cdata.add_section(section) | |
|
62 | if not section or not name: | |
|
63 | raise IndexError | |
|
64 | self.cdata.set(section, name, value) | |
|
65 | except (IndexError, ValueError): | |
|
66 | raise util.Abort(_('malformed --config option: %s') % cfg) | |
|
55 | 67 | |
|
56 | 68 | def readconfig(self, fn, root=None): |
|
57 | 69 | if isinstance(fn, basestring): |
@@ -224,15 +236,18 b' class ui(object):' | |||
|
224 | 236 | |
|
225 | 237 | def readline(self): |
|
226 | 238 | return sys.stdin.readline()[:-1] |
|
227 | def prompt(self, msg, pat, default="y"): | |
|
239 | def prompt(self, msg, pat=None, default="y"): | |
|
228 | 240 | if not self.interactive: return default |
|
229 | 241 | while 1: |
|
230 | 242 | self.write(msg, " ") |
|
231 | 243 | r = self.readline() |
|
232 | if re.match(pat, r): | |
|
244 | if not pat or re.match(pat, r): | |
|
233 | 245 | return r |
|
234 | 246 | else: |
|
235 | 247 | self.write(_("unrecognized response\n")) |
|
248 | def getpass(self, prompt=None, default=None): | |
|
249 | if not self.interactive: return default | |
|
250 | return getpass.getpass(prompt or _('password: ')) | |
|
236 | 251 | def status(self, *msg): |
|
237 | 252 | if not self.quiet: self.write(*msg) |
|
238 | 253 | def warn(self, *msg): |
@@ -267,15 +282,56 b' class ui(object):' | |||
|
267 | 282 | return t |
|
268 | 283 | |
|
269 | 284 | def sendmail(self): |
|
270 | s = smtplib.SMTP() | |
|
271 | s.connect(host = self.config('smtp', 'host', 'mail'), | |
|
272 | port = int(self.config('smtp', 'port', 25))) | |
|
273 | if self.configbool('smtp', 'tls'): | |
|
274 | s.ehlo() | |
|
275 | s.starttls() | |
|
276 |
s. |
|
|
277 |
|
|
|
278 | password = self.config('smtp', 'password') | |
|
279 | if username and password: | |
|
280 | s.login(username, password) | |
|
281 | return s | |
|
285 | '''send mail message. object returned has one method, sendmail. | |
|
286 | call as sendmail(sender, list-of-recipients, msg).''' | |
|
287 | ||
|
288 | def smtp(): | |
|
289 | '''send mail using smtp.''' | |
|
290 | ||
|
291 | s = smtplib.SMTP() | |
|
292 | mailhost = self.config('smtp', 'host') | |
|
293 | if not mailhost: | |
|
294 | raise util.Abort(_('no [smtp]host in hgrc - cannot send mail')) | |
|
295 | mailport = int(self.config('smtp', 'port', 25)) | |
|
296 | self.note(_('sending mail: smtp host %s, port %s\n') % | |
|
297 | (mailhost, mailport)) | |
|
298 | s.connect(host=mailhost, port=mailport) | |
|
299 | if self.configbool('smtp', 'tls'): | |
|
300 | self.note(_('(using tls)\n')) | |
|
301 | s.ehlo() | |
|
302 | s.starttls() | |
|
303 | s.ehlo() | |
|
304 | username = self.config('smtp', 'username') | |
|
305 | password = self.config('smtp', 'password') | |
|
306 | if username and password: | |
|
307 | self.note(_('(authenticating to mail server as %s)\n') % | |
|
308 | (username)) | |
|
309 | s.login(username, password) | |
|
310 | return s | |
|
311 | ||
|
312 | class sendmail(object): | |
|
313 | '''send mail using sendmail.''' | |
|
314 | ||
|
315 | def __init__(self, ui, program): | |
|
316 | self.ui = ui | |
|
317 | self.program = program | |
|
318 | ||
|
319 | def sendmail(self, sender, recipients, msg): | |
|
320 | cmdline = '%s -f %s %s' % ( | |
|
321 | self.program, templater.email(sender), | |
|
322 | ' '.join(map(templater.email, recipients))) | |
|
323 | self.ui.note(_('sending mail: %s\n') % cmdline) | |
|
324 | fp = os.popen(cmdline, 'w') | |
|
325 | fp.write(msg) | |
|
326 | ret = fp.close() | |
|
327 | if ret: | |
|
328 | raise util.Abort('%s %s' % ( | |
|
329 | os.path.basename(self.program.split(None, 1)[0]), | |
|
330 | util.explain_exit(ret)[0])) | |
|
331 | ||
|
332 | method = self.config('email', 'method', 'smtp') | |
|
333 | if method == 'smtp': | |
|
334 | mail = smtp() | |
|
335 | else: | |
|
336 | mail = sendmail(self, method) | |
|
337 | return mail |
@@ -205,13 +205,15 b' def canonpath(root, cwd, myname):' | |||
|
205 | 205 | """return the canonical path of myname, given cwd and root""" |
|
206 | 206 | if root == os.sep: |
|
207 | 207 | rootsep = os.sep |
|
208 | elif root.endswith(os.sep): | |
|
209 | rootsep = root | |
|
208 | 210 | else: |
|
209 | 211 | rootsep = root + os.sep |
|
210 | 212 | name = myname |
|
211 | 213 | if not os.path.isabs(name): |
|
212 | 214 | name = os.path.join(root, cwd, name) |
|
213 | 215 | name = os.path.normpath(name) |
|
214 | if name.startswith(rootsep): | |
|
216 | if name != rootsep and name.startswith(rootsep): | |
|
215 | 217 | name = name[len(rootsep):] |
|
216 | 218 | audit_path(name) |
|
217 | 219 | return pconvert(name) |
@@ -533,8 +535,16 b" if os.name == 'nt':" | |||
|
533 | 535 | |
|
534 | 536 | def os_rcpath(): |
|
535 | 537 | '''return default os-specific hgrc search path''' |
|
536 | return system_rcpath() + [os.path.join(os.path.expanduser('~'), | |
|
537 | 'mercurial.ini')] | |
|
538 | path = system_rcpath() | |
|
539 | path.append(user_rcpath()) | |
|
540 | userprofile = os.environ.get('USERPROFILE') | |
|
541 | if userprofile: | |
|
542 | path.append(os.path.join(userprofile, 'mercurial.ini')) | |
|
543 | return path | |
|
544 | ||
|
545 | def user_rcpath(): | |
|
546 | '''return os-specific hgrc search path to the user dir''' | |
|
547 | return os.path.join(os.path.expanduser('~'), 'mercurial.ini') | |
|
538 | 548 | |
|
539 | 549 | def parse_patch_output(output_line): |
|
540 | 550 | """parses the output produced by patch and returns the file name""" |
@@ -597,7 +607,8 b' else:' | |||
|
597 | 607 | def os_rcpath(): |
|
598 | 608 | '''return default os-specific hgrc search path''' |
|
599 | 609 | path = [] |
|
600 | if len(sys.argv) > 0: | |
|
610 | # old mod_python does not set sys.argv | |
|
611 | if len(getattr(sys, 'argv', [])) > 0: | |
|
601 | 612 | path.extend(rcfiles(os.path.dirname(sys.argv[0]) + |
|
602 | 613 | '/../etc/mercurial')) |
|
603 | 614 | path.extend(rcfiles('/etc/mercurial')) |
@@ -16,7 +16,7 b' import win32api' | |||
|
16 | 16 | from demandload import * |
|
17 | 17 | from i18n import gettext as _ |
|
18 | 18 | demandload(globals(), 'errno os pywintypes win32con win32file win32process') |
|
19 | demandload(globals(), 'cStringIO winerror') | |
|
19 | demandload(globals(), 'cStringIO win32com.shell:shell,shellcon winerror') | |
|
20 | 20 | |
|
21 | 21 | class WinError: |
|
22 | 22 | winerror_map = { |
@@ -180,9 +180,24 b' def testpid(pid):' | |||
|
180 | 180 | def system_rcpath_win32(): |
|
181 | 181 | '''return default os-specific hgrc search path''' |
|
182 | 182 | proc = win32api.GetCurrentProcess() |
|
183 | filename = win32process.GetModuleFileNameEx(proc, 0) | |
|
183 | try: | |
|
184 | # This will fail on windows < NT | |
|
185 | filename = win32process.GetModuleFileNameEx(proc, 0) | |
|
186 | except: | |
|
187 | filename = win32api.GetModuleFileName(0) | |
|
184 | 188 | return [os.path.join(os.path.dirname(filename), 'mercurial.ini')] |
|
185 | 189 | |
|
190 | def user_rcpath(): | |
|
191 | '''return os-specific hgrc search path to the user dir''' | |
|
192 | userdir = os.path.expanduser('~') | |
|
193 | if userdir == '~': | |
|
194 | # We are on win < nt: fetch the APPDATA directory location and use | |
|
195 | # the parent directory as the user home dir. | |
|
196 | appdir = shell.SHGetPathFromIDList( | |
|
197 | qshell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_APPDATA)) | |
|
198 | userdir = os.path.dirname(appdir) | |
|
199 | return os.path.join(userdir, 'mercurial.ini') | |
|
200 | ||
|
186 | 201 | class posixfile_nt(object): |
|
187 | 202 | '''file object with posix-like semantics. on windows, normal |
|
188 | 203 | files can not be deleted or renamed if they are open. must open |
@@ -16,10 +16,10 b' test-<x>.err.' | |||
|
16 | 16 | There are some tricky points here that you should be aware of when |
|
17 | 17 | writing tests: |
|
18 | 18 | |
|
19 |
- hg commit and hg |
|
|
19 | - hg commit and hg merge want user interaction | |
|
20 | 20 | |
|
21 | 21 | for commit use -m "text" |
|
22 |
for hg |
|
|
22 | for hg merge, set HGMERGE to something noninteractive (like true or merge) | |
|
23 | 23 | |
|
24 | 24 | - changeset hashes will change based on user and date which make |
|
25 | 25 | things like hg history output change |
@@ -242,24 +242,28 b' PYTHONDIR = os.path.join(INST, "lib", "p' | |||
|
242 | 242 | COVERAGE_FILE = os.path.join(TESTDIR, ".coverage") |
|
243 | 243 | |
|
244 | 244 | try: |
|
245 | install_hg() | |
|
245 | try: | |
|
246 | install_hg() | |
|
246 | 247 | |
|
247 | tests = 0 | |
|
248 | failed = 0 | |
|
248 | tests = 0 | |
|
249 | failed = 0 | |
|
249 | 250 | |
|
250 | if len(args) == 0: | |
|
251 | args = os.listdir(".") | |
|
252 | for test in args: | |
|
253 | if test.startswith("test-"): | |
|
254 | if '~' in test or re.search(r'\.(out|err)$', test): | |
|
255 | continue | |
|
256 | if not run_one(test): | |
|
257 | failed += 1 | |
|
258 | tests += 1 | |
|
251 | if len(args) == 0: | |
|
252 | args = os.listdir(".") | |
|
253 | for test in args: | |
|
254 | if test.startswith("test-"): | |
|
255 | if '~' in test or re.search(r'\.(out|err)$', test): | |
|
256 | continue | |
|
257 | if not run_one(test): | |
|
258 | failed += 1 | |
|
259 | tests += 1 | |
|
259 | 260 | |
|
260 | print "\n# Ran %d tests, %d failed." % (tests, failed) | |
|
261 | if coverage: | |
|
262 | output_coverage() | |
|
261 | print "\n# Ran %d tests, %d failed." % (tests, failed) | |
|
262 | if coverage: | |
|
263 | output_coverage() | |
|
264 | except KeyboardInterrupt: | |
|
265 | failed = True | |
|
266 | print "\ninterrupted!" | |
|
263 | 267 | finally: |
|
264 | 268 | cleanup_exit() |
|
265 | 269 |
@@ -1,19 +1,19 b'' | |||
|
1 | 1 | # basic operation |
|
2 | 2 | adding a |
|
3 |
changeset 2: |
|
|
3 | changeset 2:c86754337410 backs out changeset 1:a820f4f40a57 | |
|
4 | 4 | a |
|
5 | 5 | # file that was removed is recreated |
|
6 | 6 | adding a |
|
7 | 7 | adding a |
|
8 |
changeset 2: |
|
|
8 | changeset 2:d2d961bd79f2 backs out changeset 1:76862dcce372 | |
|
9 | 9 | content |
|
10 | 10 | # backout of backout is as if nothing happened |
|
11 | 11 | removing a |
|
12 |
changeset 3: |
|
|
12 | changeset 3:8a7eeb5ab5ce backs out changeset 2:d2d961bd79f2 | |
|
13 | 13 | cat: a: No such file or directory |
|
14 | 14 | # backout with merge |
|
15 | 15 | adding a |
|
16 |
changeset 3: |
|
|
16 | changeset 3:3c9e845b409c backs out changeset 1:314f55b1bf23 | |
|
17 | 17 | merging with changeset 2:b66ea5b77abb |
|
18 | 18 | merging a |
|
19 | 19 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
@@ -10,7 +10,7 b' hg co 0' | |||
|
10 | 10 | echo "something else" > a |
|
11 | 11 | hg commit -m branch2 -d "1000000 0" |
|
12 | 12 | HGMERGE=merge; export HGMERGE |
|
13 |
hg |
|
|
13 | hg merge 1 | |
|
14 | 14 | hg id |
|
15 | 15 | egrep -v ">>>|<<<" a |
|
16 | 16 | hg status |
@@ -28,7 +28,7 b' hg co -C 0' | |||
|
28 | 28 | echo foo-b > a |
|
29 | 29 | hg commit -m "2b" -d "1000000 0" |
|
30 | 30 | |
|
31 |
HGMERGE=true hg |
|
|
31 | HGMERGE=true hg merge 1 | |
|
32 | 32 | |
|
33 | 33 | echo "%%% should show foo-b" |
|
34 | 34 | cat a |
@@ -17,12 +17,12 b' hg co 0' | |||
|
17 | 17 | echo blah > b |
|
18 | 18 | |
|
19 | 19 | hg ci -m "branch b" -d "1000000 0" |
|
20 |
HGMERGE=true hg |
|
|
20 | HGMERGE=true hg merge 1 | |
|
21 | 21 | |
|
22 | 22 | hg ci -m "merge b/a -> blah" -d "1000000 0" |
|
23 | 23 | |
|
24 | 24 | hg co 1 |
|
25 |
HGMERGE=true hg |
|
|
25 | HGMERGE=true hg merge 2 | |
|
26 | 26 | hg ci -m "merge a/b -> blah" -d "1000000 0" |
|
27 | 27 | |
|
28 | 28 | hg log |
@@ -43,4 +43,4 b' echo' | |||
|
43 | 43 | |
|
44 | 44 | hg debugindex .hg/data/a.i |
|
45 | 45 | |
|
46 | hg verify No newline at end of file | |
|
46 | hg verify |
@@ -41,7 +41,7 b' hg debugstate | cut -b 1-16,35-' | |||
|
41 | 41 | |
|
42 | 42 | echo merging |
|
43 | 43 | hg pull ../a |
|
44 |
env HGMERGE=../merge hg |
|
|
44 | env HGMERGE=../merge hg merge -v | |
|
45 | 45 | |
|
46 | 46 | echo 2m > foo |
|
47 | 47 | echo 2b > baz |
@@ -27,7 +27,7 b' hg pull ../test2' | |||
|
27 | 27 | hg heads |
|
28 | 28 | hg history |
|
29 | 29 | |
|
30 |
hg -v |
|
|
30 | hg -v merge | |
|
31 | 31 | |
|
32 | 32 | ls -l ../test[12]/a > foo |
|
33 | 33 | cut -b 1-10 < foo |
@@ -29,7 +29,7 b' hg update -C 0' | |||
|
29 | 29 | echo b > b |
|
30 | 30 | hg add b |
|
31 | 31 | hg commit -m b -d '1 0' |
|
32 | hg update -m 1 | |
|
32 | hg merge 1 | |
|
33 | 33 | hg commit -m merge -d '2 0' |
|
34 | 34 | |
|
35 | 35 | cd ../b |
@@ -61,6 +61,14 b" echo 'precommit.forbid = echo precommit." | |||
|
61 | 61 | hg commit -m 'fail' -d '4 0' |
|
62 | 62 | hg -q tip |
|
63 | 63 | |
|
64 | # preupdate hook can prevent update | |
|
65 | echo 'preupdate = echo preupdate hook: p1=$HG_PARENT1 p2=$HG_PARENT2' >> .hg/hgrc | |
|
66 | hg update 1 | |
|
67 | ||
|
68 | # update hook | |
|
69 | echo 'update = echo update hook: p1=$HG_PARENT1 p2=$HG_PARENT2 err=$HG_ERROR' >> .hg/hgrc | |
|
70 | hg update | |
|
71 | ||
|
64 | 72 | # prechangegroup hook can prevent incoming changes |
|
65 | 73 | cd ../b |
|
66 | 74 | hg -q tip |
@@ -62,6 +62,11 b' precommit hook: p1=4f92e785b90ae8995dfe1' | |||
|
62 | 62 | precommit.forbid hook |
|
63 | 63 | abort: precommit.forbid hook exited with status 1 |
|
64 | 64 | 4:4f92e785b90a |
|
65 | preupdate hook: p1=b702efe9688826e3a91283852b328b84dbf37bc2 p2= | |
|
66 | 0 files updated, 0 files merged, 2 files removed, 0 files unresolved | |
|
67 | preupdate hook: p1=4f92e785b90ae8995dfe156e39dd4fbc3b346a24 p2= | |
|
68 | update hook: p1=4f92e785b90ae8995dfe156e39dd4fbc3b346a24 p2= err=0 | |
|
69 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
65 | 70 | 3:4c52fb2e4022 |
|
66 | 71 | prechangegroup.forbid hook |
|
67 | 72 | pulling from ../a |
@@ -22,7 +22,7 b' hg add c' | |||
|
22 | 22 | hg commit -m "commit #2" -d "1000000 0" |
|
23 | 23 | echo This is file b1 > b |
|
24 | 24 | echo %% no merges expected |
|
25 |
env HGMERGE=../merge hg |
|
|
25 | env HGMERGE=../merge hg merge 1 | |
|
26 | 26 | cd ..; /bin/rm -rf t |
|
27 | 27 | |
|
28 | 28 | mkdir t |
@@ -41,9 +41,9 b' hg add c' | |||
|
41 | 41 | hg commit -m "commit #2" -d "1000000 0" |
|
42 | 42 | echo This is file b2 > b |
|
43 | 43 | echo %% merge should fail |
|
44 |
env HGMERGE=../merge hg |
|
|
44 | env HGMERGE=../merge hg merge 1 | |
|
45 | 45 | echo %% merge of b expected |
|
46 |
env HGMERGE=../merge hg |
|
|
46 | env HGMERGE=../merge hg merge -f 1 | |
|
47 | 47 | cd ..; /bin/rm -rf t |
|
48 | 48 | echo %% |
|
49 | 49 | |
@@ -68,9 +68,9 b' cat b' | |||
|
68 | 68 | |
|
69 | 69 | echo This is file b22 > b |
|
70 | 70 | echo %% merge fails |
|
71 |
env HGMERGE=../merge hg |
|
|
71 | env HGMERGE=../merge hg merge 2 | |
|
72 | 72 | echo %% merge expected! |
|
73 |
env HGMERGE=../merge hg |
|
|
73 | env HGMERGE=../merge hg merge -f 2 | |
|
74 | 74 | cd ..; /bin/rm -rf t |
|
75 | 75 | |
|
76 | 76 | mkdir t |
@@ -90,7 +90,7 b' hg add c' | |||
|
90 | 90 | hg commit -m "commit #3" -d "1000000 0" |
|
91 | 91 | echo This is file b33 > b |
|
92 | 92 | echo %% merge of b should fail |
|
93 |
env HGMERGE=../merge hg |
|
|
93 | env HGMERGE=../merge hg merge 2 | |
|
94 | 94 | echo %% merge of b expected |
|
95 |
env HGMERGE=../merge hg |
|
|
95 | env HGMERGE=../merge hg merge -f 2 | |
|
96 | 96 | cd ..; /bin/rm -rf t |
@@ -11,7 +11,7 b' hg update 0' | |||
|
11 | 11 | echo This is file c1 > c |
|
12 | 12 | hg add c |
|
13 | 13 | hg commit -m "commit #2" -d "1000000 0" |
|
14 | hg update -m 1 | |
|
14 | hg merge 1 | |
|
15 | 15 | rm b |
|
16 | 16 | echo This is file c22 > c |
|
17 | 17 | hg commit -m "commit #3" -d "1000000 0" |
@@ -33,14 +33,14 b' hg clone B1 B2' | |||
|
33 | 33 | |
|
34 | 34 | cd A1 |
|
35 | 35 | hg pull ../B1 |
|
36 | hg update -m | |
|
36 | hg merge | |
|
37 | 37 | hg commit -m "commit test" -d "1000000 0" |
|
38 | 38 | echo bar should remain deleted. |
|
39 | 39 | hg manifest |
|
40 | 40 | |
|
41 | 41 | cd ../B2 |
|
42 | 42 | hg pull ../A2 |
|
43 | hg update -m | |
|
43 | hg merge | |
|
44 | 44 | hg commit -m "commit test" -d "1000000 0" |
|
45 | 45 | echo bar should remain deleted. |
|
46 | 46 | hg manifest |
@@ -35,7 +35,7 b' hg commit -m "2 -> 2.5" -d "1000000 0"' | |||
|
35 | 35 | |
|
36 | 36 | # now pull and merge from test-a |
|
37 | 37 | hg pull ../test-a |
|
38 |
HGMERGE=merge hg |
|
|
38 | HGMERGE=merge hg merge | |
|
39 | 39 | # resolve conflict |
|
40 | 40 | cat >test.txt <<"EOF" |
|
41 | 41 | one |
@@ -57,7 +57,7 b' hg commit -m "two -> two-point-one" -d "' | |||
|
57 | 57 | # pull and merge from test-a again |
|
58 | 58 | cd ../test-b |
|
59 | 59 | hg pull ../test-a |
|
60 |
HGMERGE=merge hg |
|
|
60 | HGMERGE=merge hg merge --debug | |
|
61 | 61 | |
|
62 | 62 | cat test.txt | sed "s% .*%%" |
|
63 | 63 |
@@ -22,7 +22,7 b' added 1 changesets with 1 changes to 1 f' | |||
|
22 | 22 | (run 'hg heads' to see heads, 'hg merge' to merge) |
|
23 | 23 | merge: warning: conflicts during merge |
|
24 | 24 | resolving manifests |
|
25 |
force |
|
|
25 | force False allow True moddirstate True linear False | |
|
26 | 26 | ancestor 055d847dd401 local 2eded9ab0a5c remote 84cf5750dd20 |
|
27 | 27 | test.txt versions differ, resolve |
|
28 | 28 | merging test.txt |
@@ -23,7 +23,7 b' hg commit -m "3" -d "1000000 0"' | |||
|
23 | 23 | hg push ../a |
|
24 | 24 | hg pull ../a |
|
25 | 25 | hg push ../a |
|
26 | hg up -m | |
|
26 | hg merge | |
|
27 | 27 | hg commit -m "4" -d "1000000 0" |
|
28 | 28 | hg push ../a |
|
29 | 29 | cd .. |
@@ -44,7 +44,7 b' for i in 0 1; do' | |||
|
44 | 44 | hg ci -m d-$i -d "1000000 0" |
|
45 | 45 | done |
|
46 | 46 | |
|
47 |
HGMERGE=true hg |
|
|
47 | HGMERGE=true hg merge 3 | |
|
48 | 48 | hg ci -m c-d -d "1000000 0" |
|
49 | 49 | |
|
50 | 50 | hg push ../c |
@@ -68,4 +68,16 b' hg revert' | |||
|
68 | 68 | echo %% should print executable |
|
69 | 69 | test -x c && echo executable |
|
70 | 70 | |
|
71 | echo %% issue 241 | |
|
72 | hg init a | |
|
73 | cd a | |
|
74 | echo a >> a | |
|
75 | hg commit -A -d '1 0' -m a | |
|
76 | echo a >> a | |
|
77 | hg commit -d '2 0' -m a | |
|
78 | hg update 0 | |
|
79 | mkdir b | |
|
80 | echo b > b/b | |
|
81 | hg revert -rtip | |
|
82 | ||
|
71 | 83 | true |
@@ -51,3 +51,6 b' non-executable' | |||
|
51 | 51 | reverting c |
|
52 | 52 | %% should print executable |
|
53 | 53 | executable |
|
54 | %% issue 241 | |
|
55 | adding a | |
|
56 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
@@ -14,4 +14,4 b" echo 'stationary' >>b/vehicle" | |||
|
14 | 14 | "$HG" commit -m 'Clarifying the vehicle.' |
|
15 | 15 | "$HG" update -C 1 |
|
16 | 16 | chmod a-w b/vehicle |
|
17 |
"$HG" |
|
|
17 | "$HG" merge 2 2>&1 | sed 's|^\(.*[ ]\).*/\([^/]*/[^/]*/[^/]*\)$|\1\2|g' |
@@ -27,7 +27,7 b' echo 1 > b' | |||
|
27 | 27 | hg add b |
|
28 | 28 | hg commit -m "branch" -d "1000000 0" |
|
29 | 29 | hg id |
|
30 |
hg |
|
|
30 | hg merge 1 | |
|
31 | 31 | hg id |
|
32 | 32 | hg status |
|
33 | 33 |
@@ -29,7 +29,7 b' hg --debug up' | |||
|
29 | 29 | hg parents |
|
30 | 30 | hg --debug up 0 |
|
31 | 31 | hg parents |
|
32 |
hg --debug |
|
|
32 | hg --debug merge || echo failed | |
|
33 | 33 | hg parents |
|
34 | 34 | hg --debug up |
|
35 | 35 | hg parents |
@@ -50,8 +50,8 b' hg -q pull ../r1' | |||
|
50 | 50 | hg status |
|
51 | 51 | hg parents |
|
52 | 52 | hg --debug up || echo failed |
|
53 |
hg --debug |
|
|
54 |
hg --debug |
|
|
53 | hg --debug merge || echo failed | |
|
54 | hg --debug merge -f | |
|
55 | 55 | hg parents |
|
56 | 56 | hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \ |
|
57 | 57 | -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" |
@@ -112,7 +112,7 b' failed' | |||
|
112 | 112 | abort: outstanding uncommitted changes |
|
113 | 113 | failed |
|
114 | 114 | resolving manifests |
|
115 |
force |
|
|
115 | force False allow True moddirstate True linear False | |
|
116 | 116 | ancestor a0c8bcbbb45c local 1165e8bd193e remote 4096f2872392 |
|
117 | 117 | a versions differ, resolve |
|
118 | 118 | b versions differ, resolve |
General Comments 0
You need to be logged in to leave comments.
Login now