0
|
1 Load extension:
|
|
2
|
|
3 $ echo "[extensions]" >> $HGRCPATH
|
|
4 $ echo "onsub = $TESTDIR/onsub.py" >> $HGRCPATH
|
|
5
|
|
6 Check help formatting:
|
|
7
|
|
8 $ hg help onsub
|
|
9 hg onsub [-b] [-0] CMD
|
|
10
|
|
11 execute a command in each subrepository
|
|
12
|
|
13 The command is executed with the current working directory set to the root
|
|
14 of each subrepository. By default, execution stops if the command returns
|
|
15 a non-zero exit code. Use --ignore-errors to override this.
|
|
16
|
|
17 Use --verbose/-v to print the name of each subrepo before the command is
|
|
18 executed, use --print0/-0 to terminate this line with a NUL character
|
|
19 instead of a newline. This can for instance be useful in combination with
|
|
20 "hg status --print0".
|
|
21
|
|
22 The command has access to the following environment variables:
|
|
23
|
|
24 "HG_REPO":
|
|
25 Absolute path to the top-level repository in which the onsub command
|
|
26 was executed.
|
|
27
|
|
28 "HG_SUBPATH":
|
|
29 Relative path to the current subrepository from the top-level
|
|
30 repository.
|
|
31
|
|
32 "HG_SUBURL":
|
|
33 URL for the current subrepository as specified in the containing
|
|
34 repository's ".hgsub" file.
|
|
35
|
|
36 "HG_SUBSTATE":
|
|
37 State of the current subrepository as specified in the containing
|
|
38 repository's ".hgsubstate" file.
|
|
39
|
|
40 options:
|
|
41
|
|
42 -b --breadth-first use breadth-first traversal
|
|
43 -0 --print0 end subrepository names with NUL, for use with xargs
|
|
44
|
|
45 use "hg -v help onsub" to show global options
|
|
46
|
|
47 Create some nicely nested subrepositories:
|
|
48
|
|
49 $ hg init
|
|
50 $ for d in a b; do hg init $d; echo "$d = $d" >> .hgsub; done
|
|
51 $ hg add .hgsub
|
|
52
|
|
53 $ cd a
|
|
54
|
|
55 $ for d in x y; do hg init $d; echo "$d = $d" >> .hgsub; done
|
|
56 $ hg add .hgsub
|
|
57
|
|
58 $ cd y
|
|
59 $ for d in r s t; do hg init $d; echo "$d = $d" >> .hgsub; done
|
|
60 $ hg add .hgsub
|
|
61 $ cd ..
|
|
62
|
|
63 $ cd ..
|
|
64
|
|
65 $ cd b
|
|
66 $ for d in u v; do hg init $d; echo "$d = $d" >> .hgsub; done
|
|
67 $ hg add .hgsub
|
|
68 $ cd ..
|
|
69
|
|
70 $ hg commit -m init
|
|
71 committing subrepository a
|
|
72 committing subrepository a/x
|
|
73 committing subrepository a/y
|
|
74 committing subrepository a/y/r
|
|
75 committing subrepository a/y/s
|
|
76 committing subrepository a/y/t
|
|
77 committing subrepository b
|
|
78 committing subrepository b/u
|
|
79 committing subrepository b/v
|
|
80
|
|
81 The default depth-first traversal:
|
|
82
|
|
83 $ hg onsub 'echo $HG_SUBPATH'
|
|
84 a
|
|
85 a/x
|
|
86 a/y
|
|
87 a/y/r
|
|
88 a/y/s
|
|
89 a/y/t
|
|
90 b
|
|
91 b/u
|
|
92 b/v
|
|
93
|
|
94 Breadth-first traversal:
|
|
95
|
|
96 $ hg onsub 'echo $HG_SUBPATH' --breadth-first
|
|
97 a
|
|
98 b
|
|
99 a/x
|
|
100 a/y
|
|
101 b/u
|
|
102 b/v
|
|
103 a/y/r
|
|
104 a/y/s
|
|
105 a/y/t
|
|
106
|
|
107 Test aborting:
|
|
108
|
|
109 $ hg onsub -v 'test $HG_SUBPATH != "a/y/r"'
|
|
110 executing 'test $HG_SUBPATH != "a/y/r"' in a
|
|
111 executing 'test $HG_SUBPATH != "a/y/r"' in a/x
|
|
112 executing 'test $HG_SUBPATH != "a/y/r"' in a/y
|
|
113 executing 'test $HG_SUBPATH != "a/y/r"' in a/y/r
|
|
114 abort: terminated onsub in a/y/r: test exited with status 1
|
|
115
|
|
116 Test --print0:
|
|
117
|
|
118 $ mv a 'with spaces'
|
|
119 $ echo 'with spaces = with spaces' > .hgsub
|
|
120 $ echo 'b = b' >> .hgsub
|
|
121 $ hg commit -m rename
|
|
122 committing subrepository with spaces
|
|
123 $ hg onsub -0 | xargs -n 1 -0
|
|
124 b
|
|
125 b/u
|
|
126 b/v
|
|
127 with spaces
|
|
128 with spaces/x
|
|
129 with spaces/y
|
|
130 with spaces/y/r
|
|
131 with spaces/y/s
|
|
132 with spaces/y/t
|