Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,218 b'' | |||||
|
1 | #!/usr/bin/env python | |||
|
2 | ||||
|
3 | """\ | |||
|
4 | Reorder a revlog (by default the the manifest file in the current | |||
|
5 | repository) to save space. Specifically, this topologically sorts the | |||
|
6 | revisions in the revlog so that revisions on the same branch are adjacent | |||
|
7 | as much as possible. This is a workaround for the fact that Mercurial | |||
|
8 | computes deltas relative to the previous revision rather than relative to a | |||
|
9 | parent revision. This is *not* safe to run on a changelog. | |||
|
10 | """ | |||
|
11 | ||||
|
12 | # Originally written by Benoit Boissinot <benoit.boissinot at ens-lyon.org> | |||
|
13 | # as a patch to rewrite-log. Cleaned up, refactored, documented, and | |||
|
14 | # renamed by Greg Ward <greg at gerg.ca>. | |||
|
15 | ||||
|
16 | # XXX would be nice to have a way to verify the repository after shrinking, | |||
|
17 | # e.g. by comparing "before" and "after" states of random changesets | |||
|
18 | # (maybe: export before, shrink, export after, diff). | |||
|
19 | ||||
|
20 | import sys, os, tempfile | |||
|
21 | import optparse | |||
|
22 | from mercurial import ui as ui_, hg, revlog, transaction, node, util | |||
|
23 | ||||
|
24 | def toposort(rl): | |||
|
25 | write = sys.stdout.write | |||
|
26 | ||||
|
27 | children = {} | |||
|
28 | root = [] | |||
|
29 | # build children and roots | |||
|
30 | write('reading %d revs ' % len(rl)) | |||
|
31 | try: | |||
|
32 | for i in rl: | |||
|
33 | children[i] = [] | |||
|
34 | parents = [p for p in rl.parentrevs(i) if p != node.nullrev] | |||
|
35 | # in case of duplicate parents | |||
|
36 | if len(parents) == 2 and parents[0] == parents[1]: | |||
|
37 | del parents[1] | |||
|
38 | for p in parents: | |||
|
39 | assert p in children | |||
|
40 | children[p].append(i) | |||
|
41 | ||||
|
42 | if len(parents) == 0: | |||
|
43 | root.append(i) | |||
|
44 | ||||
|
45 | if i % 1000 == 0: | |||
|
46 | write('.') | |||
|
47 | finally: | |||
|
48 | write('\n') | |||
|
49 | ||||
|
50 | # XXX this is a reimplementation of the 'branchsort' topo sort | |||
|
51 | # algorithm in hgext.convert.convcmd... would be nice not to duplicate | |||
|
52 | # the algorithm | |||
|
53 | write('sorting ...') | |||
|
54 | visit = root | |||
|
55 | ret = [] | |||
|
56 | while visit: | |||
|
57 | i = visit.pop(0) | |||
|
58 | ret.append(i) | |||
|
59 | if i not in children: | |||
|
60 | # This only happens if some node's p1 == p2, which can | |||
|
61 | # happen in the manifest in certain circumstances. | |||
|
62 | continue | |||
|
63 | next = [] | |||
|
64 | for c in children.pop(i): | |||
|
65 | parents_unseen = [p for p in rl.parentrevs(c) | |||
|
66 | if p != node.nullrev and p in children] | |||
|
67 | if len(parents_unseen) == 0: | |||
|
68 | next.append(c) | |||
|
69 | visit = next + visit | |||
|
70 | write('\n') | |||
|
71 | return ret | |||
|
72 | ||||
|
73 | def writerevs(r1, r2, order, tr): | |||
|
74 | write = sys.stdout.write | |||
|
75 | write('writing %d revs ' % len(order)) | |||
|
76 | try: | |||
|
77 | count = 0 | |||
|
78 | for rev in order: | |||
|
79 | n = r1.node(rev) | |||
|
80 | p1, p2 = r1.parents(n) | |||
|
81 | l = r1.linkrev(rev) | |||
|
82 | t = r1.revision(n) | |||
|
83 | n2 = r2.addrevision(t, tr, l, p1, p2) | |||
|
84 | ||||
|
85 | if count % 1000 == 0: | |||
|
86 | write('.') | |||
|
87 | count += 1 | |||
|
88 | finally: | |||
|
89 | write('\n') | |||
|
90 | ||||
|
91 | def report(olddatafn, newdatafn): | |||
|
92 | oldsize = float(os.stat(olddatafn).st_size) | |||
|
93 | newsize = float(os.stat(newdatafn).st_size) | |||
|
94 | ||||
|
95 | # argh: have to pass an int to %d, because a float >= 2^32 | |||
|
96 | # blows up under Python 2.5 or earlier | |||
|
97 | sys.stdout.write('old file size: %12d bytes (%6.1f MiB)\n' | |||
|
98 | % (int(oldsize), oldsize/1024/1024)) | |||
|
99 | sys.stdout.write('new file size: %12d bytes (%6.1f MiB)\n' | |||
|
100 | % (int(newsize), newsize/1024/1024)) | |||
|
101 | ||||
|
102 | shrink_percent = (oldsize - newsize) / oldsize * 100 | |||
|
103 | shrink_factor = oldsize / newsize | |||
|
104 | sys.stdout.write('shrinkage: %.1f%% (%.1fx)\n' | |||
|
105 | % (shrink_percent, shrink_factor)) | |||
|
106 | ||||
|
107 | def main(): | |||
|
108 | ||||
|
109 | # Unbuffer stdout for nice progress output. | |||
|
110 | sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) | |||
|
111 | write = sys.stdout.write | |||
|
112 | ||||
|
113 | parser = optparse.OptionParser(description=__doc__) | |||
|
114 | parser.add_option('-R', '--repository', | |||
|
115 | default=os.path.curdir, | |||
|
116 | metavar='REPO', | |||
|
117 | help='repository root directory [default: current dir]') | |||
|
118 | parser.add_option('--revlog', | |||
|
119 | metavar='FILE', | |||
|
120 | help='shrink FILE [default: REPO/hg/store/00manifest.i]') | |||
|
121 | (options, args) = parser.parse_args() | |||
|
122 | if args: | |||
|
123 | parser.error('too many arguments') | |||
|
124 | ||||
|
125 | # Open the specified repository. | |||
|
126 | ui = ui_.ui() | |||
|
127 | repo = hg.repository(ui, options.repository) | |||
|
128 | if not repo.local(): | |||
|
129 | parser.error('not a local repository: %s' % options.repository) | |||
|
130 | ||||
|
131 | if options.revlog is None: | |||
|
132 | indexfn = repo.sjoin('00manifest.i') | |||
|
133 | else: | |||
|
134 | if not options.revlog.endswith('.i'): | |||
|
135 | parser.error('--revlog option must specify the revlog index file ' | |||
|
136 | '(*.i), not %s' % options.revlog) | |||
|
137 | ||||
|
138 | indexfn = os.path.realpath(options.revlog) | |||
|
139 | store = repo.sjoin('') | |||
|
140 | if not indexfn.startswith(store): | |||
|
141 | parser.error('--revlog option must specify a revlog in %s, not %s' | |||
|
142 | % (store, indexfn)) | |||
|
143 | ||||
|
144 | datafn = indexfn[:-2] + '.d' | |||
|
145 | if not os.path.exists(indexfn): | |||
|
146 | parser.error('no such file: %s' % indexfn) | |||
|
147 | if '00changelog' in indexfn: | |||
|
148 | parser.error('shrinking the changelog will corrupt your repository') | |||
|
149 | if not os.path.exists(datafn): | |||
|
150 | # This is just a lazy shortcut because I can't be bothered to | |||
|
151 | # handle all the special cases that entail from no .d file. | |||
|
152 | parser.error('%s does not exist: revlog not big enough ' | |||
|
153 | 'to be worth shrinking' % datafn) | |||
|
154 | ||||
|
155 | oldindexfn = indexfn + '.old' | |||
|
156 | olddatafn = datafn + '.old' | |||
|
157 | if os.path.exists(oldindexfn) or os.path.exists(olddatafn): | |||
|
158 | parser.error('one or both of\n' | |||
|
159 | ' %s\n' | |||
|
160 | ' %s\n' | |||
|
161 | 'exists from a previous run; please clean up before ' | |||
|
162 | 'running again' | |||
|
163 | % (oldindexfn, olddatafn)) | |||
|
164 | ||||
|
165 | write('shrinking %s\n' % indexfn) | |||
|
166 | prefix = os.path.basename(indexfn)[:-1] | |||
|
167 | (tmpfd, tmpindexfn) = tempfile.mkstemp(dir=os.path.dirname(indexfn), | |||
|
168 | prefix=prefix, | |||
|
169 | suffix='.i') | |||
|
170 | tmpdatafn = tmpindexfn[:-2] + '.d' | |||
|
171 | os.close(tmpfd) | |||
|
172 | ||||
|
173 | r1 = revlog.revlog(util.opener(os.getcwd(), audit=False), indexfn) | |||
|
174 | r2 = revlog.revlog(util.opener(os.getcwd(), audit=False), tmpindexfn) | |||
|
175 | ||||
|
176 | # Don't use repo.transaction(), because then things get hairy with | |||
|
177 | # paths: some need to be relative to .hg, and some need to be | |||
|
178 | # absolute. Doing it this way keeps things simple: everything is an | |||
|
179 | # absolute path. | |||
|
180 | lock = repo.lock(wait=False) | |||
|
181 | tr = transaction.transaction(sys.stderr.write, | |||
|
182 | open, | |||
|
183 | repo.sjoin('journal')) | |||
|
184 | ||||
|
185 | try: | |||
|
186 | try: | |||
|
187 | order = toposort(r1) | |||
|
188 | writerevs(r1, r2, order, tr) | |||
|
189 | report(datafn, tmpdatafn) | |||
|
190 | tr.close() | |||
|
191 | except: | |||
|
192 | # Abort transaction first, so we truncate the files before | |||
|
193 | # deleting them. | |||
|
194 | tr.abort() | |||
|
195 | if os.path.exists(tmpindexfn): | |||
|
196 | os.unlink(tmpindexfn) | |||
|
197 | if os.path.exists(tmpdatafn): | |||
|
198 | os.unlink(tmpdatafn) | |||
|
199 | raise | |||
|
200 | finally: | |||
|
201 | lock.release() | |||
|
202 | ||||
|
203 | os.link(indexfn, oldindexfn) | |||
|
204 | os.link(datafn, olddatafn) | |||
|
205 | os.rename(tmpindexfn, indexfn) | |||
|
206 | os.rename(tmpdatafn, datafn) | |||
|
207 | write('note: old revlog saved in:\n' | |||
|
208 | ' %s\n' | |||
|
209 | ' %s\n' | |||
|
210 | '(You can delete those files when you are satisfied that your\n' | |||
|
211 | 'repository is still sane. ' | |||
|
212 | 'Running \'hg verify\' is strongly recommended.)\n' | |||
|
213 | % (oldindexfn, olddatafn)) | |||
|
214 | ||||
|
215 | try: | |||
|
216 | main() | |||
|
217 | except KeyboardInterrupt: | |||
|
218 | sys.exit("interrupted") |
@@ -0,0 +1,36 b'' | |||||
|
1 | Some commands allow the user to specify a date, e.g.: | |||
|
2 | ||||
|
3 | - backout, commit, import, tag: Specify the commit date. | |||
|
4 | - log, revert, update: Select revision(s) by date. | |||
|
5 | ||||
|
6 | Many date formats are valid. Here are some examples:: | |||
|
7 | ||||
|
8 | "Wed Dec 6 13:18:29 2006" (local timezone assumed) | |||
|
9 | "Dec 6 13:18 -0600" (year assumed, time offset provided) | |||
|
10 | "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000) | |||
|
11 | "Dec 6" (midnight) | |||
|
12 | "13:18" (today assumed) | |||
|
13 | "3:39" (3:39AM assumed) | |||
|
14 | "3:39pm" (15:39) | |||
|
15 | "2006-12-06 13:18:29" (ISO 8601 format) | |||
|
16 | "2006-12-6 13:18" | |||
|
17 | "2006-12-6" | |||
|
18 | "12-6" | |||
|
19 | "12/6" | |||
|
20 | "12/6/6" (Dec 6 2006) | |||
|
21 | ||||
|
22 | Lastly, there is Mercurial's internal format:: | |||
|
23 | ||||
|
24 | "1165432709 0" (Wed Dec 6 13:18:29 2006 UTC) | |||
|
25 | ||||
|
26 | This is the internal representation format for dates. unixtime is the | |||
|
27 | number of seconds since the epoch (1970-01-01 00:00 UTC). offset is | |||
|
28 | the offset of the local timezone, in seconds west of UTC (negative if | |||
|
29 | the timezone is east of UTC). | |||
|
30 | ||||
|
31 | The log command also accepts date ranges:: | |||
|
32 | ||||
|
33 | "<{datetime}" - at or before a given date/time | |||
|
34 | ">{datetime}" - on or after a given date/time | |||
|
35 | "{datetime} to {datetime}" - a date range, inclusive | |||
|
36 | "-{days}" - within a given number of days of today |
@@ -0,0 +1,29 b'' | |||||
|
1 | Mercurial's default format for showing changes between two versions of | |||
|
2 | a file is compatible with the unified format of GNU diff, which can be | |||
|
3 | used by GNU patch and many other standard tools. | |||
|
4 | ||||
|
5 | While this standard format is often enough, it does not encode the | |||
|
6 | following information: | |||
|
7 | ||||
|
8 | - executable status and other permission bits | |||
|
9 | - copy or rename information | |||
|
10 | - changes in binary files | |||
|
11 | - creation or deletion of empty files | |||
|
12 | ||||
|
13 | Mercurial also supports the extended diff format from the git VCS | |||
|
14 | which addresses these limitations. The git diff format is not produced | |||
|
15 | by default because a few widespread tools still do not understand this | |||
|
16 | format. | |||
|
17 | ||||
|
18 | This means that when generating diffs from a Mercurial repository | |||
|
19 | (e.g. with "hg export"), you should be careful about things like file | |||
|
20 | copies and renames or other things mentioned above, because when | |||
|
21 | applying a standard diff to a different repository, this extra | |||
|
22 | information is lost. Mercurial's internal operations (like push and | |||
|
23 | pull) are not affected by this, because they use an internal binary | |||
|
24 | format for communicating changes. | |||
|
25 | ||||
|
26 | To make Mercurial produce the git extended diff format, use the --git | |||
|
27 | option available for many commands, or set 'git = True' in the [diff] | |||
|
28 | section of your hgrc. You do not need to set this option when | |||
|
29 | importing diffs in this format or using them in the mq extension. |
@@ -0,0 +1,76 b'' | |||||
|
1 | HG | |||
|
2 | Path to the 'hg' executable, automatically passed when running | |||
|
3 | hooks, extensions or external tools. If unset or empty, this is | |||
|
4 | the hg executable's name if it's frozen, or an executable named | |||
|
5 | 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on | |||
|
6 | Windows) is searched. | |||
|
7 | ||||
|
8 | HGEDITOR | |||
|
9 | This is the name of the editor to run when committing. See EDITOR. | |||
|
10 | ||||
|
11 | (deprecated, use .hgrc) | |||
|
12 | ||||
|
13 | HGENCODING | |||
|
14 | This overrides the default locale setting detected by Mercurial. | |||
|
15 | This setting is used to convert data including usernames, | |||
|
16 | changeset descriptions, tag names, and branches. This setting can | |||
|
17 | be overridden with the --encoding command-line option. | |||
|
18 | ||||
|
19 | HGENCODINGMODE | |||
|
20 | This sets Mercurial's behavior for handling unknown characters | |||
|
21 | while transcoding user input. The default is "strict", which | |||
|
22 | causes Mercurial to abort if it can't map a character. Other | |||
|
23 | settings include "replace", which replaces unknown characters, and | |||
|
24 | "ignore", which drops them. This setting can be overridden with | |||
|
25 | the --encodingmode command-line option. | |||
|
26 | ||||
|
27 | HGMERGE | |||
|
28 | An executable to use for resolving merge conflicts. The program | |||
|
29 | will be executed with three arguments: local file, remote file, | |||
|
30 | ancestor file. | |||
|
31 | ||||
|
32 | (deprecated, use .hgrc) | |||
|
33 | ||||
|
34 | HGRCPATH | |||
|
35 | A list of files or directories to search for hgrc files. Item | |||
|
36 | separator is ":" on Unix, ";" on Windows. If HGRCPATH is not set, | |||
|
37 | platform default search path is used. If empty, only the .hg/hgrc | |||
|
38 | from the current repository is read. | |||
|
39 | ||||
|
40 | For each element in HGRCPATH: | |||
|
41 | ||||
|
42 | - if it's a directory, all files ending with .rc are added | |||
|
43 | - otherwise, the file itself will be added | |||
|
44 | ||||
|
45 | HGUSER | |||
|
46 | This is the string used as the author of a commit. If not set, | |||
|
47 | available values will be considered in this order: | |||
|
48 | ||||
|
49 | - HGUSER (deprecated) | |||
|
50 | - hgrc files from the HGRCPATH | |||
|
51 | ||||
|
52 | - interactive prompt | |||
|
53 | - LOGNAME (with '@hostname' appended) | |||
|
54 | ||||
|
55 | (deprecated, use .hgrc) | |||
|
56 | ||||
|
57 | ||||
|
58 | May be used as the author of a commit; see HGUSER. | |||
|
59 | ||||
|
60 | LOGNAME | |||
|
61 | May be used as the author of a commit; see HGUSER. | |||
|
62 | ||||
|
63 | VISUAL | |||
|
64 | This is the name of the editor to use when committing. See EDITOR. | |||
|
65 | ||||
|
66 | EDITOR | |||
|
67 | Sometimes Mercurial needs to open a text file in an editor for a | |||
|
68 | user to modify, for example when writing commit messages. The | |||
|
69 | editor it uses is determined by looking at the environment | |||
|
70 | variables HGEDITOR, VISUAL and EDITOR, in that order. The first | |||
|
71 | non-empty one is chosen. If all of them are empty, the editor | |||
|
72 | defaults to 'vi'. | |||
|
73 | ||||
|
74 | PYTHONPATH | |||
|
75 | This is used by Python to find imported modules and may need to be | |||
|
76 | set appropriately if this Mercurial is not installed system-wide. |
@@ -0,0 +1,33 b'' | |||||
|
1 | Mercurial has the ability to add new features through the use of | |||
|
2 | extensions. Extensions may add new commands, add options to | |||
|
3 | existing commands, change the default behavior of commands, or | |||
|
4 | implement hooks. | |||
|
5 | ||||
|
6 | Extensions are not loaded by default for a variety of reasons: | |||
|
7 | they can increase startup overhead; they may be meant for advanced | |||
|
8 | usage only; they may provide potentially dangerous abilities (such | |||
|
9 | as letting you destroy or modify history); they might not be ready | |||
|
10 | for prime time; or they may alter some usual behaviors of stock | |||
|
11 | Mercurial. It is thus up to the user to activate extensions as | |||
|
12 | needed. | |||
|
13 | ||||
|
14 | To enable the "foo" extension, either shipped with Mercurial or in | |||
|
15 | the Python search path, create an entry for it in your hgrc, like | |||
|
16 | this:: | |||
|
17 | ||||
|
18 | [extensions] | |||
|
19 | foo = | |||
|
20 | ||||
|
21 | You may also specify the full path to an extension:: | |||
|
22 | ||||
|
23 | [extensions] | |||
|
24 | myfeature = ~/.hgext/myfeature.py | |||
|
25 | ||||
|
26 | To explicitly disable an extension enabled in an hgrc of broader | |||
|
27 | scope, prepend its path with !:: | |||
|
28 | ||||
|
29 | [extensions] | |||
|
30 | # disabling extension bar residing in /path/to/extension/bar.py | |||
|
31 | hgext.bar = !/path/to/extension/bar.py | |||
|
32 | # ditto, but no path was supplied for extension baz | |||
|
33 | hgext.baz = ! |
@@ -0,0 +1,13 b'' | |||||
|
1 | When Mercurial accepts more than one revision, they may be specified | |||
|
2 | individually, or provided as a topologically continuous range, | |||
|
3 | separated by the ":" character. | |||
|
4 | ||||
|
5 | The syntax of range notation is [BEGIN]:[END], where BEGIN and END are | |||
|
6 | revision identifiers. Both BEGIN and END are optional. If BEGIN is not | |||
|
7 | specified, it defaults to revision number 0. If END is not specified, | |||
|
8 | it defaults to the tip. The range ":" thus means "all revisions". | |||
|
9 | ||||
|
10 | If BEGIN is greater than END, revisions are treated in reverse order. | |||
|
11 | ||||
|
12 | A range acts as a closed interval. This means that a range of 3:5 | |||
|
13 | gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6. |
@@ -0,0 +1,41 b'' | |||||
|
1 | Mercurial accepts several notations for identifying one or more files | |||
|
2 | at a time. | |||
|
3 | ||||
|
4 | By default, Mercurial treats filenames as shell-style extended glob | |||
|
5 | patterns. | |||
|
6 | ||||
|
7 | Alternate pattern notations must be specified explicitly. | |||
|
8 | ||||
|
9 | To use a plain path name without any pattern matching, start it with | |||
|
10 | "path:". These path names must completely match starting at the | |||
|
11 | current repository root. | |||
|
12 | ||||
|
13 | To use an extended glob, start a name with "glob:". Globs are rooted | |||
|
14 | at the current directory; a glob such as "``*.c``" will only match | |||
|
15 | files in the current directory ending with ".c". | |||
|
16 | ||||
|
17 | The supported glob syntax extensions are "``**``" to match any string | |||
|
18 | across path separators and "{a,b}" to mean "a or b". | |||
|
19 | ||||
|
20 | To use a Perl/Python regular expression, start a name with "re:". | |||
|
21 | Regexp pattern matching is anchored at the root of the repository. | |||
|
22 | ||||
|
23 | Plain examples:: | |||
|
24 | ||||
|
25 | path:foo/bar a name bar in a directory named foo in the root | |||
|
26 | of the repository | |||
|
27 | path:path:name a file or directory named "path:name" | |||
|
28 | ||||
|
29 | Glob examples:: | |||
|
30 | ||||
|
31 | glob:*.c any name ending in ".c" in the current directory | |||
|
32 | *.c any name ending in ".c" in the current directory | |||
|
33 | **.c any name ending in ".c" in any subdirectory of the | |||
|
34 | current directory including itself. | |||
|
35 | foo/*.c any name ending in ".c" in the directory foo | |||
|
36 | foo/**.c any name ending in ".c" in any subdirectory of foo | |||
|
37 | including itself. | |||
|
38 | ||||
|
39 | Regexp examples:: | |||
|
40 | ||||
|
41 | re:.*\.c$ any name ending in ".c", anywhere in the repository |
@@ -0,0 +1,29 b'' | |||||
|
1 | Mercurial supports several ways to specify individual revisions. | |||
|
2 | ||||
|
3 | A plain integer is treated as a revision number. Negative integers are | |||
|
4 | treated as sequential offsets from the tip, with -1 denoting the tip, | |||
|
5 | -2 denoting the revision prior to the tip, and so forth. | |||
|
6 | ||||
|
7 | A 40-digit hexadecimal string is treated as a unique revision | |||
|
8 | identifier. | |||
|
9 | ||||
|
10 | A hexadecimal string less than 40 characters long is treated as a | |||
|
11 | unique revision identifier and is referred to as a short-form | |||
|
12 | identifier. A short-form identifier is only valid if it is the prefix | |||
|
13 | of exactly one full-length identifier. | |||
|
14 | ||||
|
15 | Any other string is treated as a tag or branch name. A tag name is a | |||
|
16 | symbolic name associated with a revision identifier. A branch name | |||
|
17 | denotes the tipmost revision of that branch. Tag and branch names must | |||
|
18 | not contain the ":" character. | |||
|
19 | ||||
|
20 | The reserved name "tip" is a special tag that always identifies the | |||
|
21 | most recent revision. | |||
|
22 | ||||
|
23 | The reserved name "null" indicates the null revision. This is the | |||
|
24 | revision of an empty repository, and the parent of revision 0. | |||
|
25 | ||||
|
26 | The reserved name "." indicates the working directory parent. If no | |||
|
27 | working directory is checked out, it is equivalent to null. If an | |||
|
28 | uncommitted merge is in progress, "." is the revision of the first | |||
|
29 | parent. |
@@ -0,0 +1,113 b'' | |||||
|
1 | Mercurial allows you to customize output of commands through | |||
|
2 | templates. You can either pass in a template from the command | |||
|
3 | line, via the --template option, or select an existing | |||
|
4 | template-style (--style). | |||
|
5 | ||||
|
6 | You can customize output for any "log-like" command: log, | |||
|
7 | outgoing, incoming, tip, parents, heads and glog. | |||
|
8 | ||||
|
9 | Three styles are packaged with Mercurial: default (the style used | |||
|
10 | when no explicit preference is passed), compact and changelog. | |||
|
11 | Usage:: | |||
|
12 | ||||
|
13 | $ hg log -r1 --style changelog | |||
|
14 | ||||
|
15 | A template is a piece of text, with markup to invoke variable | |||
|
16 | expansion:: | |||
|
17 | ||||
|
18 | $ hg log -r1 --template "{node}\n" | |||
|
19 | b56ce7b07c52de7d5fd79fb89701ea538af65746 | |||
|
20 | ||||
|
21 | Strings in curly braces are called keywords. The availability of | |||
|
22 | keywords depends on the exact context of the templater. These | |||
|
23 | keywords are usually available for templating a log-like command: | |||
|
24 | ||||
|
25 | :author: String. The unmodified author of the changeset. | |||
|
26 | :branches: String. The name of the branch on which the changeset | |||
|
27 | was committed. Will be empty if the branch name was | |||
|
28 | default. | |||
|
29 | :date: Date information. The date when the changeset was | |||
|
30 | committed. | |||
|
31 | :desc: String. The text of the changeset description. | |||
|
32 | :diffstat: String. Statistics of changes with the following | |||
|
33 | format: "modified files: +added/-removed lines" | |||
|
34 | :files: List of strings. All files modified, added, or removed | |||
|
35 | by this changeset. | |||
|
36 | :file_adds: List of strings. Files added by this changeset. | |||
|
37 | :file_mods: List of strings. Files modified by this changeset. | |||
|
38 | :file_dels: List of strings. Files removed by this changeset. | |||
|
39 | :node: String. The changeset identification hash, as a | |||
|
40 | 40-character hexadecimal string. | |||
|
41 | :parents: List of strings. The parents of the changeset. | |||
|
42 | :rev: Integer. The repository-local changeset revision | |||
|
43 | number. | |||
|
44 | :tags: List of strings. Any tags associated with the | |||
|
45 | changeset. | |||
|
46 | :latesttag: String. Most recent global tag in the ancestors of this | |||
|
47 | changeset. | |||
|
48 | :latesttagdistance: Integer. Longest path to the latest tag. | |||
|
49 | ||||
|
50 | The "date" keyword does not produce human-readable output. If you | |||
|
51 | want to use a date in your output, you can use a filter to process | |||
|
52 | it. Filters are functions which return a string based on the input | |||
|
53 | variable. You can also use a chain of filters to get the desired | |||
|
54 | output:: | |||
|
55 | ||||
|
56 | $ hg tip --template "{date|isodate}\n" | |||
|
57 | 2008-08-21 18:22 +0000 | |||
|
58 | ||||
|
59 | List of filters: | |||
|
60 | ||||
|
61 | :addbreaks: Any text. Add an XHTML "<br />" tag before the end of | |||
|
62 | every line except the last. | |||
|
63 | :age: Date. Returns a human-readable date/time difference | |||
|
64 | between the given date/time and the current | |||
|
65 | date/time. | |||
|
66 | :basename: Any text. Treats the text as a path, and returns the | |||
|
67 | last component of the path after splitting by the | |||
|
68 | path separator (ignoring trailing separators). For | |||
|
69 | example, "foo/bar/baz" becomes "baz" and "foo/bar//" | |||
|
70 | becomes "bar". | |||
|
71 | :stripdir: Treat the text as path and strip a directory level, | |||
|
72 | if possible. For example, "foo" and "foo/bar" becomes | |||
|
73 | "foo". | |||
|
74 | :date: Date. Returns a date in a Unix date format, including | |||
|
75 | the timezone: "Mon Sep 04 15:13:13 2006 0700". | |||
|
76 | :domain: Any text. Finds the first string that looks like an | |||
|
77 | email address, and extracts just the domain | |||
|
78 | component. Example: 'User <user@example.com>' becomes | |||
|
79 | 'example.com'. | |||
|
80 | :email: Any text. Extracts the first string that looks like | |||
|
81 | an email address. Example: 'User <user@example.com>' | |||
|
82 | becomes 'user@example.com'. | |||
|
83 | :escape: Any text. Replaces the special XML/XHTML characters | |||
|
84 | "&", "<" and ">" with XML entities. | |||
|
85 | :fill68: Any text. Wraps the text to fit in 68 columns. | |||
|
86 | :fill76: Any text. Wraps the text to fit in 76 columns. | |||
|
87 | :firstline: Any text. Returns the first line of text. | |||
|
88 | :nonempty: Any text. Returns '(none)' if the string is empty. | |||
|
89 | :hgdate: Date. Returns the date as a pair of numbers: | |||
|
90 | "1157407993 25200" (Unix timestamp, timezone offset). | |||
|
91 | :isodate: Date. Returns the date in ISO 8601 format: | |||
|
92 | "2009-08-18 13:00 +0200". | |||
|
93 | :isodatesec: Date. Returns the date in ISO 8601 format, including | |||
|
94 | seconds: "2009-08-18 13:00:13 +0200". See also the | |||
|
95 | rfc3339date filter. | |||
|
96 | :localdate: Date. Converts a date to local date. | |||
|
97 | :obfuscate: Any text. Returns the input text rendered as a | |||
|
98 | sequence of XML entities. | |||
|
99 | :person: Any text. Returns the text before an email address. | |||
|
100 | :rfc822date: Date. Returns a date using the same format used in | |||
|
101 | email headers: "Tue, 18 Aug 2009 13:00:13 +0200". | |||
|
102 | :rfc3339date: Date. Returns a date using the Internet date format | |||
|
103 | specified in RFC 3339: "2009-08-18T13:00:13+02:00". | |||
|
104 | :short: Changeset hash. Returns the short form of a changeset | |||
|
105 | hash, i.e. a 12-byte hexadecimal string. | |||
|
106 | :shortdate: Date. Returns a date like "2006-09-18". | |||
|
107 | :strip: Any text. Strips all leading and trailing whitespace. | |||
|
108 | :tabindent: Any text. Returns the text, with every line except | |||
|
109 | the first starting with a tab character. | |||
|
110 | :urlescape: Any text. Escapes all "special" characters. For | |||
|
111 | example, "foo bar" becomes "foo%20bar". | |||
|
112 | :user: Any text. Returns the user portion of an email | |||
|
113 | address. |
@@ -0,0 +1,63 b'' | |||||
|
1 | Valid URLs are of the form:: | |||
|
2 | ||||
|
3 | local/filesystem/path[#revision] | |||
|
4 | file://local/filesystem/path[#revision] | |||
|
5 | http://[user[:pass]@]host[:port]/[path][#revision] | |||
|
6 | https://[user[:pass]@]host[:port]/[path][#revision] | |||
|
7 | ssh://[user[:pass]@]host[:port]/[path][#revision] | |||
|
8 | ||||
|
9 | Paths in the local filesystem can either point to Mercurial | |||
|
10 | repositories or to bundle files (as created by 'hg bundle' or 'hg | |||
|
11 | incoming --bundle'). | |||
|
12 | ||||
|
13 | An optional identifier after # indicates a particular branch, tag, or | |||
|
14 | changeset to use from the remote repository. See also 'hg help | |||
|
15 | revisions'. | |||
|
16 | ||||
|
17 | Some features, such as pushing to http:// and https:// URLs are only | |||
|
18 | possible if the feature is explicitly enabled on the remote Mercurial | |||
|
19 | server. | |||
|
20 | ||||
|
21 | Some notes about using SSH with Mercurial: | |||
|
22 | ||||
|
23 | - SSH requires an accessible shell account on the destination machine | |||
|
24 | and a copy of hg in the remote path or specified with as remotecmd. | |||
|
25 | - path is relative to the remote user's home directory by default. Use | |||
|
26 | an extra slash at the start of a path to specify an absolute path:: | |||
|
27 | ||||
|
28 | ssh://example.com//tmp/repository | |||
|
29 | ||||
|
30 | - Mercurial doesn't use its own compression via SSH; the right thing | |||
|
31 | to do is to configure it in your ~/.ssh/config, e.g.:: | |||
|
32 | ||||
|
33 | Host *.mylocalnetwork.example.com | |||
|
34 | Compression no | |||
|
35 | Host * | |||
|
36 | Compression yes | |||
|
37 | ||||
|
38 | Alternatively specify "ssh -C" as your ssh command in your hgrc or | |||
|
39 | with the --ssh command line option. | |||
|
40 | ||||
|
41 | These URLs can all be stored in your hgrc with path aliases under the | |||
|
42 | [paths] section like so:: | |||
|
43 | ||||
|
44 | [paths] | |||
|
45 | alias1 = URL1 | |||
|
46 | alias2 = URL2 | |||
|
47 | ... | |||
|
48 | ||||
|
49 | You can then use the alias for any command that uses a URL (for | |||
|
50 | example 'hg pull alias1' would pull from the 'alias1' path). | |||
|
51 | ||||
|
52 | Two path aliases are special because they are used as defaults when | |||
|
53 | you do not provide the URL to a command: | |||
|
54 | ||||
|
55 | default: | |||
|
56 | When you create a repository with hg clone, the clone command saves | |||
|
57 | the location of the source repository as the new repository's | |||
|
58 | 'default' path. This is then used when you omit path from push- and | |||
|
59 | pull-like commands (including incoming and outgoing). | |||
|
60 | ||||
|
61 | default-push: | |||
|
62 | The push command will look for a path named 'default-push', and | |||
|
63 | prefer it over 'default' if both are defined. |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
@@ -79,16 +79,16 b' test-%:' | |||||
79 |
|
79 | |||
80 | update-pot: i18n/hg.pot |
|
80 | update-pot: i18n/hg.pot | |
81 |
|
81 | |||
82 | i18n/hg.pot: $(PYTHON_FILES) |
|
82 | i18n/hg.pot: $(PYTHON_FILES) help/*.txt | |
83 | $(PYTHON) i18n/hggettext mercurial/commands.py \ |
|
83 | $(PYTHON) i18n/hggettext mercurial/commands.py \ | |
84 | hgext/*.py hgext/*/__init__.py > i18n/hg.pot |
|
84 | hgext/*.py hgext/*/__init__.py help/*.txt > i18n/hg.pot | |
85 | # All strings marked for translation in Mercurial contain |
|
85 | # All strings marked for translation in Mercurial contain | |
86 | # ASCII characters only. But some files contain string |
|
86 | # ASCII characters only. But some files contain string | |
87 | # literals like this '\037\213'. xgettext thinks it has to |
|
87 | # literals like this '\037\213'. xgettext thinks it has to | |
88 | # parse them even though they are not marked for translation. |
|
88 | # parse them even though they are not marked for translation. | |
89 | # Extracting with an explicit encoding of ISO-8859-1 will make |
|
89 | # Extracting with an explicit encoding of ISO-8859-1 will make | |
90 | # xgettext "parse" and ignore them. |
|
90 | # xgettext "parse" and ignore them. | |
91 |
echo $ |
|
91 | echo $(PYTHON_FILES) | xargs \ | |
92 | xgettext --package-name "Mercurial" \ |
|
92 | xgettext --package-name "Mercurial" \ | |
93 | --msgid-bugs-address "<mercurial-devel@selenic.com>" \ |
|
93 | --msgid-bugs-address "<mercurial-devel@selenic.com>" \ | |
94 | --copyright-holder "Matt Mackall <mpm@selenic.com> and others" \ |
|
94 | --copyright-holder "Matt Mackall <mpm@selenic.com> and others" \ |
@@ -546,3 +546,20 b' complete -o bashdefault -o default -F _h' | |||||
546 | return |
|
546 | return | |
547 | } |
|
547 | } | |
548 |
|
548 | |||
|
549 | # shelve | |||
|
550 | _hg_shelves() | |||
|
551 | { | |||
|
552 | local shelves="$("$hg" unshelve -l . 2>/dev/null)" | |||
|
553 | local IFS=$'\n' | |||
|
554 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$shelves' -- "$cur")) | |||
|
555 | } | |||
|
556 | ||||
|
557 | _hg_cmd_shelve() | |||
|
558 | { | |||
|
559 | _hg_status "mard" | |||
|
560 | } | |||
|
561 | ||||
|
562 | _hg_cmd_unshelve() | |||
|
563 | { | |||
|
564 | _hg_shelves | |||
|
565 | } |
@@ -1,9 +1,10 b'' | |||||
1 |
import os, sys |
|
1 | import os, sys | |
2 | # import from the live mercurial repo |
|
2 | # import from the live mercurial repo | |
3 | sys.path.insert(0, "..") |
|
3 | sys.path.insert(0, "..") | |
4 | # fall back to pure modules if required C extensions are not available |
|
4 | # fall back to pure modules if required C extensions are not available | |
5 | sys.path.append(os.path.join('..', 'mercurial', 'pure')) |
|
5 | sys.path.append(os.path.join('..', 'mercurial', 'pure')) | |
6 | from mercurial import demandimport; demandimport.enable() |
|
6 | from mercurial import demandimport; demandimport.enable() | |
|
7 | from mercurial import encoding | |||
7 | from mercurial.commands import table, globalopts |
|
8 | from mercurial.commands import table, globalopts | |
8 | from mercurial.i18n import _ |
|
9 | from mercurial.i18n import _ | |
9 | from mercurial.help import helptable |
|
10 | from mercurial.help import helptable | |
@@ -55,9 +56,9 b' def get_cmd(cmd):' | |||||
55 |
|
56 | |||
56 | def show_doc(ui): |
|
57 | def show_doc(ui): | |
57 | def section(s): |
|
58 | def section(s): | |
58 |
ui.write("%s\n%s\n\n" % (s, "-" * |
|
59 | ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s))) | |
59 | def subsection(s): |
|
60 | def subsection(s): | |
60 |
ui.write("%s\n%s\n\n" % (s, '"' * |
|
61 | ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s))) | |
61 |
|
62 | |||
62 | # print options |
|
63 | # print options | |
63 | section(_("OPTIONS")) |
|
64 | section(_("OPTIONS")) | |
@@ -92,9 +93,7 b' def show_doc(ui):' | |||||
92 | s = "%-*s %s" % (opts_len, optstr, desc) |
|
93 | s = "%-*s %s" % (opts_len, optstr, desc) | |
93 | else: |
|
94 | else: | |
94 | s = optstr |
|
95 | s = optstr | |
95 | s = textwrap.fill(s, initial_indent=4 * " ", |
|
96 | ui.write(" %s\n" % s) | |
96 | subsequent_indent=(6 + opts_len) * " ") |
|
|||
97 | ui.write("%s\n" % s) |
|
|||
98 | ui.write("\n") |
|
97 | ui.write("\n") | |
99 | # aliases |
|
98 | # aliases | |
100 | if d['aliases']: |
|
99 | if d['aliases']: |
@@ -95,6 +95,6 b' COPYING' | |||||
95 | ------- |
|
95 | ------- | |
96 | Copyright \(C) 2005-2009 Matt Mackall. |
|
96 | Copyright \(C) 2005-2009 Matt Mackall. | |
97 | Free use of this software is granted under the terms of the GNU General |
|
97 | Free use of this software is granted under the terms of the GNU General | |
98 |
Public License |
|
98 | Public License version 2. | |
99 |
|
99 | |||
100 | .. include:: common.txt |
|
100 | .. include:: common.txt |
@@ -106,6 +106,6 b' COPYING' | |||||
106 | This manual page is copyright 2006 Vadim Gelfer. |
|
106 | This manual page is copyright 2006 Vadim Gelfer. | |
107 | Mercurial is copyright 2005-2009 Matt Mackall. |
|
107 | Mercurial is copyright 2005-2009 Matt Mackall. | |
108 | Free use of this software is granted under the terms of the GNU General |
|
108 | Free use of this software is granted under the terms of the GNU General | |
109 |
Public License |
|
109 | Public License version 2. | |
110 |
|
110 | |||
111 | .. include:: common.txt |
|
111 | .. include:: common.txt |
@@ -946,6 +946,6 b' COPYING' | |||||
946 | This manual page is copyright 2005 Bryan O'Sullivan. |
|
946 | This manual page is copyright 2005 Bryan O'Sullivan. | |
947 | Mercurial is copyright 2005-2009 Matt Mackall. |
|
947 | Mercurial is copyright 2005-2009 Matt Mackall. | |
948 | Free use of this software is granted under the terms of the GNU General |
|
948 | Free use of this software is granted under the terms of the GNU General | |
949 |
Public License |
|
949 | Public License version 2. | |
950 |
|
950 | |||
951 | .. include:: common.txt |
|
951 | .. include:: common.txt |
@@ -60,12 +60,12 b' import getpass, urllib' | |||||
60 | def buildmatch(ui, repo, user, key): |
|
60 | def buildmatch(ui, repo, user, key): | |
61 | '''return tuple of (match function, list enabled).''' |
|
61 | '''return tuple of (match function, list enabled).''' | |
62 | if not ui.has_section(key): |
|
62 | if not ui.has_section(key): | |
63 |
ui.debug |
|
63 | ui.debug('acl: %s not enabled\n' % key) | |
64 | return None |
|
64 | return None | |
65 |
|
65 | |||
66 | pats = [pat for pat, users in ui.configitems(key) |
|
66 | pats = [pat for pat, users in ui.configitems(key) | |
67 | if user in users.replace(',', ' ').split()] |
|
67 | if user in users.replace(',', ' ').split()] | |
68 |
ui.debug |
|
68 | ui.debug('acl: %s enabled, %d entries for user %s\n' % | |
69 | (key, len(pats), user)) |
|
69 | (key, len(pats), user)) | |
70 | if pats: |
|
70 | if pats: | |
71 | return match.match(repo.root, '', pats) |
|
71 | return match.match(repo.root, '', pats) | |
@@ -77,7 +77,7 b' def hook(ui, repo, hooktype, node=None, ' | |||||
77 | raise util.Abort(_('config error - hook type "%s" cannot stop ' |
|
77 | raise util.Abort(_('config error - hook type "%s" cannot stop ' | |
78 | 'incoming changesets') % hooktype) |
|
78 | 'incoming changesets') % hooktype) | |
79 | if source not in ui.config('acl', 'sources', 'serve').split(): |
|
79 | if source not in ui.config('acl', 'sources', 'serve').split(): | |
80 |
ui.debug |
|
80 | ui.debug('acl: changes have source "%s" - skipping\n' % source) | |
81 | return |
|
81 | return | |
82 |
|
82 | |||
83 | user = None |
|
83 | user = None | |
@@ -99,9 +99,9 b' def hook(ui, repo, hooktype, node=None, ' | |||||
99 | ctx = repo[rev] |
|
99 | ctx = repo[rev] | |
100 | for f in ctx.files(): |
|
100 | for f in ctx.files(): | |
101 | if deny and deny(f): |
|
101 | if deny and deny(f): | |
102 |
ui.debug |
|
102 | ui.debug('acl: user %s denied on %s\n' % (user, f)) | |
103 | raise util.Abort(_('acl: access denied for changeset %s') % ctx) |
|
103 | raise util.Abort(_('acl: access denied for changeset %s') % ctx) | |
104 | if allow and not allow(f): |
|
104 | if allow and not allow(f): | |
105 |
ui.debug |
|
105 | ui.debug('acl: user %s not allowed on %s\n' % (user, f)) | |
106 | raise util.Abort(_('acl: access denied for changeset %s') % ctx) |
|
106 | raise util.Abort(_('acl: access denied for changeset %s') % ctx) | |
107 |
ui.debug( |
|
107 | ui.debug('acl: allowing changeset %s\n' % ctx) |
@@ -153,7 +153,7 b' def churn(ui, repo, *pats, **opts):' | |||||
153 | maxname = max(len(k) for k, v in rate) |
|
153 | maxname = max(len(k) for k, v in rate) | |
154 |
|
154 | |||
155 | ttywidth = util.termwidth() |
|
155 | ttywidth = util.termwidth() | |
156 |
ui.debug |
|
156 | ui.debug("assuming %i character terminal\n" % ttywidth) | |
157 | width = ttywidth - maxname - 2 - 6 - 2 - 2 |
|
157 | width = ttywidth - maxname - 2 - 6 - 2 - 2 | |
158 |
|
158 | |||
159 | for date, count in rate: |
|
159 | for date, count in rate: |
@@ -160,25 +160,26 b' def colorqseries(orig, ui, repo, *dummy,' | |||||
160 | return retval |
|
160 | return retval | |
161 |
|
161 | |||
162 | _patch_effects = { 'applied': ['blue', 'bold', 'underline'], |
|
162 | _patch_effects = { 'applied': ['blue', 'bold', 'underline'], | |
163 | 'missing': ['red', 'bold'], |
|
163 | 'missing': ['red', 'bold'], | |
164 | 'unapplied': ['black', 'bold'], } |
|
164 | 'unapplied': ['black', 'bold'], } | |
165 |
|
165 | def colorwrap(orig, *args): | ||
166 | def colorwrap(orig, s): |
|
|||
167 | '''wrap ui.write for colored diff output''' |
|
166 | '''wrap ui.write for colored diff output''' | |
168 | lines = s.split('\n') |
|
167 | def _colorize(s): | |
169 | for i, line in enumerate(lines): |
|
168 | lines = s.split('\n') | |
170 |
|
|
169 | for i, line in enumerate(lines): | |
171 | if line and line[0] in '+-': |
|
170 | stripline = line | |
172 | # highlight trailing whitespace, but only in changed lines |
|
171 | if line and line[0] in '+-': | |
173 | stripline = line.rstrip() |
|
172 | # highlight trailing whitespace, but only in changed lines | |
174 | for prefix, style in _diff_prefixes: |
|
173 | stripline = line.rstrip() | |
175 | if stripline.startswith(prefix): |
|
174 | for prefix, style in _diff_prefixes: | |
176 | lines[i] = render_effects(stripline, _diff_effects[style]) |
|
175 | if stripline.startswith(prefix): | |
177 | break |
|
176 | lines[i] = render_effects(stripline, _diff_effects[style]) | |
178 | if line != stripline: |
|
177 | break | |
179 | lines[i] += render_effects( |
|
178 | if line != stripline: | |
180 | line[len(stripline):], _diff_effects['trailingwhitespace']) |
|
179 | lines[i] += render_effects( | |
181 | orig('\n'.join(lines)) |
|
180 | line[len(stripline):], _diff_effects['trailingwhitespace']) | |
|
181 | return '\n'.join(lines) | |||
|
182 | orig(*[_colorize(s) for s in args]) | |||
182 |
|
183 | |||
183 | def colorshowpatch(orig, self, node): |
|
184 | def colorshowpatch(orig, self, node): | |
184 | '''wrap cmdutil.changeset_printer.showpatch with colored output''' |
|
185 | '''wrap cmdutil.changeset_printer.showpatch with colored output''' | |
@@ -235,6 +236,13 b' def uisetup(ui):' | |||||
235 | # The mq extension is not enabled |
|
236 | # The mq extension is not enabled | |
236 | pass |
|
237 | pass | |
237 |
|
238 | |||
|
239 | try: | |||
|
240 | rec = extensions.find('record') | |||
|
241 | _setupcmd(ui, 'record', rec.cmdtable, colordiff, _diff_effects) | |||
|
242 | except KeyError: | |||
|
243 | # The record extension is not enabled | |||
|
244 | pass | |||
|
245 | ||||
238 | def _setupcmd(ui, cmd, table, func, effectsmap): |
|
246 | def _setupcmd(ui, cmd, table, func, effectsmap): | |
239 | '''patch in command to command table and load effect map''' |
|
247 | '''patch in command to command table and load effect map''' | |
240 | def nocolor(orig, *args, **opts): |
|
248 | def nocolor(orig, *args, **opts): | |
@@ -256,7 +264,7 b' def _setupcmd(ui, cmd, table, func, effe' | |||||
256 | entry = extensions.wrapcommand(table, cmd, nocolor) |
|
264 | entry = extensions.wrapcommand(table, cmd, nocolor) | |
257 | entry[1].extend([ |
|
265 | entry[1].extend([ | |
258 | ('', 'color', 'auto', _("when to colorize (always, auto, or never)")), |
|
266 | ('', 'color', 'auto', _("when to colorize (always, auto, or never)")), | |
259 | ('', 'no-color', None, _("don't colorize output")), |
|
267 | ('', 'no-color', None, _("don't colorize output (DEPRECATED)")), | |
260 | ]) |
|
268 | ]) | |
261 |
|
269 | |||
262 | for status in effectsmap: |
|
270 | for status in effectsmap: |
@@ -142,23 +142,8 b' def convert(ui, src, dest=None, revmapfi' | |||||
142 | converted, and that any directory reorganization in the CVS |
|
142 | converted, and that any directory reorganization in the CVS | |
143 | sandbox is ignored. |
|
143 | sandbox is ignored. | |
144 |
|
144 | |||
145 | Because CVS does not have changesets, it is necessary to collect |
|
|||
146 | individual commits to CVS and merge them into changesets. CVS |
|
|||
147 | source uses its internal changeset merging code by default but can |
|
|||
148 | be configured to call the external 'cvsps' program by setting:: |
|
|||
149 |
|
||||
150 | --config convert.cvsps='cvsps -A -u --cvs-direct -q' |
|
|||
151 |
|
||||
152 | This option is deprecated and will be removed in Mercurial 1.4. |
|
|||
153 |
|
||||
154 | The options shown are the defaults. |
|
145 | The options shown are the defaults. | |
155 |
|
146 | |||
156 | Internal cvsps is selected by setting :: |
|
|||
157 |
|
||||
158 | --config convert.cvsps=builtin |
|
|||
159 |
|
||||
160 | and has a few more configurable options: |
|
|||
161 |
|
||||
162 | --config convert.cvsps.cache=True (boolean) |
|
147 | --config convert.cvsps.cache=True (boolean) | |
163 | Set to False to disable remote log caching, for testing and |
|
148 | Set to False to disable remote log caching, for testing and | |
164 | debugging purposes. |
|
149 | debugging purposes. | |
@@ -178,9 +163,10 b' def convert(ui, src, dest=None, revmapfi' | |||||
178 | add the most recent revision on the branch indicated in the |
|
163 | add the most recent revision on the branch indicated in the | |
179 | regex as the second parent of the changeset. |
|
164 | regex as the second parent of the changeset. | |
180 |
|
165 | |||
181 |
|
|
166 | An additional "debugcvsps" Mercurial command allows the builtin | |
182 | changeset merging code to be run without doing a conversion. Its |
|
167 | changeset merging code to be run without doing a conversion. Its | |
183 | parameters and output are similar to that of cvsps 2.1. |
|
168 | parameters and output are similar to that of cvsps 2.1. Please see | |
|
169 | the command help for more details. | |||
184 |
|
170 | |||
185 | Subversion Source |
|
171 | Subversion Source | |
186 | ----------------- |
|
172 | ----------------- |
@@ -266,7 +266,7 b' class commandline(object):' | |||||
266 |
|
266 | |||
267 | def _run(self, cmd, *args, **kwargs): |
|
267 | def _run(self, cmd, *args, **kwargs): | |
268 | cmdline = self._cmdline(cmd, *args, **kwargs) |
|
268 | cmdline = self._cmdline(cmd, *args, **kwargs) | |
269 |
self.ui.debug( |
|
269 | self.ui.debug('running: %s\n' % (cmdline,)) | |
270 | self.prerun() |
|
270 | self.prerun() | |
271 | try: |
|
271 | try: | |
272 | return util.popen(cmdline) |
|
272 | return util.popen(cmdline) | |
@@ -365,7 +365,7 b' class mapfile(dict):' | |||||
365 | return |
|
365 | return | |
366 | for i, line in enumerate(fp): |
|
366 | for i, line in enumerate(fp): | |
367 | try: |
|
367 | try: | |
368 |
key, value = line[ |
|
368 | key, value = line.splitlines()[0].rsplit(' ', 1) | |
369 | except ValueError: |
|
369 | except ValueError: | |
370 | raise util.Abort(_('syntax error in %s(%d): key/value pair expected') |
|
370 | raise util.Abort(_('syntax error in %s(%d): key/value pair expected') | |
371 | % (self.path, i+1)) |
|
371 | % (self.path, i+1)) |
@@ -22,21 +22,11 b' class convert_cvs(converter_source):' | |||||
22 | raise NoRepo("%s does not look like a CVS checkout" % path) |
|
22 | raise NoRepo("%s does not look like a CVS checkout" % path) | |
23 |
|
23 | |||
24 | checktool('cvs') |
|
24 | checktool('cvs') | |
25 | self.cmd = ui.config('convert', 'cvsps', 'builtin') |
|
|||
26 | cvspsexe = self.cmd.split(None, 1)[0] |
|
|||
27 | self.builtin = cvspsexe == 'builtin' |
|
|||
28 | if not self.builtin: |
|
|||
29 | ui.warn(_('warning: support for external cvsps is deprecated and ' |
|
|||
30 | 'will be removed in Mercurial 1.4\n')) |
|
|||
31 |
|
||||
32 | if not self.builtin: |
|
|||
33 | checktool(cvspsexe) |
|
|||
34 |
|
25 | |||
35 | self.changeset = None |
|
26 | self.changeset = None | |
36 | self.files = {} |
|
27 | self.files = {} | |
37 | self.tags = {} |
|
28 | self.tags = {} | |
38 | self.lastbranch = {} |
|
29 | self.lastbranch = {} | |
39 | self.parent = {} |
|
|||
40 | self.socket = None |
|
30 | self.socket = None | |
41 | self.cvsroot = open(os.path.join(cvs, "Root")).read()[:-1] |
|
31 | self.cvsroot = open(os.path.join(cvs, "Root")).read()[:-1] | |
42 | self.cvsrepo = open(os.path.join(cvs, "Repository")).read()[:-1] |
|
32 | self.cvsrepo = open(os.path.join(cvs, "Repository")).read()[:-1] | |
@@ -50,19 +40,13 b' class convert_cvs(converter_source):' | |||||
50 | self.changeset = {} |
|
40 | self.changeset = {} | |
51 |
|
41 | |||
52 | maxrev = 0 |
|
42 | maxrev = 0 | |
53 | cmd = self.cmd |
|
|||
54 | if self.rev: |
|
43 | if self.rev: | |
55 | # TODO: handle tags |
|
44 | # TODO: handle tags | |
56 | try: |
|
45 | try: | |
57 | # patchset number? |
|
46 | # patchset number? | |
58 | maxrev = int(self.rev) |
|
47 | maxrev = int(self.rev) | |
59 | except ValueError: |
|
48 | except ValueError: | |
60 | try: |
|
49 | raise util.Abort(_('revision %s is not a patchset number') % self.rev) | |
61 | # date |
|
|||
62 | util.parsedate(self.rev, ['%Y/%m/%d %H:%M:%S']) |
|
|||
63 | cmd = '%s -d "1970/01/01 00:00:01" -d "%s"' % (cmd, self.rev) |
|
|||
64 | except util.Abort: |
|
|||
65 | raise util.Abort(_('revision %s is not a patchset number or date') % self.rev) |
|
|||
66 |
|
50 | |||
67 | d = os.getcwd() |
|
51 | d = os.getcwd() | |
68 | try: |
|
52 | try: | |
@@ -71,116 +55,36 b' class convert_cvs(converter_source):' | |||||
71 | state = 0 |
|
55 | state = 0 | |
72 | filerevids = {} |
|
56 | filerevids = {} | |
73 |
|
57 | |||
74 | if self.builtin: |
|
58 | cache = 'update' | |
75 | # builtin cvsps code |
|
59 | if not self.ui.configbool('convert', 'cvsps.cache', True): | |
76 | self.ui.status(_('using builtin cvsps\n')) |
|
60 | cache = None | |
77 |
|
61 | db = cvsps.createlog(self.ui, cache=cache) | ||
78 | cache = 'update' |
|
62 | db = cvsps.createchangeset(self.ui, db, | |
79 |
|
|
63 | fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)), | |
80 | cache = None |
|
64 | mergeto=self.ui.config('convert', 'cvsps.mergeto', None), | |
81 | db = cvsps.createlog(self.ui, cache=cache) |
|
65 | mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None)) | |
82 | db = cvsps.createchangeset(self.ui, db, |
|
|||
83 | fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)), |
|
|||
84 | mergeto=self.ui.config('convert', 'cvsps.mergeto', None), |
|
|||
85 | mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None)) |
|
|||
86 |
|
||||
87 | for cs in db: |
|
|||
88 | if maxrev and cs.id>maxrev: |
|
|||
89 | break |
|
|||
90 | id = str(cs.id) |
|
|||
91 | cs.author = self.recode(cs.author) |
|
|||
92 | self.lastbranch[cs.branch] = id |
|
|||
93 | cs.comment = self.recode(cs.comment) |
|
|||
94 | date = util.datestr(cs.date) |
|
|||
95 | self.tags.update(dict.fromkeys(cs.tags, id)) |
|
|||
96 |
|
||||
97 | files = {} |
|
|||
98 | for f in cs.entries: |
|
|||
99 | files[f.file] = "%s%s" % ('.'.join([str(x) for x in f.revision]), |
|
|||
100 | ['', '(DEAD)'][f.dead]) |
|
|||
101 |
|
66 | |||
102 | # add current commit to set |
|
67 | for cs in db: | |
103 | c = commit(author=cs.author, date=date, |
|
68 | if maxrev and cs.id>maxrev: | |
104 | parents=[str(p.id) for p in cs.parents], |
|
69 | break | |
105 | desc=cs.comment, branch=cs.branch or '') |
|
70 | id = str(cs.id) | |
106 | self.changeset[id] = c |
|
71 | cs.author = self.recode(cs.author) | |
107 |
|
|
72 | self.lastbranch[cs.branch] = id | |
108 | else: |
|
73 | cs.comment = self.recode(cs.comment) | |
109 | # external cvsps |
|
74 | date = util.datestr(cs.date) | |
110 | for l in util.popen(cmd): |
|
75 | self.tags.update(dict.fromkeys(cs.tags, id)) | |
111 | if state == 0: # header |
|
|||
112 | if l.startswith("PatchSet"): |
|
|||
113 | id = l[9:-2] |
|
|||
114 | if maxrev and int(id) > maxrev: |
|
|||
115 | # ignore everything |
|
|||
116 | state = 3 |
|
|||
117 | elif l.startswith("Date:"): |
|
|||
118 | date = util.parsedate(l[6:-1], ["%Y/%m/%d %H:%M:%S"]) |
|
|||
119 | date = util.datestr(date) |
|
|||
120 | elif l.startswith("Branch:"): |
|
|||
121 | branch = l[8:-1] |
|
|||
122 | self.parent[id] = self.lastbranch.get(branch, 'bad') |
|
|||
123 | self.lastbranch[branch] = id |
|
|||
124 | elif l.startswith("Ancestor branch:"): |
|
|||
125 | ancestor = l[17:-1] |
|
|||
126 | # figure out the parent later |
|
|||
127 | self.parent[id] = self.lastbranch[ancestor] |
|
|||
128 | elif l.startswith("Author:"): |
|
|||
129 | author = self.recode(l[8:-1]) |
|
|||
130 | elif l.startswith("Tag:") or l.startswith("Tags:"): |
|
|||
131 | t = l[l.index(':')+1:] |
|
|||
132 | t = [ut.strip() for ut in t.split(',')] |
|
|||
133 | if (len(t) > 1) or (t[0] and (t[0] != "(none)")): |
|
|||
134 | self.tags.update(dict.fromkeys(t, id)) |
|
|||
135 | elif l.startswith("Log:"): |
|
|||
136 | # switch to gathering log |
|
|||
137 | state = 1 |
|
|||
138 | log = "" |
|
|||
139 | elif state == 1: # log |
|
|||
140 | if l == "Members: \n": |
|
|||
141 | # switch to gathering members |
|
|||
142 | files = {} |
|
|||
143 | oldrevs = [] |
|
|||
144 | log = self.recode(log[:-1]) |
|
|||
145 | state = 2 |
|
|||
146 | else: |
|
|||
147 | # gather log |
|
|||
148 | log += l |
|
|||
149 | elif state == 2: # members |
|
|||
150 | if l == "\n": # start of next entry |
|
|||
151 | state = 0 |
|
|||
152 | p = [self.parent[id]] |
|
|||
153 | if id == "1": |
|
|||
154 | p = [] |
|
|||
155 | if branch == "HEAD": |
|
|||
156 | branch = "" |
|
|||
157 | if branch: |
|
|||
158 | latest = 0 |
|
|||
159 | # the last changeset that contains a base |
|
|||
160 | # file is our parent |
|
|||
161 | for r in oldrevs: |
|
|||
162 | latest = max(filerevids.get(r, 0), latest) |
|
|||
163 | if latest: |
|
|||
164 | p = [latest] |
|
|||
165 |
|
76 | |||
166 | # add current commit to set |
|
77 | files = {} | |
167 | c = commit(author=author, date=date, parents=p, |
|
78 | for f in cs.entries: | |
168 | desc=log, branch=branch) |
|
79 | files[f.file] = "%s%s" % ('.'.join([str(x) for x in f.revision]), | |
169 | self.changeset[id] = c |
|
80 | ['', '(DEAD)'][f.dead]) | |
170 | self.files[id] = files |
|
|||
171 | else: |
|
|||
172 | colon = l.rfind(':') |
|
|||
173 | file = l[1:colon] |
|
|||
174 | rev = l[colon+1:-2] |
|
|||
175 | oldrev, rev = rev.split("->") |
|
|||
176 | files[file] = rev |
|
|||
177 |
|
81 | |||
178 | # save some information for identifying branch points |
|
82 | # add current commit to set | |
179 | oldrevs.append("%s:%s" % (oldrev, file)) |
|
83 | c = commit(author=cs.author, date=date, | |
180 | filerevids["%s:%s" % (rev, file)] = id |
|
84 | parents=[str(p.id) for p in cs.parents], | |
181 | elif state == 3: |
|
85 | desc=cs.comment, branch=cs.branch or '') | |
182 | # swallow all input |
|
86 | self.changeset[id] = c | |
183 | continue |
|
87 | self.files[id] = files | |
184 |
|
88 | |||
185 | self.heads = self.lastbranch.values() |
|
89 | self.heads = self.lastbranch.values() | |
186 | finally: |
|
90 | finally: |
@@ -199,7 +199,7 b' def createlog(ui, directory=None, root="' | |||||
199 |
|
199 | |||
200 | cmd = [util.shellquote(arg) for arg in cmd] |
|
200 | cmd = [util.shellquote(arg) for arg in cmd] | |
201 | ui.note(_("running %s\n") % (' '.join(cmd))) |
|
201 | ui.note(_("running %s\n") % (' '.join(cmd))) | |
202 |
ui.debug |
|
202 | ui.debug("prefix=%r directory=%r root=%r\n" % (prefix, directory, root)) | |
203 |
|
203 | |||
204 | pfp = util.popen(' '.join(cmd)) |
|
204 | pfp = util.popen(' '.join(cmd)) | |
205 | peek = pfp.readline() |
|
205 | peek = pfp.readline() | |
@@ -378,7 +378,7 b' def createlog(ui, directory=None, root="' | |||||
378 | e.revision[-1] == 1 and # 1.1 or 1.1.x.1 |
|
378 | e.revision[-1] == 1 and # 1.1 or 1.1.x.1 | |
379 | len(e.comment) == 1 and |
|
379 | len(e.comment) == 1 and | |
380 | file_added_re.match(e.comment[0])): |
|
380 | file_added_re.match(e.comment[0])): | |
381 |
ui.debug |
|
381 | ui.debug('found synthetic revision in %s: %r\n' | |
382 | % (e.rcs, e.comment[0])) |
|
382 | % (e.rcs, e.comment[0])) | |
383 | e.synthetic = True |
|
383 | e.synthetic = True | |
384 |
|
384 |
@@ -75,7 +75,7 b' class darcs_source(converter_source, com' | |||||
75 | self.parents[child] = [] |
|
75 | self.parents[child] = [] | |
76 |
|
76 | |||
77 | def after(self): |
|
77 | def after(self): | |
78 |
self.ui.debug( |
|
78 | self.ui.debug('cleaning up %s\n' % self.tmppath) | |
79 | shutil.rmtree(self.tmppath, ignore_errors=True) |
|
79 | shutil.rmtree(self.tmppath, ignore_errors=True) | |
80 |
|
80 | |||
81 | def xml(self, cmd, **kwargs): |
|
81 | def xml(self, cmd, **kwargs): | |
@@ -85,6 +85,17 b' class darcs_source(converter_source, com' | |||||
85 | self.checkexit(fp.close()) |
|
85 | self.checkexit(fp.close()) | |
86 | return etree.getroot() |
|
86 | return etree.getroot() | |
87 |
|
87 | |||
|
88 | def manifest(self): | |||
|
89 | man = [] | |||
|
90 | output, status = self.run('show', 'files', no_directories=True, | |||
|
91 | repodir=self.tmppath) | |||
|
92 | self.checkexit(status) | |||
|
93 | for line in output.split('\n'): | |||
|
94 | path = line[2:] | |||
|
95 | if path: | |||
|
96 | man.append(path) | |||
|
97 | return man | |||
|
98 | ||||
88 | def getheads(self): |
|
99 | def getheads(self): | |
89 | return self.parents[None] |
|
100 | return self.parents[None] | |
90 |
|
101 | |||
@@ -107,18 +118,35 b' class darcs_source(converter_source, com' | |||||
107 | output, status = self.run('revert', all=True, repodir=self.tmppath) |
|
118 | output, status = self.run('revert', all=True, repodir=self.tmppath) | |
108 | self.checkexit(status, output) |
|
119 | self.checkexit(status, output) | |
109 |
|
120 | |||
110 | def getchanges(self, rev): |
|
121 | def getchanges(self, rev): | |
111 | self.pull(rev) |
|
|||
112 | copies = {} |
|
122 | copies = {} | |
113 | changes = [] |
|
123 | changes = [] | |
|
124 | man = None | |||
114 | for elt in self.changes[rev].find('summary').getchildren(): |
|
125 | for elt in self.changes[rev].find('summary').getchildren(): | |
115 | if elt.tag in ('add_directory', 'remove_directory'): |
|
126 | if elt.tag in ('add_directory', 'remove_directory'): | |
116 | continue |
|
127 | continue | |
117 | if elt.tag == 'move': |
|
128 | if elt.tag == 'move': | |
118 | changes.append((elt.get('from'), rev)) |
|
129 | if man is None: | |
119 | copies[elt.get('from')] = elt.get('to') |
|
130 | man = self.manifest() | |
|
131 | source, dest = elt.get('from'), elt.get('to') | |||
|
132 | if source in man: | |||
|
133 | # File move | |||
|
134 | changes.append((source, rev)) | |||
|
135 | changes.append((dest, rev)) | |||
|
136 | copies[dest] = source | |||
|
137 | else: | |||
|
138 | # Directory move, deduce file moves from manifest | |||
|
139 | source = source + '/' | |||
|
140 | for f in man: | |||
|
141 | if not f.startswith(source): | |||
|
142 | continue | |||
|
143 | fdest = dest + '/' + f[len(source):] | |||
|
144 | changes.append((f, rev)) | |||
|
145 | changes.append((fdest, rev)) | |||
|
146 | copies[fdest] = f | |||
120 | else: |
|
147 | else: | |
121 | changes.append((elt.text.strip(), rev)) |
|
148 | changes.append((elt.text.strip(), rev)) | |
|
149 | self.pull(rev) | |||
122 | self.lastrev = rev |
|
150 | self.lastrev = rev | |
123 | return sorted(changes), copies |
|
151 | return sorted(changes), copies | |
124 |
|
152 |
@@ -125,7 +125,7 b' class gnuarch_source(converter_source, c' | |||||
125 | break |
|
125 | break | |
126 |
|
126 | |||
127 | def after(self): |
|
127 | def after(self): | |
128 |
self.ui.debug( |
|
128 | self.ui.debug('cleaning up %s\n' % self.tmppath) | |
129 | shutil.rmtree(self.tmppath, ignore_errors=True) |
|
129 | shutil.rmtree(self.tmppath, ignore_errors=True) | |
130 |
|
130 | |||
131 | def getheads(self): |
|
131 | def getheads(self): | |
@@ -195,7 +195,7 b' class gnuarch_source(converter_source, c' | |||||
195 | return os.system(cmdline) |
|
195 | return os.system(cmdline) | |
196 |
|
196 | |||
197 | def _update(self, rev): |
|
197 | def _update(self, rev): | |
198 |
self.ui.debug( |
|
198 | self.ui.debug('applying revision %s...\n' % rev) | |
199 | changeset, status = self.runlines('replay', '-d', self.tmppath, |
|
199 | changeset, status = self.runlines('replay', '-d', self.tmppath, | |
200 | rev) |
|
200 | rev) | |
201 | if status: |
|
201 | if status: | |
@@ -205,7 +205,7 b' class gnuarch_source(converter_source, c' | |||||
205 | self._obtainrevision(rev) |
|
205 | self._obtainrevision(rev) | |
206 | else: |
|
206 | else: | |
207 | old_rev = self.parents[rev][0] |
|
207 | old_rev = self.parents[rev][0] | |
208 |
self.ui.debug |
|
208 | self.ui.debug('computing changeset between %s and %s...\n' | |
209 | % (old_rev, rev)) |
|
209 | % (old_rev, rev)) | |
210 | self._parsechangeset(changeset, rev) |
|
210 | self._parsechangeset(changeset, rev) | |
211 |
|
211 | |||
@@ -254,10 +254,10 b' class gnuarch_source(converter_source, c' | |||||
254 | return changes, copies |
|
254 | return changes, copies | |
255 |
|
255 | |||
256 | def _obtainrevision(self, rev): |
|
256 | def _obtainrevision(self, rev): | |
257 |
self.ui.debug( |
|
257 | self.ui.debug('obtaining revision %s...\n' % rev) | |
258 | output = self._execute('get', rev, self.tmppath) |
|
258 | output = self._execute('get', rev, self.tmppath) | |
259 | self.checkexit(output) |
|
259 | self.checkexit(output) | |
260 |
self.ui.debug( |
|
260 | self.ui.debug('analyzing revision %s...\n' % rev) | |
261 | files = self._readcontents(self.tmppath) |
|
261 | files = self._readcontents(self.tmppath) | |
262 | self.changes[rev].add_files += files |
|
262 | self.changes[rev].add_files += files | |
263 |
|
263 |
@@ -55,12 +55,12 b' class mercurial_sink(converter_sink):' | |||||
55 | self.filemapmode = False |
|
55 | self.filemapmode = False | |
56 |
|
56 | |||
57 | def before(self): |
|
57 | def before(self): | |
58 |
self.ui.debug( |
|
58 | self.ui.debug('run hg sink pre-conversion action\n') | |
59 | self.wlock = self.repo.wlock() |
|
59 | self.wlock = self.repo.wlock() | |
60 | self.lock = self.repo.lock() |
|
60 | self.lock = self.repo.lock() | |
61 |
|
61 | |||
62 | def after(self): |
|
62 | def after(self): | |
63 |
self.ui.debug( |
|
63 | self.ui.debug('run hg sink post-conversion action\n') | |
64 | self.lock.release() |
|
64 | self.lock.release() | |
65 | self.wlock.release() |
|
65 | self.wlock.release() | |
66 |
|
66 | |||
@@ -248,8 +248,7 b' class mercurial_source(converter_source)' | |||||
248 | return self.lastctx |
|
248 | return self.lastctx | |
249 |
|
249 | |||
250 | def parents(self, ctx): |
|
250 | def parents(self, ctx): | |
251 |
return [p |
|
251 | return [p for p in ctx.parents() if p and self.keep(p.node())] | |
252 | if p and self.keep(p.node())] |
|
|||
253 |
|
252 | |||
254 | def getheads(self): |
|
253 | def getheads(self): | |
255 | if self.rev: |
|
254 | if self.rev: | |
@@ -275,20 +274,20 b' class mercurial_source(converter_source)' | |||||
275 | if self.ignoreerrors: |
|
274 | if self.ignoreerrors: | |
276 | # calling getcopies() is a simple way to detect missing |
|
275 | # calling getcopies() is a simple way to detect missing | |
277 | # revlogs and populate self.ignored |
|
276 | # revlogs and populate self.ignored | |
278 | self.getcopies(ctx, files) |
|
277 | self.getcopies(ctx, parents, files) | |
279 | return [(f, rev) for f in files if f not in self.ignored], {} |
|
278 | return [(f, rev) for f in files if f not in self.ignored], {} | |
280 | if self._changescache and self._changescache[0] == rev: |
|
279 | if self._changescache and self._changescache[0] == rev: | |
281 | m, a, r = self._changescache[1] |
|
280 | m, a, r = self._changescache[1] | |
282 | else: |
|
281 | else: | |
283 | m, a, r = self.repo.status(parents[0], ctx.node())[:3] |
|
282 | m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3] | |
284 | # getcopies() detects missing revlogs early, run it before |
|
283 | # getcopies() detects missing revlogs early, run it before | |
285 | # filtering the changes. |
|
284 | # filtering the changes. | |
286 | copies = self.getcopies(ctx, m + a) |
|
285 | copies = self.getcopies(ctx, parents, m + a) | |
287 | changes = [(name, rev) for name in m + a + r |
|
286 | changes = [(name, rev) for name in m + a + r | |
288 | if name not in self.ignored] |
|
287 | if name not in self.ignored] | |
289 | return sorted(changes), copies |
|
288 | return sorted(changes), copies | |
290 |
|
289 | |||
291 | def getcopies(self, ctx, files): |
|
290 | def getcopies(self, ctx, parents, files): | |
292 | copies = {} |
|
291 | copies = {} | |
293 | for name in files: |
|
292 | for name in files: | |
294 | if name in self.ignored: |
|
293 | if name in self.ignored: | |
@@ -297,6 +296,14 b' class mercurial_source(converter_source)' | |||||
297 | copysource, copynode = ctx.filectx(name).renamed() |
|
296 | copysource, copynode = ctx.filectx(name).renamed() | |
298 | if copysource in self.ignored or not self.keep(copynode): |
|
297 | if copysource in self.ignored or not self.keep(copynode): | |
299 | continue |
|
298 | continue | |
|
299 | # Ignore copy sources not in parent revisions | |||
|
300 | found = False | |||
|
301 | for p in parents: | |||
|
302 | if copysource in p: | |||
|
303 | found = True | |||
|
304 | break | |||
|
305 | if not found: | |||
|
306 | continue | |||
300 | copies[name] = copysource |
|
307 | copies[name] = copysource | |
301 | except TypeError: |
|
308 | except TypeError: | |
302 | pass |
|
309 | pass | |
@@ -309,7 +316,7 b' class mercurial_source(converter_source)' | |||||
309 |
|
316 | |||
310 | def getcommit(self, rev): |
|
317 | def getcommit(self, rev): | |
311 | ctx = self.changectx(rev) |
|
318 | ctx = self.changectx(rev) | |
312 |
parents = [hex( |
|
319 | parents = [p.hex() for p in self.parents(ctx)] | |
313 | if self.saverev: |
|
320 | if self.saverev: | |
314 | crev = rev |
|
321 | crev = rev | |
315 | else: |
|
322 | else: | |
@@ -332,7 +339,7 b' class mercurial_source(converter_source)' | |||||
332 | changes = [], ctx.manifest().keys(), [] |
|
339 | changes = [], ctx.manifest().keys(), [] | |
333 | else: |
|
340 | else: | |
334 | i = i or 0 |
|
341 | i = i or 0 | |
335 | changes = self.repo.status(parents[i], ctx.node())[:3] |
|
342 | changes = self.repo.status(parents[i].node(), ctx.node())[:3] | |
336 | changes = [[f for f in l if f not in self.ignored] for l in changes] |
|
343 | changes = [[f for f in l if f not in self.ignored] for l in changes] | |
337 |
|
344 | |||
338 | if i == 0: |
|
345 | if i == 0: | |
@@ -348,10 +355,10 b' class mercurial_source(converter_source)' | |||||
348 | self.convertfp.flush() |
|
355 | self.convertfp.flush() | |
349 |
|
356 | |||
350 | def before(self): |
|
357 | def before(self): | |
351 |
self.ui.debug( |
|
358 | self.ui.debug('run hg source pre-conversion action\n') | |
352 |
|
359 | |||
353 | def after(self): |
|
360 | def after(self): | |
354 |
self.ui.debug( |
|
361 | self.ui.debug('run hg source post-conversion action\n') | |
355 |
|
362 | |||
356 | def hasnativeorder(self): |
|
363 | def hasnativeorder(self): | |
357 | return True |
|
364 | return True |
@@ -53,7 +53,7 b' class p4_source(converter_source):' | |||||
53 | def _parse_view(self, path): |
|
53 | def _parse_view(self, path): | |
54 | "Read changes affecting the path" |
|
54 | "Read changes affecting the path" | |
55 | cmd = 'p4 -G changes -s submitted "%s"' % path |
|
55 | cmd = 'p4 -G changes -s submitted "%s"' % path | |
56 | stdout = util.popen(cmd) |
|
56 | stdout = util.popen(cmd, mode='rb') | |
57 | for d in loaditer(stdout): |
|
57 | for d in loaditer(stdout): | |
58 | c = d.get("change", None) |
|
58 | c = d.get("change", None) | |
59 | if c: |
|
59 | if c: | |
@@ -72,7 +72,7 b' class p4_source(converter_source):' | |||||
72 | views = {"//": ""} |
|
72 | views = {"//": ""} | |
73 | else: |
|
73 | else: | |
74 | cmd = 'p4 -G client -o "%s"' % path |
|
74 | cmd = 'p4 -G client -o "%s"' % path | |
75 | clientspec = marshal.load(util.popen(cmd)) |
|
75 | clientspec = marshal.load(util.popen(cmd, mode='rb')) | |
76 |
|
76 | |||
77 | views = {} |
|
77 | views = {} | |
78 | for client in clientspec: |
|
78 | for client in clientspec: | |
@@ -105,7 +105,7 b' class p4_source(converter_source):' | |||||
105 | lastid = None |
|
105 | lastid = None | |
106 | for change in self.p4changes: |
|
106 | for change in self.p4changes: | |
107 | cmd = "p4 -G describe %s" % change |
|
107 | cmd = "p4 -G describe %s" % change | |
108 | stdout = util.popen(cmd) |
|
108 | stdout = util.popen(cmd, mode='rb') | |
109 | d = marshal.load(stdout) |
|
109 | d = marshal.load(stdout) | |
110 |
|
110 | |||
111 | desc = self.recode(d["desc"]) |
|
111 | desc = self.recode(d["desc"]) | |
@@ -147,7 +147,7 b' class p4_source(converter_source):' | |||||
147 |
|
147 | |||
148 | def getfile(self, name, rev): |
|
148 | def getfile(self, name, rev): | |
149 | cmd = 'p4 -G print "%s#%s"' % (self.depotname[name], rev) |
|
149 | cmd = 'p4 -G print "%s#%s"' % (self.depotname[name], rev) | |
150 | stdout = util.popen(cmd) |
|
150 | stdout = util.popen(cmd, mode='rb') | |
151 |
|
151 | |||
152 | mode = None |
|
152 | mode = None | |
153 | contents = "" |
|
153 | contents = "" |
@@ -22,6 +22,7 b' from common import NoRepo, MissingTool, ' | |||||
22 | from common import commandline, converter_source, converter_sink, mapfile |
|
22 | from common import commandline, converter_source, converter_sink, mapfile | |
23 |
|
23 | |||
24 | try: |
|
24 | try: | |
|
25 | raise ImportError("SVN support disabled due to license incompatibility") | |||
25 | from svn.core import SubversionException, Pool |
|
26 | from svn.core import SubversionException, Pool | |
26 | import svn |
|
27 | import svn | |
27 | import svn.client |
|
28 | import svn.client | |
@@ -114,7 +115,11 b' class logstream(object):' | |||||
114 |
|
115 | |||
115 | def __iter__(self): |
|
116 | def __iter__(self): | |
116 | while True: |
|
117 | while True: | |
117 | entry = pickle.load(self._stdout) |
|
118 | try: | |
|
119 | entry = pickle.load(self._stdout) | |||
|
120 | except EOFError: | |||
|
121 | raise util.Abort(_('Mercurial failed to run itself, check' | |||
|
122 | ' hg executable is in PATH')) | |||
118 | try: |
|
123 | try: | |
119 | orig_paths, revnum, author, date, message = entry |
|
124 | orig_paths, revnum, author, date, message = entry | |
120 | except: |
|
125 | except: | |
@@ -152,11 +157,13 b" protomap = {'http': httpcheck," | |||||
152 | def issvnurl(url): |
|
157 | def issvnurl(url): | |
153 | try: |
|
158 | try: | |
154 | proto, path = url.split('://', 1) |
|
159 | proto, path = url.split('://', 1) | |
155 | path = urllib.url2pathname(path) |
|
160 | if proto == 'file': | |
|
161 | path = urllib.url2pathname(path) | |||
156 | except ValueError: |
|
162 | except ValueError: | |
157 | proto = 'file' |
|
163 | proto = 'file' | |
158 | path = os.path.abspath(url) |
|
164 | path = os.path.abspath(url) | |
159 | path = path.replace(os.sep, '/') |
|
165 | if proto == 'file': | |
|
166 | path = path.replace(os.sep, '/') | |||
160 | check = protomap.get(proto, lambda p, p2: False) |
|
167 | check = protomap.get(proto, lambda p, p2: False) | |
161 | while '/' in path: |
|
168 | while '/' in path: | |
162 | if check(path, proto): |
|
169 | if check(path, proto): | |
@@ -531,7 +538,7 b' class svn_source(converter_source):' | |||||
531 | """ |
|
538 | """ | |
532 | if not path.startswith(self.rootmodule): |
|
539 | if not path.startswith(self.rootmodule): | |
533 | # Requests on foreign branches may be forbidden at server level |
|
540 | # Requests on foreign branches may be forbidden at server level | |
534 |
self.ui.debug( |
|
541 | self.ui.debug('ignoring foreign branch %r\n' % path) | |
535 | return None |
|
542 | return None | |
536 |
|
543 | |||
537 | if not stop: |
|
544 | if not stop: | |
@@ -559,7 +566,7 b' class svn_source(converter_source):' | |||||
559 | if not path.startswith(p) or not paths[p].copyfrom_path: |
|
566 | if not path.startswith(p) or not paths[p].copyfrom_path: | |
560 | continue |
|
567 | continue | |
561 | newpath = paths[p].copyfrom_path + path[len(p):] |
|
568 | newpath = paths[p].copyfrom_path + path[len(p):] | |
562 |
self.ui.debug |
|
569 | self.ui.debug("branch renamed from %s to %s at %d\n" % | |
563 | (path, newpath, revnum)) |
|
570 | (path, newpath, revnum)) | |
564 | path = newpath |
|
571 | path = newpath | |
565 | break |
|
572 | break | |
@@ -567,7 +574,7 b' class svn_source(converter_source):' | |||||
567 | stream.close() |
|
574 | stream.close() | |
568 |
|
575 | |||
569 | if not path.startswith(self.rootmodule): |
|
576 | if not path.startswith(self.rootmodule): | |
570 |
self.ui.debug( |
|
577 | self.ui.debug('ignoring foreign branch %r\n' % path) | |
571 | return None |
|
578 | return None | |
572 | return self.revid(dirent.created_rev, path) |
|
579 | return self.revid(dirent.created_rev, path) | |
573 |
|
580 | |||
@@ -579,7 +586,7 b' class svn_source(converter_source):' | |||||
579 | prevmodule = self.prevmodule |
|
586 | prevmodule = self.prevmodule | |
580 | if prevmodule is None: |
|
587 | if prevmodule is None: | |
581 | prevmodule = '' |
|
588 | prevmodule = '' | |
582 |
self.ui.debug( |
|
589 | self.ui.debug("reparent to %s\n" % svnurl) | |
583 | svn.ra.reparent(self.ra, svnurl) |
|
590 | svn.ra.reparent(self.ra, svnurl) | |
584 | self.prevmodule = module |
|
591 | self.prevmodule = module | |
585 | return prevmodule |
|
592 | return prevmodule | |
@@ -612,14 +619,14 b' class svn_source(converter_source):' | |||||
612 | copyfrom_path = self.getrelpath(ent.copyfrom_path, pmodule) |
|
619 | copyfrom_path = self.getrelpath(ent.copyfrom_path, pmodule) | |
613 | if not copyfrom_path: |
|
620 | if not copyfrom_path: | |
614 | continue |
|
621 | continue | |
615 |
self.ui.debug |
|
622 | self.ui.debug("copied to %s from %s@%s\n" % | |
616 | (entrypath, copyfrom_path, ent.copyfrom_rev)) |
|
623 | (entrypath, copyfrom_path, ent.copyfrom_rev)) | |
617 | copies[self.recode(entrypath)] = self.recode(copyfrom_path) |
|
624 | copies[self.recode(entrypath)] = self.recode(copyfrom_path) | |
618 | elif kind == 0: # gone, but had better be a deleted *file* |
|
625 | elif kind == 0: # gone, but had better be a deleted *file* | |
619 |
self.ui.debug( |
|
626 | self.ui.debug("gone from %s\n" % ent.copyfrom_rev) | |
620 | pmodule, prevnum = self.revsplit(parents[0])[1:] |
|
627 | pmodule, prevnum = self.revsplit(parents[0])[1:] | |
621 | parentpath = pmodule + "/" + entrypath |
|
628 | parentpath = pmodule + "/" + entrypath | |
622 |
self.ui.debug( |
|
629 | self.ui.debug("entry %s\n" % parentpath) | |
623 |
|
630 | |||
624 | # We can avoid the reparent calls if the module has |
|
631 | # We can avoid the reparent calls if the module has | |
625 | # not changed but it probably does not worth the pain. |
|
632 | # not changed but it probably does not worth the pain. | |
@@ -646,7 +653,7 b' class svn_source(converter_source):' | |||||
646 | del copies[childpath] |
|
653 | del copies[childpath] | |
647 | entries.append(childpath) |
|
654 | entries.append(childpath) | |
648 | else: |
|
655 | else: | |
649 |
self.ui.debug( |
|
656 | self.ui.debug('unknown path in revision %d: %s\n' % \ | |
650 | (revnum, path)) |
|
657 | (revnum, path)) | |
651 | elif kind == svn.core.svn_node_dir: |
|
658 | elif kind == svn.core.svn_node_dir: | |
652 | # If the directory just had a prop change, |
|
659 | # If the directory just had a prop change, | |
@@ -679,7 +686,7 b' class svn_source(converter_source):' | |||||
679 | if not copyfrompath: |
|
686 | if not copyfrompath: | |
680 | continue |
|
687 | continue | |
681 | copyfrom[path] = ent |
|
688 | copyfrom[path] = ent | |
682 |
self.ui.debug |
|
689 | self.ui.debug("mark %s came from %s:%d\n" | |
683 | % (path, copyfrompath, ent.copyfrom_rev)) |
|
690 | % (path, copyfrompath, ent.copyfrom_rev)) | |
684 | children = self._find_children(ent.copyfrom_path, ent.copyfrom_rev) |
|
691 | children = self._find_children(ent.copyfrom_path, ent.copyfrom_rev) | |
685 | children.sort() |
|
692 | children.sort() | |
@@ -703,7 +710,7 b' class svn_source(converter_source):' | |||||
703 | """Return the parsed commit object or None, and True if |
|
710 | """Return the parsed commit object or None, and True if | |
704 | the revision is a branch root. |
|
711 | the revision is a branch root. | |
705 | """ |
|
712 | """ | |
706 |
self.ui.debug |
|
713 | self.ui.debug("parsing revision %d (%d changes)\n" % | |
707 | (revnum, len(orig_paths))) |
|
714 | (revnum, len(orig_paths))) | |
708 |
|
715 | |||
709 | branched = False |
|
716 | branched = False | |
@@ -732,7 +739,7 b' class svn_source(converter_source):' | |||||
732 | self.ui.note(_('found parent of branch %s at %d: %s\n') % |
|
739 | self.ui.note(_('found parent of branch %s at %d: %s\n') % | |
733 | (self.module, prevnum, prevmodule)) |
|
740 | (self.module, prevnum, prevmodule)) | |
734 | else: |
|
741 | else: | |
735 |
self.ui.debug( |
|
742 | self.ui.debug("no copyfrom path, don't know what to do.\n") | |
736 |
|
743 | |||
737 | paths = [] |
|
744 | paths = [] | |
738 | # filter out unrelated paths |
|
745 | # filter out unrelated paths | |
@@ -785,7 +792,7 b' class svn_source(converter_source):' | |||||
785 | lastonbranch = True |
|
792 | lastonbranch = True | |
786 | break |
|
793 | break | |
787 | if not paths: |
|
794 | if not paths: | |
788 |
self.ui.debug( |
|
795 | self.ui.debug('revision %d has no entries\n' % revnum) | |
789 | continue |
|
796 | continue | |
790 | cset, lastonbranch = parselogentry(paths, revnum, author, |
|
797 | cset, lastonbranch = parselogentry(paths, revnum, author, | |
791 | date, message) |
|
798 | date, message) | |
@@ -867,7 +874,7 b' class svn_source(converter_source):' | |||||
867 | return relative |
|
874 | return relative | |
868 |
|
875 | |||
869 | # The path is outside our tracked tree... |
|
876 | # The path is outside our tracked tree... | |
870 |
self.ui.debug( |
|
877 | self.ui.debug('%r is not under %r, ignoring\n' % (path, module)) | |
871 | return None |
|
878 | return None | |
872 |
|
879 | |||
873 | def _checkpath(self, path, revnum): |
|
880 | def _checkpath(self, path, revnum): |
@@ -42,9 +42,9 b' fast (at least faster than having to com' | |||||
42 | ''' |
|
42 | ''' | |
43 |
|
43 | |||
44 | from mercurial.i18n import _ |
|
44 | from mercurial.i18n import _ | |
45 | from mercurial.node import short |
|
45 | from mercurial.node import short, nullid | |
46 | from mercurial import cmdutil, util, commands |
|
46 | from mercurial import cmdutil, util, commands | |
47 | import os, shlex, shutil, tempfile |
|
47 | import os, shlex, shutil, tempfile, re | |
48 |
|
48 | |||
49 | def snapshot(ui, repo, files, node, tmproot): |
|
49 | def snapshot(ui, repo, files, node, tmproot): | |
50 | '''snapshot files as of some revision |
|
50 | '''snapshot files as of some revision | |
@@ -69,7 +69,7 b' def snapshot(ui, repo, files, node, tmpr' | |||||
69 | for fn in files: |
|
69 | for fn in files: | |
70 | wfn = util.pconvert(fn) |
|
70 | wfn = util.pconvert(fn) | |
71 | if not wfn in ctx: |
|
71 | if not wfn in ctx: | |
72 | # skipping new file after a merge ? |
|
72 | # File doesn't exist; could be a bogus modify | |
73 | continue |
|
73 | continue | |
74 | ui.note(' %s\n' % wfn) |
|
74 | ui.note(' %s\n' % wfn) | |
75 | dest = os.path.join(base, wfn) |
|
75 | dest = os.path.join(base, wfn) | |
@@ -96,59 +96,102 b' def dodiff(ui, repo, diffcmd, diffopts, ' | |||||
96 |
|
96 | |||
97 | revs = opts.get('rev') |
|
97 | revs = opts.get('rev') | |
98 | change = opts.get('change') |
|
98 | change = opts.get('change') | |
|
99 | args = ' '.join(diffopts) | |||
|
100 | do3way = '$parent2' in args | |||
99 |
|
101 | |||
100 | if revs and change: |
|
102 | if revs and change: | |
101 | msg = _('cannot specify --rev and --change at the same time') |
|
103 | msg = _('cannot specify --rev and --change at the same time') | |
102 | raise util.Abort(msg) |
|
104 | raise util.Abort(msg) | |
103 | elif change: |
|
105 | elif change: | |
104 | node2 = repo.lookup(change) |
|
106 | node2 = repo.lookup(change) | |
105 |
node1 = repo |
|
107 | node1a, node1b = repo.changelog.parents(node2) | |
106 | else: |
|
108 | else: | |
107 | node1, node2 = cmdutil.revpair(repo, revs) |
|
109 | node1a, node2 = cmdutil.revpair(repo, revs) | |
|
110 | if not revs: | |||
|
111 | node1b = repo.dirstate.parents()[1] | |||
|
112 | else: | |||
|
113 | node1b = nullid | |||
|
114 | ||||
|
115 | # Disable 3-way merge if there is only one parent | |||
|
116 | if do3way: | |||
|
117 | if node1b == nullid: | |||
|
118 | do3way = False | |||
108 |
|
119 | |||
109 | matcher = cmdutil.match(repo, pats, opts) |
|
120 | matcher = cmdutil.match(repo, pats, opts) | |
110 |
mod |
|
121 | mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher)[:3]) | |
111 | if not (modified or added or removed): |
|
122 | if do3way: | |
112 | return 0 |
|
123 | mod_b, add_b, rem_b = map(set, repo.status(node1b, node2, matcher)[:3]) | |
|
124 | else: | |||
|
125 | mod_b, add_b, rem_b = set(), set(), set() | |||
|
126 | modadd = mod_a | add_a | mod_b | add_b | |||
|
127 | common = modadd | rem_a | rem_b | |||
|
128 | if not common: | |||
|
129 | return 0 | |||
113 |
|
130 | |||
114 | tmproot = tempfile.mkdtemp(prefix='extdiff.') |
|
131 | tmproot = tempfile.mkdtemp(prefix='extdiff.') | |
115 | dir2root = '' |
|
|||
116 | try: |
|
132 | try: | |
117 | # Always make a copy of node1 |
|
133 | # Always make a copy of node1a (and node1b, if applicable) | |
118 | dir1 = snapshot(ui, repo, modified + removed, node1, tmproot)[0] |
|
134 | dir1a_files = mod_a | rem_a | ((mod_b | add_b) - add_a) | |
119 | changes = len(modified) + len(removed) + len(added) |
|
135 | dir1a = snapshot(ui, repo, dir1a_files, node1a, tmproot)[0] | |
|
136 | if do3way: | |||
|
137 | dir1b_files = mod_b | rem_b | ((mod_a | add_a) - add_b) | |||
|
138 | dir1b = snapshot(ui, repo, dir1b_files, node1b, tmproot)[0] | |||
|
139 | else: | |||
|
140 | dir1b = None | |||
|
141 | ||||
|
142 | fns_and_mtime = [] | |||
120 |
|
143 | |||
121 | # If node2 in not the wc or there is >1 change, copy it |
|
144 | # If node2 in not the wc or there is >1 change, copy it | |
122 | if node2 or changes > 1: |
|
145 | dir2root = '' | |
123 | dir2, fns_and_mtime = snapshot(ui, repo, modified + added, node2, tmproot) |
|
146 | if node2: | |
|
147 | dir2 = snapshot(ui, repo, modadd, node2, tmproot)[0] | |||
|
148 | elif len(common) > 1: | |||
|
149 | #we only actually need to get the files to copy back to the working | |||
|
150 | #dir in this case (because the other cases are: diffing 2 revisions | |||
|
151 | #or single file -- in which case the file is already directly passed | |||
|
152 | #to the diff tool). | |||
|
153 | dir2, fns_and_mtime = snapshot(ui, repo, modadd, None, tmproot) | |||
124 | else: |
|
154 | else: | |
125 | # This lets the diff tool open the changed file directly |
|
155 | # This lets the diff tool open the changed file directly | |
126 | dir2 = '' |
|
156 | dir2 = '' | |
127 | dir2root = repo.root |
|
157 | dir2root = repo.root | |
128 | fns_and_mtime = [] |
|
|||
129 |
|
158 | |||
130 | # If only one change, diff the files instead of the directories |
|
159 | # If only one change, diff the files instead of the directories | |
131 | if changes == 1 : |
|
160 | # Handle bogus modifies correctly by checking if the files exist | |
132 |
|
|
161 | if len(common) == 1: | |
133 | dir1 = os.path.join(dir1, util.localpath(modified[0])) |
|
162 | common_file = util.localpath(common.pop()) | |
134 |
|
|
163 | dir1a = os.path.join(dir1a, common_file) | |
135 | elif len(removed) : |
|
164 | if not os.path.isfile(os.path.join(tmproot, dir1a)): | |
136 | dir1 = os.path.join(dir1, util.localpath(removed[0])) |
|
165 | dir1a = os.devnull | |
137 | dir2 = os.devnull |
|
166 | if do3way: | |
138 | else: |
|
167 | dir1b = os.path.join(dir1b, common_file) | |
139 | dir1 = os.devnull |
|
168 | if not os.path.isfile(os.path.join(tmproot, dir1b)): | |
140 | dir2 = os.path.join(dir2root, dir2, util.localpath(added[0])) |
|
169 | dir1b = os.devnull | |
|
170 | dir2 = os.path.join(dir2root, dir2, common_file) | |||
141 |
|
171 | |||
142 | cmdline = ('%s %s %s %s' % |
|
172 | # Function to quote file/dir names in the argument string | |
143 | (util.shellquote(diffcmd), ' '.join(diffopts), |
|
173 | # When not operating in 3-way mode, an empty string is returned for parent2 | |
144 | util.shellquote(dir1), util.shellquote(dir2))) |
|
174 | replace = dict(parent=dir1a, parent1=dir1a, parent2=dir1b, child=dir2) | |
145 | ui.debug(_('running %r in %s\n') % (cmdline, tmproot)) |
|
175 | def quote(match): | |
|
176 | key = match.group()[1:] | |||
|
177 | if not do3way and key == 'parent2': | |||
|
178 | return '' | |||
|
179 | return util.shellquote(replace[key]) | |||
|
180 | ||||
|
181 | # Match parent2 first, so 'parent1?' will match both parent1 and parent | |||
|
182 | regex = '\$(parent2|parent1?|child)' | |||
|
183 | if not do3way and not re.search(regex, args): | |||
|
184 | args += ' $parent1 $child' | |||
|
185 | args = re.sub(regex, quote, args) | |||
|
186 | cmdline = util.shellquote(diffcmd) + ' ' + args | |||
|
187 | ||||
|
188 | ui.debug('running %r in %s\n' % (cmdline, tmproot)) | |||
146 | util.system(cmdline, cwd=tmproot) |
|
189 | util.system(cmdline, cwd=tmproot) | |
147 |
|
190 | |||
148 | for copy_fn, working_fn, mtime in fns_and_mtime: |
|
191 | for copy_fn, working_fn, mtime in fns_and_mtime: | |
149 | if os.path.getmtime(copy_fn) != mtime: |
|
192 | if os.path.getmtime(copy_fn) != mtime: | |
150 |
ui.debug( |
|
193 | ui.debug('file changed while diffing. ' | |
151 |
'Overwriting: %s (src: %s)\n' |
|
194 | 'Overwriting: %s (src: %s)\n' % (working_fn, copy_fn)) | |
152 | util.copyfile(copy_fn, working_fn) |
|
195 | util.copyfile(copy_fn, working_fn) | |
153 |
|
196 | |||
154 | return 1 |
|
197 | return 1 | |
@@ -173,11 +216,11 b' def extdiff(ui, repo, *pats, **opts):' | |||||
173 | that revision is compared to the working directory, and, when no |
|
216 | that revision is compared to the working directory, and, when no | |
174 | revisions are specified, the working directory files are compared |
|
217 | revisions are specified, the working directory files are compared | |
175 | to its parent.''' |
|
218 | to its parent.''' | |
176 |
program = opts |
|
219 | program = opts.get('program') | |
177 | if opts['program']: |
|
220 | option = opts.get('option') | |
178 | option = opts['option'] |
|
221 | if not program: | |
179 | else: |
|
222 | program = 'diff' | |
180 |
option = |
|
223 | option = option or ['-Npru'] | |
181 | return dodiff(ui, repo, program, option, pats, opts) |
|
224 | return dodiff(ui, repo, program, option, pats, opts) | |
182 |
|
225 | |||
183 | cmdtable = { |
|
226 | cmdtable = { |
@@ -229,10 +229,10 b' def hook(ui, repo, hooktype, node=None, ' | |||||
229 | n = bin(node) |
|
229 | n = bin(node) | |
230 | cia = hgcia(ui, repo) |
|
230 | cia = hgcia(ui, repo) | |
231 | if not cia.user: |
|
231 | if not cia.user: | |
232 |
ui.debug( |
|
232 | ui.debug('cia: no user specified') | |
233 | return |
|
233 | return | |
234 | if not cia.project: |
|
234 | if not cia.project: | |
235 |
ui.debug( |
|
235 | ui.debug('cia: no project specified') | |
236 | return |
|
236 | return | |
237 | if hooktype == 'changegroup': |
|
237 | if hooktype == 'changegroup': | |
238 | start = repo.changelog.rev(n) |
|
238 | start = repo.changelog.rev(n) |
@@ -308,7 +308,7 b' def view(ui, repo, *etc, **opts):' | |||||
308 | os.chdir(repo.root) |
|
308 | os.chdir(repo.root) | |
309 | optstr = ' '.join(['--%s %s' % (k, v) for k, v in opts.iteritems() if v]) |
|
309 | optstr = ' '.join(['--%s %s' % (k, v) for k, v in opts.iteritems() if v]) | |
310 | cmd = ui.config("hgk", "path", "hgk") + " %s %s" % (optstr, " ".join(etc)) |
|
310 | cmd = ui.config("hgk", "path", "hgk") + " %s %s" % (optstr, " ".join(etc)) | |
311 |
ui.debug( |
|
311 | ui.debug("running %s\n" % cmd) | |
312 | util.system(cmd) |
|
312 | util.system(cmd) | |
313 |
|
313 | |||
314 | cmdtable = { |
|
314 | cmdtable = { |
@@ -17,28 +17,7 b' from client import client, QueryFailed' | |||||
17 |
|
17 | |||
18 | def serve(ui, repo, **opts): |
|
18 | def serve(ui, repo, **opts): | |
19 | '''start an inotify server for this repository''' |
|
19 | '''start an inotify server for this repository''' | |
20 | timeout = opts.get('timeout') |
|
20 | server.start(ui, repo.dirstate, repo.root, opts) | |
21 | if timeout: |
|
|||
22 | timeout = float(timeout) * 1e3 |
|
|||
23 |
|
||||
24 | class service(object): |
|
|||
25 | def init(self): |
|
|||
26 | try: |
|
|||
27 | self.master = server.master(ui, repo.dirstate, |
|
|||
28 | repo.root, timeout) |
|
|||
29 | except server.AlreadyStartedException, inst: |
|
|||
30 | raise util.Abort(str(inst)) |
|
|||
31 |
|
||||
32 | def run(self): |
|
|||
33 | try: |
|
|||
34 | self.master.run() |
|
|||
35 | finally: |
|
|||
36 | self.master.shutdown() |
|
|||
37 |
|
||||
38 | service = service() |
|
|||
39 | logfile = ui.config('inotify', 'log') |
|
|||
40 | cmdutil.service(opts, initfn=service.init, runfn=service.run, |
|
|||
41 | logfile=logfile) |
|
|||
42 |
|
21 | |||
43 | def debuginotify(ui, repo, **opts): |
|
22 | def debuginotify(ui, repo, **opts): | |
44 | '''debugging information for inotify extension |
|
23 | '''debugging information for inotify extension |
@@ -31,10 +31,11 b' def start_server(function):' | |||||
31 | 'removing it)\n')) |
|
31 | 'removing it)\n')) | |
32 | os.unlink(os.path.join(self.root, '.hg', 'inotify.sock')) |
|
32 | os.unlink(os.path.join(self.root, '.hg', 'inotify.sock')) | |
33 | if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart: |
|
33 | if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart: | |
34 |
self.ui.debug( |
|
34 | self.ui.debug('(starting inotify server)\n') | |
35 | try: |
|
35 | try: | |
36 | try: |
|
36 | try: | |
37 |
server.start(self.ui, self.dirstate, self.root |
|
37 | server.start(self.ui, self.dirstate, self.root, | |
|
38 | dict(daemon=True, daemon_pipefds='')) | |||
38 | except server.AlreadyStartedException, inst: |
|
39 | except server.AlreadyStartedException, inst: | |
39 | # another process may have started its own |
|
40 | # another process may have started its own | |
40 | # inotify server while this one was starting. |
|
41 | # inotify server while this one was starting. | |
@@ -50,7 +51,7 b' def start_server(function):' | |||||
50 | 'server: %s\n') % err[-1]) |
|
51 | 'server: %s\n') % err[-1]) | |
51 | elif err[0] in (errno.ECONNREFUSED, errno.ENOENT): |
|
52 | elif err[0] in (errno.ECONNREFUSED, errno.ENOENT): | |
52 | # silently ignore normal errors if autostart is False |
|
53 | # silently ignore normal errors if autostart is False | |
53 |
self.ui.debug( |
|
54 | self.ui.debug('(inotify server not running)\n') | |
54 | else: |
|
55 | else: | |
55 | self.ui.warn(_('failed to contact inotify server: %s\n') |
|
56 | self.ui.warn(_('failed to contact inotify server: %s\n') | |
56 | % err[-1]) |
|
57 | % err[-1]) |
@@ -7,7 +7,7 b'' | |||||
7 | # GNU General Public License version 2, incorporated herein by reference. |
|
7 | # GNU General Public License version 2, incorporated herein by reference. | |
8 |
|
8 | |||
9 | from mercurial.i18n import _ |
|
9 | from mercurial.i18n import _ | |
10 | from mercurial import osutil, util |
|
10 | from mercurial import cmdutil, osutil, util | |
11 | import common |
|
11 | import common | |
12 | import errno, os, select, socket, stat, struct, sys, tempfile, time |
|
12 | import errno, os, select, socket, stat, struct, sys, tempfile, time | |
13 |
|
13 | |||
@@ -823,52 +823,29 b' class master(object):' | |||||
823 | sys.exit(0) |
|
823 | sys.exit(0) | |
824 | pollable.run() |
|
824 | pollable.run() | |
825 |
|
825 | |||
826 | def start(ui, dirstate, root): |
|
826 | def start(ui, dirstate, root, opts): | |
827 | def closefds(ignore): |
|
827 | timeout = opts.get('timeout') | |
828 | # (from python bug #1177468) |
|
828 | if timeout: | |
829 | # close all inherited file descriptors |
|
829 | timeout = float(timeout) * 1e3 | |
830 | # Python 2.4.1 and later use /dev/urandom to seed the random module's RNG |
|
830 | ||
831 | # a file descriptor is kept internally as os._urandomfd (created on demand |
|
831 | class service(object): | |
832 | # the first time os.urandom() is called), and should not be closed |
|
832 | def init(self): | |
833 | try: |
|
|||
834 | os.urandom(4) |
|
|||
835 | urandom_fd = getattr(os, '_urandomfd', None) |
|
|||
836 | except AttributeError: |
|
|||
837 | urandom_fd = None |
|
|||
838 | ignore.append(urandom_fd) |
|
|||
839 | for fd in range(3, 256): |
|
|||
840 | if fd in ignore: |
|
|||
841 | continue |
|
|||
842 | try: |
|
833 | try: | |
843 | os.close(fd) |
|
834 | self.master = master(ui, dirstate, root, timeout) | |
844 |
except |
|
835 | except AlreadyStartedException, inst: | |
845 |
|
|
836 | raise util.Abort(str(inst)) | |
846 |
|
||||
847 | m = master(ui, dirstate, root) |
|
|||
848 | sys.stdout.flush() |
|
|||
849 | sys.stderr.flush() |
|
|||
850 |
|
837 | |||
851 | pid = os.fork() |
|
838 | def run(self): | |
852 | if pid: |
|
839 | try: | |
853 | return pid |
|
840 | self.master.run() | |
854 |
|
841 | finally: | ||
855 | closefds(pollable.instances.keys()) |
|
842 | self.master.shutdown() | |
856 | os.setsid() |
|
|||
857 |
|
||||
858 | fd = os.open('/dev/null', os.O_RDONLY) |
|
|||
859 | os.dup2(fd, 0) |
|
|||
860 | if fd > 0: |
|
|||
861 | os.close(fd) |
|
|||
862 |
|
843 | |||
863 | fd = os.open(ui.config('inotify', 'log', '/dev/null'), |
|
844 | runargs = None | |
864 | os.O_RDWR | os.O_CREAT | os.O_TRUNC) |
|
845 | if 'inserve' not in sys.argv: | |
865 | os.dup2(fd, 1) |
|
846 | runargs = [sys.argv[0], 'inserve', '-R', root] | |
866 | os.dup2(fd, 2) |
|
|||
867 | if fd > 2: |
|
|||
868 | os.close(fd) |
|
|||
869 |
|
847 | |||
870 | try: |
|
848 | service = service() | |
871 | m.run() |
|
849 | logfile = ui.config('inotify', 'log') | |
872 | finally: |
|
850 | cmdutil.service(opts, initfn=service.init, runfn=service.run, | |
873 | m.shutdown() |
|
851 | logfile=logfile, runargs=runargs) | |
874 | os._exit(0) |
|
@@ -244,12 +244,14 b' class kwfilelog(filelog.filelog):' | |||||
244 | return t2 != text |
|
244 | return t2 != text | |
245 | return revlog.revlog.cmp(self, node, text) |
|
245 | return revlog.revlog.cmp(self, node, text) | |
246 |
|
246 | |||
247 |
def _status(ui, repo, kwt, |
|
247 | def _status(ui, repo, kwt, *pats, **opts): | |
248 | '''Bails out if [keyword] configuration is not active. |
|
248 | '''Bails out if [keyword] configuration is not active. | |
249 | Returns status of working directory.''' |
|
249 | Returns status of working directory.''' | |
250 | if kwt: |
|
250 | if kwt: | |
251 | match = cmdutil.match(repo, pats, opts) |
|
251 | unknown = (opts.get('unknown') or opts.get('all') | |
252 | return repo.status(match=match, unknown=unknown, clean=True) |
|
252 | or opts.get('untracked')) | |
|
253 | return repo.status(match=cmdutil.match(repo, pats, opts), clean=True, | |||
|
254 | unknown=unknown) | |||
253 | if ui.configitems('keyword'): |
|
255 | if ui.configitems('keyword'): | |
254 | raise util.Abort(_('[keyword] patterns cannot match')) |
|
256 | raise util.Abort(_('[keyword] patterns cannot match')) | |
255 | raise util.Abort(_('no [keyword] patterns configured')) |
|
257 | raise util.Abort(_('no [keyword] patterns configured')) | |
@@ -259,7 +261,7 b' def _kwfwrite(ui, repo, expand, *pats, *' | |||||
259 | if repo.dirstate.parents()[1] != nullid: |
|
261 | if repo.dirstate.parents()[1] != nullid: | |
260 | raise util.Abort(_('outstanding uncommitted merge')) |
|
262 | raise util.Abort(_('outstanding uncommitted merge')) | |
261 | kwt = kwtools['templater'] |
|
263 | kwt = kwtools['templater'] | |
262 |
status = _status(ui, repo, kwt, |
|
264 | status = _status(ui, repo, kwt, *pats, **opts) | |
263 | modified, added, removed, deleted = status[:4] |
|
265 | modified, added, removed, deleted = status[:4] | |
264 | if modified or added or removed or deleted: |
|
266 | if modified or added or removed or deleted: | |
265 | raise util.Abort(_('outstanding uncommitted changes')) |
|
267 | raise util.Abort(_('outstanding uncommitted changes')) | |
@@ -354,7 +356,7 b' def demo(ui, repo, *args, **opts):' | |||||
354 | repo.commit(text=msg) |
|
356 | repo.commit(text=msg) | |
355 | ui.status(_('\n\tkeywords expanded\n')) |
|
357 | ui.status(_('\n\tkeywords expanded\n')) | |
356 | ui.write(repo.wread(fn)) |
|
358 | ui.write(repo.wread(fn)) | |
357 |
ui.debug |
|
359 | ui.debug('\nremoving temporary repository %s\n' % tmpdir) | |
358 | shutil.rmtree(tmpdir, ignore_errors=True) |
|
360 | shutil.rmtree(tmpdir, ignore_errors=True) | |
359 |
|
361 | |||
360 | def expand(ui, repo, *pats, **opts): |
|
362 | def expand(ui, repo, *pats, **opts): | |
@@ -380,30 +382,32 b' def files(ui, repo, *pats, **opts):' | |||||
380 | See "hg help keyword" on how to construct patterns both for |
|
382 | See "hg help keyword" on how to construct patterns both for | |
381 | inclusion and exclusion of files. |
|
383 | inclusion and exclusion of files. | |
382 |
|
384 | |||
383 | Use -u/--untracked to list untracked files as well. |
|
385 | With -A/--all and -v/--verbose the codes used to show the status | |
384 |
|
||||
385 | With -a/--all and -v/--verbose the codes used to show the status |
|
|||
386 | of files are:: |
|
386 | of files are:: | |
387 |
|
387 | |||
388 | K = keyword expansion candidate |
|
388 | K = keyword expansion candidate | |
389 |
k = keyword expansion candidate ( |
|
389 | k = keyword expansion candidate (not tracked) | |
390 | I = ignored |
|
390 | I = ignored | |
391 |
i = ignored ( |
|
391 | i = ignored (not tracked) | |
392 | ''' |
|
392 | ''' | |
393 | kwt = kwtools['templater'] |
|
393 | kwt = kwtools['templater'] | |
394 |
status = _status(ui, repo, kwt, |
|
394 | status = _status(ui, repo, kwt, *pats, **opts) | |
|
395 | cwd = pats and repo.getcwd() or '' | |||
395 | modified, added, removed, deleted, unknown, ignored, clean = status |
|
396 | modified, added, removed, deleted, unknown, ignored, clean = status | |
396 | files = sorted(modified + added + clean) |
|
397 | files = [] | |
|
398 | if not (opts.get('unknown') or opts.get('untracked')) or opts.get('all'): | |||
|
399 | files = sorted(modified + added + clean) | |||
397 | wctx = repo[None] |
|
400 | wctx = repo[None] | |
398 | kwfiles = [f for f in files if kwt.iskwfile(f, wctx.flags)] |
|
401 | kwfiles = [f for f in files if kwt.iskwfile(f, wctx.flags)] | |
399 |
kwun |
|
402 | kwunknown = [f for f in unknown if kwt.iskwfile(f, wctx.flags)] | |
400 | cwd = pats and repo.getcwd() or '' |
|
403 | if not opts.get('ignore') or opts.get('all'): | |
401 | kwfstats = (not opts.get('ignore') and |
|
404 | showfiles = kwfiles, kwunknown | |
402 | (('K', kwfiles), ('k', kwuntracked),) or ()) |
|
405 | else: | |
|
406 | showfiles = [], [] | |||
403 | if opts.get('all') or opts.get('ignore'): |
|
407 | if opts.get('all') or opts.get('ignore'): | |
404 |
|
|
408 | showfiles += ([f for f in files if f not in kwfiles], | |
405 |
|
|
409 | [f for f in unknown if f not in kwunknown]) | |
406 |
for char, filenames in |
|
410 | for char, filenames in zip('KkIi', showfiles): | |
407 | fmt = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n' |
|
411 | fmt = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n' | |
408 | for f in filenames: |
|
412 | for f in filenames: | |
409 | ui.write(fmt % repo.pathto(f, cwd)) |
|
413 | ui.write(fmt % repo.pathto(f, cwd)) | |
@@ -545,9 +549,12 b' cmdtable = {' | |||||
545 | _('hg kwexpand [OPTION]... [FILE]...')), |
|
549 | _('hg kwexpand [OPTION]... [FILE]...')), | |
546 | 'kwfiles': |
|
550 | 'kwfiles': | |
547 | (files, |
|
551 | (files, | |
548 |
[(' |
|
552 | [('A', 'all', None, _('show keyword status flags of all files')), | |
549 | ('i', 'ignore', None, _('show files excluded from expansion')), |
|
553 | ('i', 'ignore', None, _('show files excluded from expansion')), | |
550 |
('u', 'un |
|
554 | ('u', 'unknown', None, _('only show unknown (not tracked) files')), | |
|
555 | ('a', 'all', None, | |||
|
556 | _('show keyword status flags of all files (DEPRECATED)')), | |||
|
557 | ('u', 'untracked', None, _('only show untracked files (DEPRECATED)')), | |||
551 | ] + commands.walkopts, |
|
558 | ] + commands.walkopts, | |
552 | _('hg kwfiles [OPTION]... [FILE]...')), |
|
559 | _('hg kwfiles [OPTION]... [FILE]...')), | |
553 | 'kwshrink': (shrink, commands.walkopts, |
|
560 | 'kwshrink': (shrink, commands.walkopts, |
@@ -321,7 +321,7 b' class queue(object):' | |||||
321 | if bad: |
|
321 | if bad: | |
322 | raise util.Abort(bad) |
|
322 | raise util.Abort(bad) | |
323 | guards = sorted(set(guards)) |
|
323 | guards = sorted(set(guards)) | |
324 |
self.ui.debug( |
|
324 | self.ui.debug('active guards: %s\n' % ' '.join(guards)) | |
325 | self.active_guards = guards |
|
325 | self.active_guards = guards | |
326 | self.guards_dirty = True |
|
326 | self.guards_dirty = True | |
327 |
|
327 | |||
@@ -997,6 +997,8 b' class queue(object):' | |||||
997 | self.ui.warn(_('done\n')) |
|
997 | self.ui.warn(_('done\n')) | |
998 | raise |
|
998 | raise | |
999 |
|
999 | |||
|
1000 | if not self.applied: | |||
|
1001 | return ret[0] | |||
1000 | top = self.applied[-1].name |
|
1002 | top = self.applied[-1].name | |
1001 | if ret[0] and ret[0] > 1: |
|
1003 | if ret[0] and ret[0] > 1: | |
1002 | msg = _("errors during apply, please fix and refresh %s\n") |
|
1004 | msg = _("errors during apply, please fix and refresh %s\n") | |
@@ -2618,7 +2620,7 b' cmdtable = {' | |||||
2618 | (pop, |
|
2620 | (pop, | |
2619 | [('a', 'all', None, _('pop all patches')), |
|
2621 | [('a', 'all', None, _('pop all patches')), | |
2620 | ('n', 'name', '', _('queue name to pop')), |
|
2622 | ('n', 'name', '', _('queue name to pop')), | |
2621 | ('f', 'force', None, _('forget any local changes'))], |
|
2623 | ('f', 'force', None, _('forget any local changes to patched files'))], | |
2622 | _('hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]')), |
|
2624 | _('hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]')), | |
2623 | "^qpush": |
|
2625 | "^qpush": | |
2624 | (push, |
|
2626 | (push, |
@@ -43,6 +43,7 b' Optional configuration items::' | |||||
43 | diffstat = True # add a diffstat before the diff content |
|
43 | diffstat = True # add a diffstat before the diff content | |
44 | sources = serve # notify if source of incoming changes in this list |
|
44 | sources = serve # notify if source of incoming changes in this list | |
45 | # (serve == ssh or http, push, pull, bundle) |
|
45 | # (serve == ssh or http, push, pull, bundle) | |
|
46 | merge = False # send notification for merges (default True) | |||
46 | [email] |
|
47 | [email] | |
47 | from = user@host.com # email address to send as if none given |
|
48 | from = user@host.com # email address to send as if none given | |
48 | [web] |
|
49 | [web] | |
@@ -111,6 +112,7 b' class notifier(object):' | |||||
111 | self.test = self.ui.configbool('notify', 'test', True) |
|
112 | self.test = self.ui.configbool('notify', 'test', True) | |
112 | self.charsets = mail._charsets(self.ui) |
|
113 | self.charsets = mail._charsets(self.ui) | |
113 | self.subs = self.subscribers() |
|
114 | self.subs = self.subscribers() | |
|
115 | self.merge = self.ui.configbool('notify', 'merge', True) | |||
114 |
|
116 | |||
115 | mapfile = self.ui.config('notify', 'style') |
|
117 | mapfile = self.ui.config('notify', 'style') | |
116 | template = (self.ui.config('notify', hooktype) or |
|
118 | template = (self.ui.config('notify', hooktype) or | |
@@ -165,11 +167,14 b' class notifier(object):' | |||||
165 | def url(self, path=None): |
|
167 | def url(self, path=None): | |
166 | return self.ui.config('web', 'baseurl') + (path or self.root) |
|
168 | return self.ui.config('web', 'baseurl') + (path or self.root) | |
167 |
|
169 | |||
168 | def node(self, ctx): |
|
170 | def node(self, ctx, **props): | |
169 | '''format one changeset.''' |
|
171 | '''format one changeset, unless it is a suppressed merge.''' | |
|
172 | if not self.merge and len(ctx.parents()) > 1: | |||
|
173 | return False | |||
170 | self.t.show(ctx, changes=ctx.changeset(), |
|
174 | self.t.show(ctx, changes=ctx.changeset(), | |
171 | baseurl=self.ui.config('web', 'baseurl'), |
|
175 | baseurl=self.ui.config('web', 'baseurl'), | |
172 | root=self.repo.root, webroot=self.root) |
|
176 | root=self.repo.root, webroot=self.root, **props) | |
|
177 | return True | |||
173 |
|
178 | |||
174 | def skipsource(self, source): |
|
179 | def skipsource(self, source): | |
175 | '''true if incoming changes from this source should be skipped.''' |
|
180 | '''true if incoming changes from this source should be skipped.''' | |
@@ -276,23 +281,36 b' def hook(ui, repo, hooktype, node=None, ' | |||||
276 | ctx = repo[node] |
|
281 | ctx = repo[node] | |
277 |
|
282 | |||
278 | if not n.subs: |
|
283 | if not n.subs: | |
279 |
ui.debug( |
|
284 | ui.debug('notify: no subscribers to repository %s\n' % n.root) | |
280 | return |
|
285 | return | |
281 | if n.skipsource(source): |
|
286 | if n.skipsource(source): | |
282 |
ui.debug |
|
287 | ui.debug('notify: changes have source "%s" - skipping\n' % source) | |
283 | return |
|
288 | return | |
284 |
|
289 | |||
285 | ui.pushbuffer() |
|
290 | ui.pushbuffer() | |
|
291 | data = '' | |||
|
292 | count = 0 | |||
286 | if hooktype == 'changegroup': |
|
293 | if hooktype == 'changegroup': | |
287 | start, end = ctx.rev(), len(repo) |
|
294 | start, end = ctx.rev(), len(repo) | |
288 | count = end - start |
|
|||
289 | for rev in xrange(start, end): |
|
295 | for rev in xrange(start, end): | |
290 | n.node(repo[rev]) |
|
296 | if n.node(repo[rev]): | |
291 | n.diff(ctx, repo['tip']) |
|
297 | count += 1 | |
|
298 | else: | |||
|
299 | data += ui.popbuffer() | |||
|
300 | ui.note(_('notify: suppressing notification for merge %d:%s\n') % | |||
|
301 | (rev, repo[rev].hex()[:12])) | |||
|
302 | ui.pushbuffer() | |||
|
303 | if count: | |||
|
304 | n.diff(ctx, repo['tip']) | |||
292 | else: |
|
305 | else: | |
293 | count = 1 |
|
306 | if not n.node(ctx): | |
294 | n.node(ctx) |
|
307 | ui.popbuffer() | |
|
308 | ui.note(_('notify: suppressing notification for merge %d:%s\n') % | |||
|
309 | (ctx.rev(), ctx.hex()[:12])) | |||
|
310 | return | |||
|
311 | count += 1 | |||
295 | n.diff(ctx) |
|
312 | n.diff(ctx) | |
296 |
|
313 | |||
297 | data = ui.popbuffer() |
|
314 | data += ui.popbuffer() | |
298 | n.send(ctx, count, data) |
|
315 | if count: | |
|
316 | n.send(ctx, count, data) |
@@ -35,7 +35,7 b' def rebasemerge(repo, rev, first=False):' | |||||
35 | if not first: |
|
35 | if not first: | |
36 | ancestor.ancestor = newancestor |
|
36 | ancestor.ancestor = newancestor | |
37 | else: |
|
37 | else: | |
38 |
repo.ui.debug( |
|
38 | repo.ui.debug("first revision, do not change ancestor\n") | |
39 | stats = merge.update(repo, rev, True, True, False) |
|
39 | stats = merge.update(repo, rev, True, True, False) | |
40 | return stats |
|
40 | return stats | |
41 |
|
41 | |||
@@ -149,7 +149,7 b' def concludenode(repo, rev, p1, p2, stat' | |||||
149 | """Skip commit if collapsing has been required and rev is not the last |
|
149 | """Skip commit if collapsing has been required and rev is not the last | |
150 | revision, commit otherwise |
|
150 | revision, commit otherwise | |
151 | """ |
|
151 | """ | |
152 |
repo.ui.debug( |
|
152 | repo.ui.debug(" set parents\n") | |
153 | if collapse and not last: |
|
153 | if collapse and not last: | |
154 | repo.dirstate.setparents(repo[p1].node()) |
|
154 | repo.dirstate.setparents(repo[p1].node()) | |
155 | return None |
|
155 | return None | |
@@ -187,23 +187,23 b' def concludenode(repo, rev, p1, p2, stat' | |||||
187 | def rebasenode(repo, rev, target, state, skipped, targetancestors, collapse, |
|
187 | def rebasenode(repo, rev, target, state, skipped, targetancestors, collapse, | |
188 | extrafn): |
|
188 | extrafn): | |
189 | 'Rebase a single revision' |
|
189 | 'Rebase a single revision' | |
190 |
repo.ui.debug( |
|
190 | repo.ui.debug("rebasing %d:%s\n" % (rev, repo[rev])) | |
191 |
|
191 | |||
192 | p1, p2 = defineparents(repo, rev, target, state, targetancestors) |
|
192 | p1, p2 = defineparents(repo, rev, target, state, targetancestors) | |
193 |
|
193 | |||
194 |
repo.ui.debug( |
|
194 | repo.ui.debug(" future parents are %d and %d\n" % (repo[p1].rev(), | |
195 | repo[p2].rev())) |
|
195 | repo[p2].rev())) | |
196 |
|
196 | |||
197 | # Merge phase |
|
197 | # Merge phase | |
198 | if len(repo.parents()) != 2: |
|
198 | if len(repo.parents()) != 2: | |
199 | # Update to target and merge it with local |
|
199 | # Update to target and merge it with local | |
200 | if repo['.'].rev() != repo[p1].rev(): |
|
200 | if repo['.'].rev() != repo[p1].rev(): | |
201 |
repo.ui.debug( |
|
201 | repo.ui.debug(" update to %d:%s\n" % (repo[p1].rev(), repo[p1])) | |
202 | merge.update(repo, p1, False, True, False) |
|
202 | merge.update(repo, p1, False, True, False) | |
203 | else: |
|
203 | else: | |
204 |
repo.ui.debug( |
|
204 | repo.ui.debug(" already in target\n") | |
205 | repo.dirstate.write() |
|
205 | repo.dirstate.write() | |
206 |
repo.ui.debug( |
|
206 | repo.ui.debug(" merge against %d:%s\n" % (repo[rev].rev(), repo[rev])) | |
207 | first = repo[rev].rev() == repo[min(state)].rev() |
|
207 | first = repo[rev].rev() == repo[min(state)].rev() | |
208 | stats = rebasemerge(repo, rev, first) |
|
208 | stats = rebasemerge(repo, rev, first) | |
209 |
|
209 | |||
@@ -211,7 +211,7 b' def rebasenode(repo, rev, target, state,' | |||||
211 | raise util.Abort(_('fix unresolved conflicts with hg resolve then ' |
|
211 | raise util.Abort(_('fix unresolved conflicts with hg resolve then ' | |
212 | 'run hg rebase --continue')) |
|
212 | 'run hg rebase --continue')) | |
213 | else: # we have an interrupted rebase |
|
213 | else: # we have an interrupted rebase | |
214 |
repo.ui.debug( |
|
214 | repo.ui.debug('resuming interrupted rebase\n') | |
215 |
|
215 | |||
216 | # Keep track of renamed files in the revision that is going to be rebased |
|
216 | # Keep track of renamed files in the revision that is going to be rebased | |
217 | # Here we simulate the copies and renames in the source changeset |
|
217 | # Here we simulate the copies and renames in the source changeset | |
@@ -234,7 +234,7 b' def rebasenode(repo, rev, target, state,' | |||||
234 | else: |
|
234 | else: | |
235 | if not collapse: |
|
235 | if not collapse: | |
236 | repo.ui.note(_('no changes, revision %d skipped\n') % rev) |
|
236 | repo.ui.note(_('no changes, revision %d skipped\n') % rev) | |
237 |
repo.ui.debug( |
|
237 | repo.ui.debug('next revision set to %s\n' % p1) | |
238 | skipped.add(rev) |
|
238 | skipped.add(rev) | |
239 | state[rev] = p1 |
|
239 | state[rev] = p1 | |
240 |
|
240 | |||
@@ -280,7 +280,7 b' def updatemq(repo, state, skipped, **opt' | |||||
280 | mqrebase = {} |
|
280 | mqrebase = {} | |
281 | for p in repo.mq.applied: |
|
281 | for p in repo.mq.applied: | |
282 | if repo[p.rev].rev() in state: |
|
282 | if repo[p.rev].rev() in state: | |
283 |
repo.ui.debug |
|
283 | repo.ui.debug('revision %d is an mq patch (%s), finalize it.\n' % | |
284 | (repo[p.rev].rev(), p.name)) |
|
284 | (repo[p.rev].rev(), p.name)) | |
285 | mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name)) |
|
285 | mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name)) | |
286 |
|
286 | |||
@@ -290,7 +290,7 b' def updatemq(repo, state, skipped, **opt' | |||||
290 | # We must start import from the newest revision |
|
290 | # We must start import from the newest revision | |
291 | for rev in sorted(mqrebase, reverse=True): |
|
291 | for rev in sorted(mqrebase, reverse=True): | |
292 | if rev not in skipped: |
|
292 | if rev not in skipped: | |
293 |
repo.ui.debug |
|
293 | repo.ui.debug('import mq patch %d (%s)\n' | |
294 | % (state[rev], mqrebase[rev][0])) |
|
294 | % (state[rev], mqrebase[rev][0])) | |
295 | repo.mq.qimport(repo, (), patchname=mqrebase[rev][0], |
|
295 | repo.mq.qimport(repo, (), patchname=mqrebase[rev][0], | |
296 | git=mqrebase[rev][1],rev=[str(state[rev])]) |
|
296 | git=mqrebase[rev][1],rev=[str(state[rev])]) | |
@@ -311,7 +311,7 b' def storestatus(repo, originalwd, target' | |||||
311 | newrev = repo[v].hex() |
|
311 | newrev = repo[v].hex() | |
312 | f.write("%s:%s\n" % (oldrev, newrev)) |
|
312 | f.write("%s:%s\n" % (oldrev, newrev)) | |
313 | f.close() |
|
313 | f.close() | |
314 |
repo.ui.debug( |
|
314 | repo.ui.debug('rebase status stored\n') | |
315 |
|
315 | |||
316 | def clearstatus(repo): |
|
316 | def clearstatus(repo): | |
317 | 'Remove the status files' |
|
317 | 'Remove the status files' | |
@@ -342,7 +342,7 b' def restorestatus(repo):' | |||||
342 | else: |
|
342 | else: | |
343 | oldrev, newrev = l.split(':') |
|
343 | oldrev, newrev = l.split(':') | |
344 | state[repo[oldrev].rev()] = repo[newrev].rev() |
|
344 | state[repo[oldrev].rev()] = repo[newrev].rev() | |
345 |
repo.ui.debug( |
|
345 | repo.ui.debug('rebase status resumed\n') | |
346 | return originalwd, target, state, collapse, keep, keepbranches, external |
|
346 | return originalwd, target, state, collapse, keep, keepbranches, external | |
347 | except IOError, err: |
|
347 | except IOError, err: | |
348 | if err.errno != errno.ENOENT: |
|
348 | if err.errno != errno.ENOENT: | |
@@ -381,9 +381,9 b' def buildstate(repo, dest, src, base, co' | |||||
381 | if src: |
|
381 | if src: | |
382 | commonbase = repo[src].ancestor(repo[dest]) |
|
382 | commonbase = repo[src].ancestor(repo[dest]) | |
383 | if commonbase == repo[src]: |
|
383 | if commonbase == repo[src]: | |
384 |
raise util.Abort(_(' |
|
384 | raise util.Abort(_('source is ancestor of destination')) | |
385 | if commonbase == repo[dest]: |
|
385 | if commonbase == repo[dest]: | |
386 |
raise util.Abort(_(' |
|
386 | raise util.Abort(_('source is descendant of destination')) | |
387 | source = repo[src].rev() |
|
387 | source = repo[src].rev() | |
388 | else: |
|
388 | else: | |
389 | if base: |
|
389 | if base: | |
@@ -392,20 +392,24 b' def buildstate(repo, dest, src, base, co' | |||||
392 | cwd = repo['.'].rev() |
|
392 | cwd = repo['.'].rev() | |
393 |
|
393 | |||
394 | if cwd == dest: |
|
394 | if cwd == dest: | |
395 |
repo.ui.debug( |
|
395 | repo.ui.debug('source and destination are the same\n') | |
396 | return None |
|
396 | return None | |
397 |
|
397 | |||
398 | targetancestors = set(repo.changelog.ancestors(dest)) |
|
398 | targetancestors = set(repo.changelog.ancestors(dest)) | |
399 | if cwd in targetancestors: |
|
399 | if cwd in targetancestors: | |
400 | repo.ui.debug(_('already working on the current branch\n')) |
|
400 | repo.ui.debug('source is ancestor of destination\n') | |
401 | return None |
|
401 | return None | |
402 |
|
402 | |||
403 | cwdancestors = set(repo.changelog.ancestors(cwd)) |
|
403 | cwdancestors = set(repo.changelog.ancestors(cwd)) | |
|
404 | if dest in cwdancestors: | |||
|
405 | repo.ui.debug('source is descendant of destination\n') | |||
|
406 | return None | |||
|
407 | ||||
404 | cwdancestors.add(cwd) |
|
408 | cwdancestors.add(cwd) | |
405 | rebasingbranch = cwdancestors - targetancestors |
|
409 | rebasingbranch = cwdancestors - targetancestors | |
406 | source = min(rebasingbranch) |
|
410 | source = min(rebasingbranch) | |
407 |
|
411 | |||
408 |
repo.ui.debug( |
|
412 | repo.ui.debug('rebase onto %d starting from %d\n' % (dest, source)) | |
409 | state = dict.fromkeys(repo.changelog.descendants(source), nullrev) |
|
413 | state = dict.fromkeys(repo.changelog.descendants(source), nullrev) | |
410 | external = nullrev |
|
414 | external = nullrev | |
411 | if collapse: |
|
415 | if collapse: | |
@@ -429,8 +433,8 b' def pullrebase(orig, ui, repo, *args, **' | |||||
429 | if opts.get('rebase'): |
|
433 | if opts.get('rebase'): | |
430 | if opts.get('update'): |
|
434 | if opts.get('update'): | |
431 | del opts['update'] |
|
435 | del opts['update'] | |
432 |
ui.debug( |
|
436 | ui.debug('--update and --rebase are not compatible, ignoring ' | |
433 |
|
|
437 | 'the update flag\n') | |
434 |
|
438 | |||
435 | cmdutil.bail_if_changed(repo) |
|
439 | cmdutil.bail_if_changed(repo) | |
436 | revsprepull = len(repo) |
|
440 | revsprepull = len(repo) | |
@@ -460,9 +464,9 b' cmdtable = {' | |||||
460 | ('s', 'source', '', _('rebase from a given revision')), |
|
464 | ('s', 'source', '', _('rebase from a given revision')), | |
461 | ('b', 'base', '', _('rebase from the base of a given revision')), |
|
465 | ('b', 'base', '', _('rebase from the base of a given revision')), | |
462 | ('d', 'dest', '', _('rebase onto a given revision')), |
|
466 | ('d', 'dest', '', _('rebase onto a given revision')), | |
463 |
('', 'collapse', False, _('collapse the rebased |
|
467 | ('', 'collapse', False, _('collapse the rebased changesets')), | |
464 |
('', 'keep', False, _('keep original |
|
468 | ('', 'keep', False, _('keep original changesets')), | |
465 | ('', 'keepbranches', False, _('keep original branches')), |
|
469 | ('', 'keepbranches', False, _('keep original branch names')), | |
466 | ('c', 'continue', False, _('continue an interrupted rebase')), |
|
470 | ('c', 'continue', False, _('continue an interrupted rebase')), | |
467 | ('a', 'abort', False, _('abort an interrupted rebase')),] + |
|
471 | ('a', 'abort', False, _('abort an interrupted rebase')),] + | |
468 | templateopts, |
|
472 | templateopts, |
@@ -463,7 +463,7 b' def dorecord(ui, repo, committer, *pats,' | |||||
463 | fd, tmpname = tempfile.mkstemp(prefix=f.replace('/', '_')+'.', |
|
463 | fd, tmpname = tempfile.mkstemp(prefix=f.replace('/', '_')+'.', | |
464 | dir=backupdir) |
|
464 | dir=backupdir) | |
465 | os.close(fd) |
|
465 | os.close(fd) | |
466 |
ui.debug |
|
466 | ui.debug('backup %r as %r\n' % (f, tmpname)) | |
467 | util.copyfile(repo.wjoin(f), tmpname) |
|
467 | util.copyfile(repo.wjoin(f), tmpname) | |
468 | backups[f] = tmpname |
|
468 | backups[f] = tmpname | |
469 |
|
469 | |||
@@ -481,7 +481,7 b' def dorecord(ui, repo, committer, *pats,' | |||||
481 | # 3b. (apply) |
|
481 | # 3b. (apply) | |
482 | if dopatch: |
|
482 | if dopatch: | |
483 | try: |
|
483 | try: | |
484 |
ui.debug( |
|
484 | ui.debug('applying patch\n') | |
485 | ui.debug(fp.getvalue()) |
|
485 | ui.debug(fp.getvalue()) | |
486 | pfiles = {} |
|
486 | pfiles = {} | |
487 | patch.internalpatch(fp, ui, 1, repo.root, files=pfiles, |
|
487 | patch.internalpatch(fp, ui, 1, repo.root, files=pfiles, | |
@@ -512,7 +512,7 b' def dorecord(ui, repo, committer, *pats,' | |||||
512 | # 5. finally restore backed-up files |
|
512 | # 5. finally restore backed-up files | |
513 | try: |
|
513 | try: | |
514 | for realname, tmpname in backups.iteritems(): |
|
514 | for realname, tmpname in backups.iteritems(): | |
515 |
ui.debug |
|
515 | ui.debug('restoring %r to %r\n' % (tmpname, realname)) | |
516 | util.copyfile(tmpname, repo.wjoin(realname)) |
|
516 | util.copyfile(tmpname, repo.wjoin(realname)) | |
517 | os.unlink(tmpname) |
|
517 | os.unlink(tmpname) | |
518 | os.rmdir(backupdir) |
|
518 | os.rmdir(backupdir) |
@@ -142,6 +142,6 b' def reposetup(ui, repo):' | |||||
142 | for f in funcs.split(): |
|
142 | for f in funcs.split(): | |
143 | wrapname(f, wrapper) |
|
143 | wrapname(f, wrapper) | |
144 | wrapname("mercurial.osutil.listdir", wrapperforlistdir) |
|
144 | wrapname("mercurial.osutil.listdir", wrapperforlistdir) | |
145 |
ui.debug( |
|
145 | ui.debug("[win32mbcs] activated with encoding: %s\n" | |
146 | % encoding.encoding) |
|
146 | % encoding.encoding) | |
147 |
|
147 |
@@ -109,12 +109,13 b' class hgwebdirzc(hgwebdir_mod.hgwebdir):' | |||||
109 | def __init__(self, conf, baseui=None): |
|
109 | def __init__(self, conf, baseui=None): | |
110 | super(hgwebdirzc, self).__init__(conf, baseui) |
|
110 | super(hgwebdirzc, self).__init__(conf, baseui) | |
111 | prefix = self.ui.config("web", "prefix", "").strip('/') + '/' |
|
111 | prefix = self.ui.config("web", "prefix", "").strip('/') + '/' | |
112 | for r, p in self.repos: |
|
112 | for repo, path in self.repos: | |
113 | u = self.ui.copy() |
|
113 | u = self.ui.copy() | |
114 | u.readconfig(os.path.join(p, '.hg', 'hgrc')) |
|
114 | u.readconfig(os.path.join(path, '.hg', 'hgrc')) | |
115 | n = os.path.basename(r) |
|
115 | name = os.path.basename(repo) | |
116 | path = (prefix + r).strip('/') |
|
116 | path = (prefix + repo).strip('/') | |
117 | publish(n, "hgweb", path, int(u.config("web", "port", 8000))) |
|
117 | desc = u.config('web', 'description', name) | |
|
118 | publish(name, desc, path, int(u.config("web", "port", 8000))) | |||
118 |
|
119 | |||
119 | # listen |
|
120 | # listen | |
120 |
|
121 | |||
@@ -136,25 +137,24 b' def getzcpaths():' | |||||
136 | Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l) |
|
137 | Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l) | |
137 | time.sleep(1) |
|
138 | time.sleep(1) | |
138 | server.close() |
|
139 | server.close() | |
139 | for v in l.found.values(): |
|
140 | for value in l.found.values(): | |
140 | n = v.name[:v.name.index('.')] |
|
141 | name = value.name[:value.name.index('.')] | |
141 | n.replace(" ", "-") |
|
142 | url = "http://%s:%s%s" % (socket.inet_ntoa(value.address), value.port, | |
142 | u = "http://%s:%s%s" % (socket.inet_ntoa(v.address), v.port, |
|
143 | value.properties.get("path", "/")) | |
143 | v.properties.get("path", "/")) |
|
144 | yield "zc-" + name, url | |
144 | yield "zc-" + n, u |
|
|||
145 |
|
145 | |||
146 | def config(orig, self, section, key, default=None, untrusted=False): |
|
146 | def config(orig, self, section, key, default=None, untrusted=False): | |
147 | if section == "paths" and key.startswith("zc-"): |
|
147 | if section == "paths" and key.startswith("zc-"): | |
148 | for n, p in getzcpaths(): |
|
148 | for name, path in getzcpaths(): | |
149 | if n == key: |
|
149 | if name == key: | |
150 | return p |
|
150 | return path | |
151 | return orig(self, section, key, default, untrusted) |
|
151 | return orig(self, section, key, default, untrusted) | |
152 |
|
152 | |||
153 | def configitems(orig, self, section, untrusted=False): |
|
153 | def configitems(orig, self, section, untrusted=False): | |
154 | r = orig(self, section, untrusted) |
|
154 | repos = orig(self, section, untrusted) | |
155 | if section == "paths": |
|
155 | if section == "paths": | |
156 | r += getzcpaths() |
|
156 | repos += getzcpaths() | |
157 | return r |
|
157 | return repos | |
158 |
|
158 | |||
159 | extensions.wrapfunction(ui.ui, 'config', config) |
|
159 | extensions.wrapfunction(ui.ui, 'config', config) | |
160 | extensions.wrapfunction(ui.ui, 'configitems', configitems) |
|
160 | extensions.wrapfunction(ui.ui, 'configitems', configitems) |
This diff has been collapsed as it changes many lines, (1862 lines changed) Show them Hide them | |||||
@@ -17,8 +17,8 b' msgid ""' | |||||
17 | msgstr "" |
|
17 | msgstr "" | |
18 | "Project-Id-Version: Mercurial\n" |
|
18 | "Project-Id-Version: Mercurial\n" | |
19 | "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n" |
|
19 | "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n" | |
20 |
"POT-Creation-Date: 2009-0 |
|
20 | "POT-Creation-Date: 2009-09-29 00:26+0200\n" | |
21 |
"PO-Revision-Date: 2009-0 |
|
21 | "PO-Revision-Date: 2009-09-29 00:41+0200\n" | |
22 | "Last-Translator: <mg@lazybytes.net>\n" |
|
22 | "Last-Translator: <mg@lazybytes.net>\n" | |
23 | "Language-Team: Danish\n" |
|
23 | "Language-Team: Danish\n" | |
24 | "MIME-Version: 1.0\n" |
|
24 | "MIME-Version: 1.0\n" | |
@@ -36,8 +36,12 b' msgstr "TILVALG"' | |||||
36 | msgid "COMMANDS" |
|
36 | msgid "COMMANDS" | |
37 | msgstr "KOMMANDOER" |
|
37 | msgstr "KOMMANDOER" | |
38 |
|
38 | |||
39 | msgid " options:\n" |
|
39 | msgid "" | |
40 | msgstr " tilvalg:\n" |
|
40 | " options:\n" | |
|
41 | "\n" | |||
|
42 | msgstr "" | |||
|
43 | " tilvalg:\n" | |||
|
44 | "\n" | |||
41 |
|
45 | |||
42 | #, python-format |
|
46 | #, python-format | |
43 | msgid "" |
|
47 | msgid "" | |
@@ -64,7 +68,7 b' msgid ""' | |||||
64 | "Nor is it safe if remote users share an account, because then there\n" |
|
68 | "Nor is it safe if remote users share an account, because then there\n" | |
65 | "is no way to distinguish them.\n" |
|
69 | "is no way to distinguish them.\n" | |
66 | "\n" |
|
70 | "\n" | |
67 | "To use this hook, configure the acl extension in your hgrc like this:\n" |
|
71 | "To use this hook, configure the acl extension in your hgrc like this::\n" | |
68 | "\n" |
|
72 | "\n" | |
69 | " [extensions]\n" |
|
73 | " [extensions]\n" | |
70 | " hgext.acl =\n" |
|
74 | " hgext.acl =\n" | |
@@ -77,10 +81,10 b' msgid ""' | |||||
77 | " # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n" |
|
81 | " # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n" | |
78 | " sources = serve\n" |
|
82 | " sources = serve\n" | |
79 | "\n" |
|
83 | "\n" | |
80 | "The allow and deny sections take a subtree pattern as key (with a\n" |
|
84 | "The allow and deny sections take a subtree pattern as key (with a glob\n" | |
81 |
" |
|
85 | "syntax by default), and a comma separated list of users as the\n" | |
82 |
" |
|
86 | "corresponding value. The deny list is checked before the allow list\n" | |
83 |
" |
|
87 | "is. ::\n" | |
84 | "\n" |
|
88 | "\n" | |
85 | " [acl.allow]\n" |
|
89 | " [acl.allow]\n" | |
86 | " # If acl.allow is not present, all users are allowed by default.\n" |
|
90 | " # If acl.allow is not present, all users are allowed by default.\n" | |
@@ -133,16 +137,16 b' msgid ""' | |||||
133 | "\n" |
|
137 | "\n" | |
134 | "Bookmarks are local movable markers to changesets. Every bookmark\n" |
|
138 | "Bookmarks are local movable markers to changesets. Every bookmark\n" | |
135 | "points to a changeset identified by its hash. If you commit a\n" |
|
139 | "points to a changeset identified by its hash. If you commit a\n" | |
136 | "changeset that is based on a changeset that has a bookmark on it,\n" |
|
140 | "changeset that is based on a changeset that has a bookmark on it, the\n" | |
137 |
" |
|
141 | "bookmark shifts to the new changeset.\n" | |
138 | "\n" |
|
142 | "\n" | |
139 | "It is possible to use bookmark names in every revision lookup\n" |
|
143 | "It is possible to use bookmark names in every revision lookup (e.g. hg\n" | |
140 |
" |
|
144 | "merge, hg update).\n" | |
141 | "\n" |
|
145 | "\n" | |
142 | "By default, when several bookmarks point to the same changeset, they\n" |
|
146 | "By default, when several bookmarks point to the same changeset, they\n" | |
143 | "will all move forward together. It is possible to obtain a more\n" |
|
147 | "will all move forward together. It is possible to obtain a more\n" | |
144 | "git-like experience by adding the following configuration option to\n" |
|
148 | "git-like experience by adding the following configuration option to\n" | |
145 | "your .hgrc:\n" |
|
149 | "your .hgrc::\n" | |
146 | "\n" |
|
150 | "\n" | |
147 | " [bookmarks]\n" |
|
151 | " [bookmarks]\n" | |
148 | " track.current = True\n" |
|
152 | " track.current = True\n" | |
@@ -217,65 +221,86 b' msgid ""' | |||||
217 | "be run by Mercurial as the user pushing the change; you will need to\n" |
|
221 | "be run by Mercurial as the user pushing the change; you will need to\n" | |
218 | "ensure the Bugzilla install file permissions are set appropriately.\n" |
|
222 | "ensure the Bugzilla install file permissions are set appropriately.\n" | |
219 | "\n" |
|
223 | "\n" | |
220 | "Configuring the extension:\n" |
|
224 | "The extension is configured through three different configuration\n" | |
221 | "\n" |
|
225 | "sections. These keys are recognized in the [bugzilla] section:\n" | |
222 | " [bugzilla]\n" |
|
226 | "\n" | |
223 | "\n" |
|
227 | "host\n" | |
224 |
" |
|
228 | " Hostname of the MySQL server holding the Bugzilla database.\n" | |
225 | " database.\n" |
|
229 | "\n" | |
226 | " db Name of the Bugzilla database in MySQL. Default 'bugs'.\n" |
|
230 | "db\n" | |
227 | " user Username to use to access MySQL server. Default 'bugs'.\n" |
|
231 | " Name of the Bugzilla database in MySQL. Default 'bugs'.\n" | |
228 | " password Password to use to access MySQL server.\n" |
|
232 | "\n" | |
229 | " timeout Database connection timeout (seconds). Default 5.\n" |
|
233 | "user\n" | |
230 | " version Bugzilla version. Specify '3.0' for Bugzilla versions\n" |
|
234 | " Username to use to access MySQL server. Default 'bugs'.\n" | |
231 | " 3.0 and later, '2.18' for Bugzilla versions from 2.18\n" |
|
235 | "\n" | |
232 | " and '2.16' for versions prior to 2.18.\n" |
|
236 | "password\n" | |
233 | " bzuser Fallback Bugzilla user name to record comments with, if\n" |
|
237 | " Password to use to access MySQL server.\n" | |
234 | " changeset committer cannot be found as a Bugzilla user.\n" |
|
238 | "\n" | |
235 | " bzdir Bugzilla install directory. Used by default notify.\n" |
|
239 | "timeout\n" | |
236 | " Default '/var/www/html/bugzilla'.\n" |
|
240 | " Database connection timeout (seconds). Default 5.\n" | |
237 | " notify The command to run to get Bugzilla to send bug change\n" |
|
241 | "\n" | |
238 | " notification emails. Substitutes from a map with 3\n" |
|
242 | "version\n" | |
239 | " keys, 'bzdir', 'id' (bug id) and 'user' (committer\n" |
|
243 | " Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 and later,\n" | |
240 | " bugzilla email). Default depends on version; from 2.18\n" |
|
244 | " '2.18' for Bugzilla versions from 2.18 and '2.16' for versions prior\n" | |
241 | " it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n" |
|
245 | " to 2.18.\n" | |
242 | " %(id)s %(user)s\".\n" |
|
246 | "\n" | |
243 | " regexp Regular expression to match bug IDs in changeset commit\n" |
|
247 | "bzuser\n" | |
244 | " message. Must contain one \"()\" group. The default\n" |
|
248 | " Fallback Bugzilla user name to record comments with, if changeset\n" | |
245 | " expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n" |
|
249 | " committer cannot be found as a Bugzilla user.\n" | |
246 | " number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n" |
|
250 | "\n" | |
247 | " variations thereof. Matching is case insensitive.\n" |
|
251 | "bzdir\n" | |
248 | " style The style file to use when formatting comments.\n" |
|
252 | " Bugzilla install directory. Used by default notify. Default\n" | |
249 | " template Template to use when formatting comments. Overrides\n" |
|
253 | " '/var/www/html/bugzilla'.\n" | |
250 | " style if specified. In addition to the usual Mercurial\n" |
|
254 | "\n" | |
251 | " keywords, the extension specifies:\n" |
|
255 | "notify\n" | |
252 | " {bug} The Bugzilla bug ID.\n" |
|
256 | " The command to run to get Bugzilla to send bug change notification\n" | |
253 | " {root} The full pathname of the Mercurial\n" |
|
257 | " emails. Substitutes from a map with 3 keys, 'bzdir', 'id' (bug id)\n" | |
254 | " repository.\n" |
|
258 | " and 'user' (committer bugzilla email). Default depends on version;\n" | |
255 | " {webroot} Stripped pathname of the Mercurial\n" |
|
259 | " from 2.18 it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n" | |
256 | " repository.\n" |
|
260 | " %(id)s %(user)s\".\n" | |
257 | " {hgweb} Base URL for browsing Mercurial\n" |
|
261 | "\n" | |
258 | " repositories.\n" |
|
262 | "regexp\n" | |
259 | " Default 'changeset {node|short} in repo {root} refers '\n" |
|
263 | " Regular expression to match bug IDs in changeset commit message.\n" | |
260 | " 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n" |
|
264 | " Must contain one \"()\" group. The default expression matches 'Bug\n" | |
261 | " strip The number of slashes to strip from the front of {root}\n" |
|
265 | " 1234', 'Bug no. 1234', 'Bug number 1234', 'Bugs 1234,5678', 'Bug\n" | |
262 | " to produce {webroot}. Default 0.\n" |
|
266 | " 1234 and 5678' and variations thereof. Matching is case insensitive.\n" | |
263 | " usermap Path of file containing Mercurial committer ID to\n" |
|
267 | "\n" | |
264 | " Bugzilla user ID mappings. If specified, the file\n" |
|
268 | "style\n" | |
265 | " should contain one mapping per line,\n" |
|
269 | " The style file to use when formatting comments.\n" | |
266 | " \"committer\"=\"Bugzilla user\". See also the [usermap]\n" |
|
270 | "\n" | |
267 | " section.\n" |
|
271 | "template\n" | |
268 | "\n" |
|
272 | " Template to use when formatting comments. Overrides style if\n" | |
269 | " [usermap]\n" |
|
273 | " specified. In addition to the usual Mercurial keywords, the\n" | |
270 | " Any entries in this section specify mappings of Mercurial\n" |
|
274 | " extension specifies::\n" | |
271 | " committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n" |
|
275 | "\n" | |
272 | " \"committer\"=\"Bugzilla user\"\n" |
|
276 | " {bug} The Bugzilla bug ID.\n" | |
273 | "\n" |
|
277 | " {root} The full pathname of the Mercurial repository.\n" | |
274 | " [web]\n" |
|
278 | " {webroot} Stripped pathname of the Mercurial repository.\n" | |
275 |
" |
|
279 | " {hgweb} Base URL for browsing Mercurial repositories.\n" | |
276 | " from templates as {hgweb}.\n" |
|
280 | "\n" | |
277 | "\n" |
|
281 | " Default 'changeset {node|short} in repo {root} refers '\n" | |
278 | "Activating the extension:\n" |
|
282 | " 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n" | |
|
283 | "\n" | |||
|
284 | "strip\n" | |||
|
285 | " The number of slashes to strip from the front of {root} to produce\n" | |||
|
286 | " {webroot}. Default 0.\n" | |||
|
287 | "\n" | |||
|
288 | "usermap\n" | |||
|
289 | " Path of file containing Mercurial committer ID to Bugzilla user ID\n" | |||
|
290 | " mappings. If specified, the file should contain one mapping per\n" | |||
|
291 | " line, \"committer\"=\"Bugzilla user\". See also the [usermap] section.\n" | |||
|
292 | "\n" | |||
|
293 | "The [usermap] section is used to specify mappings of Mercurial\n" | |||
|
294 | "committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n" | |||
|
295 | "\"committer\"=\"Bugzilla user\"\n" | |||
|
296 | "\n" | |||
|
297 | "Finally, the [web] section supports one entry:\n" | |||
|
298 | "\n" | |||
|
299 | "baseurl\n" | |||
|
300 | " Base URL for browsing Mercurial repositories. Reference from\n" | |||
|
301 | " templates as {hgweb}.\n" | |||
|
302 | "\n" | |||
|
303 | "Activating the extension::\n" | |||
279 | "\n" |
|
304 | "\n" | |
280 | " [extensions]\n" |
|
305 | " [extensions]\n" | |
281 | " hgext.bugzilla =\n" |
|
306 | " hgext.bugzilla =\n" | |
@@ -288,7 +313,7 b' msgid ""' | |||||
288 | "\n" |
|
313 | "\n" | |
289 | "This example configuration is for a collection of Mercurial\n" |
|
314 | "This example configuration is for a collection of Mercurial\n" | |
290 | "repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n" |
|
315 | "repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n" | |
291 | "installation in /opt/bugzilla-3.2.\n" |
|
316 | "installation in /opt/bugzilla-3.2. ::\n" | |
292 | "\n" |
|
317 | "\n" | |
293 | " [bugzilla]\n" |
|
318 | " [bugzilla]\n" | |
294 | " host=localhost\n" |
|
319 | " host=localhost\n" | |
@@ -296,8 +321,9 b' msgid ""' | |||||
296 | " version=3.0\n" |
|
321 | " version=3.0\n" | |
297 | " bzuser=unknown@domain.com\n" |
|
322 | " bzuser=unknown@domain.com\n" | |
298 | " bzdir=/opt/bugzilla-3.2\n" |
|
323 | " bzdir=/opt/bugzilla-3.2\n" | |
299 |
" template=Changeset {node|short} in {root|basename}.\ |
|
324 | " template=Changeset {node|short} in {root|basename}.\n" | |
300 | "rev/{node|short}\\n\\n{desc}\\n\n" |
|
325 | " {hgweb}/{webroot}/rev/{node|short}\\n\n" | |
|
326 | " {desc}\\n\n" | |||
301 | " strip=5\n" |
|
327 | " strip=5\n" | |
302 | "\n" |
|
328 | "\n" | |
303 | " [web]\n" |
|
329 | " [web]\n" | |
@@ -306,7 +332,7 b' msgid ""' | |||||
306 | " [usermap]\n" |
|
332 | " [usermap]\n" | |
307 | " user@emaildomain.com=user.name@bugzilladomain.com\n" |
|
333 | " user@emaildomain.com=user.name@bugzilladomain.com\n" | |
308 | "\n" |
|
334 | "\n" | |
309 | "Commits add a comment to the Bugzilla bug record of the form:\n" |
|
335 | "Commits add a comment to the Bugzilla bug record of the form::\n" | |
310 | "\n" |
|
336 | "\n" | |
311 | " Changeset 3b16791d6642 in repository-name.\n" |
|
337 | " Changeset 3b16791d6642 in repository-name.\n" | |
312 | " http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n" |
|
338 | " http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n" | |
@@ -437,7 +463,7 b' msgid ""' | |||||
437 | " alternatively the number of matching revisions if the\n" |
|
463 | " alternatively the number of matching revisions if the\n" | |
438 | " --changesets option is specified.\n" |
|
464 | " --changesets option is specified.\n" | |
439 | "\n" |
|
465 | "\n" | |
440 | " Examples:\n" |
|
466 | " Examples::\n" | |
441 | "\n" |
|
467 | "\n" | |
442 | " # display count of changed lines for every committer\n" |
|
468 | " # display count of changed lines for every committer\n" | |
443 | " hg churn -t '{author|email}'\n" |
|
469 | " hg churn -t '{author|email}'\n" | |
@@ -452,12 +478,12 b' msgid ""' | |||||
452 | " hg churn -f '%Y' -s\n" |
|
478 | " hg churn -f '%Y' -s\n" | |
453 | "\n" |
|
479 | "\n" | |
454 | " It is possible to map alternate email addresses to a main address\n" |
|
480 | " It is possible to map alternate email addresses to a main address\n" | |
455 | " by providing a file using the following format:\n" |
|
481 | " by providing a file using the following format::\n" | |
456 | "\n" |
|
482 | "\n" | |
457 | " <alias email> <actual email>\n" |
|
483 | " <alias email> <actual email>\n" | |
458 | "\n" |
|
484 | "\n" | |
459 |
" Such a file may be specified with the --aliases option, otherwise |
|
485 | " Such a file may be specified with the --aliases option, otherwise\n" | |
460 | " .hgchurn file will be looked for in the working directory root.\n" |
|
486 | " a .hgchurn file will be looked for in the working directory root.\n" | |
461 | " " |
|
487 | " " | |
462 | msgstr "" |
|
488 | msgstr "" | |
463 | "histogram over ændringer i depotet\n" |
|
489 | "histogram over ændringer i depotet\n" | |
@@ -472,7 +498,7 b' msgstr ""' | |||||
472 | " alternativt på antallet af matchende revisioner, hvis --changesets\n" |
|
498 | " alternativt på antallet af matchende revisioner, hvis --changesets\n" | |
473 | " tilvalget er specificeret.\n" |
|
499 | " tilvalget er specificeret.\n" | |
474 | "\n" |
|
500 | "\n" | |
475 | " Eksempler:\n" |
|
501 | " Eksempler::\n" | |
476 | "\n" |
|
502 | "\n" | |
477 | " # viser antaller af ændrede linier for hver bruger\n" |
|
503 | " # viser antaller af ændrede linier for hver bruger\n" | |
478 | " hg churn -t '{author|email}'\n" |
|
504 | " hg churn -t '{author|email}'\n" | |
@@ -487,9 +513,9 b' msgstr ""' | |||||
487 | " hg churn -f '%Y' -s\n" |
|
513 | " hg churn -f '%Y' -s\n" | |
488 | "\n" |
|
514 | "\n" | |
489 | " Det er muligt at afbilde alternative e-mail-adresser til\n" |
|
515 | " Det er muligt at afbilde alternative e-mail-adresser til\n" | |
490 | " hoved-adresser ved at bruge en fil med følgende format:\n" |
|
516 | " hoved-adresser ved at bruge en fil med følgende format::\n" | |
491 | "\n" |
|
517 | "\n" | |
492 | " <alias email> <faktisk email>\n" |
|
518 | " <alias email> <faktisk email>\n" | |
493 | "\n" |
|
519 | "\n" | |
494 | " En sådan fil kan angivet med --aliases tilvalget. Som standard\n" |
|
520 | " En sådan fil kan angivet med --aliases tilvalget. Som standard\n" | |
495 | " bruges .hgchurn i arbejdskatalogets rod, hvis denne findes.\n" |
|
521 | " bruges .hgchurn i arbejdskatalogets rod, hvis denne findes.\n" | |
@@ -540,33 +566,33 b' msgid ""' | |||||
540 | "function (aka ANSI escape codes). This module also provides the\n" |
|
566 | "function (aka ANSI escape codes). This module also provides the\n" | |
541 | "render_text function, which can be used to add effects to any text.\n" |
|
567 | "render_text function, which can be used to add effects to any text.\n" | |
542 | "\n" |
|
568 | "\n" | |
543 | "Default effects may be overridden from the .hgrc file:\n" |
|
569 | "Default effects may be overridden from the .hgrc file::\n" | |
544 | "\n" |
|
570 | "\n" | |
545 | "[color]\n" |
|
571 | " [color]\n" | |
546 | "status.modified = blue bold underline red_background\n" |
|
572 | " status.modified = blue bold underline red_background\n" | |
547 | "status.added = green bold\n" |
|
573 | " status.added = green bold\n" | |
548 | "status.removed = red bold blue_background\n" |
|
574 | " status.removed = red bold blue_background\n" | |
549 | "status.deleted = cyan bold underline\n" |
|
575 | " status.deleted = cyan bold underline\n" | |
550 | "status.unknown = magenta bold underline\n" |
|
576 | " status.unknown = magenta bold underline\n" | |
551 | "status.ignored = black bold\n" |
|
577 | " status.ignored = black bold\n" | |
552 | "\n" |
|
578 | "\n" | |
553 | "# 'none' turns off all effects\n" |
|
579 | " # 'none' turns off all effects\n" | |
554 | "status.clean = none\n" |
|
580 | " status.clean = none\n" | |
555 | "status.copied = none\n" |
|
581 | " status.copied = none\n" | |
556 | "\n" |
|
582 | "\n" | |
557 | "qseries.applied = blue bold underline\n" |
|
583 | " qseries.applied = blue bold underline\n" | |
558 | "qseries.unapplied = black bold\n" |
|
584 | " qseries.unapplied = black bold\n" | |
559 | "qseries.missing = red bold\n" |
|
585 | " qseries.missing = red bold\n" | |
560 | "\n" |
|
586 | "\n" | |
561 | "diff.diffline = bold\n" |
|
587 | " diff.diffline = bold\n" | |
562 | "diff.extended = cyan bold\n" |
|
588 | " diff.extended = cyan bold\n" | |
563 | "diff.file_a = red bold\n" |
|
589 | " diff.file_a = red bold\n" | |
564 | "diff.file_b = green bold\n" |
|
590 | " diff.file_b = green bold\n" | |
565 | "diff.hunk = magenta\n" |
|
591 | " diff.hunk = magenta\n" | |
566 | "diff.deleted = red\n" |
|
592 | " diff.deleted = red\n" | |
567 | "diff.inserted = green\n" |
|
593 | " diff.inserted = green\n" | |
568 | "diff.changed = white\n" |
|
594 | " diff.changed = white\n" | |
569 | "diff.trailingwhitespace = bold red_background\n" |
|
595 | " diff.trailingwhitespace = bold red_background\n" | |
570 | msgstr "" |
|
596 | msgstr "" | |
571 |
|
597 | |||
572 | msgid "when to colorize (always, auto, or never)" |
|
598 | msgid "when to colorize (always, auto, or never)" | |
@@ -586,6 +612,7 b' msgid ""' | |||||
586 | "convert a foreign SCM repository to a Mercurial one.\n" |
|
612 | "convert a foreign SCM repository to a Mercurial one.\n" | |
587 | "\n" |
|
613 | "\n" | |
588 | " Accepted source formats [identifiers]:\n" |
|
614 | " Accepted source formats [identifiers]:\n" | |
|
615 | "\n" | |||
589 | " - Mercurial [hg]\n" |
|
616 | " - Mercurial [hg]\n" | |
590 | " - CVS [cvs]\n" |
|
617 | " - CVS [cvs]\n" | |
591 | " - Darcs [darcs]\n" |
|
618 | " - Darcs [darcs]\n" | |
@@ -597,6 +624,7 b' msgid ""' | |||||
597 | " - Perforce [p4]\n" |
|
624 | " - Perforce [p4]\n" | |
598 | "\n" |
|
625 | "\n" | |
599 | " Accepted destination formats [identifiers]:\n" |
|
626 | " Accepted destination formats [identifiers]:\n" | |
|
627 | "\n" | |||
600 | " - Mercurial [hg]\n" |
|
628 | " - Mercurial [hg]\n" | |
601 | " - Subversion [svn] (history on branches is not preserved)\n" |
|
629 | " - Subversion [svn] (history on branches is not preserved)\n" | |
602 | "\n" |
|
630 | "\n" | |
@@ -608,23 +636,28 b' msgid ""' | |||||
608 | " basename of the source with '-hg' appended. If the destination\n" |
|
636 | " basename of the source with '-hg' appended. If the destination\n" | |
609 | " repository doesn't exist, it will be created.\n" |
|
637 | " repository doesn't exist, it will be created.\n" | |
610 | "\n" |
|
638 | "\n" | |
611 | " By default, all sources except Mercurial will use\n" |
|
639 | " By default, all sources except Mercurial will use --branchsort.\n" | |
612 |
" |
|
640 | " Mercurial uses --sourcesort to preserve original revision numbers\n" | |
613 |
" |
|
641 | " order. Sort modes have the following effects:\n" | |
614 | " --branchsort: convert from parent to child revision when\n" |
|
642 | "\n" | |
615 | " possible, which means branches are usually converted one after\n" |
|
643 | " --branchsort convert from parent to child revision when possible,\n" | |
616 | " the other. It generates more compact repositories.\n" |
|
644 | " which means branches are usually converted one after\n" | |
617 | " --datesort: sort revisions by date. Converted repositories have\n" |
|
645 | " the other. It generates more compact repositories.\n" | |
618 | " good-looking changelogs but are often an order of magnitude\n" |
|
646 | "\n" | |
619 | " larger than the same ones generated by --branchsort.\n" |
|
647 | " --datesort sort revisions by date. Converted repositories have\n" | |
620 | " --sourcesort: try to preserve source revisions order, only\n" |
|
648 | " good-looking changelogs but are often an order of\n" | |
621 | " supported by Mercurial sources.\n" |
|
649 | " magnitude larger than the same ones generated by\n" | |
|
650 | " --branchsort.\n" | |||
|
651 | "\n" | |||
|
652 | " --sourcesort try to preserve source revisions order, only\n" | |||
|
653 | " supported by Mercurial sources.\n" | |||
622 | "\n" |
|
654 | "\n" | |
623 | " If <REVMAP> isn't given, it will be put in a default location\n" |
|
655 | " If <REVMAP> isn't given, it will be put in a default location\n" | |
624 | " (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n" |
|
656 | " (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n" | |
625 | " that maps each source commit ID to the destination ID for that\n" |
|
657 | " that maps each source commit ID to the destination ID for that\n" | |
626 | " revision, like so:\n" |
|
658 | " revision, like so::\n" | |
627 | " <source ID> <destination ID>\n" |
|
659 | "\n" | |
|
660 | " <source ID> <destination ID>\n" | |||
628 | "\n" |
|
661 | "\n" | |
629 | " If the file doesn't exist, it's automatically created. It's\n" |
|
662 | " If the file doesn't exist, it's automatically created. It's\n" | |
630 | " updated on each commit copied, so convert-repo can be interrupted\n" |
|
663 | " updated on each commit copied, so convert-repo can be interrupted\n" | |
@@ -638,7 +671,7 b' msgid ""' | |||||
638 | "\n" |
|
671 | "\n" | |
639 | " The filemap is a file that allows filtering and remapping of files\n" |
|
672 | " The filemap is a file that allows filtering and remapping of files\n" | |
640 | " and directories. Comment lines start with '#'. Each line can\n" |
|
673 | " and directories. Comment lines start with '#'. Each line can\n" | |
641 | " contain one of the following directives:\n" |
|
674 | " contain one of the following directives::\n" | |
642 | "\n" |
|
675 | "\n" | |
643 | " include path/to/file\n" |
|
676 | " include path/to/file\n" | |
644 | "\n" |
|
677 | "\n" | |
@@ -648,11 +681,11 b' msgid ""' | |||||
648 | "\n" |
|
681 | "\n" | |
649 | " The 'include' directive causes a file, or all files under a\n" |
|
682 | " The 'include' directive causes a file, or all files under a\n" | |
650 | " directory, to be included in the destination repository, and the\n" |
|
683 | " directory, to be included in the destination repository, and the\n" | |
651 |
" exclusion of all other files and directories not explicitly |
|
684 | " exclusion of all other files and directories not explicitly\n" | |
652 |
" The 'exclude' directive causes files or directories to |
|
685 | " included. The 'exclude' directive causes files or directories to\n" | |
653 |
" The 'rename' directive renames a file or directory. To |
|
686 | " be omitted. The 'rename' directive renames a file or directory. To\n" | |
654 |
" a subdirectory into the root of the repository, us |
|
687 | " rename from a subdirectory into the root of the repository, use\n" | |
655 | " path to rename to.\n" |
|
688 | " '.' as the path to rename to.\n" | |
656 | "\n" |
|
689 | "\n" | |
657 | " The splicemap is a file that allows insertion of synthetic\n" |
|
690 | " The splicemap is a file that allows insertion of synthetic\n" | |
658 | " history, letting you specify the parents of a revision. This is\n" |
|
691 | " history, letting you specify the parents of a revision. This is\n" | |
@@ -677,7 +710,7 b' msgid ""' | |||||
677 | " in one repository from \"default\" to a named branch.\n" |
|
710 | " in one repository from \"default\" to a named branch.\n" | |
678 | "\n" |
|
711 | "\n" | |
679 | " Mercurial Source\n" |
|
712 | " Mercurial Source\n" | |
680 |
" ---------------- |
|
713 | " ----------------\n" | |
681 | "\n" |
|
714 | "\n" | |
682 | " --config convert.hg.ignoreerrors=False (boolean)\n" |
|
715 | " --config convert.hg.ignoreerrors=False (boolean)\n" | |
683 | " ignore integrity errors when reading. Use it to fix Mercurial\n" |
|
716 | " ignore integrity errors when reading. Use it to fix Mercurial\n" | |
@@ -705,36 +738,38 b' msgid ""' | |||||
705 | " Because CVS does not have changesets, it is necessary to collect\n" |
|
738 | " Because CVS does not have changesets, it is necessary to collect\n" | |
706 | " individual commits to CVS and merge them into changesets. CVS\n" |
|
739 | " individual commits to CVS and merge them into changesets. CVS\n" | |
707 | " source uses its internal changeset merging code by default but can\n" |
|
740 | " source uses its internal changeset merging code by default but can\n" | |
708 | " be configured to call the external 'cvsps' program by setting:\n" |
|
741 | " be configured to call the external 'cvsps' program by setting::\n" | |
709 | " --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n" |
|
742 | "\n" | |
|
743 | " --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n" | |||
|
744 | "\n" | |||
710 | " This option is deprecated and will be removed in Mercurial 1.4.\n" |
|
745 | " This option is deprecated and will be removed in Mercurial 1.4.\n" | |
711 | "\n" |
|
746 | "\n" | |
712 | " The options shown are the defaults.\n" |
|
747 | " The options shown are the defaults.\n" | |
713 | "\n" |
|
748 | "\n" | |
714 | " Internal cvsps is selected by setting\n" |
|
749 | " Internal cvsps is selected by setting ::\n" | |
715 | " --config convert.cvsps=builtin\n" |
|
750 | "\n" | |
|
751 | " --config convert.cvsps=builtin\n" | |||
|
752 | "\n" | |||
716 | " and has a few more configurable options:\n" |
|
753 | " and has a few more configurable options:\n" | |
717 | " --config convert.cvsps.cache=True (boolean)\n" |
|
754 | "\n" | |
718 | " Set to False to disable remote log caching, for testing and\n" |
|
755 | " --config convert.cvsps.cache=True (boolean)\n" | |
719 | " debugging purposes.\n" |
|
756 | " Set to False to disable remote log caching, for testing and\n" | |
720 | " --config convert.cvsps.fuzz=60 (integer)\n" |
|
757 | " debugging purposes.\n" | |
721 | " Specify the maximum time (in seconds) that is allowed\n" |
|
758 | " --config convert.cvsps.fuzz=60 (integer)\n" | |
722 | " between commits with identical user and log message in a\n" |
|
759 | " Specify the maximum time (in seconds) that is allowed between\n" | |
723 | " single changeset. When very large files were checked in as\n" |
|
760 | " commits with identical user and log message in a single\n" | |
724 | " part of a changeset then the default may not be long\n" |
|
761 | " changeset. When very large files were checked in as part of a\n" | |
725 | " enough.\n" |
|
762 | " changeset then the default may not be long enough.\n" | |
726 |
" |
|
763 | " --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n" | |
727 |
" |
|
764 | " Specify a regular expression to which commit log messages are\n" | |
728 |
" |
|
765 | " matched. If a match occurs, then the conversion process will\n" | |
729 |
" |
|
766 | " insert a dummy revision merging the branch on which this log\n" | |
730 |
" |
|
767 | " message occurs to the branch indicated in the regex.\n" | |
731 | " the regex.\n" |
|
768 | " --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n" | |
732 | " --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n" |
|
769 | " Specify a regular expression to which commit log messages are\n" | |
733 | " Specify a regular expression to which commit log messages\n" |
|
770 | " matched. If a match occurs, then the conversion process will\n" | |
734 | " are matched. If a match occurs, then the conversion\n" |
|
771 | " add the most recent revision on the branch indicated in the\n" | |
735 | " process will add the most recent revision on the branch\n" |
|
772 | " regex as the second parent of the changeset.\n" | |
736 | " indicated in the regex as the second parent of the\n" |
|
|||
737 | " changeset.\n" |
|
|||
738 | "\n" |
|
773 | "\n" | |
739 | " The hgext/convert/cvsps wrapper script allows the builtin\n" |
|
774 | " The hgext/convert/cvsps wrapper script allows the builtin\n" | |
740 | " changeset merging code to be run without doing a conversion. Its\n" |
|
775 | " changeset merging code to be run without doing a conversion. Its\n" | |
@@ -784,7 +819,6 b' msgid ""' | |||||
784 | " --config convert.p4.startrev=0 (perforce changelist number)\n" |
|
819 | " --config convert.p4.startrev=0 (perforce changelist number)\n" | |
785 | " specify initial Perforce revision.\n" |
|
820 | " specify initial Perforce revision.\n" | |
786 | "\n" |
|
821 | "\n" | |
787 | "\n" |
|
|||
788 | " Mercurial Destination\n" |
|
822 | " Mercurial Destination\n" | |
789 | " ---------------------\n" |
|
823 | " ---------------------\n" | |
790 | "\n" |
|
824 | "\n" | |
@@ -1007,7 +1041,8 b' msgstr "CVS pserver godkendelse fejlede"' | |||||
1007 | #, python-format |
|
1041 | #, python-format | |
1008 | msgid "" |
|
1042 | msgid "" | |
1009 | "unexpected response from CVS server (expected \"Valid-requests\", but got %r)" |
|
1043 | "unexpected response from CVS server (expected \"Valid-requests\", but got %r)" | |
1010 | msgstr "uventet svar fra CVS serveren (forventede \"Valid-requests\", men fik %r)" |
|
1044 | msgstr "" | |
|
1045 | "uventet svar fra CVS serveren (forventede \"Valid-requests\", men fik %r)" | |||
1011 |
|
1046 | |||
1012 | #, python-format |
|
1047 | #, python-format | |
1013 | msgid "%d bytes missing from remote file" |
|
1048 | msgid "%d bytes missing from remote file" | |
@@ -1086,6 +1121,10 b' msgstr ""' | |||||
1086 | msgid "%d changeset entries\n" |
|
1121 | msgid "%d changeset entries\n" | |
1087 | msgstr "%d ændringer\n" |
|
1122 | msgstr "%d ændringer\n" | |
1088 |
|
1123 | |||
|
1124 | #, python-format | |||
|
1125 | msgid "darcs version 2.1 or newer needed (found %r)" | |||
|
1126 | msgstr "" | |||
|
1127 | ||||
1089 | msgid "Python ElementTree module is not available" |
|
1128 | msgid "Python ElementTree module is not available" | |
1090 | msgstr "Python ElementTree modulet er ikke tilstede" |
|
1129 | msgstr "Python ElementTree modulet er ikke tilstede" | |
1091 |
|
1130 | |||
@@ -1330,14 +1369,14 b' msgstr ""' | |||||
1330 | msgid "" |
|
1369 | msgid "" | |
1331 | "command to allow external programs to compare revisions\n" |
|
1370 | "command to allow external programs to compare revisions\n" | |
1332 | "\n" |
|
1371 | "\n" | |
1333 |
"The |
|
1372 | "The extdiff Mercurial extension allows you to use external programs\n" | |
1334 |
"to compare revisions, or revision with working directory. The external |
|
1373 | "to compare revisions, or revision with working directory. The external\n" | |
1335 | "programs are called with a configurable set of options and two\n" |
|
1374 | "diff programs are called with a configurable set of options and two\n" | |
1336 | "non-option arguments: paths to directories containing snapshots of\n" |
|
1375 | "non-option arguments: paths to directories containing snapshots of\n" | |
1337 | "files to compare.\n" |
|
1376 | "files to compare.\n" | |
1338 | "\n" |
|
1377 | "\n" | |
1339 |
"The |
|
1378 | "The extdiff extension also allows to configure new diff commands, so\n" | |
1340 | "you do not need to type \"hg extdiff -p kdiff3\" always.\n" |
|
1379 | "you do not need to type \"hg extdiff -p kdiff3\" always. ::\n" | |
1341 | "\n" |
|
1380 | "\n" | |
1342 | " [extdiff]\n" |
|
1381 | " [extdiff]\n" | |
1343 | " # add new command that runs GNU diff(1) in 'context diff' mode\n" |
|
1382 | " # add new command that runs GNU diff(1) in 'context diff' mode\n" | |
@@ -1353,14 +1392,13 b' msgid ""' | |||||
1353 | " meld =\n" |
|
1392 | " meld =\n" | |
1354 | "\n" |
|
1393 | "\n" | |
1355 | " # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n" |
|
1394 | " # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n" | |
1356 | " # (see http://www.vim.org/scripts/script.php?script_id=102)\n" |
|
1395 | " # (see http://www.vim.org/scripts/script.php?script_id=102) Non\n" | |
1357 |
" # |
|
1396 | " # English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n" | |
1358 | "in\n" |
|
|||
1359 | " # your .vimrc\n" |
|
1397 | " # your .vimrc\n" | |
1360 | " vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n" |
|
1398 | " vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n" | |
1361 | "\n" |
|
1399 | "\n" | |
1362 | "You can use -I/-X and list of file or directory names like normal \"hg\n" |
|
1400 | "You can use -I/-X and list of file or directory names like normal \"hg\n" | |
1363 |
"diff\" command. The |
|
1401 | "diff\" command. The extdiff extension makes snapshots of only needed\n" | |
1364 | "files, so running the external diff program will actually be pretty\n" |
|
1402 | "files, so running the external diff program will actually be pretty\n" | |
1365 | "fast (at least faster than having to compare the entire tree).\n" |
|
1403 | "fast (at least faster than having to compare the entire tree).\n" | |
1366 | msgstr "" |
|
1404 | msgstr "" | |
@@ -1419,6 +1457,21 b' msgid "hg extdiff [OPT]... [FILE]..."' | |||||
1419 | msgstr "hg extdiff [TILVALG]... [FIL]..." |
|
1457 | msgstr "hg extdiff [TILVALG]... [FIL]..." | |
1420 |
|
1458 | |||
1421 | #, python-format |
|
1459 | #, python-format | |
|
1460 | msgid "" | |||
|
1461 | "use %(path)s to diff repository (or selected files)\n" | |||
|
1462 | "\n" | |||
|
1463 | " Show differences between revisions for the specified files, using the\n" | |||
|
1464 | " %(path)s program.\n" | |||
|
1465 | "\n" | |||
|
1466 | " When two revision arguments are given, then changes are shown between\n" | |||
|
1467 | " those revisions. If only one revision is specified then that revision " | |||
|
1468 | "is\n" | |||
|
1469 | " compared to the working directory, and, when no revisions are " | |||
|
1470 | "specified,\n" | |||
|
1471 | " the working directory files are compared to its parent." | |||
|
1472 | msgstr "" | |||
|
1473 | ||||
|
1474 | #, python-format | |||
1422 | msgid "hg %s [OPTION]... [FILE]..." |
|
1475 | msgid "hg %s [OPTION]... [FILE]..." | |
1423 | msgstr "hg %s [TILVALG]... [FIL]..." |
|
1476 | msgstr "hg %s [TILVALG]... [FIL]..." | |
1424 |
|
1477 | |||
@@ -1492,10 +1545,6 b' msgid "merging with %d:%s\\n"' | |||||
1492 | msgstr "sammenføjer med %d:%s\n" |
|
1545 | msgstr "sammenføjer med %d:%s\n" | |
1493 |
|
1546 | |||
1494 | #, python-format |
|
1547 | #, python-format | |
1495 | msgid "Automated merge with %s" |
|
|||
1496 | msgstr "Automatisk sammenføjning med %s" |
|
|||
1497 |
|
||||
1498 | #, python-format |
|
|||
1499 | msgid "new changeset %d:%s merges remote changes with local\n" |
|
1548 | msgid "new changeset %d:%s merges remote changes with local\n" | |
1500 | msgstr "ny ændring %d:%s fletter fjernændringer sammen med lokale\n" |
|
1549 | msgstr "ny ændring %d:%s fletter fjernændringer sammen med lokale\n" | |
1501 |
|
1550 | |||
@@ -1576,10 +1625,6 b' msgstr ""' | |||||
1576 | "arbejdskopien af .hgsigs er ændret (deponer venligst .hgsigs manuelt eller " |
|
1625 | "arbejdskopien af .hgsigs er ændret (deponer venligst .hgsigs manuelt eller " | |
1577 | "brug --force)" |
|
1626 | "brug --force)" | |
1578 |
|
1627 | |||
1579 | #, python-format |
|
|||
1580 | msgid "Added signature for changeset %s" |
|
|||
1581 | msgstr "Tilføjede underskrift af ændring %s" |
|
|||
1582 |
|
||||
1583 | msgid "unknown signature version" |
|
1628 | msgid "unknown signature version" | |
1584 | msgstr "ukendt underskrift-version" |
|
1629 | msgstr "ukendt underskrift-version" | |
1585 |
|
1630 | |||
@@ -1655,38 +1700,38 b' msgstr "hg glog [TILVALG]... [FIL]"' | |||||
1655 | msgid "" |
|
1700 | msgid "" | |
1656 | "hooks for integrating with the CIA.vc notification service\n" |
|
1701 | "hooks for integrating with the CIA.vc notification service\n" | |
1657 | "\n" |
|
1702 | "\n" | |
1658 | "This is meant to be run as a changegroup or incoming hook.\n" |
|
1703 | "This is meant to be run as a changegroup or incoming hook. To\n" | |
1659 |
" |
|
1704 | "configure it, set the following options in your hgrc::\n" | |
1660 | "\n" |
|
1705 | "\n" | |
1661 | "[cia]\n" |
|
1706 | " [cia]\n" | |
1662 | "# your registered CIA user name\n" |
|
1707 | " # your registered CIA user name\n" | |
1663 | "user = foo\n" |
|
1708 | " user = foo\n" | |
1664 | "# the name of the project in CIA\n" |
|
1709 | " # the name of the project in CIA\n" | |
1665 | "project = foo\n" |
|
1710 | " project = foo\n" | |
1666 | "# the module (subproject) (optional)\n" |
|
1711 | " # the module (subproject) (optional)\n" | |
1667 | "#module = foo\n" |
|
1712 | " #module = foo\n" | |
1668 | "# Append a diffstat to the log message (optional)\n" |
|
1713 | " # Append a diffstat to the log message (optional)\n" | |
1669 | "#diffstat = False\n" |
|
1714 | " #diffstat = False\n" | |
1670 | "# Template to use for log messages (optional)\n" |
|
1715 | " # Template to use for log messages (optional)\n" | |
1671 | "#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n" |
|
1716 | " #template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n" | |
1672 | "# Style to use (optional)\n" |
|
1717 | " # Style to use (optional)\n" | |
1673 | "#style = foo\n" |
|
1718 | " #style = foo\n" | |
1674 | "# The URL of the CIA notification service (optional)\n" |
|
1719 | " # The URL of the CIA notification service (optional)\n" | |
1675 | "# You can use mailto: URLs to send by email, eg\n" |
|
1720 | " # You can use mailto: URLs to send by email, eg\n" | |
1676 | "# mailto:cia@cia.vc\n" |
|
1721 | " # mailto:cia@cia.vc\n" | |
1677 | "# Make sure to set email.from if you do this.\n" |
|
1722 | " # Make sure to set email.from if you do this.\n" | |
1678 | "#url = http://cia.vc/\n" |
|
1723 | " #url = http://cia.vc/\n" | |
1679 | "# print message instead of sending it (optional)\n" |
|
1724 | " # print message instead of sending it (optional)\n" | |
1680 | "#test = False\n" |
|
1725 | " #test = False\n" | |
1681 | "\n" |
|
1726 | "\n" | |
1682 | "[hooks]\n" |
|
1727 | " [hooks]\n" | |
1683 | "# one of these:\n" |
|
1728 | " # one of these:\n" | |
1684 | "changegroup.cia = python:hgcia.hook\n" |
|
1729 | " changegroup.cia = python:hgcia.hook\n" | |
1685 | "#incoming.cia = python:hgcia.hook\n" |
|
1730 | " #incoming.cia = python:hgcia.hook\n" | |
1686 | "\n" |
|
1731 | "\n" | |
1687 | "[web]\n" |
|
1732 | " [web]\n" | |
1688 | "# If you want hyperlinks (optional)\n" |
|
1733 | " # If you want hyperlinks (optional)\n" | |
1689 | "baseurl = http://server/path/to/repo\n" |
|
1734 | " baseurl = http://server/path/to/repo\n" | |
1690 | msgstr "" |
|
1735 | msgstr "" | |
1691 |
|
1736 | |||
1692 | #, python-format |
|
1737 | #, python-format | |
@@ -1717,19 +1762,19 b' msgid ""' | |||||
1717 | "\n" |
|
1762 | "\n" | |
1718 | "The hg view command will launch the hgk Tcl script. For this command\n" |
|
1763 | "The hg view command will launch the hgk Tcl script. For this command\n" | |
1719 | "to work, hgk must be in your search path. Alternately, you can specify\n" |
|
1764 | "to work, hgk must be in your search path. Alternately, you can specify\n" | |
1720 | "the path to hgk in your .hgrc file:\n" |
|
1765 | "the path to hgk in your .hgrc file::\n" | |
1721 | "\n" |
|
1766 | "\n" | |
1722 | " [hgk]\n" |
|
1767 | " [hgk]\n" | |
1723 | " path=/location/of/hgk\n" |
|
1768 | " path=/location/of/hgk\n" | |
1724 | "\n" |
|
1769 | "\n" | |
1725 | "hgk can make use of the extdiff extension to visualize revisions.\n" |
|
1770 | "hgk can make use of the extdiff extension to visualize revisions.\n" | |
1726 | "Assuming you had already configured extdiff vdiff command, just add:\n" |
|
1771 | "Assuming you had already configured extdiff vdiff command, just add::\n" | |
1727 | "\n" |
|
1772 | "\n" | |
1728 | " [hgk]\n" |
|
1773 | " [hgk]\n" | |
1729 | " vdiff=vdiff\n" |
|
1774 | " vdiff=vdiff\n" | |
1730 | "\n" |
|
1775 | "\n" | |
1731 | "Revisions context menu will now display additional entries to fire\n" |
|
1776 | "Revisions context menu will now display additional entries to fire\n" | |
1732 | "vdiff on hovered and selected revisions." |
|
1777 | "vdiff on hovered and selected revisions.\n" | |
1733 | msgstr "" |
|
1778 | msgstr "" | |
1734 |
|
1779 | |||
1735 | msgid "diff trees from two commits" |
|
1780 | msgid "diff trees from two commits" | |
@@ -1819,10 +1864,10 b' msgid ""' | |||||
1819 | "It depends on the Pygments syntax highlighting library:\n" |
|
1864 | "It depends on the Pygments syntax highlighting library:\n" | |
1820 | "http://pygments.org/\n" |
|
1865 | "http://pygments.org/\n" | |
1821 | "\n" |
|
1866 | "\n" | |
1822 | "There is a single configuration option:\n" |
|
1867 | "There is a single configuration option::\n" | |
1823 | "\n" |
|
1868 | "\n" | |
1824 | "[web]\n" |
|
1869 | " [web]\n" | |
1825 | "pygments_style = <style>\n" |
|
1870 | " pygments_style = <style>\n" | |
1826 | "\n" |
|
1871 | "\n" | |
1827 | "The default is 'colorful'.\n" |
|
1872 | "The default is 'colorful'.\n" | |
1828 | msgstr "" |
|
1873 | msgstr "" | |
@@ -1831,10 +1876,10 b' msgstr ""' | |||||
1831 | "Det afhænger af Pygments biblioteket til syntaksfarvelægning:\n" |
|
1876 | "Det afhænger af Pygments biblioteket til syntaksfarvelægning:\n" | |
1832 | "http://pygments.org/\n" |
|
1877 | "http://pygments.org/\n" | |
1833 | "\n" |
|
1878 | "\n" | |
1834 | "Der er en enkelt konfigurationsmulighed:\n" |
|
1879 | "Der er en enkelt konfigurationsmulighed::\n" | |
1835 | "\n" |
|
1880 | "\n" | |
1836 | "[web]\n" |
|
1881 | " [web]\n" | |
1837 | "pygments_style = <stil>\n" |
|
1882 | " pygments_style = <stil>\n" | |
1838 | "\n" |
|
1883 | "\n" | |
1839 | "Standardstilen er 'colorful'.\n" |
|
1884 | "Standardstilen er 'colorful'.\n" | |
1840 | "\n" |
|
1885 | "\n" | |
@@ -1949,10 +1994,6 b' msgid "watching directories under %r\\n"' | |||||
1949 | msgstr "overvåger kataloger under %r\n" |
|
1994 | msgstr "overvåger kataloger under %r\n" | |
1950 |
|
1995 | |||
1951 | #, python-format |
|
1996 | #, python-format | |
1952 | msgid "status: %r dir(%d) -> %s\n" |
|
|||
1953 | msgstr "" |
|
|||
1954 |
|
||||
1955 | #, python-format |
|
|||
1956 | msgid "status: %r %s -> %s\n" |
|
1997 | msgid "status: %r %s -> %s\n" | |
1957 | msgstr "" |
|
1998 | msgstr "" | |
1958 |
|
1999 | |||
@@ -2021,12 +2062,12 b' msgstr "afsluttede ops\xc3\xa6tning\\n"' | |||||
2021 | msgid "" |
|
2062 | msgid "" | |
2022 | "expand expressions into changelog and summaries\n" |
|
2063 | "expand expressions into changelog and summaries\n" | |
2023 | "\n" |
|
2064 | "\n" | |
2024 | "This extension allows the use of a special syntax in summaries,\n" |
|
2065 | "This extension allows the use of a special syntax in summaries, which\n" | |
2025 |
"w |
|
2066 | "will be automatically expanded into links or any other arbitrary\n" | |
2026 |
" |
|
2067 | "expression, much like InterWiki does.\n" | |
2027 | "\n" |
|
2068 | "\n" | |
2028 | "A few example patterns (link to bug tracking, etc.) that may\n" |
|
2069 | "A few example patterns (link to bug tracking, etc.) that may be used\n" | |
2029 |
" |
|
2070 | "in your hgrc::\n" | |
2030 | "\n" |
|
2071 | "\n" | |
2031 | " [interhg]\n" |
|
2072 | " [interhg]\n" | |
2032 | " issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n" |
|
2073 | " issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n" | |
@@ -2056,20 +2097,22 b' msgid ""' | |||||
2056 | "Configuration is done in the [keyword] and [keywordmaps] sections of\n" |
|
2097 | "Configuration is done in the [keyword] and [keywordmaps] sections of\n" | |
2057 | "hgrc files.\n" |
|
2098 | "hgrc files.\n" | |
2058 | "\n" |
|
2099 | "\n" | |
2059 | "Example:\n" |
|
2100 | "Example::\n" | |
2060 | "\n" |
|
2101 | "\n" | |
2061 | " [keyword]\n" |
|
2102 | " [keyword]\n" | |
2062 | " # expand keywords in every python file except those matching \"x*\"\n" |
|
2103 | " # expand keywords in every python file except those matching \"x*\"\n" | |
2063 | " **.py =\n" |
|
2104 | " **.py =\n" | |
2064 | " x* = ignore\n" |
|
2105 | " x* = ignore\n" | |
2065 | "\n" |
|
2106 | "\n" | |
2066 |
"N |
|
2107 | "NOTE: the more specific you are in your filename patterns the less you\n" | |
2067 |
" |
|
2108 | "lose speed in huge repositories.\n" | |
2068 | "\n" |
|
2109 | "\n" | |
2069 | "For [keywordmaps] template mapping and expansion demonstration and\n" |
|
2110 | "For [keywordmaps] template mapping and expansion demonstration and\n" | |
2070 | "control run \"hg kwdemo\".\n" |
|
2111 | "control run \"hg kwdemo\". See \"hg help templates\" for a list of\n" | |
2071 | "\n" |
|
2112 | "available templates and filters.\n" | |
2072 | "An additional date template filter {date|utcdate} is provided.\n" |
|
2113 | "\n" | |
|
2114 | "An additional date template filter {date|utcdate} is provided. It\n" | |||
|
2115 | "returns a date like \"2006/09/18 15:13:13\".\n" | |||
2073 | "\n" |
|
2116 | "\n" | |
2074 | "The default template mappings (view with \"hg kwdemo -d\") can be\n" |
|
2117 | "The default template mappings (view with \"hg kwdemo -d\") can be\n" | |
2075 | "replaced with customized keywords and templates. Again, run \"hg\n" |
|
2118 | "replaced with customized keywords and templates. Again, run \"hg\n" | |
@@ -2088,8 +2131,8 b' msgid ""' | |||||
2088 | "have been checked in.\n" |
|
2131 | "have been checked in.\n" | |
2089 | "\n" |
|
2132 | "\n" | |
2090 | "Expansions spanning more than one line and incremental expansions,\n" |
|
2133 | "Expansions spanning more than one line and incremental expansions,\n" | |
2091 | "like CVS' $Log$, are not supported. A keyword template map\n" |
|
2134 | "like CVS' $Log$, are not supported. A keyword template map \"Log =\n" | |
2092 |
" |
|
2135 | "{desc}\" expands to the first line of the changeset description.\n" | |
2093 | msgstr "" |
|
2136 | msgstr "" | |
2094 |
|
2137 | |||
2095 | #, python-format |
|
2138 | #, python-format | |
@@ -2112,10 +2155,12 b' msgid ""' | |||||
2112 | " Show current, custom, or default keyword template maps and their\n" |
|
2155 | " Show current, custom, or default keyword template maps and their\n" | |
2113 | " expansions.\n" |
|
2156 | " expansions.\n" | |
2114 | "\n" |
|
2157 | "\n" | |
2115 |
" Extend current configuration by specifying maps as arguments |
|
2158 | " Extend the current configuration by specifying maps as arguments\n" | |
2116 |
" |
|
2159 | " and using -f/--rcfile to source an external hgrc file.\n" | |
2117 | "\n" |
|
2160 | "\n" | |
2118 | " Override current keyword template maps with \"default\" option.\n" |
|
2161 | " Use -d/--default to disable current configuration.\n" | |
|
2162 | "\n" | |||
|
2163 | " See \"hg help templates\" for information on templates and filters.\n" | |||
2119 | " " |
|
2164 | " " | |
2120 | msgstr "" |
|
2165 | msgstr "" | |
2121 |
|
2166 | |||
@@ -2123,25 +2168,50 b' msgstr ""' | |||||
2123 | msgid "creating temporary repository at %s\n" |
|
2168 | msgid "creating temporary repository at %s\n" | |
2124 | msgstr "opretter midlertidigt depot ved %s\n" |
|
2169 | msgstr "opretter midlertidigt depot ved %s\n" | |
2125 |
|
2170 | |||
2126 | #, python-format |
|
2171 | msgid "" | |
2127 | msgid "" |
|
2172 | "\n" | |
2128 | "\n" |
|
2173 | "\tconfiguration using custom keyword template maps\n" | |
2129 | "\tconfig using %s keyword template maps\n" |
|
2174 | msgstr "" | |
2130 | msgstr "" |
|
2175 | "\n" | |
2131 |
|
2176 | "\tkonfiguration med tilpaset nøgleordskabelon\n" | ||
2132 | #, python-format |
|
2177 | ||
2133 | msgid "" |
|
2178 | msgid "\textending current template maps\n" | |
2134 | "\n" |
|
2179 | msgstr "" | |
2135 | "%s keywords written to %s:\n" |
|
2180 | ||
2136 | msgstr "\n%s nøgleord skrevet til %s:\n" |
|
2181 | msgid "\toverriding default template maps\n" | |
|
2182 | msgstr "\toverskriver standard skabelon\n" | |||
|
2183 | ||||
|
2184 | msgid "" | |||
|
2185 | "\n" | |||
|
2186 | "\tconfiguration using default keyword template maps\n" | |||
|
2187 | msgstr "" | |||
|
2188 | "\n" | |||
|
2189 | "\tkonfiguration med standard nøgleordskabelon\n" | |||
|
2190 | ||||
|
2191 | msgid "\tdisabling current template maps\n" | |||
|
2192 | msgstr "deaktiverer nuævrende skabelon\n" | |||
|
2193 | ||||
|
2194 | msgid "" | |||
|
2195 | "\n" | |||
|
2196 | "\tconfiguration using current keyword template maps\n" | |||
|
2197 | msgstr "" | |||
|
2198 | "\n" | |||
|
2199 | "\tkonfiguration med nuværende nøgleordskabelon\n" | |||
|
2200 | ||||
|
2201 | #, python-format | |||
|
2202 | msgid "" | |||
|
2203 | "\n" | |||
|
2204 | "keywords written to %s:\n" | |||
|
2205 | msgstr "" | |||
|
2206 | "\n" | |||
|
2207 | "nøgleord skrevet til %s:\n" | |||
2137 |
|
2208 | |||
2138 | msgid "unhooked all commit hooks\n" |
|
2209 | msgid "unhooked all commit hooks\n" | |
2139 | msgstr "" |
|
2210 | msgstr "" | |
2140 |
|
2211 | |||
2141 | #, python-format |
|
2212 | msgid "" | |
2142 | msgid "" |
|
2213 | "\n" | |
2143 | "\n" |
|
2214 | "\tkeywords expanded\n" | |
2144 | "\t%s keywords expanded%s\n" |
|
|||
2145 | msgstr "" |
|
2215 | msgstr "" | |
2146 |
|
2216 | |||
2147 | #, python-format |
|
2217 | #, python-format | |
@@ -2168,8 +2238,8 b' msgid ""' | |||||
2168 | " [keyword] configuration patterns.\n" |
|
2238 | " [keyword] configuration patterns.\n" | |
2169 | "\n" |
|
2239 | "\n" | |
2170 | " Useful to prevent inadvertent keyword expansion and to speed up\n" |
|
2240 | " Useful to prevent inadvertent keyword expansion and to speed up\n" | |
2171 | " execution by including only files that are actual candidates\n" |
|
2241 | " execution by including only files that are actual candidates for\n" | |
2172 |
" |
|
2242 | " expansion.\n" | |
2173 | "\n" |
|
2243 | "\n" | |
2174 | " See \"hg help keyword\" on how to construct patterns both for\n" |
|
2244 | " See \"hg help keyword\" on how to construct patterns both for\n" | |
2175 | " inclusion and exclusion of files.\n" |
|
2245 | " inclusion and exclusion of files.\n" | |
@@ -2177,11 +2247,12 b' msgid ""' | |||||
2177 | " Use -u/--untracked to list untracked files as well.\n" |
|
2247 | " Use -u/--untracked to list untracked files as well.\n" | |
2178 | "\n" |
|
2248 | "\n" | |
2179 | " With -a/--all and -v/--verbose the codes used to show the status\n" |
|
2249 | " With -a/--all and -v/--verbose the codes used to show the status\n" | |
2180 | " of files are:\n" |
|
2250 | " of files are::\n" | |
2181 | " K = keyword expansion candidate\n" |
|
2251 | "\n" | |
2182 |
" |
|
2252 | " K = keyword expansion candidate\n" | |
2183 | " I = ignored\n" |
|
2253 | " k = keyword expansion candidate (untracked)\n" | |
2184 |
" |
|
2254 | " I = ignored\n" | |
|
2255 | " i = ignored (untracked)\n" | |||
2185 | " " |
|
2256 | " " | |
2186 | msgstr "" |
|
2257 | msgstr "" | |
2187 |
|
2258 | |||
@@ -2232,19 +2303,18 b' msgid ""' | |||||
2232 | "Known patches are represented as patch files in the .hg/patches\n" |
|
2303 | "Known patches are represented as patch files in the .hg/patches\n" | |
2233 | "directory. Applied patches are both patch files and changesets.\n" |
|
2304 | "directory. Applied patches are both patch files and changesets.\n" | |
2234 | "\n" |
|
2305 | "\n" | |
2235 | "Common tasks (use \"hg help command\" for more details):\n" |
|
2306 | "Common tasks (use \"hg help command\" for more details)::\n" | |
2236 | "\n" |
|
2307 | "\n" | |
2237 | "prepare repository to work with patches qinit\n" |
|
2308 | " prepare repository to work with patches qinit\n" | |
2238 | "create new patch qnew\n" |
|
2309 | " create new patch qnew\n" | |
2239 | "import existing patch qimport\n" |
|
2310 | " import existing patch qimport\n" | |
2240 | "\n" |
|
2311 | "\n" | |
2241 | "print patch series qseries\n" |
|
2312 | " print patch series qseries\n" | |
2242 | "print applied patches qapplied\n" |
|
2313 | " print applied patches qapplied\n" | |
2243 | "print name of top applied patch qtop\n" |
|
2314 | "\n" | |
2244 | "\n" |
|
2315 | " add known patch to applied stack qpush\n" | |
2245 |
" |
|
2316 | " remove patch from applied stack qpop\n" | |
2246 | "remove patch from applied stack qpop\n" |
|
2317 | " refresh contents of top applied patch qrefresh\n" | |
2247 | "refresh contents of top applied patch qrefresh\n" |
|
|||
2248 | msgstr "" |
|
2318 | msgstr "" | |
2249 | "håndter en stak af rettelser\n" |
|
2319 | "håndter en stak af rettelser\n" | |
2250 | "\n" |
|
2320 | "\n" | |
@@ -2257,19 +2327,18 b' msgstr ""' | |||||
2257 | "biblioteket. Anvendte rettelser er både rettelse-filer og Mercurial\n" |
|
2327 | "biblioteket. Anvendte rettelser er både rettelse-filer og Mercurial\n" | |
2258 | "ændringer.\n" |
|
2328 | "ændringer.\n" | |
2259 | "\n" |
|
2329 | "\n" | |
2260 | "Almindelige opgaver (brug \"hg help kommado\" for flere detaljer):\n" |
|
2330 | "Almindelige opgaver (brug \"hg help kommado\" for flere detaljer)::\n" | |
2261 | "\n" |
|
2331 | "\n" | |
2262 | "forbered repository til at arbejde med rettelser qinit\n" |
|
2332 | " forbered repository til at arbejde med rettelser qinit\n" | |
2263 | "opret ny rettelse qnew\n" |
|
2333 | " opret ny rettelse qnew\n" | |
2264 | "importer eksisterende rettelse qimport\n" |
|
2334 | " importer eksisterende rettelse qimport\n" | |
2265 | "\n" |
|
2335 | "\n" | |
2266 | "list rettelse-serien qseries\n" |
|
2336 | " list rettelse-serien qseries\n" | |
2267 | "list anvendte rettelser qapplied\n" |
|
2337 | " list anvendte rettelser qapplied\n" | |
2268 | "list navnet på den øverste rettelse qtop\n" |
|
2338 | "\n" | |
2269 | "\n" |
|
2339 | " anvend og put rettelse på stakken qpush\n" | |
2270 |
" |
|
2340 | " fjern rettelse fra stakken qpop\n" | |
2271 | "fjern rettelse fra stakken qpop\n" |
|
2341 | " genopfrisk indholdet af den øverste rettelse qrefresh\n" | |
2272 | "genopfrisk indholdet af den øverste rettelse qrefresh\n" |
|
|||
2273 |
|
2342 | |||
2274 | #, python-format |
|
2343 | #, python-format | |
2275 | msgid "%s appears more than once in %s" |
|
2344 | msgid "%s appears more than once in %s" | |
@@ -2503,6 +2572,10 b' msgstr ""' | |||||
2503 | msgid "deletions found between repo revs" |
|
2572 | msgid "deletions found between repo revs" | |
2504 | msgstr "" |
|
2573 | msgstr "" | |
2505 |
|
2574 | |||
|
2575 | #, python-format | |||
|
2576 | msgid "popping %s\n" | |||
|
2577 | msgstr "fjerner %s\n" | |||
|
2578 | ||||
2506 | msgid "patch queue now empty\n" |
|
2579 | msgid "patch queue now empty\n" | |
2507 | msgstr "køen af rettelser er nu tom\n" |
|
2580 | msgstr "køen af rettelser er nu tom\n" | |
2508 |
|
2581 | |||
@@ -2619,9 +2692,15 b' msgstr ""' | |||||
2619 | msgid "print the patches already applied" |
|
2692 | msgid "print the patches already applied" | |
2620 | msgstr "udskriver rettelserne som allerede er anvendt" |
|
2693 | msgstr "udskriver rettelserne som allerede er anvendt" | |
2621 |
|
2694 | |||
|
2695 | msgid "only one patch applied\n" | |||
|
2696 | msgstr "kun én rettelse er anvendt\n" | |||
|
2697 | ||||
2622 | msgid "print the patches not yet applied" |
|
2698 | msgid "print the patches not yet applied" | |
2623 | msgstr "udskriver rettelserne som ikke er anvendt endnu" |
|
2699 | msgstr "udskriver rettelserne som ikke er anvendt endnu" | |
2624 |
|
2700 | |||
|
2701 | msgid "all patches applied\n" | |||
|
2702 | msgstr "alle rettelser er anvendt\n" | |||
|
2703 | ||||
2625 | msgid "" |
|
2704 | msgid "" | |
2626 | "import a patch\n" |
|
2705 | "import a patch\n" | |
2627 | "\n" |
|
2706 | "\n" | |
@@ -2738,15 +2817,9 b' msgstr "udskriver navnet p\xc3\xa5 den nuv\xc3\xa6rende rettelse"' | |||||
2738 | msgid "print the name of the next patch" |
|
2817 | msgid "print the name of the next patch" | |
2739 | msgstr "udskriver navnet på den næste rettelse" |
|
2818 | msgstr "udskriver navnet på den næste rettelse" | |
2740 |
|
2819 | |||
2741 | msgid "all patches applied\n" |
|
|||
2742 | msgstr "alle rettelser er anvendt\n" |
|
|||
2743 |
|
||||
2744 | msgid "print the name of the previous patch" |
|
2820 | msgid "print the name of the previous patch" | |
2745 | msgstr "udskriver navnet på den forgående rettelse" |
|
2821 | msgstr "udskriver navnet på den forgående rettelse" | |
2746 |
|
2822 | |||
2747 | msgid "only one patch applied\n" |
|
|||
2748 | msgstr "kun én rettelse er anvendt\n" |
|
|||
2749 |
|
||||
2750 | msgid "" |
|
2823 | msgid "" | |
2751 | "create a new patch\n" |
|
2824 | "create a new patch\n" | |
2752 | "\n" |
|
2825 | "\n" | |
@@ -3095,8 +3168,11 b' msgstr "kan ikke importere henover en an' | |||||
3095 | msgid "print first line of patch header" |
|
3168 | msgid "print first line of patch header" | |
3096 | msgstr "" |
|
3169 | msgstr "" | |
3097 |
|
3170 | |||
3098 | msgid "hg qapplied [-s] [PATCH]" |
|
3171 | msgid "show only the last patch" | |
3099 | msgstr "hg qapplied [-s] [RETTELSE]" |
|
3172 | msgstr "vis kun den sidste rettelse" | |
|
3173 | ||||
|
3174 | msgid "hg qapplied [-1] [-s] [PATCH]" | |||
|
3175 | msgstr "hg qapplied [-1] [-s] [RETTELSE]" | |||
3100 |
|
3176 | |||
3101 | msgid "use pull protocol to copy metadata" |
|
3177 | msgid "use pull protocol to copy metadata" | |
3102 | msgstr "brug træk-protokol til at kopiere metadata" |
|
3178 | msgstr "brug træk-protokol til at kopiere metadata" | |
@@ -3239,17 +3315,17 b' msgstr "hg qpush [-f] [-l] [-a] [-m] [-n' | |||||
3239 | msgid "refresh only files already in the patch and specified files" |
|
3315 | msgid "refresh only files already in the patch and specified files" | |
3240 | msgstr "" |
|
3316 | msgstr "" | |
3241 |
|
3317 | |||
3242 |
msgid "add/update |
|
3318 | msgid "add/update author field in patch with current user" | |
3243 | msgstr "tilføj/opdater \"From: <aktuel bruger>\" i rettelsen" |
|
3319 | msgstr "" | |
3244 |
|
3320 | |||
3245 | msgid "add/update \"From: <given user>\" in patch" |
|
3321 | msgid "add/update author field in patch with given user" | |
3246 | msgstr "tilføj/opdater \"From: <given bruger>\" i rettelsen" |
|
3322 | msgstr "" | |
3247 |
|
3323 | |||
3248 | msgid "update \"Date: <current date>\" in patch (if present)" |
|
3324 | msgid "add/update date field in patch with current date" | |
3249 | msgstr "opdater \"Date: <aktuel dato>\" i rettelsen (hvis tilstede)" |
|
3325 | msgstr "tilføj/opdater datofeltet i rettelsen med den aktuelle dato" | |
3250 |
|
3326 | |||
3251 | msgid "update \"Date: <given date>\" in patch (if present)" |
|
3327 | msgid "add/update date field in patch with given date" | |
3252 | msgstr "opdater \"Date: <given dato>\" i rettelsen (hvis tilstede)" |
|
3328 | msgstr "tilføj/opdater datofeltet i rettelsen med den angivne dato" | |
3253 |
|
3329 | |||
3254 | msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..." |
|
3330 | msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..." | |
3255 | msgstr "hg qrefresh [-I] [-X] [-e] [-m TEKST] [-l FIL] [-s] [FIL]..." |
|
3331 | msgstr "hg qrefresh [-I] [-X] [-e] [-m TEKST] [-l FIL] [-s] [FIL]..." | |
@@ -3317,8 +3393,11 b' msgstr "hg strip [-f] [-b] [-n] REV"' | |||||
3317 | msgid "hg qtop [-s]" |
|
3393 | msgid "hg qtop [-s]" | |
3318 | msgstr "hg qtop [-s]" |
|
3394 | msgstr "hg qtop [-s]" | |
3319 |
|
3395 | |||
3320 | msgid "hg qunapplied [-s] [PATCH]" |
|
3396 | msgid "show only the first patch" | |
3321 | msgstr "hg qunapplied [-s] [RETTELSE]" |
|
3397 | msgstr "vis kun den første rettelse" | |
|
3398 | ||||
|
3399 | msgid "hg qunapplied [-1] [-s] [PATCH]" | |||
|
3400 | msgstr "hg qunapplied [-1] [-s] [RETTELSE]" | |||
3322 |
|
3401 | |||
3323 | msgid "finish all applied changesets" |
|
3402 | msgid "finish all applied changesets" | |
3324 | msgstr "afslut alle anvendte ændringer" |
|
3403 | msgstr "afslut alle anvendte ændringer" | |
@@ -3329,65 +3408,66 b' msgstr "hg qfinish [-a] [REV]..."' | |||||
3329 | msgid "" |
|
3408 | msgid "" | |
3330 | "hooks for sending email notifications at commit/push time\n" |
|
3409 | "hooks for sending email notifications at commit/push time\n" | |
3331 | "\n" |
|
3410 | "\n" | |
3332 |
"Subscriptions can be managed through hgrc. Default mode is to |
|
3411 | "Subscriptions can be managed through a hgrc file. Default mode is to\n" | |
3333 | "messages to stdout, for testing and configuring.\n" |
|
3412 | "print messages to stdout, for testing and configuring.\n" | |
3334 | "\n" |
|
3413 | "\n" | |
3335 |
"To use, configure notify extension and enable in hgrc like |
|
3414 | "To use, configure the notify extension and enable it in hgrc like\n" | |
3336 | "\n" |
|
3415 | "this::\n" | |
3337 | " [extensions]\n" |
|
3416 | "\n" | |
3338 | " hgext.notify =\n" |
|
3417 | " [extensions]\n" | |
3339 | "\n" |
|
3418 | " hgext.notify =\n" | |
3340 | " [hooks]\n" |
|
3419 | "\n" | |
3341 | " # one email for each incoming changeset\n" |
|
3420 | " [hooks]\n" | |
3342 | " incoming.notify = python:hgext.notify.hook\n" |
|
3421 | " # one email for each incoming changeset\n" | |
3343 | " # batch emails when many changesets incoming at one time\n" |
|
3422 | " incoming.notify = python:hgext.notify.hook\n" | |
3344 | " changegroup.notify = python:hgext.notify.hook\n" |
|
3423 | " # batch emails when many changesets incoming at one time\n" | |
3345 | "\n" |
|
3424 | " changegroup.notify = python:hgext.notify.hook\n" | |
3346 | " [notify]\n" |
|
3425 | "\n" | |
3347 | " # config items go in here\n" |
|
3426 | " [notify]\n" | |
3348 | "\n" |
|
3427 | " # config items go here\n" | |
3349 | " config items:\n" |
|
3428 | "\n" | |
3350 | "\n" |
|
3429 | "Required configuration items::\n" | |
3351 | " REQUIRED:\n" |
|
3430 | "\n" | |
3352 |
" |
|
3431 | " config = /path/to/file # file containing subscriptions\n" | |
3353 | "\n" |
|
3432 | "\n" | |
3354 | " OPTIONAL:\n" |
|
3433 | "Optional configuration items::\n" | |
3355 | " test = True # print messages to stdout for testing\n" |
|
3434 | "\n" | |
3356 |
" |
|
3435 | " test = True # print messages to stdout for testing\n" | |
3357 | " domain = example.com # domain to use if committer missing domain\n" |
|
3436 | " strip = 3 # number of slashes to strip for url paths\n" | |
3358 | " style = ... # style file to use when formatting email\n" |
|
3437 | " domain = example.com # domain to use if committer missing domain\n" | |
3359 |
" |
|
3438 | " style = ... # style file to use when formatting email\n" | |
3360 |
" |
|
3439 | " template = ... # template to use when formatting email\n" | |
3361 |
" |
|
3440 | " incoming = ... # template to use when run as incoming hook\n" | |
3362 | " maxdiff = 300 # max lines of diffs to include (0=none, -1=all)\n" |
|
3441 | " changegroup = ... # template when run as changegroup hook\n" | |
3363 | " maxsubject = 67 # truncate subject line longer than this\n" |
|
3442 | " maxdiff = 300 # max lines of diffs to include (0=none, -1=all)\n" | |
3364 | " diffstat = True # add a diffstat before the diff content\n" |
|
3443 | " maxsubject = 67 # truncate subject line longer than this\n" | |
3365 | " sources = serve # notify if source of incoming changes in this " |
|
3444 | " diffstat = True # add a diffstat before the diff content\n" | |
|
3445 | " sources = serve # notify if source of incoming changes in this " | |||
3366 | "list\n" |
|
3446 | "list\n" | |
3367 |
" |
|
3447 | " # (serve == ssh or http, push, pull, bundle)\n" | |
3368 |
" |
|
3448 | " [email]\n" | |
3369 |
" |
|
3449 | " from = user@host.com # email address to send as if none given\n" | |
3370 |
" |
|
3450 | " [web]\n" | |
3371 |
" |
|
3451 | " baseurl = http://hgserver/... # root of hg web site for browsing commits\n" | |
3372 | "\n" |
|
3452 | "\n" | |
3373 |
" notify config file has same format as regular hgrc |
|
3453 | "The notify config file has same format as a regular hgrc file. It has\n" | |
3374 |
" sections so you can express subscriptions in whatever way is |
|
3454 | "two sections so you can express subscriptions in whatever way is\n" | |
3375 | " for you.\n" |
|
3455 | "handier for you.\n" | |
3376 | "\n" |
|
3456 | "\n" | |
3377 | " [usersubs]\n" |
|
3457 | "::\n" | |
3378 | " # key is subscriber email, value is \",\"-separated list of glob " |
|
3458 | "\n" | |
3379 | "patterns\n" |
|
3459 | " [usersubs]\n" | |
3380 | " user@host = pattern\n" |
|
3460 | " # key is subscriber email, value is \",\"-separated list of glob patterns\n" | |
3381 | "\n" |
|
3461 | " user@host = pattern\n" | |
3382 | " [reposubs]\n" |
|
3462 | "\n" | |
3383 | " # key is glob pattern, value is \",\"-separated list of subscriber " |
|
3463 | " [reposubs]\n" | |
3384 | "emails\n" |
|
3464 | " # key is glob pattern, value is \",\"-separated list of subscriber emails\n" | |
3385 |
" |
|
3465 | " pattern = user@host\n" | |
3386 | "\n" |
|
3466 | "\n" | |
3387 |
" |
|
3467 | "Glob patterns are matched against path to repository root.\n" | |
3388 | "\n" |
|
3468 | "\n" | |
3389 |
" |
|
3469 | "If you like, you can put notify config file in repository that users\n" | |
3390 |
" |
|
3470 | "can push changes to, they can manage their own subscriptions.\n" | |
3391 | msgstr "" |
|
3471 | msgstr "" | |
3392 |
|
3472 | |||
3393 | #, python-format |
|
3473 | #, python-format | |
@@ -3423,7 +3503,7 b' msgstr "notify: \xc3\xa6ndringer har kilde \\"%s\\" - springer over\\n"' | |||||
3423 | msgid "" |
|
3503 | msgid "" | |
3424 | "browse command output with an external pager\n" |
|
3504 | "browse command output with an external pager\n" | |
3425 | "\n" |
|
3505 | "\n" | |
3426 | "To set the pager that should be used, set the application variable:\n" |
|
3506 | "To set the pager that should be used, set the application variable::\n" | |
3427 | "\n" |
|
3507 | "\n" | |
3428 | " [pager]\n" |
|
3508 | " [pager]\n" | |
3429 | " pager = LESS='FSRX' less\n" |
|
3509 | " pager = LESS='FSRX' less\n" | |
@@ -3432,19 +3512,19 b' msgid ""' | |||||
3432 | "$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n" |
|
3512 | "$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n" | |
3433 | "\n" |
|
3513 | "\n" | |
3434 | "If you notice \"BROKEN PIPE\" error messages, you can disable them by\n" |
|
3514 | "If you notice \"BROKEN PIPE\" error messages, you can disable them by\n" | |
3435 | "setting:\n" |
|
3515 | "setting::\n" | |
3436 | "\n" |
|
3516 | "\n" | |
3437 | " [pager]\n" |
|
3517 | " [pager]\n" | |
3438 | " quiet = True\n" |
|
3518 | " quiet = True\n" | |
3439 | "\n" |
|
3519 | "\n" | |
3440 | "You can disable the pager for certain commands by adding them to the\n" |
|
3520 | "You can disable the pager for certain commands by adding them to the\n" | |
3441 | "pager.ignore list:\n" |
|
3521 | "pager.ignore list::\n" | |
3442 | "\n" |
|
3522 | "\n" | |
3443 | " [pager]\n" |
|
3523 | " [pager]\n" | |
3444 | " ignore = version, help, update\n" |
|
3524 | " ignore = version, help, update\n" | |
3445 | "\n" |
|
3525 | "\n" | |
3446 | "You can also enable the pager only for certain commands using\n" |
|
3526 | "You can also enable the pager only for certain commands using\n" | |
3447 | "pager.attend:\n" |
|
3527 | "pager.attend::\n" | |
3448 | "\n" |
|
3528 | "\n" | |
3449 | " [pager]\n" |
|
3529 | " [pager]\n" | |
3450 | " attend = log\n" |
|
3530 | " attend = log\n" | |
@@ -3461,15 +3541,15 b' msgid ""' | |||||
3461 | "This extension allows you to use git-style suffixes to refer to the\n" |
|
3541 | "This extension allows you to use git-style suffixes to refer to the\n" | |
3462 | "ancestors of a specific revision.\n" |
|
3542 | "ancestors of a specific revision.\n" | |
3463 | "\n" |
|
3543 | "\n" | |
3464 | "For example, if you can refer to a revision as \"foo\", then:\n" |
|
3544 | "For example, if you can refer to a revision as \"foo\", then::\n" | |
3465 | "\n" |
|
3545 | "\n" | |
3466 |
" |
|
3546 | " foo^N = Nth parent of foo\n" | |
3467 | " foo^0 = foo\n" |
|
3547 | " foo^0 = foo\n" | |
3468 | " foo^1 = first parent of foo\n" |
|
3548 | " foo^1 = first parent of foo\n" | |
3469 | " foo^2 = second parent of foo\n" |
|
3549 | " foo^2 = second parent of foo\n" | |
3470 | " foo^ = foo^1\n" |
|
3550 | " foo^ = foo^1\n" | |
3471 | "\n" |
|
3551 | "\n" | |
3472 |
" |
|
3552 | " foo~N = Nth first grandparent of foo\n" | |
3473 | " foo~0 = foo\n" |
|
3553 | " foo~0 = foo\n" | |
3474 | " foo~1 = foo^1 = foo^ = first parent of foo\n" |
|
3554 | " foo~1 = foo^1 = foo^ = first parent of foo\n" | |
3475 | " foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n" |
|
3555 | " foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n" | |
@@ -3485,11 +3565,9 b' msgid ""' | |||||
3485 | "first line of the changeset description as the subject text. The\n" |
|
3565 | "first line of the changeset description as the subject text. The\n" | |
3486 | "message contains two or three body parts:\n" |
|
3566 | "message contains two or three body parts:\n" | |
3487 | "\n" |
|
3567 | "\n" | |
3488 |
" |
|
3568 | "- The changeset description.\n" | |
3489 | "\n" |
|
3569 | "- [Optional] The result of running diffstat on the patch.\n" | |
3490 | " [Optional] The result of running diffstat on the patch.\n" |
|
3570 | "- The patch itself, as generated by \"hg export\".\n" | |
3491 | "\n" |
|
|||
3492 | " The patch itself, as generated by \"hg export\".\n" |
|
|||
3493 | "\n" |
|
3571 | "\n" | |
3494 | "Each message refers to the first in the series using the In-Reply-To\n" |
|
3572 | "Each message refers to the first in the series using the In-Reply-To\n" | |
3495 | "and References headers, so they will show up as a sequence in threaded\n" |
|
3573 | "and References headers, so they will show up as a sequence in threaded\n" | |
@@ -3500,7 +3578,7 b' msgid ""' | |||||
3500 | "you are sending the right changes.\n" |
|
3578 | "you are sending the right changes.\n" | |
3501 | "\n" |
|
3579 | "\n" | |
3502 | "To configure other defaults, add a section like this to your hgrc\n" |
|
3580 | "To configure other defaults, add a section like this to your hgrc\n" | |
3503 | "file:\n" |
|
3581 | "file::\n" | |
3504 | "\n" |
|
3582 | "\n" | |
3505 | " [email]\n" |
|
3583 | " [email]\n" | |
3506 | " from = My Name <my@email>\n" |
|
3584 | " from = My Name <my@email>\n" | |
@@ -3523,13 +3601,13 b' msgid ""' | |||||
3523 | "patchbomb message in a pager or sending the messages directly, it will\n" |
|
3601 | "patchbomb message in a pager or sending the messages directly, it will\n" | |
3524 | "create a UNIX mailbox file with the patch emails. This mailbox file\n" |
|
3602 | "create a UNIX mailbox file with the patch emails. This mailbox file\n" | |
3525 | "can be previewed with any mail user agent which supports UNIX mbox\n" |
|
3603 | "can be previewed with any mail user agent which supports UNIX mbox\n" | |
3526 | "files, e.g. with mutt:\n" |
|
3604 | "files, e.g. with mutt::\n" | |
3527 | "\n" |
|
3605 | "\n" | |
3528 | " % mutt -R -f mbox\n" |
|
3606 | " % mutt -R -f mbox\n" | |
3529 | "\n" |
|
3607 | "\n" | |
3530 |
"When you are previewing the patchbomb messages, you can use `formail |
|
3608 | "When you are previewing the patchbomb messages, you can use ``formail``\n" | |
3531 | "(a utility that is commonly installed as part of the procmail\n" |
|
3609 | "(a utility that is commonly installed as part of the procmail\n" | |
3532 | "package), to send each message out:\n" |
|
3610 | "package), to send each message out::\n" | |
3533 | "\n" |
|
3611 | "\n" | |
3534 | " % formail -s sendmail -bm -t < mbox\n" |
|
3612 | " % formail -s sendmail -bm -t < mbox\n" | |
3535 | "\n" |
|
3613 | "\n" | |
@@ -3539,7 +3617,7 b' msgid ""' | |||||
3539 | "to be a sendmail compatible mailer or fill out the [smtp] section so\n" |
|
3617 | "to be a sendmail compatible mailer or fill out the [smtp] section so\n" | |
3540 | "that the patchbomb extension can automatically send patchbombs\n" |
|
3618 | "that the patchbomb extension can automatically send patchbombs\n" | |
3541 | "directly from the commandline. See the [email] and [smtp] sections in\n" |
|
3619 | "directly from the commandline. See the [email] and [smtp] sections in\n" | |
3542 | "hgrc(5) for details." |
|
3620 | "hgrc(5) for details.\n" | |
3543 | msgstr "" |
|
3621 | msgstr "" | |
3544 |
|
3622 | |||
3545 | msgid "Please enter a valid value.\n" |
|
3623 | msgid "Please enter a valid value.\n" | |
@@ -3579,23 +3657,24 b' msgid ""' | |||||
3579 | " single email containing a binary Mercurial bundle as an attachment\n" |
|
3657 | " single email containing a binary Mercurial bundle as an attachment\n" | |
3580 | " will be sent.\n" |
|
3658 | " will be sent.\n" | |
3581 | "\n" |
|
3659 | "\n" | |
3582 | " Examples:\n" |
|
3660 | " Examples::\n" | |
3583 | "\n" |
|
3661 | "\n" | |
3584 | " hg email -r 3000 # send patch 3000 only\n" |
|
3662 | " hg email -r 3000 # send patch 3000 only\n" | |
3585 | " hg email -r 3000 -r 3001 # send patches 3000 and 3001\n" |
|
3663 | " hg email -r 3000 -r 3001 # send patches 3000 and 3001\n" | |
3586 | " hg email -r 3000:3005 # send patches 3000 through 3005\n" |
|
3664 | " hg email -r 3000:3005 # send patches 3000 through 3005\n" | |
3587 | " hg email 3000 # send patch 3000 (deprecated)\n" |
|
3665 | " hg email 3000 # send patch 3000 (deprecated)\n" | |
3588 | "\n" |
|
3666 | "\n" | |
3589 | " hg email -o # send all patches not in default\n" |
|
3667 | " hg email -o # send all patches not in default\n" | |
3590 | " hg email -o DEST # send all patches not in DEST\n" |
|
3668 | " hg email -o DEST # send all patches not in DEST\n" | |
3591 | " hg email -o -r 3000 # send all ancestors of 3000 not in default\n" |
|
3669 | " hg email -o -r 3000 # send all ancestors of 3000 not in default\n" | |
3592 | " hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST\n" |
|
3670 | " hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST\n" | |
3593 | "\n" |
|
3671 | "\n" | |
3594 | " hg email -b # send bundle of all patches not in default\n" |
|
3672 | " hg email -b # send bundle of all patches not in default\n" | |
3595 | " hg email -b DEST # send bundle of all patches not in DEST\n" |
|
3673 | " hg email -b DEST # send bundle of all patches not in DEST\n" | |
3596 | " hg email -b -r 3000 # bundle of all ancestors of 3000 not in " |
|
3674 | " hg email -b -r 3000 # bundle of all ancestors of 3000 not in " | |
3597 | "default\n" |
|
3675 | "default\n" | |
3598 |
" hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in |
|
3676 | " hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in " | |
|
3677 | "DEST\n" | |||
3599 | "\n" |
|
3678 | "\n" | |
3600 | " Before using this command, you will need to enable email in your\n" |
|
3679 | " Before using this command, you will need to enable email in your\n" | |
3601 | " hgrc. See the [email] section in hgrc(5) for details.\n" |
|
3680 | " hgrc. See the [email] section in hgrc(5) for details.\n" | |
@@ -3674,6 +3753,9 b' msgstr ""' | |||||
3674 | msgid "message identifier to reply to" |
|
3753 | msgid "message identifier to reply to" | |
3675 | msgstr "" |
|
3754 | msgstr "" | |
3676 |
|
3755 | |||
|
3756 | msgid "flags to add in subject prefixes" | |||
|
3757 | msgstr "" | |||
|
3758 | ||||
3677 | msgid "email addresses of recipients" |
|
3759 | msgid "email addresses of recipients" | |
3678 | msgstr "" |
|
3760 | msgstr "" | |
3679 |
|
3761 | |||
@@ -3714,13 +3796,16 b' msgid ""' | |||||
3714 | " and uncommitted changes in an otherwise-clean source tree.\n" |
|
3796 | " and uncommitted changes in an otherwise-clean source tree.\n" | |
3715 | "\n" |
|
3797 | "\n" | |
3716 | " This means that purge will delete:\n" |
|
3798 | " This means that purge will delete:\n" | |
3717 | " - Unknown files: files marked with \"?\" by \"hg status\"\n" |
|
3799 | "\n" | |
3718 | " - Empty directories: in fact Mercurial ignores directories unless\n" |
|
3800 | " - Unknown files: files marked with \"?\" by \"hg status\"\n" | |
3719 | " they contain files under source control management\n" |
|
3801 | " - Empty directories: in fact Mercurial ignores directories unless\n" | |
|
3802 | " they contain files under source control management\n" | |||
|
3803 | "\n" | |||
3720 | " But it will leave untouched:\n" |
|
3804 | " But it will leave untouched:\n" | |
3721 | " - Modified and unmodified tracked files\n" |
|
3805 | "\n" | |
3722 | " - Ignored files (unless --all is specified)\n" |
|
3806 | " - Modified and unmodified tracked files\n" | |
3723 | " - New files added to the repository (with \"hg add\")\n" |
|
3807 | " - Ignored files (unless --all is specified)\n" | |
|
3808 | " - New files added to the repository (with \"hg add\")\n" | |||
3724 | "\n" |
|
3809 | "\n" | |
3725 | " If directories are given on the command line, only files in these\n" |
|
3810 | " If directories are given on the command line, only files in these\n" | |
3726 | " directories are considered.\n" |
|
3811 | " directories are considered.\n" | |
@@ -3770,7 +3855,7 b' msgid ""' | |||||
3770 | "repository.\n" |
|
3855 | "repository.\n" | |
3771 | "\n" |
|
3856 | "\n" | |
3772 | "For more information:\n" |
|
3857 | "For more information:\n" | |
3773 |
"http://mercurial.selenic.com/wiki/Rebase |
|
3858 | "http://mercurial.selenic.com/wiki/RebaseExtension\n" | |
3774 | msgstr "" |
|
3859 | msgstr "" | |
3775 |
|
3860 | |||
3776 | msgid "first revision, do not change ancestor\n" |
|
3861 | msgid "first revision, do not change ancestor\n" | |
@@ -3789,22 +3874,22 b' msgid ""' | |||||
3789 | msgstr "" |
|
3874 | msgstr "" | |
3790 |
|
3875 | |||
3791 | msgid "cannot use both abort and continue" |
|
3876 | msgid "cannot use both abort and continue" | |
3792 | msgstr "" |
|
3877 | msgstr "abort og continue kan ikke angives samtidig" | |
3793 |
|
3878 | |||
3794 | msgid "cannot use collapse with continue or abort" |
|
3879 | msgid "cannot use collapse with continue or abort" | |
3795 | msgstr "" |
|
3880 | msgstr "continue eller abort kan ikke angives samtidig med collapse" | |
3796 |
|
3881 | |||
3797 | msgid "abort and continue do not allow specifying revisions" |
|
3882 | msgid "abort and continue do not allow specifying revisions" | |
3798 | msgstr "" |
|
3883 | msgstr "abort og continue tillader ikke at der angives revisioner" | |
3799 |
|
3884 | |||
3800 | msgid "cannot specify both a revision and a base" |
|
3885 | msgid "cannot specify both a revision and a base" | |
3801 | msgstr "" |
|
3886 | msgstr "man kan ikke angive både en revision og en basis" | |
3802 |
|
3887 | |||
3803 | msgid "nothing to rebase\n" |
|
3888 | msgid "nothing to rebase\n" | |
3804 | msgstr "" |
|
3889 | msgstr "" | |
3805 |
|
3890 | |||
3806 | msgid "cannot use both keepbranches and extrafn" |
|
3891 | msgid "cannot use both keepbranches and extrafn" | |
3807 | msgstr "" |
|
3892 | msgstr "man kan ikke bruge både keepbranches og extrafn" | |
3808 |
|
3893 | |||
3809 | msgid "rebase merging completed\n" |
|
3894 | msgid "rebase merging completed\n" | |
3810 | msgstr "" |
|
3895 | msgstr "" | |
@@ -3817,7 +3902,7 b' msgstr ""' | |||||
3817 |
|
3902 | |||
3818 | #, python-format |
|
3903 | #, python-format | |
3819 | msgid "%d revisions have been skipped\n" |
|
3904 | msgid "%d revisions have been skipped\n" | |
3820 | msgstr "" |
|
3905 | msgstr "sprang %d revisioner over\n" | |
3821 |
|
3906 | |||
3822 | msgid " set parents\n" |
|
3907 | msgid " set parents\n" | |
3823 | msgstr "" |
|
3908 | msgstr "" | |
@@ -3981,30 +4066,9 b' msgstr ""' | |||||
3981 | msgid "&?" |
|
4066 | msgid "&?" | |
3982 | msgstr "" |
|
4067 | msgstr "" | |
3983 |
|
4068 | |||
3984 | msgid "y" |
|
|||
3985 | msgstr "" |
|
|||
3986 |
|
||||
3987 | msgid "?" |
|
|||
3988 | msgstr "" |
|
|||
3989 |
|
||||
3990 | msgid "y - record this change" |
|
4069 | msgid "y - record this change" | |
3991 | msgstr "" |
|
4070 | msgstr "" | |
3992 |
|
4071 | |||
3993 | msgid "s" |
|
|||
3994 | msgstr "" |
|
|||
3995 |
|
||||
3996 | msgid "f" |
|
|||
3997 | msgstr "" |
|
|||
3998 |
|
||||
3999 | msgid "d" |
|
|||
4000 | msgstr "" |
|
|||
4001 |
|
||||
4002 | msgid "a" |
|
|||
4003 | msgstr "" |
|
|||
4004 |
|
||||
4005 | msgid "q" |
|
|||
4006 | msgstr "" |
|
|||
4007 |
|
||||
4008 | msgid "user quit" |
|
4072 | msgid "user quit" | |
4009 | msgstr "user quit" |
|
4073 | msgstr "user quit" | |
4010 |
|
4074 | |||
@@ -4015,6 +4079,9 b' msgstr "unders\xc3\xb8g \xc3\xa6ndringer i %s?"' | |||||
4015 | msgid " and " |
|
4079 | msgid " and " | |
4016 | msgstr " og " |
|
4080 | msgstr " og " | |
4017 |
|
4081 | |||
|
4082 | msgid "y" | |||
|
4083 | msgstr "" | |||
|
4084 | ||||
4018 | #, python-format |
|
4085 | #, python-format | |
4019 | msgid "record this change to %r?" |
|
4086 | msgid "record this change to %r?" | |
4020 | msgstr "optag denne ændring i %r?" |
|
4087 | msgstr "optag denne ændring i %r?" | |
@@ -4034,19 +4101,19 b' msgid ""' | |||||
4034 | " You will be prompted for whether to record changes to each\n" |
|
4101 | " You will be prompted for whether to record changes to each\n" | |
4035 | " modified file, and for files with multiple changes, for each\n" |
|
4102 | " modified file, and for files with multiple changes, for each\n" | |
4036 | " change to use. For each query, the following responses are\n" |
|
4103 | " change to use. For each query, the following responses are\n" | |
4037 | " possible:\n" |
|
4104 | " possible::\n" | |
4038 | "\n" |
|
4105 | "\n" | |
4039 | " y - record this change\n" |
|
4106 | " y - record this change\n" | |
4040 | " n - skip this change\n" |
|
4107 | " n - skip this change\n" | |
4041 | "\n" |
|
4108 | "\n" | |
4042 | " s - skip remaining changes to this file\n" |
|
4109 | " s - skip remaining changes to this file\n" | |
4043 | " f - record remaining changes to this file\n" |
|
4110 | " f - record remaining changes to this file\n" | |
4044 | "\n" |
|
4111 | "\n" | |
4045 | " d - done, skip remaining changes and files\n" |
|
4112 | " d - done, skip remaining changes and files\n" | |
4046 | " a - record all changes to all remaining files\n" |
|
4113 | " a - record all changes to all remaining files\n" | |
4047 | " q - quit, recording no changes\n" |
|
4114 | " q - quit, recording no changes\n" | |
4048 | "\n" |
|
4115 | "\n" | |
4049 | " ? - display help" |
|
4116 | " ? - display help" | |
4050 | msgstr "" |
|
4117 | msgstr "" | |
4051 |
|
4118 | |||
4052 | msgid "'mq' extension not loaded" |
|
4119 | msgid "'mq' extension not loaded" | |
@@ -4162,9 +4229,9 b' msgid ""' | |||||
4162 | "\n" |
|
4229 | "\n" | |
4163 | " Selected changesets will be applied on top of the current working\n" |
|
4230 | " Selected changesets will be applied on top of the current working\n" | |
4164 | " directory with the log of the original changeset. If --log is\n" |
|
4231 | " directory with the log of the original changeset. If --log is\n" | |
4165 | " specified, log messages will have a comment appended of the form:\n" |
|
4232 | " specified, log messages will have a comment appended of the form::\n" | |
4166 | "\n" |
|
4233 | "\n" | |
4167 | " (transplanted from CHANGESETHASH)\n" |
|
4234 | " (transplanted from CHANGESETHASH)\n" | |
4168 | "\n" |
|
4235 | "\n" | |
4169 | " You can rewrite the changelog message with the --filter option.\n" |
|
4236 | " You can rewrite the changelog message with the --filter option.\n" | |
4170 | " Its argument will be invoked with the current changelog message as\n" |
|
4237 | " Its argument will be invoked with the current changelog message as\n" | |
@@ -4255,19 +4322,22 b' msgid ""' | |||||
4255 | "operation.\n" |
|
4322 | "operation.\n" | |
4256 | "\n" |
|
4323 | "\n" | |
4257 | "This extension is useful for:\n" |
|
4324 | "This extension is useful for:\n" | |
4258 | " * Japanese Windows users using shift_jis encoding.\n" |
|
4325 | "\n" | |
4259 |
" |
|
4326 | "- Japanese Windows users using shift_jis encoding.\n" | |
4260 | " * All users who use a repository with one of problematic encodings on\n" |
|
4327 | "- Chinese Windows users using big5 encoding.\n" | |
4261 | " case-insensitive file system.\n" |
|
4328 | "- All users who use a repository with one of problematic encodings on\n" | |
|
4329 | " case-insensitive file system.\n" | |||
4262 | "\n" |
|
4330 | "\n" | |
4263 | "This extension is not needed for:\n" |
|
4331 | "This extension is not needed for:\n" | |
4264 | " * Any user who use only ASCII chars in path.\n" |
|
4332 | "\n" | |
4265 | " * Any user who do not use any of problematic encodings.\n" |
|
4333 | "- Any user who use only ASCII chars in path.\n" | |
|
4334 | "- Any user who do not use any of problematic encodings.\n" | |||
4266 | "\n" |
|
4335 | "\n" | |
4267 | "Note that there are some limitations on using this extension:\n" |
|
4336 | "Note that there are some limitations on using this extension:\n" | |
4268 | " * You should use single encoding in one repository.\n" |
|
4337 | "\n" | |
4269 |
" |
|
4338 | "- You should use single encoding in one repository.\n" | |
4270 | " HGENCODING.\n" |
|
4339 | "- You should set same encoding for the repository by locale or\n" | |
|
4340 | " HGENCODING.\n" | |||
4271 | "\n" |
|
4341 | "\n" | |
4272 | "Path encoding conversion are done between Unicode and\n" |
|
4342 | "Path encoding conversion are done between Unicode and\n" | |
4273 | "encoding.encoding which is decided by Mercurial from current locale\n" |
|
4343 | "encoding.encoding which is decided by Mercurial from current locale\n" | |
@@ -4275,7 +4345,7 b' msgid ""' | |||||
4275 | msgstr "" |
|
4345 | msgstr "" | |
4276 |
|
4346 | |||
4277 | #, python-format |
|
4347 | #, python-format | |
4278 | msgid "[win32mbcs] filename conversion fail with %s encoding\n" |
|
4348 | msgid "[win32mbcs] filename conversion failed with %s encoding\n" | |
4279 | msgstr "" |
|
4349 | msgstr "" | |
4280 |
|
4350 | |||
4281 | msgid "[win32mbcs] cannot activate on this platform.\n" |
|
4351 | msgid "[win32mbcs] cannot activate on this platform.\n" | |
@@ -4288,31 +4358,31 b' msgstr ""' | |||||
4288 | msgid "" |
|
4358 | msgid "" | |
4289 | "perform automatic newline conversion\n" |
|
4359 | "perform automatic newline conversion\n" | |
4290 | "\n" |
|
4360 | "\n" | |
4291 | "To perform automatic newline conversion, use:\n" |
|
4361 | "To perform automatic newline conversion, use::\n" | |
4292 | "\n" |
|
4362 | "\n" | |
4293 | "[extensions]\n" |
|
4363 | " [extensions]\n" | |
4294 | "hgext.win32text =\n" |
|
4364 | " hgext.win32text =\n" | |
4295 | "[encode]\n" |
|
4365 | " [encode]\n" | |
4296 | "** = cleverencode:\n" |
|
4366 | " ** = cleverencode:\n" | |
4297 | "# or ** = macencode:\n" |
|
4367 | " # or ** = macencode:\n" | |
4298 | "\n" |
|
4368 | "\n" | |
4299 | "[decode]\n" |
|
4369 | " [decode]\n" | |
4300 | "** = cleverdecode:\n" |
|
4370 | " ** = cleverdecode:\n" | |
4301 | "# or ** = macdecode:\n" |
|
4371 | " # or ** = macdecode:\n" | |
4302 | "\n" |
|
4372 | "\n" | |
4303 | "If not doing conversion, to make sure you do not commit CRLF/CR by " |
|
4373 | "If not doing conversion, to make sure you do not commit CRLF/CR by " | |
4304 | "accident:\n" |
|
4374 | "accident::\n" | |
4305 | "\n" |
|
4375 | "\n" | |
4306 | "[hooks]\n" |
|
4376 | " [hooks]\n" | |
4307 | "pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n" |
|
4377 | " pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n" | |
4308 | "# or pretxncommit.cr = python:hgext.win32text.forbidcr\n" |
|
4378 | " # or pretxncommit.cr = python:hgext.win32text.forbidcr\n" | |
4309 | "\n" |
|
4379 | "\n" | |
4310 | "To do the same check on a server to prevent CRLF/CR from being\n" |
|
4380 | "To do the same check on a server to prevent CRLF/CR from being\n" | |
4311 | "pushed or pulled:\n" |
|
4381 | "pushed or pulled::\n" | |
4312 | "\n" |
|
4382 | "\n" | |
4313 | "[hooks]\n" |
|
4383 | " [hooks]\n" | |
4314 | "pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n" |
|
4384 | " pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n" | |
4315 | "# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n" |
|
4385 | " # or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n" | |
4316 | msgstr "" |
|
4386 | msgstr "" | |
4317 |
|
4387 | |||
4318 | #, python-format |
|
4388 | #, python-format | |
@@ -4358,15 +4428,15 b' msgid ""' | |||||
4358 | "without knowing their actual IP address.\n" |
|
4428 | "without knowing their actual IP address.\n" | |
4359 | "\n" |
|
4429 | "\n" | |
4360 | "To allow other people to discover your repository using run \"hg serve\"\n" |
|
4430 | "To allow other people to discover your repository using run \"hg serve\"\n" | |
4361 |
"in your repository |
|
4431 | "in your repository::\n" | |
4362 | "\n" |
|
4432 | "\n" | |
4363 | " $ cd test\n" |
|
4433 | " $ cd test\n" | |
4364 | " $ hg serve\n" |
|
4434 | " $ hg serve\n" | |
4365 | "\n" |
|
4435 | "\n" | |
4366 |
"You can discover zeroconf enabled repositories by running \"hg paths\" |
|
4436 | "You can discover zeroconf enabled repositories by running \"hg paths\"::\n" | |
4367 | "\n" |
|
4437 | "\n" | |
4368 | " $ hg paths\n" |
|
4438 | " $ hg paths\n" | |
4369 | " zc-test = http://example.com:8000/test\n" |
|
4439 | " zc-test = http://example.com:8000/test\n" | |
4370 | msgstr "" |
|
4440 | msgstr "" | |
4371 |
|
4441 | |||
4372 | msgid "archive prefix contains illegal components" |
|
4442 | msgid "archive prefix contains illegal components" | |
@@ -4661,19 +4731,34 b' msgid ""' | |||||
4661 | " commit.\n" |
|
4731 | " commit.\n" | |
4662 | "\n" |
|
4732 | "\n" | |
4663 | " Use the -s/--similarity option to detect renamed files. With a\n" |
|
4733 | " Use the -s/--similarity option to detect renamed files. With a\n" | |
4664 |
" parameter |
|
4734 | " parameter greater than 0, this compares every removed file with\n" | |
4665 |
" file and records those similar enough as renames. This |
|
4735 | " every added file and records those similar enough as renames. This\n" | |
4666 |
" takes a percentage between 0 (disabled) and 100 (files must |
|
4736 | " option takes a percentage between 0 (disabled) and 100 (files must\n" | |
4667 |
" identical) as its parameter. Detecting renamed files this way |
|
4737 | " be identical) as its parameter. Detecting renamed files this way\n" | |
4668 | " be expensive.\n" |
|
4738 | " can be expensive.\n" | |
4669 | " " |
|
4739 | " " | |
4670 | msgstr "" |
|
4740 | msgstr "" | |
|
4741 | "tilføj alle nye filer, fjern alle manglende filer\n" | |||
|
4742 | "\n" | |||
|
4743 | " Tilføj alle nye filer og fjern alle manglende filer fra depotet.\n" | |||
|
4744 | "\n" | |||
|
4745 | " Nye filer bliver ignoreret hvis de matcher et af mønstrene i\n" | |||
|
4746 | " .hgignore. Som ved add, så træder disse ændringer først i kræft\n" | |||
|
4747 | " ved næste commit.\n" | |||
|
4748 | "\n" | |||
|
4749 | " Brug -s/--similarity tilvalget for at opdage omdøbte filer. Med en\n" | |||
|
4750 | " parameter større end 0 bliver hver fjernet fil sammenlignet med\n" | |||
|
4751 | " enhver tilføjet fil og filer der er tilstrækkelig ens bliver\n" | |||
|
4752 | " opført som omdøbte. Dette tilvalg tager et procenttal mellem 0\n" | |||
|
4753 | " (slået fra) og 100 (filer skal være identiske) som parameter. At\n" | |||
|
4754 | " opdage omdøbninger på denne måde kan være dyrt.\n" | |||
|
4755 | " " | |||
4671 |
|
4756 | |||
4672 | msgid "similarity must be a number" |
|
4757 | msgid "similarity must be a number" | |
4673 | msgstr "" |
|
4758 | msgstr "lighedsgrad skal være et tal" | |
4674 |
|
4759 | |||
4675 | msgid "similarity must be between 0 and 100" |
|
4760 | msgid "similarity must be between 0 and 100" | |
4676 | msgstr "" |
|
4761 | msgstr "lighedsgrad skal være mellem 0 og 100" | |
4677 |
|
4762 | |||
4678 | msgid "" |
|
4763 | msgid "" | |
4679 | "show changeset information by line for each file\n" |
|
4764 | "show changeset information by line for each file\n" | |
@@ -4705,10 +4790,10 b' msgstr ""' | |||||
4705 | " " |
|
4790 | " " | |
4706 |
|
4791 | |||
4707 | msgid "at least one filename or pattern is required" |
|
4792 | msgid "at least one filename or pattern is required" | |
4708 | msgstr "" |
|
4793 | msgstr "kræver mindst et filnavn eller mønster" | |
4709 |
|
4794 | |||
4710 | msgid "at least one of -n/-c is required for -l" |
|
4795 | msgid "at least one of -n/-c is required for -l" | |
4711 | msgstr "" |
|
4796 | msgstr "brug af -l kræver mindst en af -n/-c" | |
4712 |
|
4797 | |||
4713 | #, python-format |
|
4798 | #, python-format | |
4714 | msgid "%s: binary file\n" |
|
4799 | msgid "%s: binary file\n" | |
@@ -4721,14 +4806,14 b' msgid ""' | |||||
4721 | " directory; use -r/--rev to specify a different revision.\n" |
|
4806 | " directory; use -r/--rev to specify a different revision.\n" | |
4722 | "\n" |
|
4807 | "\n" | |
4723 | " To specify the type of archive to create, use -t/--type. Valid\n" |
|
4808 | " To specify the type of archive to create, use -t/--type. Valid\n" | |
4724 | " types are:\n" |
|
4809 | " types are::\n" | |
4725 | "\n" |
|
4810 | "\n" | |
4726 | " \"files\" (default): a directory full of files\n" |
|
4811 | " \"files\" (default): a directory full of files\n" | |
4727 | " \"tar\": tar archive, uncompressed\n" |
|
4812 | " \"tar\": tar archive, uncompressed\n" | |
4728 | " \"tbz2\": tar archive, compressed using bzip2\n" |
|
4813 | " \"tbz2\": tar archive, compressed using bzip2\n" | |
4729 | " \"tgz\": tar archive, compressed using gzip\n" |
|
4814 | " \"tgz\": tar archive, compressed using gzip\n" | |
4730 | " \"uzip\": zip archive, uncompressed\n" |
|
4815 | " \"uzip\": zip archive, uncompressed\n" | |
4731 | " \"zip\": zip archive, compressed using deflate\n" |
|
4816 | " \"zip\": zip archive, compressed using deflate\n" | |
4732 | "\n" |
|
4817 | "\n" | |
4733 | " The exact name of the destination archive or directory is given\n" |
|
4818 | " The exact name of the destination archive or directory is given\n" | |
4734 | " using a format string; see 'hg help export' for details.\n" |
|
4819 | " using a format string; see 'hg help export' for details.\n" | |
@@ -4744,10 +4829,10 b' msgid "no working directory: please spec' | |||||
4744 | msgstr "intet arbejdskatalog: angive venligst en revision" |
|
4829 | msgstr "intet arbejdskatalog: angive venligst en revision" | |
4745 |
|
4830 | |||
4746 | msgid "repository root cannot be destination" |
|
4831 | msgid "repository root cannot be destination" | |
4747 | msgstr "" |
|
4832 | msgstr "depotets rod kan ikke bruges som destination" | |
4748 |
|
4833 | |||
4749 | msgid "cannot archive plain files to stdout" |
|
4834 | msgid "cannot archive plain files to stdout" | |
4750 | msgstr "" |
|
4835 | msgstr "flade filer kan ikke arkiveres til standarduddata" | |
4751 |
|
4836 | |||
4752 | msgid "" |
|
4837 | msgid "" | |
4753 | "reverse effect of earlier changeset\n" |
|
4838 | "reverse effect of earlier changeset\n" | |
@@ -4806,11 +4891,7 b' msgid "%s is not a parent of %s"' | |||||
4806 | msgstr "%s er ikke forælder til %s" |
|
4891 | msgstr "%s er ikke forælder til %s" | |
4807 |
|
4892 | |||
4808 | msgid "cannot use --parent on non-merge changeset" |
|
4893 | msgid "cannot use --parent on non-merge changeset" | |
4809 | msgstr "" |
|
4894 | msgstr "kan ikke bruge --parent på en ændringer som ikke er en sammenføjning" | |
4810 |
|
||||
4811 | #, python-format |
|
|||
4812 | msgid "Backed out changeset %s" |
|
|||
4813 | msgstr "" |
|
|||
4814 |
|
4895 | |||
4815 | #, python-format |
|
4896 | #, python-format | |
4816 | msgid "changeset %s backs out changeset %s\n" |
|
4897 | msgid "changeset %s backs out changeset %s\n" | |
@@ -4824,7 +4905,7 b' msgid "the backout changeset is a new he' | |||||
4824 | msgstr "" |
|
4905 | msgstr "" | |
4825 |
|
4906 | |||
4826 | msgid "(use \"backout --merge\" if you want to auto-merge)\n" |
|
4907 | msgid "(use \"backout --merge\" if you want to auto-merge)\n" | |
4827 | msgstr "" |
|
4908 | msgstr "(brug \"backout --merge\" hvis du vil sammenføje automatisk)\n" | |
4828 |
|
4909 | |||
4829 | msgid "" |
|
4910 | msgid "" | |
4830 | "subdivision search of changesets\n" |
|
4911 | "subdivision search of changesets\n" | |
@@ -4872,7 +4953,7 b' msgid "cannot bisect (no known bad revis' | |||||
4872 | msgstr "" |
|
4953 | msgstr "" | |
4873 |
|
4954 | |||
4874 | msgid "(use of 'hg bisect <cmd>' is deprecated)\n" |
|
4955 | msgid "(use of 'hg bisect <cmd>' is deprecated)\n" | |
4875 | msgstr "" |
|
4956 | msgstr "(formen 'hg bisect <kommando>' er forældet)\n" | |
4876 |
|
4957 | |||
4877 | msgid "incompatible arguments" |
|
4958 | msgid "incompatible arguments" | |
4878 | msgstr "inkompatible argumenter" |
|
4959 | msgstr "inkompatible argumenter" | |
@@ -4883,7 +4964,7 b' msgstr "kan ikke finde program: %s"' | |||||
4883 |
|
4964 | |||
4884 | #, python-format |
|
4965 | #, python-format | |
4885 | msgid "failed to execute %s" |
|
4966 | msgid "failed to execute %s" | |
4886 | msgstr "" |
|
4967 | msgstr "kunne ikke køre %s" | |
4887 |
|
4968 | |||
4888 | #, python-format |
|
4969 | #, python-format | |
4889 | msgid "%s killed" |
|
4970 | msgid "%s killed" | |
@@ -4894,8 +4975,8 b' msgid "Changeset %d:%s: %s\\n"' | |||||
4894 | msgstr "Ændring %d:%s: %s\n" |
|
4975 | msgstr "Ændring %d:%s: %s\n" | |
4895 |
|
4976 | |||
4896 | #, python-format |
|
4977 | #, python-format | |
4897 |
msgid "Testing changeset % |
|
4978 | msgid "Testing changeset %d:%s (%d changesets remaining, ~%d tests)\n" | |
4898 |
msgstr "Tester ændring % |
|
4979 | msgstr "Tester ændring %d:%s (%d ændringer tilbage, ~%d test)\n" | |
4899 |
|
4980 | |||
4900 | msgid "" |
|
4981 | msgid "" | |
4901 | "set or show the current branch name\n" |
|
4982 | "set or show the current branch name\n" | |
@@ -4917,10 +4998,27 b' msgid ""' | |||||
4917 | " 'hg commit --close-branch' to mark this branch as closed.\n" |
|
4998 | " 'hg commit --close-branch' to mark this branch as closed.\n" | |
4918 | " " |
|
4999 | " " | |
4919 | msgstr "" |
|
5000 | msgstr "" | |
|
5001 | "angiv eller vis navnet på den aktuelle gren\n" | |||
|
5002 | "\n" | |||
|
5003 | " Uden noget argument vises navnet på den nuværende gren. Med et\n" | |||
|
5004 | " argument angives arbejdskatalogets grennavn (grenen eksisterer\n" | |||
|
5005 | " ikke i depotet før næste deponering). Det anbefales at den primære\n" | |||
|
5006 | " udvikling foretages på 'default' grenen.\n" | |||
|
5007 | "\n" | |||
|
5008 | " Med mindre -f/--force bruges, så vil branch ikke lade dig bruge et\n" | |||
|
5009 | " grennavn som allerede eksisterer, selv hvis det er inaktivt.\n" | |||
|
5010 | "\n" | |||
|
5011 | " Brug -C/--clean for at nulstille arbejdskatalogs gren til samme\n" | |||
|
5012 | " gren dets forældre-ændring og derved negere end tidligere ændring.\n" | |||
|
5013 | "\n" | |||
|
5014 | " Brug kommandoen 'hg update' for at skifte til en eksisterende\n" | |||
|
5015 | " gren. Brug 'hg commit --close-branch' for at markere denne gren\n" | |||
|
5016 | " som lukket.\n" | |||
|
5017 | " " | |||
4920 |
|
5018 | |||
4921 | #, python-format |
|
5019 | #, python-format | |
4922 | msgid "reset working directory to branch %s\n" |
|
5020 | msgid "reset working directory to branch %s\n" | |
4923 | msgstr "" |
|
5021 | msgstr "nulstil arbejdskataloget til gren %s\n" | |
4924 |
|
5022 | |||
4925 | msgid "a branch of the same name already exists (use --force to override)" |
|
5023 | msgid "a branch of the same name already exists (use --force to override)" | |
4926 | msgstr "" |
|
5024 | msgstr "" | |
@@ -4996,13 +5094,29 b' msgid ""' | |||||
4996 | "\n" |
|
5094 | "\n" | |
4997 | " Output may be to a file, in which case the name of the file is\n" |
|
5095 | " Output may be to a file, in which case the name of the file is\n" | |
4998 | " given using a format string. The formatting rules are the same as\n" |
|
5096 | " given using a format string. The formatting rules are the same as\n" | |
4999 | " for the export command, with the following additions:\n" |
|
5097 | " for the export command, with the following additions::\n" | |
5000 | "\n" |
|
5098 | "\n" | |
5001 | " %s basename of file being printed\n" |
|
5099 | " %s basename of file being printed\n" | |
5002 | " %d dirname of file being printed, or '.' if in repository root\n" |
|
5100 | " %d dirname of file being printed, or '.' if in repository root\n" | |
5003 | " %p root-relative path name of file being printed\n" |
|
5101 | " %p root-relative path name of file being printed\n" | |
5004 | " " |
|
5102 | " " | |
5005 | msgstr "" |
|
5103 | msgstr "" | |
|
5104 | "udskriv den aktuelle eller en given revision af filer\n" | |||
|
5105 | "\n" | |||
|
5106 | " Udskriver de angivne filer som de så ud ved den givne revision.\n" | |||
|
5107 | " Hvis der ikke angves en revision, så bruges forældre-revisionen\n" | |||
|
5108 | " til arbejdskataloget, eller spidsen hvis der ikke er hentet noget\n" | |||
|
5109 | " arbejdskatalog.\n" | |||
|
5110 | "\n" | |||
|
5111 | " Output kan gemmes i en fil hvis navn angives med et formatstreng.\n" | |||
|
5112 | " Reglerne for formatteringen er de samme som for export-kommandoen\n" | |||
|
5113 | " med følgende tilføjelser::\n" | |||
|
5114 | "\n" | |||
|
5115 | " %s grundnavn for filen som udskrives\n" | |||
|
5116 | " %d katalognavn for filen som blvier udskrevet\n" | |||
|
5117 | " eller '.' hvis filen er i katalogets rod\n" | |||
|
5118 | " %p rod-relativ sti for filen som bliver udkrevet\n" | |||
|
5119 | " " | |||
5006 |
|
5120 | |||
5007 | msgid "" |
|
5121 | msgid "" | |
5008 | "make a copy of an existing repository\n" |
|
5122 | "make a copy of an existing repository\n" | |
@@ -5039,7 +5153,7 b' msgid ""' | |||||
5039 | " avoid hardlinking.\n" |
|
5153 | " avoid hardlinking.\n" | |
5040 | "\n" |
|
5154 | "\n" | |
5041 | " In some cases, you can clone repositories and checked out files\n" |
|
5155 | " In some cases, you can clone repositories and checked out files\n" | |
5042 | " using full hardlinks with\n" |
|
5156 | " using full hardlinks with ::\n" | |
5043 | "\n" |
|
5157 | "\n" | |
5044 | " $ cp -al REPO REPOCLONE\n" |
|
5158 | " $ cp -al REPO REPOCLONE\n" | |
5045 | "\n" |
|
5159 | "\n" | |
@@ -5049,7 +5163,6 b' msgid ""' | |||||
5049 | " breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n" |
|
5163 | " breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n" | |
5050 | " this is not compatible with certain extensions that place their\n" |
|
5164 | " this is not compatible with certain extensions that place their\n" | |
5051 | " metadata under the .hg directory, such as mq.\n" |
|
5165 | " metadata under the .hg directory, such as mq.\n" | |
5052 | "\n" |
|
|||
5053 | " " |
|
5166 | " " | |
5054 | msgstr "" |
|
5167 | msgstr "" | |
5055 | "lav en kopi af et eksisterende depot\n" |
|
5168 | "lav en kopi af et eksisterende depot\n" | |
@@ -5086,7 +5199,7 b' msgstr ""' | |||||
5086 | " men rapporterer ingen fejl. I disse tilfælde skal --pull bruges\n" |
|
5199 | " men rapporterer ingen fejl. I disse tilfælde skal --pull bruges\n" | |
5087 | " for at undgå hårde lænker.\n" |
|
5200 | " for at undgå hårde lænker.\n" | |
5088 | "\n" |
|
5201 | "\n" | |
5089 | " I nogle tilfælde kan man klone depoter og udhentede filer med\n" |
|
5202 | " I nogle tilfælde kan man klone depoter og udhentede filer med ::\n" | |
5090 | "\n" |
|
5203 | "\n" | |
5091 | " $ cp -al DEPOT DEPOTKLON\n" |
|
5204 | " $ cp -al DEPOT DEPOTKLON\n" | |
5092 | "\n" |
|
5205 | "\n" | |
@@ -5097,7 +5210,6 b' msgstr ""' | |||||
5097 | " Linux Kernel værktøjer gør det). Dette er desuden ikke kompatibelt\n" |
|
5210 | " Linux Kernel værktøjer gør det). Dette er desuden ikke kompatibelt\n" | |
5098 | " med visse udvidelser som placerer deres metadata under .hg mappen,\n" |
|
5211 | " med visse udvidelser som placerer deres metadata under .hg mappen,\n" | |
5099 | " såsom mq.\n" |
|
5212 | " såsom mq.\n" | |
5100 | "\n" |
|
|||
5101 | " " |
|
5213 | " " | |
5102 |
|
5214 | |||
5103 | msgid "" |
|
5215 | msgid "" | |
@@ -5399,16 +5511,16 b' msgid ""' | |||||
5399 | " first parent only.\n" |
|
5511 | " first parent only.\n" | |
5400 | "\n" |
|
5512 | "\n" | |
5401 | " Output may be to a file, in which case the name of the file is\n" |
|
5513 | " Output may be to a file, in which case the name of the file is\n" | |
5402 | " given using a format string. The formatting rules are as follows:\n" |
|
5514 | " given using a format string. The formatting rules are as follows::\n" | |
5403 | "\n" |
|
5515 | "\n" | |
5404 | " %% literal \"%\" character\n" |
|
5516 | " %% literal \"%\" character\n" | |
5405 | " %H changeset hash (40 bytes of hexadecimal)\n" |
|
5517 | " %H changeset hash (40 bytes of hexadecimal)\n" | |
5406 | " %N number of patches being generated\n" |
|
5518 | " %N number of patches being generated\n" | |
5407 | " %R changeset revision number\n" |
|
5519 | " %R changeset revision number\n" | |
5408 | " %b basename of the exporting repository\n" |
|
5520 | " %b basename of the exporting repository\n" | |
5409 | " %h short-form changeset hash (12 bytes of hexadecimal)\n" |
|
5521 | " %h short-form changeset hash (12 bytes of hexadecimal)\n" | |
5410 | " %n zero-padded sequence number, starting at 1\n" |
|
5522 | " %n zero-padded sequence number, starting at 1\n" | |
5411 | " %r zero-padded changeset revision number\n" |
|
5523 | " %r zero-padded changeset revision number\n" | |
5412 | "\n" |
|
5524 | "\n" | |
5413 | " Without the -a/--text option, export will avoid generating diffs\n" |
|
5525 | " Without the -a/--text option, export will avoid generating diffs\n" | |
5414 | " of files it detects as binary. With -a, export will generate a\n" |
|
5526 | " of files it detects as binary. With -a, export will generate a\n" | |
@@ -5434,16 +5546,16 b' msgstr ""' | |||||
5434 | " sammenføjningsændringen med dennes første forælder.\n" |
|
5546 | " sammenføjningsændringen med dennes første forælder.\n" | |
5435 | "\n" |
|
5547 | "\n" | |
5436 | " Uddata kan gemmes i en fil, og filnavnet er givet ved en\n" |
|
5548 | " Uddata kan gemmes i en fil, og filnavnet er givet ved en\n" | |
5437 | " format-streng. Formatteringsreglerne er som følger:\n" |
|
5549 | " format-streng. Formatteringsreglerne er som følger::\n" | |
5438 | "\n" |
|
5550 | "\n" | |
5439 | " %% litteral % tegn\n" |
|
5551 | " %% litteral % tegn\n" | |
5440 | " %H ændringshash (40 byte heksadecimal)\n" |
|
5552 | " %H ændringshash (40 byte heksadecimal)\n" | |
5441 | " %N antallet af rettelser som bliver genereret\n" |
|
5553 | " %N antallet af rettelser som bliver genereret\n" | |
5442 | " %R revisionnummer for ændringen\n" |
|
5554 | " %R revisionnummer for ændringen\n" | |
5443 | " %b grundnavn for det eksporterede depot\n" |
|
5555 | " %b grundnavn for det eksporterede depot\n" | |
5444 | " %h kortform ændringshash (12 byte heksadecimal)\n" |
|
5556 | " %h kortform ændringshash (12 byte heksadecimal)\n" | |
5445 | " %n nul-fyldt sekvensnummer, startende ved 1\n" |
|
5557 | " %n nul-fyldt sekvensnummer, startende ved 1\n" | |
5446 | " %r nul-fyldt revisionsnummer for ændringen\n" |
|
5558 | " %r nul-fyldt revisionsnummer for ændringen\n" | |
5447 | "\n" |
|
5559 | "\n" | |
5448 | " Uden -a/--text tilvalget vil annotate undgå at behandle filer som\n" |
|
5560 | " Uden -a/--text tilvalget vil annotate undgå at behandle filer som\n" | |
5449 | " den detekterer som binære. Med -a vil annotate generere en\n" |
|
5561 | " den detekterer som binære. Med -a vil annotate generere en\n" | |
@@ -5525,24 +5637,29 b' msgid ""' | |||||
5525 | "\n" |
|
5637 | "\n" | |
5526 | " With no arguments, show all repository head changesets.\n" |
|
5638 | " With no arguments, show all repository head changesets.\n" | |
5527 | "\n" |
|
5639 | "\n" | |
5528 |
" Repository \"heads\" are changesets |
|
5640 | " Repository \"heads\" are changesets with no child changesets. They are\n" | |
5529 |
" |
|
5641 | " where development generally takes place and are the usual targets\n" | |
5530 |
" |
|
5642 | " for update and merge operations.\n" | |
5531 | "\n" |
|
5643 | "\n" | |
5532 | " If one or more REV is given, the \"branch heads\" will be shown for\n" |
|
5644 | " If one or more REV is given, the \"branch heads\" will be shown for\n" | |
5533 |
" the named branch associated with th |
|
5645 | " the named branch associated with the specified changeset(s).\n" | |
5534 | " branch is called the revision's branch tag.\n" |
|
5646 | "\n" | |
5535 | "\n" |
|
5647 | " Branch heads are changesets on a named branch with no descendants on\n" | |
5536 | " Branch heads are revisions on a given named branch that do not have\n" |
|
5648 | " the same branch. A branch head could be a \"true\" (repository) head,\n" | |
5537 | " any descendants on the same branch. A branch head could be a true head\n" |
|
5649 | " or it could be the last changeset on that branch before it was\n" | |
5538 |
" or it could be the last changeset on |
|
5650 | " merged into another branch, or it could be the last changeset on the\n" | |
5539 |
" was created. If none of the branch heads |
|
5651 | " branch before a new branch was created. If none of the branch heads\n" | |
5540 | " is considered inactive. If -c/--closed is specified, also show branch\n" |
|
5652 | " are true heads, the branch is considered inactive.\n" | |
5541 | " heads marked closed (see hg commit --close-branch).\n" |
|
5653 | "\n" | |
5542 | "\n" |
|
5654 | " If -c/--closed is specified, also show branch heads marked closed\n" | |
5543 | " If STARTREV is specified only those heads (or branch heads) that\n" |
|
5655 | " (see hg commit --close-branch).\n" | |
5544 | " are descendants of STARTREV will be displayed.\n" |
|
5656 | "\n" | |
5545 | " " |
|
5657 | " If STARTREV is specified, only those heads that are descendants of\n" | |
|
5658 | " STARTREV will be displayed.\n" | |||
|
5659 | " " | |||
|
5660 | msgstr "" | |||
|
5661 | ||||
|
5662 | msgid "you must specify a branch to use --closed" | |||
5546 | msgstr "" |
|
5663 | msgstr "" | |
5547 |
|
5664 | |||
5548 | #, python-format |
|
5665 | #, python-format | |
@@ -5616,8 +5733,12 b' msgid "no help text available"' | |||||
5616 | msgstr "ingen hjælpetekst tilgængelig" |
|
5733 | msgstr "ingen hjælpetekst tilgængelig" | |
5617 |
|
5734 | |||
5618 | #, python-format |
|
5735 | #, python-format | |
5619 | msgid "%s extension - %s\n" |
|
5736 | msgid "" | |
5620 | msgstr "%s udvidelse - %s\n" |
|
5737 | "%s extension - %s\n" | |
|
5738 | "\n" | |||
|
5739 | msgstr "" | |||
|
5740 | "%s udvidelse - %s\n" | |||
|
5741 | "\n" | |||
5621 |
|
5742 | |||
5622 | msgid "Mercurial Distributed SCM\n" |
|
5743 | msgid "Mercurial Distributed SCM\n" | |
5623 | msgstr "Mercurial Distribueret SCM\n" |
|
5744 | msgstr "Mercurial Distribueret SCM\n" | |
@@ -6061,15 +6182,15 b' msgid ""' | |||||
6061 | "\n" |
|
6182 | "\n" | |
6062 | " The following table details the behavior of remove for different\n" |
|
6183 | " The following table details the behavior of remove for different\n" | |
6063 | " file states (columns) and option combinations (rows). The file\n" |
|
6184 | " file states (columns) and option combinations (rows). The file\n" | |
6064 | " states are Added [A], Clean [C], Modified [M] and Missing [!]\n" |
|
6185 | " states are Added [A], Clean [C], Modified [M] and Missing [!] (as\n" | |
6065 |
" |
|
6186 | " reported by hg status). The actions are Warn, Remove (from branch)\n" | |
6066 |
" |
|
6187 | " and Delete (from disk)::\n" | |
6067 | "\n" |
|
6188 | "\n" | |
6068 | " A C M !\n" |
|
6189 | " A C M !\n" | |
6069 | " none W RD W R\n" |
|
6190 | " none W RD W R\n" | |
6070 | " -f R RD RD R\n" |
|
6191 | " -f R RD RD R\n" | |
6071 | " -A W W W R\n" |
|
6192 | " -A W W W R\n" | |
6072 | " -Af R R R R\n" |
|
6193 | " -Af R R R R\n" | |
6073 | "\n" |
|
6194 | "\n" | |
6074 | " This command schedules the files to be removed at the next commit.\n" |
|
6195 | " This command schedules the files to be removed at the next commit.\n" | |
6075 | " To undo a remove before that, see hg revert.\n" |
|
6196 | " To undo a remove before that, see hg revert.\n" | |
@@ -6089,13 +6210,13 b' msgstr ""' | |||||
6089 | " filtilstande (søjler) og kombinationer af tilvalg (rækker). Mulige\n" |
|
6210 | " filtilstande (søjler) og kombinationer af tilvalg (rækker). Mulige\n" | |
6090 | " filtilstande er tilføjet [A], ren [C], ændret [M] og manglende [!]\n" |
|
6211 | " filtilstande er tilføjet [A], ren [C], ændret [M] og manglende [!]\n" | |
6091 | " (som rapporteret af hg status). Handlingerne er Warn, Remove (fra\n" |
|
6212 | " (som rapporteret af hg status). Handlingerne er Warn, Remove (fra\n" | |
6092 |
" gren) og Delete (fra disk) |
|
6213 | " gren) og Delete (fra disk)::\n" | |
6093 | "\n" |
|
6214 | "\n" | |
6094 | " A C M !\n" |
|
6215 | " A C M !\n" | |
6095 | " none W RD W R\n" |
|
6216 | " none W RD W R\n" | |
6096 | " -f R RD RD R\n" |
|
6217 | " -f R RD RD R\n" | |
6097 | " -A W W W R\n" |
|
6218 | " -A W W W R\n" | |
6098 | " -Af R R R R\n" |
|
6219 | " -Af R R R R\n" | |
6099 | "\n" |
|
6220 | "\n" | |
6100 | " Denne kommando planlægger filerne til at blive fjernet ved næste\n" |
|
6221 | " Denne kommando planlægger filerne til at blive fjernet ved næste\n" | |
6101 | " deponering. For at omgøre en fjernelse før det, se hg revert.\n" |
|
6222 | " deponering. For at omgøre en fjernelse før det, se hg revert.\n" | |
@@ -6149,9 +6270,10 b' msgid ""' | |||||
6149 | " indicating whether or not files are resolved. All files must be\n" |
|
6270 | " indicating whether or not files are resolved. All files must be\n" | |
6150 | " marked as resolved before a commit is permitted.\n" |
|
6271 | " marked as resolved before a commit is permitted.\n" | |
6151 | "\n" |
|
6272 | "\n" | |
6152 | " The codes used to show the status of files are:\n" |
|
6273 | " The codes used to show the status of files are::\n" | |
6153 | " U = unresolved\n" |
|
6274 | "\n" | |
6154 |
" |
|
6275 | " U = unresolved\n" | |
|
6276 | " R = resolved\n" | |||
6155 | " " |
|
6277 | " " | |
6156 | msgstr "" |
|
6278 | msgstr "" | |
6157 |
|
6279 | |||
@@ -6245,7 +6367,7 b' msgid ""' | |||||
6245 | " Transactions are used to encapsulate the effects of all commands\n" |
|
6367 | " Transactions are used to encapsulate the effects of all commands\n" | |
6246 | " that create new changesets or propagate existing changesets into a\n" |
|
6368 | " that create new changesets or propagate existing changesets into a\n" | |
6247 | " repository. For example, the following commands are transactional,\n" |
|
6369 | " repository. For example, the following commands are transactional,\n" | |
6248 | " and their effects can be rolled back:\n" |
|
6370 | " and their effects can be rolled back::\n" | |
6249 | "\n" |
|
6371 | "\n" | |
6250 | " commit\n" |
|
6372 | " commit\n" | |
6251 | " import\n" |
|
6373 | " import\n" | |
@@ -6314,15 +6436,16 b' msgid ""' | |||||
6314 | " If two revisions are given, the differences between them are\n" |
|
6436 | " If two revisions are given, the differences between them are\n" | |
6315 | " shown.\n" |
|
6437 | " shown.\n" | |
6316 | "\n" |
|
6438 | "\n" | |
6317 | " The codes used to show the status of files are:\n" |
|
6439 | " The codes used to show the status of files are::\n" | |
6318 | " M = modified\n" |
|
6440 | "\n" | |
6319 |
" |
|
6441 | " M = modified\n" | |
6320 |
" |
|
6442 | " A = added\n" | |
6321 |
" |
|
6443 | " R = removed\n" | |
6322 | " ! = missing (deleted by non-hg command, but still tracked)\n" |
|
6444 | " C = clean\n" | |
6323 | " ? = not tracked\n" |
|
6445 | " ! = missing (deleted by non-hg command, but still tracked)\n" | |
6324 |
" |
|
6446 | " ? = not tracked\n" | |
6325 | " = origin of the previous file listed as A (added)\n" |
|
6447 | " I = ignored\n" | |
|
6448 | " = origin of the previous file listed as A (added)\n" | |||
6326 | " " |
|
6449 | " " | |
6327 | msgstr "" |
|
6450 | msgstr "" | |
6328 | "vis ændrede filer i arbejdskataloget\n" |
|
6451 | "vis ændrede filer i arbejdskataloget\n" | |
@@ -6347,15 +6470,16 b' msgstr ""' | |||||
6347 | " Hvis der angivet en revision bruges denne som en basisrevision.\n" |
|
6470 | " Hvis der angivet en revision bruges denne som en basisrevision.\n" | |
6348 | " Hvis der angives to revisioner, da vises forskellene mellem dem.\n" |
|
6471 | " Hvis der angives to revisioner, da vises forskellene mellem dem.\n" | |
6349 | "\n" |
|
6472 | "\n" | |
6350 | " Koderne som bruges til at vise status for filerne er:\n" |
|
6473 | " Koderne som bruges til at vise status for filerne er::\n" | |
6351 | " M = ændret\n" |
|
6474 | "\n" | |
6352 |
" |
|
6475 | " M = ændret\n" | |
6353 |
" |
|
6476 | " A = tilføjet\n" | |
6354 |
" |
|
6477 | " R = fjernet\n" | |
6355 | " ! = mangler (slettet af en ikke-hg kommando, men følges stadig)\n" |
|
6478 | " C = ren\n" | |
6356 | " ? = følges ikke\n" |
|
6479 | " ! = mangler (slettet af en ikke-hg kommando, men følges stadig)\n" | |
6357 | " I = ignoreret\n" |
|
6480 | " ? = følges ikke\n" | |
6358 | " = den foregående fil markeret som A (tilføjet) stammer herfra\n" |
|
6481 | " I = ignoreret\n" | |
|
6482 | " = den foregående fil markeret som A (tilføjet) stammer herfra\n" | |||
6359 | " " |
|
6483 | " " | |
6360 |
|
6484 | |||
6361 | msgid "" |
|
6485 | msgid "" | |
@@ -6403,17 +6527,9 b' msgid "tag \'%s\' is not a local tag"' | |||||
6403 | msgstr "mærkaten '%s' er ikke en lokal mærkat" |
|
6527 | msgstr "mærkaten '%s' er ikke en lokal mærkat" | |
6404 |
|
6528 | |||
6405 | #, python-format |
|
6529 | #, python-format | |
6406 | msgid "Removed tag %s" |
|
|||
6407 | msgstr "Mærke %s er fjernet" |
|
|||
6408 |
|
||||
6409 | #, python-format |
|
|||
6410 | msgid "tag '%s' already exists (use -f to force)" |
|
6530 | msgid "tag '%s' already exists (use -f to force)" | |
6411 | msgstr "mærkaten '%s' eksisterer allerede (brug -f for at gennemtvinge)" |
|
6531 | msgstr "mærkaten '%s' eksisterer allerede (brug -f for at gennemtvinge)" | |
6412 |
|
6532 | |||
6413 | #, python-format |
|
|||
6414 | msgid "Added tag %s for changeset %s" |
|
|||
6415 | msgstr "Tilføjede mærkat %s til ændring %s" |
|
|||
6416 |
|
||||
6417 | msgid "" |
|
6533 | msgid "" | |
6418 | "list repository tags\n" |
|
6534 | "list repository tags\n" | |
6419 | "\n" |
|
6535 | "\n" | |
@@ -6511,6 +6627,9 b' msgstr ""' | |||||
6511 | " Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n" |
|
6627 | " Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n" | |
6512 | " " |
|
6628 | " " | |
6513 |
|
6629 | |||
|
6630 | msgid "cannot specify both -c/--check and -C/--clean" | |||
|
6631 | msgstr "man kan ikke angive både -c/--check og -C/--clean" | |||
|
6632 | ||||
6514 | msgid "uncommitted local changes" |
|
6633 | msgid "uncommitted local changes" | |
6515 | msgstr "udeponerede lokale ændringer" |
|
6634 | msgstr "udeponerede lokale ændringer" | |
6516 |
|
6635 | |||
@@ -6525,6 +6644,14 b' msgid ""' | |||||
6525 | " integrity of their crosslinks and indices.\n" |
|
6644 | " integrity of their crosslinks and indices.\n" | |
6526 | " " |
|
6645 | " " | |
6527 | msgstr "" |
|
6646 | msgstr "" | |
|
6647 | "verificer depotets integritet\n" | |||
|
6648 | "\n" | |||
|
6649 | " Verificer integreteten af det aktuelle depot.\n" | |||
|
6650 | "\n" | |||
|
6651 | " Dette vil lave en udførlig kontrol af depotets integritet.\n" | |||
|
6652 | " Hashværdier og tjeksummer valideres for hver indgang i\n" | |||
|
6653 | " historikfilen, manifæstet og fulgte filer. Desuden valideres\n" | |||
|
6654 | " integriteten af deres krydslinks og indekser." | |||
6528 |
|
6655 | |||
6529 | msgid "output version and copyright information" |
|
6656 | msgid "output version and copyright information" | |
6530 | msgstr "udskriv version- og copyrightinformation" |
|
6657 | msgstr "udskriv version- og copyrightinformation" | |
@@ -6539,6 +6666,11 b' msgid ""' | |||||
6539 | "This is free software; see the source for copying conditions. There is NO\n" |
|
6666 | "This is free software; see the source for copying conditions. There is NO\n" | |
6540 | "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
|
6667 | "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" | |
6541 | msgstr "" |
|
6668 | msgstr "" | |
|
6669 | "\n" | |||
|
6670 | "Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> og andre\n" | |||
|
6671 | "Dette er frit programmel; se kildekoden for kopieringsbetingelser. Der\n" | |||
|
6672 | "gives INGEN GARANTI; ikke engang for SALGBARHED eller EGNETHED FOR\n" | |||
|
6673 | "NOGET BESTEMT FORMÅL.\n" | |||
6542 |
|
6674 | |||
6543 | msgid "repository root directory or symbolic path name" |
|
6675 | msgid "repository root directory or symbolic path name" | |
6544 | msgstr "depotrodfolder eller symbolsk stinavn" |
|
6676 | msgstr "depotrodfolder eller symbolsk stinavn" | |
@@ -6721,10 +6853,10 b' msgid "[-gbsr] [-c CMD] [REV]"' | |||||
6721 | msgstr "[-gbsr] [-c KOMMANDO] [REV]" |
|
6853 | msgstr "[-gbsr] [-c KOMMANDO] [REV]" | |
6722 |
|
6854 | |||
6723 | msgid "set branch name even if it shadows an existing branch" |
|
6855 | msgid "set branch name even if it shadows an existing branch" | |
6724 | msgstr "" |
|
6856 | msgstr "sæt grennavnet selv hvis det overskygger en eksisterende gren" | |
6725 |
|
6857 | |||
6726 | msgid "reset branch name to parent branch name" |
|
6858 | msgid "reset branch name to parent branch name" | |
6727 | msgstr "" |
|
6859 | msgstr "nulstil grennavnet til forældre-grennavnet" | |
6728 |
|
6860 | |||
6729 | msgid "[-fC] [NAME]" |
|
6861 | msgid "[-fC] [NAME]" | |
6730 | msgstr "[-fC] [NAVN]" |
|
6862 | msgstr "[-fC] [NAVN]" | |
@@ -6732,8 +6864,8 b' msgstr "[-fC] [NAVN]"' | |||||
6732 | msgid "show only branches that have unmerged heads" |
|
6864 | msgid "show only branches that have unmerged heads" | |
6733 | msgstr "vil kun grene som har usammenføjne hoveder" |
|
6865 | msgstr "vil kun grene som har usammenføjne hoveder" | |
6734 |
|
6866 | |||
6735 |
msgid "show normal and closed he |
|
6867 | msgid "show normal and closed branches" | |
6736 |
msgstr "vis normale og lukkede |
|
6868 | msgstr "vis normale og lukkede grene" | |
6737 |
|
6869 | |||
6738 | msgid "[-a]" |
|
6870 | msgid "[-a]" | |
6739 | msgstr "[-a]" |
|
6871 | msgstr "[-a]" | |
@@ -6847,7 +6979,7 b' msgid "[OPTION]... [-r REV1 [-r REV2]] [' | |||||
6847 | msgstr "[TILVALG]... [-r REV1 [-r REV2]] [FIL]..." |
|
6979 | msgstr "[TILVALG]... [-r REV1 [-r REV2]] [FIL]..." | |
6848 |
|
6980 | |||
6849 | msgid "diff against the second parent" |
|
6981 | msgid "diff against the second parent" | |
6850 | msgstr "" |
|
6982 | msgstr "find forskelle i forhold til den anden forældre" | |
6851 |
|
6983 | |||
6852 | msgid "[OPTION]... [-o OUTFILESPEC] REV..." |
|
6984 | msgid "[OPTION]... [-o OUTFILESPEC] REV..." | |
6853 | msgstr "[TILVALG]... [-o UDFILSPECIFIKATION] REV..." |
|
6985 | msgstr "[TILVALG]... [-o UDFILSPECIFIKATION] REV..." | |
@@ -6879,8 +7011,11 b' msgstr "[TILVALG]... M\xc3\x98NSTER [FIL]..."' | |||||
6879 | msgid "show only heads which are descendants of REV" |
|
7011 | msgid "show only heads which are descendants of REV" | |
6880 | msgstr "vis kun hoveder som er efterkommere af REV" |
|
7012 | msgstr "vis kun hoveder som er efterkommere af REV" | |
6881 |
|
7013 | |||
6882 | msgid "show only the active heads from open branches" |
|
7014 | msgid "show only the active branch heads from open branches" | |
6883 | msgstr "vis kun aktive hoveder fra åbne grene" |
|
7015 | msgstr "vis kun de aktive grenhoveder fra åbne grene" | |
|
7016 | ||||
|
7017 | msgid "show normal and closed branch heads" | |||
|
7018 | msgstr "vis normale og lukkede grenhoveder" | |||
6884 |
|
7019 | |||
6885 | msgid "[-r STARTREV] [REV]..." |
|
7020 | msgid "[-r STARTREV] [REV]..." | |
6886 | msgstr "[-r STARTREV] [REV]..." |
|
7021 | msgstr "[-r STARTREV] [REV]..." | |
@@ -7459,9 +7594,6 b' msgstr ""' | |||||
7459 | msgid "&Other" |
|
7594 | msgid "&Other" | |
7460 | msgstr "" |
|
7595 | msgstr "" | |
7461 |
|
7596 | |||
7462 | msgid "l" |
|
|||
7463 | msgstr "l" |
|
|||
7464 |
|
||||
7465 | #, python-format |
|
7597 | #, python-format | |
7466 | msgid "merging %s and %s to %s\n" |
|
7598 | msgid "merging %s and %s to %s\n" | |
7467 | msgstr "føjer %s og %s sammen til %s\n" |
|
7599 | msgstr "føjer %s og %s sammen til %s\n" | |
@@ -7489,9 +7621,6 b' msgstr ""' | |||||
7489 | msgid "&Yes" |
|
7621 | msgid "&Yes" | |
7490 | msgstr "" |
|
7622 | msgstr "" | |
7491 |
|
7623 | |||
7492 | msgid "n" |
|
|||
7493 | msgstr "" |
|
|||
7494 |
|
||||
7495 | #, python-format |
|
7624 | #, python-format | |
7496 | msgid "merging %s failed!\n" |
|
7625 | msgid "merging %s failed!\n" | |
7497 | msgstr "sammenføjning af %s fejlede!\n" |
|
7626 | msgstr "sammenføjning af %s fejlede!\n" | |
@@ -7512,27 +7641,27 b' msgid ""' | |||||
7512 | " implement hooks.\n" |
|
7641 | " implement hooks.\n" | |
7513 | "\n" |
|
7642 | "\n" | |
7514 | " Extensions are not loaded by default for a variety of reasons:\n" |
|
7643 | " Extensions are not loaded by default for a variety of reasons:\n" | |
7515 | " they can increase startup overhead; they may be meant for\n" |
|
7644 | " they can increase startup overhead; they may be meant for advanced\n" | |
7516 |
" |
|
7645 | " usage only; they may provide potentially dangerous abilities (such\n" | |
7517 |
" a |
|
7646 | " as letting you destroy or modify history); they might not be ready\n" | |
7518 |
" |
|
7647 | " for prime time; or they may alter some usual behaviors of stock\n" | |
7519 |
" |
|
7648 | " Mercurial. It is thus up to the user to activate extensions as\n" | |
7520 | " activate extensions as needed.\n" |
|
7649 | " needed.\n" | |
7521 | "\n" |
|
7650 | "\n" | |
7522 | " To enable the \"foo\" extension, either shipped with Mercurial\n" |
|
7651 | " To enable the \"foo\" extension, either shipped with Mercurial or in\n" | |
7523 |
" |
|
7652 | " the Python search path, create an entry for it in your hgrc, like\n" | |
7524 |
" |
|
7653 | " this::\n" | |
7525 | "\n" |
|
7654 | "\n" | |
7526 | " [extensions]\n" |
|
7655 | " [extensions]\n" | |
7527 | " foo =\n" |
|
7656 | " foo =\n" | |
7528 | "\n" |
|
7657 | "\n" | |
7529 | " You may also specify the full path to an extension:\n" |
|
7658 | " You may also specify the full path to an extension::\n" | |
7530 | "\n" |
|
7659 | "\n" | |
7531 | " [extensions]\n" |
|
7660 | " [extensions]\n" | |
7532 | " myfeature = ~/.hgext/myfeature.py\n" |
|
7661 | " myfeature = ~/.hgext/myfeature.py\n" | |
7533 | "\n" |
|
7662 | "\n" | |
7534 | " To explicitly disable an extension enabled in an hgrc of broader\n" |
|
7663 | " To explicitly disable an extension enabled in an hgrc of broader\n" | |
7535 | " scope, prepend its path with !:\n" |
|
7664 | " scope, prepend its path with !::\n" | |
7536 | "\n" |
|
7665 | "\n" | |
7537 | " [extensions]\n" |
|
7666 | " [extensions]\n" | |
7538 | " # disabling extension bar residing in /path/to/extension/bar.py\n" |
|
7667 | " # disabling extension bar residing in /path/to/extension/bar.py\n" | |
@@ -7551,78 +7680,80 b' msgstr "Datoformater"' | |||||
7551 | msgid "" |
|
7680 | msgid "" | |
7552 | "\n" |
|
7681 | "\n" | |
7553 | " Some commands allow the user to specify a date, e.g.:\n" |
|
7682 | " Some commands allow the user to specify a date, e.g.:\n" | |
7554 | " * backout, commit, import, tag: Specify the commit date.\n" |
|
7683 | "\n" | |
7555 | " * log, revert, update: Select revision(s) by date.\n" |
|
7684 | " - backout, commit, import, tag: Specify the commit date.\n" | |
7556 | "\n" |
|
7685 | " - log, revert, update: Select revision(s) by date.\n" | |
7557 | " Many date formats are valid. Here are some examples:\n" |
|
7686 | "\n" | |
7558 | "\n" |
|
7687 | " Many date formats are valid. Here are some examples::\n" | |
7559 | " \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n" |
|
7688 | "\n" | |
7560 |
" \"Dec 6 13:18 |
|
7689 | " \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n" | |
7561 | " \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n" |
|
7690 | " \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n" | |
7562 | " \"Dec 6\" (midnight)\n" |
|
7691 | " \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n" | |
7563 | " \"13:18\" (today assumed)\n" |
|
7692 | " \"Dec 6\" (midnight)\n" | |
7564 |
" |
|
7693 | " \"13:18\" (today assumed)\n" | |
7565 |
" \"3:39 |
|
7694 | " \"3:39\" (3:39AM assumed)\n" | |
7566 | " \"2006-12-06 13:18:29\" (ISO 8601 format)\n" |
|
7695 | " \"3:39pm\" (15:39)\n" | |
7567 | " \"2006-12-6 13:18\"\n" |
|
7696 | " \"2006-12-06 13:18:29\" (ISO 8601 format)\n" | |
7568 | " \"2006-12-6\"\n" |
|
7697 | " \"2006-12-6 13:18\"\n" | |
7569 | " \"12-6\"\n" |
|
7698 | " \"2006-12-6\"\n" | |
7570 |
" |
|
7699 | " \"12-6\"\n" | |
7571 |
" \"12/6 |
|
7700 | " \"12/6\"\n" | |
7572 | "\n" |
|
7701 | " \"12/6/6\" (Dec 6 2006)\n" | |
7573 | " Lastly, there is Mercurial's internal format:\n" |
|
7702 | "\n" | |
7574 | "\n" |
|
7703 | " Lastly, there is Mercurial's internal format::\n" | |
7575 | " \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n" |
|
7704 | "\n" | |
|
7705 | " \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n" | |||
7576 | "\n" |
|
7706 | "\n" | |
7577 | " This is the internal representation format for dates. unixtime is\n" |
|
7707 | " This is the internal representation format for dates. unixtime is\n" | |
7578 | " the number of seconds since the epoch (1970-01-01 00:00 UTC).\n" |
|
7708 | " the number of seconds since the epoch (1970-01-01 00:00 UTC).\n" | |
7579 | " offset is the offset of the local timezone, in seconds west of UTC\n" |
|
7709 | " offset is the offset of the local timezone, in seconds west of UTC\n" | |
7580 | " (negative if the timezone is east of UTC).\n" |
|
7710 | " (negative if the timezone is east of UTC).\n" | |
7581 | "\n" |
|
7711 | "\n" | |
7582 | " The log command also accepts date ranges:\n" |
|
7712 | " The log command also accepts date ranges::\n" | |
7583 | "\n" |
|
7713 | "\n" | |
7584 | " \"<{datetime}\" - at or before a given date/time\n" |
|
7714 | " \"<{datetime}\" - at or before a given date/time\n" | |
7585 | " \">{datetime}\" - on or after a given date/time\n" |
|
7715 | " \">{datetime}\" - on or after a given date/time\n" | |
7586 | " \"{datetime} to {datetime}\" - a date range, inclusive\n" |
|
7716 | " \"{datetime} to {datetime}\" - a date range, inclusive\n" | |
7587 | " \"-{days}\" - within a given number of days of today\n" |
|
7717 | " \"-{days}\" - within a given number of days of today\n" | |
7588 | " " |
|
7718 | " " | |
7589 | msgstr "" |
|
7719 | msgstr "" | |
7590 | "\n" |
|
7720 | "\n" | |
7591 | " Nogle kommandoer tillader brugeren at specificere en dato, f.eks.:\n" |
|
7721 | " Nogle kommandoer tillader brugeren at specificere en dato, f.eks.:\n" | |
7592 | " * backout, commit, import, tag: specificer commit-datoen.\n" |
|
7722 | "\n" | |
7593 | " * log, revert, update: vælg revisioner efter dato.\n" |
|
7723 | " - backout, commit, import, tag: specificer commit-datoen.\n" | |
7594 | "\n" |
|
7724 | " - log, revert, update: vælg revisioner efter dato.\n" | |
7595 | " Der er mange gyldige datoformater. Her er nogle eksempler:\n" |
|
7725 | "\n" | |
7596 | "\n" |
|
7726 | " Der er mange gyldige datoformater. Her er nogle eksempler::\n" | |
7597 | " \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n" |
|
7727 | "\n" | |
7598 |
" \"Dec 6 13:18 |
|
7728 | " \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n" | |
7599 | " \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n" |
|
7729 | " \"Dec 6 13:18 -0600\" (antager år, tidszone er angivet)\n" | |
7600 | " \"Dec 6\" (midnat)\n" |
|
7730 | " \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n" | |
7601 | " \"13:18\" (antager dags dato)\n" |
|
7731 | " \"Dec 6\" (midnat)\n" | |
7602 | " \"3:39\"\n" |
|
7732 | " \"13:18\" (antager dags dato)\n" | |
7603 |
" \"3:39 |
|
7733 | " \"3:39\"\n" | |
7604 | " \"2006-12-06 13:18:29\" (ISO 8601 format)\n" |
|
7734 | " \"3:39pm\" (15:39)\n" | |
7605 | " \"2006-12-6 13:18\"\n" |
|
7735 | " \"2006-12-06 13:18:29\" (ISO 8601 format)\n" | |
7606 | " \"2006-12-6\"\n" |
|
7736 | " \"2006-12-6 13:18\"\n" | |
7607 | " \"12-6\"\n" |
|
7737 | " \"2006-12-6\"\n" | |
7608 |
" |
|
7738 | " \"12-6\"\n" | |
7609 |
" \"12/6 |
|
7739 | " \"12/6\"\n" | |
7610 | "\n" |
|
7740 | " \"12/6/6\" (6. dec. 2006)\n" | |
7611 | " Endelig er der Mercurials interne format:\n" |
|
7741 | "\n" | |
7612 | "\n" |
|
7742 | " Endelig er der Mercurials interne format::\n" | |
7613 | " \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n" |
|
7743 | "\n" | |
|
7744 | " \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n" | |||
7614 | "\n" |
|
7745 | "\n" | |
7615 | " Dette er den interne repræsentation af datoer. unixtime er\n" |
|
7746 | " Dette er den interne repræsentation af datoer. unixtime er\n" | |
7616 | " antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n" |
|
7747 | " antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n" | |
7617 | " UTC). offset er den lokale tidszone, angivet i antal sekunder vest\n" |
|
7748 | " UTC). offset er den lokale tidszone, angivet i antal sekunder vest\n" | |
7618 | " for UTC (negativ hvis tidszonen er øst for UTC).\n" |
|
7749 | " for UTC (negativ hvis tidszonen er øst for UTC).\n" | |
7619 | "\n" |
|
7750 | "\n" | |
7620 | " Kommandoen log accepterer også datointervaller:\n" |
|
7751 | " Kommandoen log accepterer også datointervaller::\n" | |
7621 | "\n" |
|
7752 | "\n" | |
7622 | " \"<{date}\" - på eller før den angivne dato/tidspunkt\n" |
|
7753 | " \"<{date}\" - på eller før den angivne dato/tidspunkt\n" | |
7623 | " \">{date}\" - på eller efter den angivne dato/tidspunkt\n" |
|
7754 | " \">{date}\" - på eller efter den angivne dato/tidspunkt\n" | |
7624 | " \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n" |
|
7755 | " \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n" | |
7625 | " \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n" |
|
7756 | " \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n" | |
7626 | " " |
|
7757 | " " | |
7627 |
|
7758 | |||
7628 | msgid "File Name Patterns" |
|
7759 | msgid "File Name Patterns" | |
@@ -7643,34 +7774,34 b' msgid ""' | |||||
7643 | " the current repository root.\n" |
|
7774 | " the current repository root.\n" | |
7644 | "\n" |
|
7775 | "\n" | |
7645 | " To use an extended glob, start a name with \"glob:\". Globs are\n" |
|
7776 | " To use an extended glob, start a name with \"glob:\". Globs are\n" | |
7646 |
" rooted at the current directory; a glob such as \"*.c\" will |
|
7777 | " rooted at the current directory; a glob such as \"``*.c``\" will\n" | |
7647 | " match files in the current directory ending with \".c\".\n" |
|
7778 | " only match files in the current directory ending with \".c\".\n" | |
7648 | "\n" |
|
7779 | "\n" | |
7649 |
" The supported glob syntax extensions are \"**\" to match any |
|
7780 | " The supported glob syntax extensions are \"``**``\" to match any\n" | |
7650 | " across path separators and \"{a,b}\" to mean \"a or b\".\n" |
|
7781 | " string across path separators and \"{a,b}\" to mean \"a or b\".\n" | |
7651 | "\n" |
|
7782 | "\n" | |
7652 | " To use a Perl/Python regular expression, start a name with \"re:\".\n" |
|
7783 | " To use a Perl/Python regular expression, start a name with \"re:\".\n" | |
7653 | " Regexp pattern matching is anchored at the root of the repository.\n" |
|
7784 | " Regexp pattern matching is anchored at the root of the repository.\n" | |
7654 | "\n" |
|
7785 | "\n" | |
7655 | " Plain examples:\n" |
|
7786 | " Plain examples::\n" | |
7656 | "\n" |
|
7787 | "\n" | |
7657 |
" path:foo/bar a name bar in a directory named foo in the root |
|
7788 | " path:foo/bar a name bar in a directory named foo in the root\n" | |
7658 | " the repository\n" |
|
7789 | " of the repository\n" | |
7659 | " path:path:name a file or directory named \"path:name\"\n" |
|
7790 | " path:path:name a file or directory named \"path:name\"\n" | |
7660 | "\n" |
|
7791 | "\n" | |
7661 | " Glob examples:\n" |
|
7792 | " Glob examples::\n" | |
7662 | "\n" |
|
7793 | "\n" | |
7663 | " glob:*.c any name ending in \".c\" in the current directory\n" |
|
7794 | " glob:*.c any name ending in \".c\" in the current directory\n" | |
7664 | " *.c any name ending in \".c\" in the current directory\n" |
|
7795 | " *.c any name ending in \".c\" in the current directory\n" | |
7665 | " **.c any name ending in \".c\" in any subdirectory of the\n" |
|
7796 | " **.c any name ending in \".c\" in any subdirectory of the\n" | |
7666 | " current directory including itself.\n" |
|
7797 | " current directory including itself.\n" | |
7667 | " foo/*.c any name ending in \".c\" in the directory foo\n" |
|
7798 | " foo/*.c any name ending in \".c\" in the directory foo\n" | |
7668 | " foo/**.c any name ending in \".c\" in any subdirectory of foo\n" |
|
7799 | " foo/**.c any name ending in \".c\" in any subdirectory of foo\n" | |
7669 | " including itself.\n" |
|
7800 | " including itself.\n" | |
7670 | "\n" |
|
7801 | "\n" | |
7671 | " Regexp examples:\n" |
|
7802 | " Regexp examples::\n" | |
7672 | "\n" |
|
7803 | "\n" | |
7673 | " re:.*\\.c$ any name ending in \".c\", anywhere in the repository\n" |
|
7804 | " re:.*\\.c$ any name ending in \".c\", anywhere in the repository\n" | |
7674 | "\n" |
|
7805 | "\n" | |
7675 | " " |
|
7806 | " " | |
7676 | msgstr "" |
|
7807 | msgstr "" | |
@@ -7680,25 +7811,25 b' msgstr "Milj\xc3\xb8variable"' | |||||
7680 |
|
7811 | |||
7681 | msgid "" |
|
7812 | msgid "" | |
7682 | "\n" |
|
7813 | "\n" | |
7683 |
"HG |
|
7814 | "HG\n" | |
7684 | " Path to the 'hg' executable, automatically passed when running\n" |
|
7815 | " Path to the 'hg' executable, automatically passed when running\n" | |
7685 | " hooks, extensions or external tools. If unset or empty, this is\n" |
|
7816 | " hooks, extensions or external tools. If unset or empty, this is\n" | |
7686 | " the hg executable's name if it's frozen, or an executable named\n" |
|
7817 | " the hg executable's name if it's frozen, or an executable named\n" | |
7687 | " 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n" |
|
7818 | " 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n" | |
7688 | " Windows) is searched.\n" |
|
7819 | " Windows) is searched.\n" | |
7689 | "\n" |
|
7820 | "\n" | |
7690 |
"HGEDITOR |
|
7821 | "HGEDITOR\n" | |
7691 | " This is the name of the editor to run when committing. See EDITOR.\n" |
|
7822 | " This is the name of the editor to run when committing. See EDITOR.\n" | |
7692 | "\n" |
|
7823 | "\n" | |
7693 | " (deprecated, use .hgrc)\n" |
|
7824 | " (deprecated, use .hgrc)\n" | |
7694 | "\n" |
|
7825 | "\n" | |
7695 |
"HGENCODING |
|
7826 | "HGENCODING\n" | |
7696 | " This overrides the default locale setting detected by Mercurial.\n" |
|
7827 | " This overrides the default locale setting detected by Mercurial.\n" | |
7697 | " This setting is used to convert data including usernames,\n" |
|
7828 | " This setting is used to convert data including usernames,\n" | |
7698 | " changeset descriptions, tag names, and branches. This setting can\n" |
|
7829 | " changeset descriptions, tag names, and branches. This setting can\n" | |
7699 | " be overridden with the --encoding command-line option.\n" |
|
7830 | " be overridden with the --encoding command-line option.\n" | |
7700 | "\n" |
|
7831 | "\n" | |
7701 |
"HGENCODINGMODE |
|
7832 | "HGENCODINGMODE\n" | |
7702 | " This sets Mercurial's behavior for handling unknown characters\n" |
|
7833 | " This sets Mercurial's behavior for handling unknown characters\n" | |
7703 | " while transcoding user input. The default is \"strict\", which\n" |
|
7834 | " while transcoding user input. The default is \"strict\", which\n" | |
7704 | " causes Mercurial to abort if it can't map a character. Other\n" |
|
7835 | " causes Mercurial to abort if it can't map a character. Other\n" | |
@@ -7706,45 +7837,46 b' msgid ""' | |||||
7706 | " \"ignore\", which drops them. This setting can be overridden with\n" |
|
7837 | " \"ignore\", which drops them. This setting can be overridden with\n" | |
7707 | " the --encodingmode command-line option.\n" |
|
7838 | " the --encodingmode command-line option.\n" | |
7708 | "\n" |
|
7839 | "\n" | |
7709 |
"HGMERGE |
|
7840 | "HGMERGE\n" | |
7710 | " An executable to use for resolving merge conflicts. The program\n" |
|
7841 | " An executable to use for resolving merge conflicts. The program\n" | |
7711 | " will be executed with three arguments: local file, remote file,\n" |
|
7842 | " will be executed with three arguments: local file, remote file,\n" | |
7712 | " ancestor file.\n" |
|
7843 | " ancestor file.\n" | |
7713 | "\n" |
|
7844 | "\n" | |
7714 | " (deprecated, use .hgrc)\n" |
|
7845 | " (deprecated, use .hgrc)\n" | |
7715 | "\n" |
|
7846 | "\n" | |
7716 |
"HGRCPATH |
|
7847 | "HGRCPATH\n" | |
7717 | " A list of files or directories to search for hgrc files. Item\n" |
|
7848 | " A list of files or directories to search for hgrc files. Item\n" | |
7718 | " separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n" |
|
7849 | " separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n" | |
7719 | " platform default search path is used. If empty, only the .hg/hgrc\n" |
|
7850 | " platform default search path is used. If empty, only the .hg/hgrc\n" | |
7720 | " from the current repository is read.\n" |
|
7851 | " from the current repository is read.\n" | |
7721 | "\n" |
|
7852 | "\n" | |
7722 | " For each element in HGRCPATH:\n" |
|
7853 | " For each element in HGRCPATH:\n" | |
7723 | " * if it's a directory, all files ending with .rc are added\n" |
|
7854 | "\n" | |
7724 | " * otherwise, the file itself will be added\n" |
|
7855 | " - if it's a directory, all files ending with .rc are added\n" | |
7725 | "\n" |
|
7856 | " - otherwise, the file itself will be added\n" | |
7726 | "HGUSER::\n" |
|
7857 | "\n" | |
|
7858 | "HGUSER\n" | |||
7727 | " This is the string used as the author of a commit. If not set,\n" |
|
7859 | " This is the string used as the author of a commit. If not set,\n" | |
7728 | " available values will be considered in this order:\n" |
|
7860 | " available values will be considered in this order:\n" | |
7729 | "\n" |
|
7861 | "\n" | |
7730 |
" |
|
7862 | " - HGUSER (deprecated)\n" | |
7731 |
" |
|
7863 | " - hgrc files from the HGRCPATH\n" | |
7732 |
" |
|
7864 | " - EMAIL\n" | |
7733 |
" |
|
7865 | " - interactive prompt\n" | |
7734 |
" |
|
7866 | " - LOGNAME (with '@hostname' appended)\n" | |
7735 | "\n" |
|
7867 | "\n" | |
7736 | " (deprecated, use .hgrc)\n" |
|
7868 | " (deprecated, use .hgrc)\n" | |
7737 | "\n" |
|
7869 | "\n" | |
7738 |
"EMAIL |
|
7870 | "EMAIL\n" | |
7739 | " May be used as the author of a commit; see HGUSER.\n" |
|
7871 | " May be used as the author of a commit; see HGUSER.\n" | |
7740 | "\n" |
|
7872 | "\n" | |
7741 |
"LOGNAME |
|
7873 | "LOGNAME\n" | |
7742 | " May be used as the author of a commit; see HGUSER.\n" |
|
7874 | " May be used as the author of a commit; see HGUSER.\n" | |
7743 | "\n" |
|
7875 | "\n" | |
7744 |
"VISUAL |
|
7876 | "VISUAL\n" | |
7745 | " This is the name of the editor to use when committing. See EDITOR.\n" |
|
7877 | " This is the name of the editor to use when committing. See EDITOR.\n" | |
7746 | "\n" |
|
7878 | "\n" | |
7747 |
"EDITOR |
|
7879 | "EDITOR\n" | |
7748 | " Sometimes Mercurial needs to open a text file in an editor for a\n" |
|
7880 | " Sometimes Mercurial needs to open a text file in an editor for a\n" | |
7749 | " user to modify, for example when writing commit messages. The\n" |
|
7881 | " user to modify, for example when writing commit messages. The\n" | |
7750 | " editor it uses is determined by looking at the environment\n" |
|
7882 | " editor it uses is determined by looking at the environment\n" | |
@@ -7752,7 +7884,7 b' msgid ""' | |||||
7752 | " non-empty one is chosen. If all of them are empty, the editor\n" |
|
7884 | " non-empty one is chosen. If all of them are empty, the editor\n" | |
7753 | " defaults to 'vi'.\n" |
|
7885 | " defaults to 'vi'.\n" | |
7754 | "\n" |
|
7886 | "\n" | |
7755 |
"PYTHONPATH |
|
7887 | "PYTHONPATH\n" | |
7756 | " This is used by Python to find imported modules and may need to be\n" |
|
7888 | " This is used by Python to find imported modules and may need to be\n" | |
7757 | " set appropriately if this Mercurial is not installed system-wide.\n" |
|
7889 | " set appropriately if this Mercurial is not installed system-wide.\n" | |
7758 | " " |
|
7890 | " " | |
@@ -7766,22 +7898,21 b' msgid ""' | |||||
7766 | " Mercurial supports several ways to specify individual revisions.\n" |
|
7898 | " Mercurial supports several ways to specify individual revisions.\n" | |
7767 | "\n" |
|
7899 | "\n" | |
7768 | " A plain integer is treated as a revision number. Negative integers\n" |
|
7900 | " A plain integer is treated as a revision number. Negative integers\n" | |
7769 |
" are treated as t |
|
7901 | " are treated as sequential offsets from the tip, with -1 denoting\n" | |
7770 | " the tip. As such, negative numbers are only useful if you've\n" |
|
7902 | " the tip, -2 denoting the revision prior to the tip, and so forth.\n" | |
7771 | " memorized your local tree numbers and want to save typing a single\n" |
|
|||
7772 | " digit. This editor suggests copy and paste.\n" |
|
|||
7773 | "\n" |
|
7903 | "\n" | |
7774 | " A 40-digit hexadecimal string is treated as a unique revision\n" |
|
7904 | " A 40-digit hexadecimal string is treated as a unique revision\n" | |
7775 | " identifier.\n" |
|
7905 | " identifier.\n" | |
7776 | "\n" |
|
7906 | "\n" | |
7777 | " A hexadecimal string less than 40 characters long is treated as a\n" |
|
7907 | " A hexadecimal string less than 40 characters long is treated as a\n" | |
7778 |
" unique revision identifier |
|
7908 | " unique revision identifier and is referred to as a short-form\n" | |
7779 | " identifier. A short-form identifier is only valid if it is the\n" |
|
7909 | " identifier. A short-form identifier is only valid if it is the\n" | |
7780 | " prefix of exactly one full-length identifier.\n" |
|
7910 | " prefix of exactly one full-length identifier.\n" | |
7781 | "\n" |
|
7911 | "\n" | |
7782 |
" Any other string is treated as a tag |
|
7912 | " Any other string is treated as a tag or branch name. A tag name is\n" | |
7783 |
" name associated with a revision identifier. |
|
7913 | " a symbolic name associated with a revision identifier. A branch\n" | |
7784 | " contain the \":\" character.\n" |
|
7914 | " name denotes the tipmost revision of that branch. Tag and branch\n" | |
|
7915 | " names must not contain the \":\" character.\n" | |||
7785 | "\n" |
|
7916 | "\n" | |
7786 | " The reserved name \"tip\" is a special tag that always identifies\n" |
|
7917 | " The reserved name \"tip\" is a special tag that always identifies\n" | |
7787 | " the most recent revision.\n" |
|
7918 | " the most recent revision.\n" | |
@@ -7832,10 +7963,10 b' msgid ""' | |||||
7832 | " While this standard format is often enough, it does not encode the\n" |
|
7963 | " While this standard format is often enough, it does not encode the\n" | |
7833 | " following information:\n" |
|
7964 | " following information:\n" | |
7834 | "\n" |
|
7965 | "\n" | |
7835 |
" |
|
7966 | " - executable status and other permission bits\n" | |
7836 |
" |
|
7967 | " - copy or rename information\n" | |
7837 |
" |
|
7968 | " - changes in binary files\n" | |
7838 |
" |
|
7969 | " - creation or deletion of empty files\n" | |
7839 | "\n" |
|
7970 | "\n" | |
7840 | " Mercurial also supports the extended diff format from the git VCS\n" |
|
7971 | " Mercurial also supports the extended diff format from the git VCS\n" | |
7841 | " which addresses these limitations. The git diff format is not\n" |
|
7972 | " which addresses these limitations. The git diff format is not\n" | |
@@ -7873,12 +8004,12 b' msgid ""' | |||||
7873 | "\n" |
|
8004 | "\n" | |
7874 | " Three styles are packaged with Mercurial: default (the style used\n" |
|
8005 | " Three styles are packaged with Mercurial: default (the style used\n" | |
7875 | " when no explicit preference is passed), compact and changelog.\n" |
|
8006 | " when no explicit preference is passed), compact and changelog.\n" | |
7876 | " Usage:\n" |
|
8007 | " Usage::\n" | |
7877 | "\n" |
|
8008 | "\n" | |
7878 | " $ hg log -r1 --style changelog\n" |
|
8009 | " $ hg log -r1 --style changelog\n" | |
7879 | "\n" |
|
8010 | "\n" | |
7880 | " A template is a piece of text, with markup to invoke variable\n" |
|
8011 | " A template is a piece of text, with markup to invoke variable\n" | |
7881 | " expansion:\n" |
|
8012 | " expansion::\n" | |
7882 | "\n" |
|
8013 | "\n" | |
7883 | " $ hg log -r1 --template \"{node}\\n\"\n" |
|
8014 | " $ hg log -r1 --template \"{node}\\n\"\n" | |
7884 | " b56ce7b07c52de7d5fd79fb89701ea538af65746\n" |
|
8015 | " b56ce7b07c52de7d5fd79fb89701ea538af65746\n" | |
@@ -7887,78 +8018,93 b' msgid ""' | |||||
7887 | " keywords depends on the exact context of the templater. These\n" |
|
8018 | " keywords depends on the exact context of the templater. These\n" | |
7888 | " keywords are usually available for templating a log-like command:\n" |
|
8019 | " keywords are usually available for templating a log-like command:\n" | |
7889 | "\n" |
|
8020 | "\n" | |
7890 |
" |
|
8021 | " :author: String. The unmodified author of the changeset.\n" | |
7891 |
" |
|
8022 | " :branches: String. The name of the branch on which the changeset\n" | |
7892 |
" was committed. Will be empty if the branch name was |
|
8023 | " was committed. Will be empty if the branch name was\n" | |
7893 | " - date: Date information. The date when the changeset was committed.\n" |
|
8024 | " default.\n" | |
7894 |
" |
|
8025 | " :date: Date information. The date when the changeset was\n" | |
7895 | " - diffstat: String. Statistics of changes with the following\n" |
|
8026 | " committed.\n" | |
7896 | " format: \"modified files: +added/-removed lines\"\n" |
|
8027 | " :desc: String. The text of the changeset description.\n" | |
7897 | " - files: List of strings. All files modified, added, or removed by\n" |
|
8028 | " :diffstat: String. Statistics of changes with the following\n" | |
7898 | " this changeset.\n" |
|
8029 | " format: \"modified files: +added/-removed lines\"\n" | |
7899 |
" |
|
8030 | " :files: List of strings. All files modified, added, or removed\n" | |
7900 |
" |
|
8031 | " by this changeset.\n" | |
7901 |
" |
|
8032 | " :file_adds: List of strings. Files added by this changeset.\n" | |
7902 | " - node: String. The changeset identification hash, as a\n" |
|
8033 | " :file_mods: List of strings. Files modified by this changeset.\n" | |
7903 | " 40-character hexadecimal string.\n" |
|
8034 | " :file_dels: List of strings. Files removed by this changeset.\n" | |
7904 | " - parents: List of strings. The parents of the changeset.\n" |
|
8035 | " :node: String. The changeset identification hash, as a\n" | |
7905 | " - rev: Integer. The repository-local changeset revision number.\n" |
|
8036 | " 40-character hexadecimal string.\n" | |
7906 |
" |
|
8037 | " :parents: List of strings. The parents of the changeset.\n" | |
|
8038 | " :rev: Integer. The repository-local changeset revision\n" | |||
|
8039 | " number.\n" | |||
|
8040 | " :tags: List of strings. Any tags associated with the\n" | |||
|
8041 | " changeset.\n" | |||
7907 | "\n" |
|
8042 | "\n" | |
7908 | " The \"date\" keyword does not produce human-readable output. If you\n" |
|
8043 | " The \"date\" keyword does not produce human-readable output. If you\n" | |
7909 | " want to use a date in your output, you can use a filter to process\n" |
|
8044 | " want to use a date in your output, you can use a filter to process\n" | |
7910 | " it. Filters are functions which return a string based on the input\n" |
|
8045 | " it. Filters are functions which return a string based on the input\n" | |
7911 | " variable. You can also use a chain of filters to get the desired\n" |
|
8046 | " variable. You can also use a chain of filters to get the desired\n" | |
7912 | " output:\n" |
|
8047 | " output::\n" | |
7913 | "\n" |
|
8048 | "\n" | |
7914 | " $ hg tip --template \"{date|isodate}\\n\"\n" |
|
8049 | " $ hg tip --template \"{date|isodate}\\n\"\n" | |
7915 | " 2008-08-21 18:22 +0000\n" |
|
8050 | " 2008-08-21 18:22 +0000\n" | |
7916 | "\n" |
|
8051 | "\n" | |
7917 | " List of filters:\n" |
|
8052 | " List of filters:\n" | |
7918 | "\n" |
|
8053 | "\n" | |
7919 |
" |
|
8054 | " :addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n" | |
7920 | " every line except the last.\n" |
|
8055 | " every line except the last.\n" | |
7921 |
" |
|
8056 | " :age: Date. Returns a human-readable date/time difference\n" | |
7922 |
" the given date/time and the current |
|
8057 | " between the given date/time and the current\n" | |
7923 | " - basename: Any text. Treats the text as a path, and returns the\n" |
|
8058 | " date/time.\n" | |
7924 | " last component of the path after splitting by the path\n" |
|
8059 | " :basename: Any text. Treats the text as a path, and returns the\n" | |
7925 | " separator (ignoring trailing separators). For example,\n" |
|
8060 | " last component of the path after splitting by the\n" | |
7926 | " \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar" |
|
8061 | " path separator (ignoring trailing separators). For\n" | |
7927 | "\".\n" |
|
8062 | " example, \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//" | |
7928 | " - stripdir: Treat the text as path and strip a directory level, if\n" |
|
8063 | "\"\n" | |
7929 | " possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n" |
|
8064 | " becomes \"bar\".\n" | |
7930 | " - date: Date. Returns a date in a Unix date format, including\n" |
|
8065 | " :stripdir: Treat the text as path and strip a directory level,\n" | |
7931 | " the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n" |
|
8066 | " if possible. For example, \"foo\" and \"foo/bar\" becomes\n" | |
7932 | " - domain: Any text. Finds the first string that looks like an\n" |
|
8067 | " \"foo\".\n" | |
7933 | " email address, and extracts just the domain component.\n" |
|
8068 | " :date: Date. Returns a date in a Unix date format, including\n" | |
7934 | " Example: 'User <user@example.com>' becomes 'example.com'.\n" |
|
8069 | " the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n" | |
7935 |
" |
|
8070 | " :domain: Any text. Finds the first string that looks like an\n" | |
7936 | " email address. Example: 'User <user@example.com>' becomes\n" |
|
8071 | " email address, and extracts just the domain\n" | |
7937 |
" 'user@example.com |
|
8072 | " component. Example: 'User <user@example.com>' becomes\n" | |
7938 | " - escape: Any text. Replaces the special XML/XHTML characters \"&\",\n" |
|
8073 | " 'example.com'.\n" | |
7939 | " \"<\" and \">\" with XML entities.\n" |
|
8074 | " :email: Any text. Extracts the first string that looks like\n" | |
7940 | " - fill68: Any text. Wraps the text to fit in 68 columns.\n" |
|
8075 | " an email address. Example: 'User <user@example.com>'\n" | |
7941 | " - fill76: Any text. Wraps the text to fit in 76 columns.\n" |
|
8076 | " becomes 'user@example.com'.\n" | |
7942 | " - firstline: Any text. Returns the first line of text.\n" |
|
8077 | " :escape: Any text. Replaces the special XML/XHTML characters\n" | |
7943 | " - nonempty: Any text. Returns '(none)' if the string is empty.\n" |
|
8078 | " \"&\", \"<\" and \">\" with XML entities.\n" | |
7944 | " - hgdate: Date. Returns the date as a pair of numbers:\n" |
|
8079 | " :fill68: Any text. Wraps the text to fit in 68 columns.\n" | |
7945 | " \"1157407993 25200\" (Unix timestamp, timezone offset).\n" |
|
8080 | " :fill76: Any text. Wraps the text to fit in 76 columns.\n" | |
7946 | " - isodate: Date. Returns the date in ISO 8601 format.\n" |
|
8081 | " :firstline: Any text. Returns the first line of text.\n" | |
7947 | " - localdate: Date. Converts a date to local date.\n" |
|
8082 | " :nonempty: Any text. Returns '(none)' if the string is empty.\n" | |
7948 | " - obfuscate: Any text. Returns the input text rendered as a\n" |
|
8083 | " :hgdate: Date. Returns the date as a pair of numbers:\n" | |
7949 | " sequence of XML entities.\n" |
|
8084 | " \"1157407993 25200\" (Unix timestamp, timezone offset).\n" | |
7950 | " - person: Any text. Returns the text before an email address.\n" |
|
8085 | " :isodate: Date. Returns the date in ISO 8601 format:\n" | |
7951 | " - rfc822date: Date. Returns a date using the same format used\n" |
|
8086 | " \"2009-08-18 13:00 +0200\".\n" | |
7952 | " in email headers.\n" |
|
8087 | " :isodatesec: Date. Returns the date in ISO 8601 format, including\n" | |
7953 | " - short: Changeset hash. Returns the short form of a changeset\n" |
|
8088 | " seconds: \"2009-08-18 13:00:13 +0200\". See also the\n" | |
7954 | " hash, i.e. a 12-byte hexadecimal string.\n" |
|
8089 | " rfc3339date filter.\n" | |
7955 | " - shortdate: Date. Returns a date like \"2006-09-18\".\n" |
|
8090 | " :localdate: Date. Converts a date to local date.\n" | |
7956 | " - strip: Any text. Strips all leading and trailing whitespace.\n" |
|
8091 | " :obfuscate: Any text. Returns the input text rendered as a\n" | |
7957 | " - tabindent: Any text. Returns the text, with every line except\n" |
|
8092 | " sequence of XML entities.\n" | |
7958 | " the first starting with a tab character.\n" |
|
8093 | " :person: Any text. Returns the text before an email address.\n" | |
7959 | " - urlescape: Any text. Escapes all \"special\" characters. For\n" |
|
8094 | " :rfc822date: Date. Returns a date using the same format used in\n" | |
7960 | " example, \"foo bar\" becomes \"foo%20bar\".\n" |
|
8095 | " email headers: \"Tue, 18 Aug 2009 13:00:13 +0200\".\n" | |
7961 | " - user: Any text. Returns the user portion of an email address.\n" |
|
8096 | " :rfc3339date: Date. Returns a date using the Internet date format\n" | |
|
8097 | " specified in RFC 3339: \"2009-08-18T13:00:13+02:00\".\n" | |||
|
8098 | " :short: Changeset hash. Returns the short form of a changeset\n" | |||
|
8099 | " hash, i.e. a 12-byte hexadecimal string.\n" | |||
|
8100 | " :shortdate: Date. Returns a date like \"2006-09-18\".\n" | |||
|
8101 | " :strip: Any text. Strips all leading and trailing whitespace.\n" | |||
|
8102 | " :tabindent: Any text. Returns the text, with every line except\n" | |||
|
8103 | " the first starting with a tab character.\n" | |||
|
8104 | " :urlescape: Any text. Escapes all \"special\" characters. For\n" | |||
|
8105 | " example, \"foo bar\" becomes \"foo%20bar\".\n" | |||
|
8106 | " :user: Any text. Returns the user portion of an email\n" | |||
|
8107 | " address.\n" | |||
7962 | " " |
|
8108 | " " | |
7963 | msgstr "" |
|
8109 | msgstr "" | |
7964 |
|
8110 | |||
@@ -7967,7 +8113,7 b' msgstr "URL-stier"' | |||||
7967 |
|
8113 | |||
7968 | msgid "" |
|
8114 | msgid "" | |
7969 | "\n" |
|
8115 | "\n" | |
7970 | " Valid URLs are of the form:\n" |
|
8116 | " Valid URLs are of the form::\n" | |
7971 | "\n" |
|
8117 | "\n" | |
7972 | " local/filesystem/path[#revision]\n" |
|
8118 | " local/filesystem/path[#revision]\n" | |
7973 | " file://local/filesystem/path[#revision]\n" |
|
8119 | " file://local/filesystem/path[#revision]\n" | |
@@ -7976,8 +8122,8 b' msgid ""' | |||||
7976 | " ssh://[user[:pass]@]host[:port]/[path][#revision]\n" |
|
8122 | " ssh://[user[:pass]@]host[:port]/[path][#revision]\n" | |
7977 | "\n" |
|
8123 | "\n" | |
7978 | " Paths in the local filesystem can either point to Mercurial\n" |
|
8124 | " Paths in the local filesystem can either point to Mercurial\n" | |
7979 | " repositories or to bundle files (as created by 'hg bundle' or\n" |
|
8125 | " repositories or to bundle files (as created by 'hg bundle' or 'hg\n" | |
7980 |
" |
|
8126 | " incoming --bundle').\n" | |
7981 | "\n" |
|
8127 | "\n" | |
7982 | " An optional identifier after # indicates a particular branch, tag,\n" |
|
8128 | " An optional identifier after # indicates a particular branch, tag,\n" | |
7983 | " or changeset to use from the remote repository. See also 'hg help\n" |
|
8129 | " or changeset to use from the remote repository. See also 'hg help\n" | |
@@ -7988,28 +8134,34 b' msgid ""' | |||||
7988 | " Mercurial server.\n" |
|
8134 | " Mercurial server.\n" | |
7989 | "\n" |
|
8135 | "\n" | |
7990 | " Some notes about using SSH with Mercurial:\n" |
|
8136 | " Some notes about using SSH with Mercurial:\n" | |
|
8137 | "\n" | |||
7991 | " - SSH requires an accessible shell account on the destination\n" |
|
8138 | " - SSH requires an accessible shell account on the destination\n" | |
7992 | " machine and a copy of hg in the remote path or specified with as\n" |
|
8139 | " machine and a copy of hg in the remote path or specified with as\n" | |
7993 | " remotecmd.\n" |
|
8140 | " remotecmd.\n" | |
7994 | " - path is relative to the remote user's home directory by default.\n" |
|
8141 | " - path is relative to the remote user's home directory by default.\n" | |
7995 |
" Use an extra slash at the start of a path to specify an absolute |
|
8142 | " Use an extra slash at the start of a path to specify an absolute\n" | |
7996 | "path:\n" |
|
8143 | " path::\n" | |
|
8144 | "\n" | |||
7997 | " ssh://example.com//tmp/repository\n" |
|
8145 | " ssh://example.com//tmp/repository\n" | |
|
8146 | "\n" | |||
7998 | " - Mercurial doesn't use its own compression via SSH; the right\n" |
|
8147 | " - Mercurial doesn't use its own compression via SSH; the right\n" | |
7999 | " thing to do is to configure it in your ~/.ssh/config, e.g.:\n" |
|
8148 | " thing to do is to configure it in your ~/.ssh/config, e.g.::\n" | |
|
8149 | "\n" | |||
8000 | " Host *.mylocalnetwork.example.com\n" |
|
8150 | " Host *.mylocalnetwork.example.com\n" | |
8001 | " Compression no\n" |
|
8151 | " Compression no\n" | |
8002 | " Host *\n" |
|
8152 | " Host *\n" | |
8003 | " Compression yes\n" |
|
8153 | " Compression yes\n" | |
|
8154 | "\n" | |||
8004 | " Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n" |
|
8155 | " Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n" | |
8005 | " or with the --ssh command line option.\n" |
|
8156 | " or with the --ssh command line option.\n" | |
8006 | "\n" |
|
8157 | "\n" | |
8007 | " These URLs can all be stored in your hgrc with path aliases under\n" |
|
8158 | " These URLs can all be stored in your hgrc with path aliases under\n" | |
8008 | " the [paths] section like so:\n" |
|
8159 | " the [paths] section like so::\n" | |
8009 | " [paths]\n" |
|
8160 | "\n" | |
8010 | " alias1 = URL1\n" |
|
8161 | " [paths]\n" | |
8011 |
" |
|
8162 | " alias1 = URL1\n" | |
8012 | " ...\n" |
|
8163 | " alias2 = URL2\n" | |
|
8164 | " ...\n" | |||
8013 | "\n" |
|
8165 | "\n" | |
8014 | " You can then use the alias for any command that uses a URL (for\n" |
|
8166 | " You can then use the alias for any command that uses a URL (for\n" | |
8015 | " example 'hg pull alias1' would pull from the 'alias1' path).\n" |
|
8167 | " example 'hg pull alias1' would pull from the 'alias1' path).\n" | |
@@ -8232,8 +8384,8 b' msgid "cannot create new http repository' | |||||
8232 | msgstr "kan ikke lave nyt http depot" |
|
8384 | msgstr "kan ikke lave nyt http depot" | |
8233 |
|
8385 | |||
8234 | #, python-format |
|
8386 | #, python-format | |
8235 |
msgid " |
|
8387 | msgid "ignoring invalid syntax '%s'" | |
8236 |
msgstr " |
|
8388 | msgstr "ignorerer ugyldig syntaks '%s'" | |
8237 |
|
8389 | |||
8238 | #, python-format |
|
8390 | #, python-format | |
8239 | msgid "skipping unreadable ignore file '%s': %s\n" |
|
8391 | msgid "skipping unreadable ignore file '%s': %s\n" | |
@@ -8263,17 +8415,6 b' msgid "working copy of .hgtags is change' | |||||
8263 | msgstr "arbejdskopien af .hgtags er ændret (deponer venligst .hgtags manuelt)" |
|
8415 | msgstr "arbejdskopien af .hgtags er ændret (deponer venligst .hgtags manuelt)" | |
8264 |
|
8416 | |||
8265 | #, python-format |
|
8417 | #, python-format | |
8266 | msgid "%s, line %s: %s\n" |
|
|||
8267 | msgstr "%s, linie %s: %s\n" |
|
|||
8268 |
|
||||
8269 | msgid "cannot parse entry" |
|
|||
8270 | msgstr "" |
|
|||
8271 |
|
||||
8272 | #, python-format |
|
|||
8273 | msgid "node '%s' is not well formed" |
|
|||
8274 | msgstr "knude '%s' er ikke korrekt formet" |
|
|||
8275 |
|
||||
8276 | #, python-format |
|
|||
8277 | msgid "working directory has unknown parent '%s'!" |
|
8418 | msgid "working directory has unknown parent '%s'!" | |
8278 | msgstr "arbejdsbiblioteket har ukendt forældre '%s'!" |
|
8419 | msgstr "arbejdsbiblioteket har ukendt forældre '%s'!" | |
8279 |
|
8420 | |||
@@ -8633,9 +8774,6 b' msgstr ""' | |||||
8633 | msgid "&Delete" |
|
8774 | msgid "&Delete" | |
8634 | msgstr "" |
|
8775 | msgstr "" | |
8635 |
|
8776 | |||
8636 | msgid "c" |
|
|||
8637 | msgstr "" |
|
|||
8638 |
|
||||
8639 | #, python-format |
|
8777 | #, python-format | |
8640 | msgid "" |
|
8778 | msgid "" | |
8641 | "remote changed %s which local deleted\n" |
|
8779 | "remote changed %s which local deleted\n" | |
@@ -8781,6 +8919,10 b' msgid "no valid hunks found; trying with' | |||||
8781 | msgstr "" |
|
8919 | msgstr "" | |
8782 |
|
8920 | |||
8783 | #, python-format |
|
8921 | #, python-format | |
|
8922 | msgid " %d files changed, %d insertions(+), %d deletions(-)\n" | |||
|
8923 | msgstr "%d filer ændret, %d indsættelser(+), %d sletninger(-)\n" | |||
|
8924 | ||||
|
8925 | #, python-format | |||
8784 | msgid "exited with status %d" |
|
8926 | msgid "exited with status %d" | |
8785 | msgstr "afsluttede med status %d" |
|
8927 | msgstr "afsluttede med status %d" | |
8786 |
|
8928 | |||
@@ -8909,9 +9051,6 b' msgstr ""' | |||||
8909 | msgid "&Remote" |
|
9051 | msgid "&Remote" | |
8910 | msgstr "" |
|
9052 | msgstr "" | |
8911 |
|
9053 | |||
8912 | msgid "r" |
|
|||
8913 | msgstr "" |
|
|||
8914 |
|
||||
8915 | #, python-format |
|
9054 | #, python-format | |
8916 | msgid "" |
|
9055 | msgid "" | |
8917 | " local changed subrepository %s which remote removed\n" |
|
9056 | " local changed subrepository %s which remote removed\n" | |
@@ -8936,6 +9075,17 b' msgstr "hiver fra underdepot %s\\n"' | |||||
8936 | msgid "pushing subrepo %s\n" |
|
9075 | msgid "pushing subrepo %s\n" | |
8937 | msgstr "skubber til underdepot %s\n" |
|
9076 | msgstr "skubber til underdepot %s\n" | |
8938 |
|
9077 | |||
|
9078 | #, python-format | |||
|
9079 | msgid "%s, line %s: %s\n" | |||
|
9080 | msgstr "%s, linie %s: %s\n" | |||
|
9081 | ||||
|
9082 | msgid "cannot parse entry" | |||
|
9083 | msgstr "" | |||
|
9084 | ||||
|
9085 | #, python-format | |||
|
9086 | msgid "node '%s' is not well formed" | |||
|
9087 | msgstr "knude '%s' er ikke korrekt formet" | |||
|
9088 | ||||
8939 | msgid "unmatched quotes" |
|
9089 | msgid "unmatched quotes" | |
8940 | msgstr "" |
|
9090 | msgstr "" | |
8941 |
|
9091 | |||
@@ -9001,12 +9151,12 b' msgstr "Angiv venligst et brugernavn."' | |||||
9001 | msgid "username %s contains a newline\n" |
|
9151 | msgid "username %s contains a newline\n" | |
9002 | msgstr "brugernavn %s indeholder et linieskift\n" |
|
9152 | msgstr "brugernavn %s indeholder et linieskift\n" | |
9003 |
|
9153 | |||
|
9154 | msgid "response expected" | |||
|
9155 | msgstr "svar forventet" | |||
|
9156 | ||||
9004 | msgid "unrecognized response\n" |
|
9157 | msgid "unrecognized response\n" | |
9005 | msgstr "svar ikke genkendt\n" |
|
9158 | msgstr "svar ikke genkendt\n" | |
9006 |
|
9159 | |||
9007 | msgid "response expected" |
|
|||
9008 | msgstr "svar forventet" |
|
|||
9009 |
|
||||
9010 | msgid "password: " |
|
9160 | msgid "password: " | |
9011 | msgstr "kodeord: " |
|
9161 | msgstr "kodeord: " | |
9012 |
|
9162 |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
@@ -112,6 +112,11 b' def docstrings(path):' | |||||
112 | print poentry(path, lineno, func.__doc__) |
|
112 | print poentry(path, lineno, func.__doc__) | |
113 |
|
113 | |||
114 |
|
114 | |||
|
115 | def rawtext(path): | |||
|
116 | src = open(path).read() | |||
|
117 | print poentry(path, 1, src) | |||
|
118 | ||||
|
119 | ||||
115 | if __name__ == "__main__": |
|
120 | if __name__ == "__main__": | |
116 | # It is very important that we import the Mercurial modules from |
|
121 | # It is very important that we import the Mercurial modules from | |
117 | # the source tree where hggettext is executed. Otherwise we might |
|
122 | # the source tree where hggettext is executed. Otherwise we might | |
@@ -120,4 +125,7 b' if __name__ == "__main__":' | |||||
120 | sys.path.insert(0, os.getcwd()) |
|
125 | sys.path.insert(0, os.getcwd()) | |
121 | from mercurial import demandimport; demandimport.enable() |
|
126 | from mercurial import demandimport; demandimport.enable() | |
122 | for path in sys.argv[1:]: |
|
127 | for path in sys.argv[1:]: | |
123 | docstrings(path) |
|
128 | if path.endswith('.txt'): | |
|
129 | rawtext(path) | |||
|
130 | else: | |||
|
131 | docstrings(path) |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
The requested commit or file is too big and content was truncated. Show full diff |
General Comments 0
You need to be logged in to leave comments.
Login now