##// END OF EJS Templates
Merge with stable
Matt Mackall -
r7803:6d99ff7b merge default
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,51 b''
1 # An example WSGI (use with mod_wsgi) script to export multiple hgweb repos
2
3 # adjust python path if not a system-wide install:
4 #import sys
5 #sys.path.insert(0, "/path/to/python/lib")
6
7 # enable demandloading to reduce startup time
8 from mercurial import demandimport; demandimport.enable()
9 from mercurial.hgweb.hgwebdir_mod import hgwebdir
10
11 # If you'd like to serve pages with UTF-8 instead of your default
12 # locale charset, you can do so by uncommenting the following lines.
13 # Note that this will cause your .hgrc files to be interpreted in
14 # UTF-8 and all your repo files to be displayed using UTF-8.
15 #
16 #import os
17 #os.environ["HGENCODING"] = "UTF-8"
18
19 # The config file looks like this. You can have paths to individual
20 # repos, collections of repos in a directory tree, or both.
21 #
22 # [paths]
23 # virtual/path1 = /real/path1
24 # virtual/path2 = /real/path2
25 # virtual/root = /real/root/*
26 # / = /real/root2/*
27 #
28 # paths example:
29 #
30 # * First two lines mount one repository into one virtual path, like
31 # '/real/path1' into 'virtual/path1'.
32 #
33 # * The third entry tells every mercurial repository found in
34 # '/real/root', recursively, should be mounted in 'virtual/root'. This
35 # format is preferred over the [collections] one, using absolute paths
36 # as configuration keys is not supported on every platform (including
37 # Windows).
38 #
39 # * The last entry is a special case mounting all repositories in
40 # '/real/root2' in the root of the virtual directory.
41 #
42 # collections example: say directory tree /foo contains repos /foo/bar,
43 # /foo/quux/baz. Give this config section:
44 # [collections]
45 # /foo = /foo
46 # Then repos will list as bar and quux/baz.
47 #
48 # Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
49 # or use a dictionary with entries like 'virtual/path': '/real/path'
50
51 application = hgwebdir('hgweb.config')
This diff has been collapsed as it changes many lines, (8827 lines changed) Show them Hide them
@@ -0,0 +1,8827 b''
1 # Danish translations for Mercurial
2 # Danske oversættelser for Mercurial
3 # Copyright (C) 2009 Matt Mackall and others
4 #
5 # Translation dictionary:
6 #
7 # changeset ændring
8 # merge sammenføje
9 # patch rettelse
10 # repo(sitory) arkiv
11 # revision revision
12 # tag mærkat
13 #
14 msgid ""
15 msgstr ""
16 "Project-Id-Version: Mercurial\n"
17 "Report-Msgid-Bugs-To: \n"
18 "POT-Creation-Date: 2009-02-22 22:02+0100\n"
19 "PO-Revision-Date: 2009-02-22 22:05+0100\n"
20 "Last-Translator: <mg@daimi.au.dk>\n"
21 "Language-Team: Danish\n"
22 "MIME-Version: 1.0\n"
23 "Content-Type: text/plain; charset=UTF-8\n"
24 "Content-Transfer-Encoding: 8bit\n"
25 "Generated-By: pygettext.py 1.5\n"
26 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
27
28 #, python-format
29 msgid " (default: %s)"
30 msgstr " (standard: %s)"
31
32 msgid "OPTIONS"
33 msgstr ""
34
35 msgid "COMMANDS"
36 msgstr "KOMMANDOER"
37
38 msgid " options:\n"
39 msgstr ""
40
41 #, python-format
42 msgid ""
43 " aliases: %s\n"
44 "\n"
45 msgstr ""
46 " aliaser %s:\n"
47 "\n"
48
49 msgid "return tuple of (match function, list enabled)."
50 msgstr ""
51
52 #, python-format
53 msgid "acl: %s not enabled\n"
54 msgstr "acl: %s er ikke slået til\n"
55
56 #, python-format
57 msgid "acl: %s enabled, %d entries for user %s\n"
58 msgstr "acl: %s slået til, %d indgange for bruger %s\n"
59
60 #, python-format
61 msgid "config error - hook type \"%s\" cannot stop incoming changesets"
62 msgstr ""
63 "konfigurationsfejl - hook type \"%s\" kan ikke stoppe indgående ændringer"
64
65 #, python-format
66 msgid "acl: changes have source \"%s\" - skipping\n"
67 msgstr "acl: ændringer har kilde \"%s\" - springer over\n"
68
69 #, python-format
70 msgid "acl: user %s denied on %s\n"
71 msgstr "acl: bruger %s nægtet adgang til %s\n"
72
73 #, python-format
74 msgid "acl: access denied for changeset %s"
75 msgstr "acl: adgang nægtet til ændring %s"
76
77 #, python-format
78 msgid "acl: user %s not allowed on %s\n"
79 msgstr "acl: bruger %s ikke tilladt på %s\n"
80
81 #, python-format
82 msgid "acl: allowing changeset %s\n"
83 msgstr "acl: tillader ændring %s\n"
84
85 msgid ""
86 "allow user-defined command aliases\n"
87 "\n"
88 "To use, create entries in your hgrc of the form\n"
89 "\n"
90 "[alias]\n"
91 "mycmd = cmd --args\n"
92 msgstr ""
93
94 msgid ""
95 "defer command lookup until needed, so that extensions loaded\n"
96 " after alias can be aliased"
97 msgstr ""
98
99 #, python-format
100 msgid "*** [alias] %s: command %s is unknown"
101 msgstr ""
102
103 #, python-format
104 msgid "*** [alias] %s: command %s is ambiguous"
105 msgstr ""
106
107 #, python-format
108 msgid "*** [alias] %s: circular dependency on %s"
109 msgstr ""
110
111 #, python-format
112 msgid "*** [alias] %s: no definition\n"
113 msgstr ""
114
115 msgid ""
116 "mercurial bookmarks\n"
117 "\n"
118 "Mercurial bookmarks are local moveable pointers to changesets. Every\n"
119 "bookmark points to a changeset identified by its hash. If you commit a\n"
120 "changeset that is based on a changeset that has a bookmark on it, the\n"
121 "bookmark is forwarded to the new changeset.\n"
122 "\n"
123 "It is possible to use bookmark names in every revision lookup (e.g. hg\n"
124 "merge, hg update).\n"
125 "\n"
126 "The bookmark extension offers the possiblity to have a more git-like "
127 "experience\n"
128 "by adding the following configuration option to your .hgrc:\n"
129 "\n"
130 "[bookmarks]\n"
131 "track.current = True\n"
132 "\n"
133 "This will cause bookmarks to track the bookmark that you are currently on, "
134 "and\n"
135 "just updates it. This is similar to git's approach of branching.\n"
136 msgstr ""
137
138 msgid ""
139 "Parse .hg/bookmarks file and return a dictionary\n"
140 "\n"
141 " Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values\n"
142 " in the .hg/bookmarks file. They are read by the parse() method and\n"
143 " returned as a dictionary with name => hash values.\n"
144 "\n"
145 " The parsed dictionary is cached until a write() operation is done.\n"
146 " "
147 msgstr ""
148
149 msgid ""
150 "Write bookmarks\n"
151 "\n"
152 " Write the given bookmark => hash dictionary to the .hg/bookmarks file\n"
153 " in a format equal to those of localtags.\n"
154 "\n"
155 " We also store a backup of the previous state in undo.bookmarks that\n"
156 " can be copied back on rollback.\n"
157 " "
158 msgstr ""
159
160 msgid ""
161 "Get the current bookmark\n"
162 "\n"
163 " If we use gittishsh branches we have a current bookmark that\n"
164 " we are on. This function returns the name of the bookmark. It\n"
165 " is stored in .hg/bookmarks.current\n"
166 " "
167 msgstr ""
168
169 msgid ""
170 "Set the name of the bookmark that we are currently on\n"
171 "\n"
172 " Set the name of the bookmark that we are on (hg update <bookmark>).\n"
173 " The name is recoreded in .hg/bookmarks.current\n"
174 " "
175 msgstr ""
176
177 msgid ""
178 "mercurial bookmarks\n"
179 "\n"
180 " Bookmarks are pointers to certain commits that move when\n"
181 " commiting. Bookmarks are local. They can be renamed, copied and\n"
182 " deleted. It is possible to use bookmark names in 'hg merge' and 'hg\n"
183 " update' to update to a given bookmark.\n"
184 "\n"
185 " You can use 'hg bookmark NAME' to set a bookmark on the current\n"
186 " tip with the given name. If you specify a revision using -r REV\n"
187 " (where REV may be an existing bookmark), the bookmark is set to\n"
188 " that revision.\n"
189 " "
190 msgstr ""
191
192 msgid "a bookmark of this name does not exist"
193 msgstr ""
194
195 msgid "a bookmark of the same name already exists"
196 msgstr ""
197
198 msgid "new bookmark name required"
199 msgstr ""
200
201 msgid "bookmark name required"
202 msgstr ""
203
204 msgid "bookmark name cannot contain newlines"
205 msgstr "bogmærkenavn kan ikke indeholde linieskift"
206
207 msgid "a bookmark cannot have the name of an existing branch"
208 msgstr ""
209
210 msgid ""
211 "Strip bookmarks if revisions are stripped using\n"
212 " the mercurial.strip method. This usually happens during\n"
213 " qpush and qpop"
214 msgstr ""
215
216 msgid ""
217 "Add a revision to the repository and\n"
218 " move the bookmark"
219 msgstr ""
220
221 msgid "Merge bookmarks with normal tags"
222 msgstr ""
223
224 msgid ""
225 "Set the current bookmark\n"
226 "\n"
227 " If the user updates to a bookmark we update the .hg/bookmarks.current\n"
228 " file.\n"
229 " "
230 msgstr ""
231
232 msgid "force"
233 msgstr ""
234
235 msgid "revision"
236 msgstr ""
237
238 msgid "delete a given bookmark"
239 msgstr ""
240
241 msgid "rename a given bookmark"
242 msgstr ""
243
244 msgid "hg bookmarks [-d] [-m NAME] [-r NAME] [NAME]"
245 msgstr ""
246
247 msgid ""
248 "Bugzilla integration\n"
249 "\n"
250 "This hook extension adds comments on bugs in Bugzilla when changesets\n"
251 "that refer to bugs by Bugzilla ID are seen. The hook does not change bug\n"
252 "status.\n"
253 "\n"
254 "The hook updates the Bugzilla database directly. Only Bugzilla "
255 "installations\n"
256 "using MySQL are supported.\n"
257 "\n"
258 "The hook relies on a Bugzilla script to send bug change notification "
259 "emails.\n"
260 "That script changes between Bugzilla versions; the 'processmail' script "
261 "used\n"
262 "prior to 2.18 is replaced in 2.18 and subsequent versions by\n"
263 "'config/sendbugmail.pl'. Note that these will be run by Mercurial as the "
264 "user\n"
265 "pushing the change; you will need to ensure the Bugzilla install file\n"
266 "permissions are set appropriately.\n"
267 "\n"
268 "Configuring the extension:\n"
269 "\n"
270 " [bugzilla]\n"
271 " host Hostname of the MySQL server holding the Bugzilla database.\n"
272 " db Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
273 " user Username to use to access MySQL server. Default 'bugs'.\n"
274 " password Password to use to access MySQL server.\n"
275 " timeout Database connection timeout (seconds). Default 5.\n"
276 " version Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 "
277 "and\n"
278 " later, '2.18' for Bugzilla versions from 2.18 and '2.16' for\n"
279 " versions prior to 2.18.\n"
280 " bzuser Fallback Bugzilla user name to record comments with, if\n"
281 " changeset committer cannot be found as a Bugzilla user.\n"
282 " bzdir Bugzilla install directory. Used by default notify.\n"
283 " Default '/var/www/html/bugzilla'.\n"
284 " notify The command to run to get Bugzilla to send bug change\n"
285 " notification emails. Substitutes from a map with 3 keys,\n"
286 " 'bzdir', 'id' (bug id) and 'user' (committer bugzilla "
287 "email).\n"
288 " Default depends on version; from 2.18 it is\n"
289 " \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %"
290 "(user)s\".\n"
291 " regexp Regular expression to match bug IDs in changeset commit "
292 "message.\n"
293 " Must contain one \"()\" group. The default expression "
294 "matches\n"
295 " 'Bug 1234', 'Bug no. 1234', 'Bug number 1234',\n"
296 " 'Bugs 1234,5678', 'Bug 1234 and 5678' and variations "
297 "thereof.\n"
298 " Matching is case insensitive.\n"
299 " style The style file to use when formatting comments.\n"
300 " template Template to use when formatting comments. Overrides\n"
301 " style if specified. In addition to the usual Mercurial\n"
302 " keywords, the extension specifies:\n"
303 " {bug} The Bugzilla bug ID.\n"
304 " {root} The full pathname of the Mercurial "
305 "repository.\n"
306 " {webroot} Stripped pathname of the Mercurial "
307 "repository.\n"
308 " {hgweb} Base URL for browsing Mercurial "
309 "repositories.\n"
310 " Default 'changeset {node|short} in repo {root} refers '\n"
311 " 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
312 " strip The number of slashes to strip from the front of {root}\n"
313 " to produce {webroot}. Default 0.\n"
314 " usermap Path of file containing Mercurial committer ID to Bugzilla "
315 "user\n"
316 " ID mappings. If specified, the file should contain one "
317 "mapping\n"
318 " per line, \"committer\"=\"Bugzilla user\". See also the\n"
319 " [usermap] section.\n"
320 "\n"
321 " [usermap]\n"
322 " Any entries in this section specify mappings of Mercurial committer ID\n"
323 " to Bugzilla user ID. See also [bugzilla].usermap.\n"
324 " \"committer\"=\"Bugzilla user\"\n"
325 "\n"
326 " [web]\n"
327 " baseurl Base URL for browsing Mercurial repositories. Reference from\n"
328 " templates as {hgweb}.\n"
329 "\n"
330 "Activating the extension:\n"
331 "\n"
332 " [extensions]\n"
333 " hgext.bugzilla =\n"
334 "\n"
335 " [hooks]\n"
336 " # run bugzilla hook on every change pulled or pushed in here\n"
337 " incoming.bugzilla = python:hgext.bugzilla.hook\n"
338 "\n"
339 "Example configuration:\n"
340 "\n"
341 "This example configuration is for a collection of Mercurial repositories\n"
342 "in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in\n"
343 "/opt/bugzilla-3.2.\n"
344 "\n"
345 " [bugzilla]\n"
346 " host=localhost\n"
347 " password=XYZZY\n"
348 " version=3.0\n"
349 " bzuser=unknown@domain.com\n"
350 " bzdir=/opt/bugzilla-3.2\n"
351 " template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/"
352 "rev/{node|short}\\n\\n{desc}\\n\n"
353 " strip=5\n"
354 "\n"
355 " [web]\n"
356 " baseurl=http://dev.domain.com/hg\n"
357 "\n"
358 " [usermap]\n"
359 " user@emaildomain.com=user.name@bugzilladomain.com\n"
360 "\n"
361 "Commits add a comment to the Bugzilla bug record of the form:\n"
362 "\n"
363 " Changeset 3b16791d6642 in repository-name.\n"
364 " http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
365 "\n"
366 " Changeset commit comment. Bug 1234.\n"
367 msgstr ""
368
369 msgid "support for bugzilla version 2.16."
370 msgstr ""
371
372 #, python-format
373 msgid "connecting to %s:%s as %s, password %s\n"
374 msgstr "forbinder til %s:%s som %s, kodeord %s\n"
375
376 msgid "run a query."
377 msgstr ""
378
379 #, python-format
380 msgid "query: %s %s\n"
381 msgstr "forespørgsel: %s %s\n"
382
383 #, python-format
384 msgid "failed query: %s %s\n"
385 msgstr "fejlet forespørgsel: %s %s\n"
386
387 msgid "get identity of longdesc field"
388 msgstr ""
389
390 msgid "unknown database schema"
391 msgstr "ukendt databaseskema"
392
393 msgid "filter not-existing bug ids from list."
394 msgstr ""
395
396 msgid "filter bug ids from list that already refer to this changeset."
397 msgstr ""
398
399 #, python-format
400 msgid "bug %d already knows about changeset %s\n"
401 msgstr "fejl %d kender allerede til ændring %s\n"
402
403 msgid "tell bugzilla to send mail."
404 msgstr ""
405
406 msgid "telling bugzilla to send mail:\n"
407 msgstr "beder bugzilla om at sende mail:\n"
408
409 #, python-format
410 msgid " bug %s\n"
411 msgstr " fejl %s\n"
412
413 #, python-format
414 msgid "running notify command %s\n"
415 msgstr "kører notificeringskommando %s\n"
416
417 #, python-format
418 msgid "bugzilla notify command %s"
419 msgstr ""
420
421 msgid "done\n"
422 msgstr "færdig\n"
423
424 msgid "look up numeric bugzilla user id."
425 msgstr ""
426
427 #, python-format
428 msgid "looking up user %s\n"
429 msgstr "slår bruger %s op\n"
430
431 msgid "map name of committer to bugzilla user name."
432 msgstr ""
433
434 msgid ""
435 "see if committer is a registered bugzilla user. Return\n"
436 " bugzilla username and userid if so. If not, return default\n"
437 " bugzilla username and userid."
438 msgstr ""
439
440 #, python-format
441 msgid "cannot find bugzilla user id for %s"
442 msgstr ""
443
444 #, python-format
445 msgid "cannot find bugzilla user id for %s or %s"
446 msgstr ""
447
448 msgid ""
449 "add comment to bug. try adding comment as committer of\n"
450 " changeset, otherwise as default bugzilla user."
451 msgstr ""
452
453 msgid "support for bugzilla 2.18 series."
454 msgstr ""
455
456 msgid "support for bugzilla 3.0 series."
457 msgstr ""
458
459 msgid ""
460 "return object that knows how to talk to bugzilla version in\n"
461 " use."
462 msgstr ""
463
464 #, python-format
465 msgid "bugzilla version %s not supported"
466 msgstr ""
467
468 msgid ""
469 "find valid bug ids that are referred to in changeset\n"
470 " comments and that do not already have references to this\n"
471 " changeset."
472 msgstr ""
473
474 msgid "update bugzilla bug with reference to changeset."
475 msgstr ""
476
477 msgid ""
478 "strip leading prefix of repo root and turn into\n"
479 " url-safe path."
480 msgstr ""
481
482 msgid ""
483 "changeset {node|short} in repo {root} refers to bug {bug}.\n"
484 "details:\n"
485 "\t{desc|tabindent}"
486 msgstr ""
487
488 msgid ""
489 "add comment to bugzilla for each changeset that refers to a\n"
490 " bugzilla bug id. only add a comment once per bug, so same change\n"
491 " seen multiple times does not fill bug with duplicate data."
492 msgstr ""
493
494 #, python-format
495 msgid "python mysql support not available: %s"
496 msgstr ""
497
498 #, python-format
499 msgid "hook type %s does not pass a changeset id"
500 msgstr ""
501
502 #, python-format
503 msgid "database error: %s"
504 msgstr ""
505
506 msgid ""
507 "show the children of the given or working dir revision\n"
508 "\n"
509 " Print the children of the working directory's revisions.\n"
510 " If a revision is given via --rev, the children of that revision\n"
511 " will be printed. If a file argument is given, revision in\n"
512 " which the file was last changed (after the working directory\n"
513 " revision or the argument to --rev if given) is printed.\n"
514 " "
515 msgstr ""
516
517 msgid "show children of the specified rev"
518 msgstr ""
519
520 msgid "hg children [-r REV] [FILE]"
521 msgstr ""
522
523 msgid "command to show certain statistics about revision history"
524 msgstr ""
525
526 msgid "Calculate stats"
527 msgstr ""
528
529 #, python-format
530 msgid "Revision %d is a merge, ignoring...\n"
531 msgstr ""
532
533 #, python-format
534 msgid "\rgenerating stats: %d%%"
535 msgstr ""
536
537 msgid ""
538 "graph count of revisions grouped by template\n"
539 "\n"
540 " Will graph count of changed lines or revisions grouped by template or\n"
541 " alternatively by date, if dateformat is used. In this case it will "
542 "override\n"
543 " template.\n"
544 "\n"
545 " By default statistics are counted for number of changed lines.\n"
546 "\n"
547 " Examples:\n"
548 "\n"
549 " # display count of changed lines for every committer\n"
550 " hg churn -t '{author|email}'\n"
551 "\n"
552 " # display daily activity graph\n"
553 " hg churn -f '%H' -s -c\n"
554 "\n"
555 " # display activity of developers by month\n"
556 " hg churn -f '%Y-%m' -s -c\n"
557 "\n"
558 " # display count of lines changed in every year\n"
559 " hg churn -f '%Y' -s\n"
560 "\n"
561 " The map file format used to specify aliases is fairly simple:\n"
562 "\n"
563 " <alias email> <actual email>"
564 msgstr ""
565 "plot antallet af revisioner grupperet efter et mønster\n"
566 "\n"
567 " Plotter antallet af ændrede linier eller antallet af revisioner\n"
568 " grupperet efter et mønster eller alternativt efter dato, hvis\n"
569 " dateformat bruges. I så tilfælde bruges mønstret ikke.\n"
570 "\n"
571 " Som udgangspunkt laves der statistik over antallet af ændrede\n"
572 " linier.\n"
573 "\n"
574 " Eksempler:\n"
575 "\n"
576 " # viser antaller af ændrede linier for hver bruger\n"
577 " hg churn -t '{author|email}'\n"
578 "\n"
579 " # viser graf over daglig aktivitet\n"
580 " hg churn -f '%H' -s -c\n"
581 "\n"
582 " # viser månedlig aktivitet af udviklerne\n"
583 " hg churn -f '%Y-%m' -s -c\n"
584 "\n"
585 " # viser antallet af linier ændret hvert år\n"
586 " hg churn -f '%Y' -s\n"
587 "\n"
588 " Formatet for map-filen er rimelig simpelt:\n"
589 "\n"
590 " <alias email> <faktisk email>"
591
592 #, python-format
593 msgid "assuming %i character terminal\n"
594 msgstr ""
595
596 msgid "count rate for the specified revision or range"
597 msgstr "lav statistik for de specificerede revisioner"
598
599 msgid "count rate for revs matching date spec"
600 msgstr "lav statistik for revisioner som matcher dato specifikationen"
601
602 msgid "template to group changesets"
603 msgstr "mønster for gruppering af ændringer"
604
605 msgid "strftime-compatible format for grouping by date"
606 msgstr "strftime-kompatibelt format til gruppering efter dato"
607
608 msgid "count rate by number of changesets"
609 msgstr "lav statistik efter antallet af ændringer"
610
611 msgid "sort by key (default: sort by count)"
612 msgstr "sortér efter nøgle (standard: sortering efter antal)"
613
614 msgid "file with email aliases"
615 msgstr "fil med email-aliaser"
616
617 msgid "show progress"
618 msgstr "vis fremskridt"
619
620 msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
621 msgstr "hg churn [-d DATO] [-r REVISIONER] [--aliases FIL] [--progress] [FIL]"
622
623 msgid ""
624 "add color output to status, qseries, and diff-related commands\n"
625 "\n"
626 "This extension modifies the status command to add color to its output to\n"
627 "reflect file status, the qseries command to add color to reflect patch "
628 "status\n"
629 "(applied, unapplied, missing), and to diff-related commands to highlight\n"
630 "additions, removals, diff headers, and trailing whitespace.\n"
631 "\n"
632 "Other effects in addition to color, like bold and underlined text, are also\n"
633 "available. Effects are rendered with the ECMA-48 SGR control function (aka\n"
634 "ANSI escape codes). This module also provides the render_text function,\n"
635 "which can be used to add effects to any text.\n"
636 "\n"
637 "To enable this extension, add this to your .hgrc file:\n"
638 "[extensions]\n"
639 "color =\n"
640 "\n"
641 "Default effects my be overriden from the .hgrc file:\n"
642 "\n"
643 "[color]\n"
644 "status.modified = blue bold underline red_background\n"
645 "status.added = green bold\n"
646 "status.removed = red bold blue_background\n"
647 "status.deleted = cyan bold underline\n"
648 "status.unknown = magenta bold underline\n"
649 "status.ignored = black bold\n"
650 "\n"
651 "# 'none' turns off all effects\n"
652 "status.clean = none\n"
653 "status.copied = none\n"
654 "\n"
655 "qseries.applied = blue bold underline\n"
656 "qseries.unapplied = black bold\n"
657 "qseries.missing = red bold\n"
658 "\n"
659 "diff.diffline = bold\n"
660 "diff.extended = cyan bold\n"
661 "diff.file_a = red bold\n"
662 "diff.file_b = green bold\n"
663 "diff.hunk = magenta\n"
664 "diff.deleted = red\n"
665 "diff.inserted = green\n"
666 "diff.changed = white\n"
667 "diff.trailingwhitespace = bold red_background\n"
668 msgstr ""
669
670 msgid "Wrap text in commands to turn on each effect."
671 msgstr ""
672
673 msgid "run the status command with colored output"
674 msgstr ""
675
676 msgid "run the qseries command with colored output"
677 msgstr ""
678
679 msgid "wrap ui.write for colored diff output"
680 msgstr ""
681
682 msgid "wrap cmdutil.changeset_printer.showpatch with colored output"
683 msgstr ""
684
685 msgid "run the diff command with colored output"
686 msgstr ""
687
688 msgid "Initialize the extension."
689 msgstr ""
690
691 msgid "patch in command to command table and load effect map"
692 msgstr ""
693
694 msgid "when to colorize (always, auto, or never)"
695 msgstr ""
696
697 msgid "don't colorize output"
698 msgstr ""
699
700 msgid "converting foreign VCS repositories to Mercurial"
701 msgstr ""
702
703 msgid ""
704 "convert a foreign SCM repository to a Mercurial one.\n"
705 "\n"
706 " Accepted source formats [identifiers]:\n"
707 " - Mercurial [hg]\n"
708 " - CVS [cvs]\n"
709 " - Darcs [darcs]\n"
710 " - git [git]\n"
711 " - Subversion [svn]\n"
712 " - Monotone [mtn]\n"
713 " - GNU Arch [gnuarch]\n"
714 " - Bazaar [bzr]\n"
715 "\n"
716 " Accepted destination formats [identifiers]:\n"
717 " - Mercurial [hg]\n"
718 " - Subversion [svn] (history on branches is not preserved)\n"
719 "\n"
720 " If no revision is given, all revisions will be converted. Otherwise,\n"
721 " convert will only import up to the named revision (given in a format\n"
722 " understood by the source).\n"
723 "\n"
724 " If no destination directory name is specified, it defaults to the\n"
725 " basename of the source with '-hg' appended. If the destination\n"
726 " repository doesn't exist, it will be created.\n"
727 "\n"
728 " If <REVMAP> isn't given, it will be put in a default location\n"
729 " (<dest>/.hg/shamap by default). The <REVMAP> is a simple text\n"
730 " file that maps each source commit ID to the destination ID for\n"
731 " that revision, like so:\n"
732 " <source ID> <destination ID>\n"
733 "\n"
734 " If the file doesn't exist, it's automatically created. It's updated\n"
735 " on each commit copied, so convert-repo can be interrupted and can\n"
736 " be run repeatedly to copy new commits.\n"
737 "\n"
738 " The [username mapping] file is a simple text file that maps each source\n"
739 " commit author to a destination commit author. It is handy for source "
740 "SCMs\n"
741 " that use unix logins to identify authors (eg: CVS). One line per author\n"
742 " mapping and the line format is:\n"
743 " srcauthor=whatever string you want\n"
744 "\n"
745 " The filemap is a file that allows filtering and remapping of files\n"
746 " and directories. Comment lines start with '#'. Each line can\n"
747 " contain one of the following directives:\n"
748 "\n"
749 " include path/to/file\n"
750 "\n"
751 " exclude path/to/file\n"
752 "\n"
753 " rename from/file to/file\n"
754 "\n"
755 " The 'include' directive causes a file, or all files under a\n"
756 " directory, to be included in the destination repository, and the\n"
757 " exclusion of all other files and dirs not explicitely included.\n"
758 " The 'exclude' directive causes files or directories to be omitted.\n"
759 " The 'rename' directive renames a file or directory. To rename from a\n"
760 " subdirectory into the root of the repository, use '.' as the path to\n"
761 " rename to.\n"
762 "\n"
763 " The splicemap is a file that allows insertion of synthetic\n"
764 " history, letting you specify the parents of a revision. This is\n"
765 " useful if you want to e.g. give a Subversion merge two parents, or\n"
766 " graft two disconnected series of history together. Each entry\n"
767 " contains a key, followed by a space, followed by one or two\n"
768 " values, separated by spaces. The key is the revision ID in the\n"
769 " source revision control system whose parents should be modified\n"
770 " (same format as a key in .hg/shamap). The values are the revision\n"
771 " IDs (in either the source or destination revision control system)\n"
772 " that should be used as the new parents for that node.\n"
773 "\n"
774 " Mercurial Source\n"
775 " -----------------\n"
776 "\n"
777 " --config convert.hg.ignoreerrors=False (boolean)\n"
778 " ignore integrity errors when reading. Use it to fix Mercurial\n"
779 " repositories with missing revlogs, by converting from and to\n"
780 " Mercurial.\n"
781 " --config convert.hg.saverev=True (boolean)\n"
782 " allow target to preserve source revision ID\n"
783 " --config convert.hg.startrev=0 (hg revision identifier)\n"
784 " convert start revision and its descendants\n"
785 "\n"
786 " CVS Source\n"
787 " ----------\n"
788 "\n"
789 " CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n"
790 " to indicate the starting point of what will be converted. Direct\n"
791 " access to the repository files is not needed, unless of course\n"
792 " the repository is :local:. The conversion uses the top level\n"
793 " directory in the sandbox to find the CVS repository, and then uses\n"
794 " CVS rlog commands to find files to convert. This means that unless\n"
795 " a filemap is given, all files under the starting directory will be\n"
796 " converted, and that any directory reorganisation in the CVS\n"
797 " sandbox is ignored.\n"
798 "\n"
799 " Because CVS does not have changesets, it is necessary to collect\n"
800 " individual commits to CVS and merge them into changesets. CVS\n"
801 " source uses its internal changeset merging code by default but can\n"
802 " be configured to call the external 'cvsps' program by setting:\n"
803 " --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
804 " This is a legacy option and may be removed in future.\n"
805 "\n"
806 " The options shown are the defaults.\n"
807 "\n"
808 " Internal cvsps is selected by setting\n"
809 " --config convert.cvsps=builtin\n"
810 " and has a few more configurable options:\n"
811 " --config convert.cvsps.fuzz=60 (integer)\n"
812 " Specify the maximum time (in seconds) that is allowed between\n"
813 " commits with identical user and log message in a single\n"
814 " changeset. When very large files were checked in as part\n"
815 " of a changeset then the default may not be long enough.\n"
816 " --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
817 " Specify a regular expression to which commit log messages are\n"
818 " matched. If a match occurs, then the conversion process will\n"
819 " insert a dummy revision merging the branch on which this log\n"
820 " message occurs to the branch indicated in the regex.\n"
821 " --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
822 " Specify a regular expression to which commit log messages are\n"
823 " matched. If a match occurs, then the conversion process will\n"
824 " add the most recent revision on the branch indicated in the\n"
825 " regex as the second parent of the changeset.\n"
826 "\n"
827 " The hgext/convert/cvsps wrapper script allows the builtin changeset\n"
828 " merging code to be run without doing a conversion. Its parameters and\n"
829 " output are similar to that of cvsps 2.1.\n"
830 "\n"
831 " Subversion Source\n"
832 " -----------------\n"
833 "\n"
834 " Subversion source detects classical trunk/branches/tags layouts.\n"
835 " By default, the supplied \"svn://repo/path/\" source URL is\n"
836 " converted as a single branch. If \"svn://repo/path/trunk\" exists\n"
837 " it replaces the default branch. If \"svn://repo/path/branches\"\n"
838 " exists, its subdirectories are listed as possible branches. If\n"
839 " \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
840 " converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
841 " can be overriden with following options. Set them to paths\n"
842 " relative to the source URL, or leave them blank to disable\n"
843 " autodetection.\n"
844 "\n"
845 " --config convert.svn.branches=branches (directory name)\n"
846 " specify the directory containing branches\n"
847 " --config convert.svn.tags=tags (directory name)\n"
848 " specify the directory containing tags\n"
849 " --config convert.svn.trunk=trunk (directory name)\n"
850 " specify the name of the trunk branch\n"
851 "\n"
852 " Source history can be retrieved starting at a specific revision,\n"
853 " instead of being integrally converted. Only single branch\n"
854 " conversions are supported.\n"
855 "\n"
856 " --config convert.svn.startrev=0 (svn revision number)\n"
857 " specify start Subversion revision.\n"
858 "\n"
859 " Mercurial Destination\n"
860 " ---------------------\n"
861 "\n"
862 " --config convert.hg.clonebranches=False (boolean)\n"
863 " dispatch source branches in separate clones.\n"
864 " --config convert.hg.tagsbranch=default (branch name)\n"
865 " tag revisions branch name\n"
866 " --config convert.hg.usebranchnames=True (boolean)\n"
867 " preserve branch names\n"
868 "\n"
869 " "
870 msgstr ""
871
872 msgid ""
873 "create changeset information from CVS\n"
874 "\n"
875 " This command is intended as a debugging tool for the CVS to Mercurial\n"
876 " converter, and can be used as a direct replacement for cvsps.\n"
877 "\n"
878 " Hg debugcvsps reads the CVS rlog for current directory (or any named\n"
879 " directory) in the CVS repository, and converts the log to a series of\n"
880 " changesets based on matching commit log entries and dates."
881 msgstr ""
882
883 msgid "username mapping filename"
884 msgstr ""
885
886 msgid "destination repository type"
887 msgstr "type for destinations repository"
888
889 msgid "remap file names using contents of file"
890 msgstr ""
891
892 msgid "import up to target revision REV"
893 msgstr ""
894
895 msgid "source repository type"
896 msgstr ""
897
898 msgid "splice synthesized history into place"
899 msgstr ""
900
901 msgid "try to sort changesets by date"
902 msgstr ""
903
904 msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
905 msgstr ""
906
907 msgid "only return changes on specified branches"
908 msgstr ""
909
910 msgid "prefix to remove from file names"
911 msgstr ""
912
913 msgid "only return changes after or between specified tags"
914 msgstr ""
915
916 msgid "update cvs log cache"
917 msgstr ""
918
919 msgid "create new cvs log cache"
920 msgstr ""
921
922 msgid "set commit time fuzz in seconds"
923 msgstr ""
924
925 msgid "specify cvsroot"
926 msgstr ""
927
928 msgid "show parent changesets"
929 msgstr "vis forældre-ændring"
930
931 msgid "show current changeset in ancestor branches"
932 msgstr ""
933
934 msgid "ignored for compatibility"
935 msgstr ""
936
937 msgid "hg debugcvsps [OPTION]... [PATH]..."
938 msgstr ""
939
940 #, python-format
941 msgid "%s is not a valid revision in current branch"
942 msgstr ""
943
944 #, python-format
945 msgid "%s is not available in %s anymore"
946 msgstr ""
947
948 #, python-format
949 msgid "cannot find required \"%s\" tool"
950 msgstr ""
951
952 #, python-format
953 msgid "running: %s\n"
954 msgstr "kører: %s\n"
955
956 #, python-format
957 msgid "%s error:\n"
958 msgstr ""
959
960 #, python-format
961 msgid "%s %s"
962 msgstr ""
963
964 #, python-format
965 msgid "could not open map file %r: %s"
966 msgstr ""
967
968 #, python-format
969 msgid "%s: missing or unsupported repository"
970 msgstr ""
971
972 #, python-format
973 msgid "convert: %s\n"
974 msgstr ""
975
976 #, python-format
977 msgid "%s: unknown repository type"
978 msgstr "%s: ukendt arkivtype"
979
980 #, python-format
981 msgid "cycle detected between %s and %s"
982 msgstr ""
983
984 msgid "not all revisions were sorted"
985 msgstr ""
986
987 #, python-format
988 msgid "Writing author map file %s\n"
989 msgstr ""
990
991 #, python-format
992 msgid "Overriding mapping for author %s, was %s, will be %s\n"
993 msgstr ""
994
995 #, python-format
996 msgid "mapping author %s to %s\n"
997 msgstr ""
998
999 #, python-format
1000 msgid "Ignoring bad line in author map file %s: %s\n"
1001 msgstr ""
1002
1003 #, python-format
1004 msgid "spliced in %s as parents of %s\n"
1005 msgstr ""
1006
1007 msgid "scanning source...\n"
1008 msgstr ""
1009
1010 msgid "sorting...\n"
1011 msgstr ""
1012
1013 msgid "converting...\n"
1014 msgstr ""
1015
1016 #, python-format
1017 msgid "source: %s\n"
1018 msgstr ""
1019
1020 #, python-format
1021 msgid "assuming destination %s\n"
1022 msgstr ""
1023
1024 #, python-format
1025 msgid "revision %s is not a patchset number or date"
1026 msgstr ""
1027
1028 msgid "using builtin cvsps\n"
1029 msgstr ""
1030
1031 #, python-format
1032 msgid "connecting to %s\n"
1033 msgstr ""
1034
1035 msgid "CVS pserver authentication failed"
1036 msgstr "CVS pserver godkendelse fejlede"
1037
1038 msgid "server sucks"
1039 msgstr ""
1040
1041 #, python-format
1042 msgid "%d bytes missing from remote file"
1043 msgstr "%d byte mangler i fjernfilen"
1044
1045 #, python-format
1046 msgid "cvs server: %s\n"
1047 msgstr "cvs server: %s\n"
1048
1049 #, python-format
1050 msgid "unknown CVS response: %s"
1051 msgstr "ukendt CVS svar: %s"
1052
1053 msgid "collecting CVS rlog\n"
1054 msgstr "samler CVS rlog\n"
1055
1056 #, python-format
1057 msgid "reading cvs log cache %s\n"
1058 msgstr ""
1059
1060 #, python-format
1061 msgid "cache has %d log entries\n"
1062 msgstr ""
1063
1064 #, python-format
1065 msgid "error reading cache: %r\n"
1066 msgstr ""
1067
1068 #, python-format
1069 msgid "running %s\n"
1070 msgstr "kører %s\n"
1071
1072 #, python-format
1073 msgid "prefix=%r directory=%r root=%r\n"
1074 msgstr ""
1075
1076 msgid "RCS file must be followed by working file"
1077 msgstr ""
1078
1079 msgid "must have at least some revisions"
1080 msgstr ""
1081
1082 msgid "expected revision number"
1083 msgstr ""
1084
1085 msgid "revision must be followed by date line"
1086 msgstr ""
1087
1088 #, python-format
1089 msgid "writing cvs log cache %s\n"
1090 msgstr ""
1091
1092 #, python-format
1093 msgid "%d log entries\n"
1094 msgstr ""
1095
1096 msgid "creating changesets\n"
1097 msgstr "opretter ændringer\n"
1098
1099 #, python-format
1100 msgid "%d changeset entries\n"
1101 msgstr "%d ændringer\n"
1102
1103 msgid "Python ElementTree module is not available"
1104 msgstr ""
1105
1106 #, python-format
1107 msgid "cleaning up %s\n"
1108 msgstr "rydder op %s\n"
1109
1110 msgid "internal calling inconsistency"
1111 msgstr ""
1112
1113 msgid "errors in filemap"
1114 msgstr ""
1115
1116 #, python-format
1117 msgid "%s:%d: %r already in %s list\n"
1118 msgstr ""
1119
1120 #, python-format
1121 msgid "%s:%d: unknown directive %r\n"
1122 msgstr ""
1123
1124 msgid "source repository doesn't support --filemap"
1125 msgstr ""
1126
1127 #, python-format
1128 msgid "%s does not look like a GNU Arch repo"
1129 msgstr ""
1130
1131 msgid "cannot find a GNU Arch tool"
1132 msgstr ""
1133
1134 #, python-format
1135 msgid "analyzing tree version %s...\n"
1136 msgstr ""
1137
1138 #, python-format
1139 msgid ""
1140 "tree analysis stopped because it points to an unregistered archive %s...\n"
1141 msgstr ""
1142
1143 #, python-format
1144 msgid "applying revision %s...\n"
1145 msgstr ""
1146
1147 #, python-format
1148 msgid "computing changeset between %s and %s...\n"
1149 msgstr "beregner ændringer mellem %s og %s...\n"
1150
1151 #, python-format
1152 msgid "obtaining revision %s...\n"
1153 msgstr "henter revision %s...\n"
1154
1155 #, python-format
1156 msgid "analysing revision %s...\n"
1157 msgstr "analyserer revision %s...\n"
1158
1159 #, python-format
1160 msgid "could not parse cat-log of %s"
1161 msgstr ""
1162
1163 #, python-format
1164 msgid "%s is not a local Mercurial repo"
1165 msgstr ""
1166
1167 #, python-format
1168 msgid "initializing destination %s repository\n"
1169 msgstr ""
1170
1171 msgid "run hg sink pre-conversion action\n"
1172 msgstr ""
1173
1174 msgid "run hg sink post-conversion action\n"
1175 msgstr ""
1176
1177 #, python-format
1178 msgid "pulling from %s into %s\n"
1179 msgstr ""
1180
1181 msgid "updating tags\n"
1182 msgstr ""
1183
1184 #, python-format
1185 msgid "%s is not a valid start revision"
1186 msgstr ""
1187
1188 #, python-format
1189 msgid "ignoring: %s\n"
1190 msgstr "ignorerer: %s\n"
1191
1192 msgid "run hg source pre-conversion action\n"
1193 msgstr ""
1194
1195 msgid "run hg source post-conversion action\n"
1196 msgstr ""
1197
1198 #, python-format
1199 msgid "%s does not look like a monotone repo"
1200 msgstr ""
1201
1202 #, python-format
1203 msgid "copying file in renamed dir from '%s' to '%s'"
1204 msgstr ""
1205
1206 msgid "Subversion python bindings could not be loaded"
1207 msgstr ""
1208
1209 #, python-format
1210 msgid "Subversion python bindings %d.%d found, 1.4 or later required"
1211 msgstr ""
1212
1213 msgid "Subversion python bindings are too old, 1.4 or later required"
1214 msgstr ""
1215
1216 #, python-format
1217 msgid "svn: revision %s is not an integer"
1218 msgstr ""
1219
1220 #, python-format
1221 msgid "svn: start revision %s is not an integer"
1222 msgstr ""
1223
1224 #, python-format
1225 msgid "no revision found in module %s"
1226 msgstr ""
1227
1228 #, python-format
1229 msgid "expected %s to be at %r, but not found"
1230 msgstr ""
1231
1232 #, python-format
1233 msgid "found %s at %r\n"
1234 msgstr ""
1235
1236 #, python-format
1237 msgid "ignoring empty branch %s\n"
1238 msgstr ""
1239
1240 #, python-format
1241 msgid "found branch %s at %d\n"
1242 msgstr ""
1243
1244 msgid "svn: start revision is not supported with with more than one branch"
1245 msgstr ""
1246
1247 #, python-format
1248 msgid "svn: no revision found after start revision %d"
1249 msgstr ""
1250
1251 #, python-format
1252 msgid "no tags found at revision %d\n"
1253 msgstr ""
1254
1255 #, python-format
1256 msgid "ignoring foreign branch %r\n"
1257 msgstr ""
1258
1259 #, python-format
1260 msgid "%s not found up to revision %d"
1261 msgstr ""
1262
1263 #, python-format
1264 msgid "branch renamed from %s to %s at %d\n"
1265 msgstr ""
1266
1267 #, python-format
1268 msgid "reparent to %s\n"
1269 msgstr ""
1270
1271 #, python-format
1272 msgid "copied to %s from %s@%s\n"
1273 msgstr ""
1274
1275 #, python-format
1276 msgid "gone from %s\n"
1277 msgstr ""
1278
1279 #, python-format
1280 msgid "found parent directory %s\n"
1281 msgstr ""
1282
1283 #, python-format
1284 msgid "base, entry %s %s\n"
1285 msgstr ""
1286
1287 msgid "munge-o-matic\n"
1288 msgstr ""
1289
1290 #, python-format
1291 msgid "info: %s %s %s %s\n"
1292 msgstr ""
1293
1294 #, python-format
1295 msgid "unknown path in revision %d: %s\n"
1296 msgstr ""
1297
1298 #, python-format
1299 msgid "mark %s came from %s:%d\n"
1300 msgstr ""
1301
1302 #, python-format
1303 msgid "parsing revision %d (%d changes)\n"
1304 msgstr ""
1305
1306 #, python-format
1307 msgid "found parent of branch %s at %d: %s\n"
1308 msgstr ""
1309
1310 msgid "no copyfrom path, don't know what to do.\n"
1311 msgstr ""
1312
1313 #, python-format
1314 msgid "fetching revision log for \"%s\" from %d to %d\n"
1315 msgstr ""
1316
1317 #, python-format
1318 msgid "skipping blacklisted revision %d\n"
1319 msgstr ""
1320
1321 #, python-format
1322 msgid "revision %d has no entries\n"
1323 msgstr ""
1324
1325 #, python-format
1326 msgid "svn: branch has no revision %s"
1327 msgstr ""
1328
1329 #, python-format
1330 msgid "%r is not under %r, ignoring\n"
1331 msgstr ""
1332
1333 #, python-format
1334 msgid "initializing svn repo %r\n"
1335 msgstr ""
1336
1337 #, python-format
1338 msgid "initializing svn wc %r\n"
1339 msgstr ""
1340
1341 msgid "unexpected svn output:\n"
1342 msgstr ""
1343
1344 msgid "unable to cope with svn output"
1345 msgstr ""
1346
1347 msgid "XXX TAGS NOT IMPLEMENTED YET\n"
1348 msgstr ""
1349
1350 msgid ""
1351 "\n"
1352 "The `extdiff' Mercurial extension allows you to use external programs\n"
1353 "to compare revisions, or revision with working dir. The external diff\n"
1354 "programs are called with a configurable set of options and two\n"
1355 "non-option arguments: paths to directories containing snapshots of\n"
1356 "files to compare.\n"
1357 "\n"
1358 "To enable this extension:\n"
1359 "\n"
1360 " [extensions]\n"
1361 " hgext.extdiff =\n"
1362 "\n"
1363 "The `extdiff' extension also allows to configure new diff commands, so\n"
1364 "you do not need to type \"hg extdiff -p kdiff3\" always.\n"
1365 "\n"
1366 " [extdiff]\n"
1367 " # add new command that runs GNU diff(1) in 'context diff' mode\n"
1368 " cdiff = gdiff -Nprc5\n"
1369 " ## or the old way:\n"
1370 " #cmd.cdiff = gdiff\n"
1371 " #opts.cdiff = -Nprc5\n"
1372 "\n"
1373 " # add new command called vdiff, runs kdiff3\n"
1374 " vdiff = kdiff3\n"
1375 "\n"
1376 " # add new command called meld, runs meld (no need to name twice)\n"
1377 " meld =\n"
1378 "\n"
1379 " # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
1380 " #(see http://www.vim.org/scripts/script.php?script_id=102)\n"
1381 " # Non english user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
1382 "in\n"
1383 " # your .vimrc\n"
1384 " vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
1385 "\n"
1386 "You can use -I/-X and list of file or directory names like normal\n"
1387 "\"hg diff\" command. The `extdiff' extension makes snapshots of only\n"
1388 "needed files, so running the external diff program will actually be\n"
1389 "pretty fast (at least faster than having to compare the entire tree).\n"
1390 msgstr ""
1391
1392 msgid "snapshot files as of some revision"
1393 msgstr ""
1394
1395 #, python-format
1396 msgid "making snapshot of %d files from rev %s\n"
1397 msgstr ""
1398
1399 msgid ""
1400 "snapshot files from working directory.\n"
1401 " if not using snapshot, -I/-X does not work and recursive diff\n"
1402 " in tools like kdiff3 and meld displays too many files."
1403 msgstr ""
1404
1405 #, python-format
1406 msgid "making snapshot of %d files from working dir\n"
1407 msgstr ""
1408
1409 msgid ""
1410 "Do the actuall diff:\n"
1411 "\n"
1412 " - copy to a temp structure if diffing 2 internal revisions\n"
1413 " - copy to a temp structure if diffing working revision with\n"
1414 " another one and more than 1 file is changed\n"
1415 " - just invoke the diff for a single file in the working dir\n"
1416 " "
1417 msgstr ""
1418
1419 msgid "cannot specify --rev and --change at the same time"
1420 msgstr ""
1421
1422 #, python-format
1423 msgid "running %r in %s\n"
1424 msgstr ""
1425
1426 #, python-format
1427 msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
1428 msgstr ""
1429
1430 msgid "cleaning up temp directory\n"
1431 msgstr ""
1432
1433 msgid ""
1434 "use external program to diff repository (or selected files)\n"
1435 "\n"
1436 " Show differences between revisions for the specified files, using\n"
1437 " an external program. The default program used is diff, with\n"
1438 " default options \"-Npru\".\n"
1439 "\n"
1440 " To select a different program, use the -p option. The program\n"
1441 " will be passed the names of two directories to compare. To pass\n"
1442 " additional options to the program, use the -o option. These will\n"
1443 " be passed before the names of the directories to compare.\n"
1444 "\n"
1445 " When two revision arguments are given, then changes are\n"
1446 " shown between those revisions. If only one revision is\n"
1447 " specified then that revision is compared to the working\n"
1448 " directory, and, when no revisions are specified, the\n"
1449 " working directory files are compared to its parent."
1450 msgstr ""
1451
1452 msgid "comparison program to run"
1453 msgstr ""
1454
1455 msgid "pass option to comparison program"
1456 msgstr ""
1457
1458 msgid "change made by revision"
1459 msgstr ""
1460
1461 msgid "hg extdiff [OPT]... [FILE]..."
1462 msgstr ""
1463
1464 msgid "use closure to save diff command to use"
1465 msgstr ""
1466
1467 #, python-format
1468 msgid "hg %s [OPTION]... [FILE]..."
1469 msgstr ""
1470
1471 msgid "pulling, updating and merging in one command"
1472 msgstr ""
1473
1474 msgid ""
1475 "pull changes from a remote repository, merge new changes if needed.\n"
1476 "\n"
1477 " This finds all changes from the repository at the specified path\n"
1478 " or URL and adds them to the local repository.\n"
1479 "\n"
1480 " If the pulled changes add a new branch head, the head is automatically\n"
1481 " merged, and the result of the merge is committed. Otherwise, the\n"
1482 " working directory is updated to include the new changes.\n"
1483 "\n"
1484 " When a merge occurs, the newly pulled changes are assumed to be\n"
1485 " \"authoritative\". The head of the new changes is used as the first\n"
1486 " parent, with local changes as the second. To switch the merge\n"
1487 " order, use --switch-parent.\n"
1488 "\n"
1489 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
1490 " "
1491 msgstr ""
1492
1493 msgid ""
1494 "working dir not at branch tip (use \"hg update\" to check out branch tip)"
1495 msgstr ""
1496
1497 msgid "outstanding uncommitted merge"
1498 msgstr ""
1499
1500 msgid "outstanding uncommitted changes"
1501 msgstr ""
1502
1503 msgid "working directory is missing some files"
1504 msgstr "arbejdsbiblioteket mangler nogle filer"
1505
1506 msgid ""
1507 "multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
1508 msgstr ""
1509
1510 #, python-format
1511 msgid "pulling from %s\n"
1512 msgstr "hiver fra %s\n"
1513
1514 msgid "fetch -r doesn't work for remote repositories yet"
1515 msgstr "fetch -r virker endnu ikke for fjernarkiver"
1516
1517 #, python-format
1518 msgid ""
1519 "not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
1520 "\" to merge them)\n"
1521 msgstr ""
1522
1523 #, python-format
1524 msgid "updating to %d:%s\n"
1525 msgstr "opdaterer til %d:%s\n"
1526
1527 #, python-format
1528 msgid "merging with %d:%s\n"
1529 msgstr "sammenføjer med %d:%s\n"
1530
1531 #, python-format
1532 msgid "Automated merge with %s"
1533 msgstr ""
1534
1535 #, python-format
1536 msgid "new changeset %d:%s merges remote changes with local\n"
1537 msgstr "ny ændring %d:%s fletter fjernændringer sammen med lokale\n"
1538
1539 msgid "a specific revision you would like to pull"
1540 msgstr ""
1541
1542 msgid "edit commit message"
1543 msgstr ""
1544
1545 msgid "edit commit message (DEPRECATED)"
1546 msgstr ""
1547
1548 msgid "switch parents when merging"
1549 msgstr ""
1550
1551 msgid "hg fetch [SOURCE]"
1552 msgstr ""
1553
1554 msgid " returns of the good and bad signatures"
1555 msgstr ""
1556
1557 msgid "error while verifying signature"
1558 msgstr ""
1559
1560 msgid "create a new gpg instance"
1561 msgstr ""
1562
1563 msgid ""
1564 "\n"
1565 " walk over every sigs, yields a couple\n"
1566 " ((node, version, sig), (filename, linenumber))\n"
1567 " "
1568 msgstr ""
1569
1570 msgid "get the keys who signed a data"
1571 msgstr ""
1572
1573 #, python-format
1574 msgid "%s Bad signature from \"%s\"\n"
1575 msgstr ""
1576
1577 #, python-format
1578 msgid "%s Note: Signature has expired (signed by: \"%s\")\n"
1579 msgstr ""
1580
1581 #, python-format
1582 msgid "%s Note: This key has expired (signed by: \"%s\")\n"
1583 msgstr ""
1584
1585 msgid "list signed changesets"
1586 msgstr "vis underskrevne ændringer"
1587
1588 #, python-format
1589 msgid "%s:%d node does not exist\n"
1590 msgstr "%s:%d knude findes ikke\n"
1591
1592 msgid "verify all the signatures there may be for a particular revision"
1593 msgstr "verificer alle underskrifter der måtte være for en given revision"
1594
1595 #, python-format
1596 msgid "No valid signature for %s\n"
1597 msgstr "Ingen gyldig signatur for %s\n"
1598
1599 msgid "associate a string to a key (username, comment)"
1600 msgstr ""
1601
1602 msgid ""
1603 "add a signature for the current or given revision\n"
1604 "\n"
1605 " If no revision is given, the parent of the working directory is used,\n"
1606 " or tip if no revision is checked out.\n"
1607 "\n"
1608 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
1609 " "
1610 msgstr ""
1611
1612 msgid "uncommitted merge - please provide a specific revision"
1613 msgstr ""
1614
1615 msgid "Error while signing"
1616 msgstr "Fejl ved underskrivning"
1617
1618 msgid ""
1619 "working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
1620 "force)"
1621 msgstr ""
1622
1623 #, python-format
1624 msgid "Added signature for changeset %s"
1625 msgstr ""
1626
1627 msgid "map a manifest into some text"
1628 msgstr ""
1629
1630 msgid "unknown signature version"
1631 msgstr ""
1632
1633 msgid "make the signature local"
1634 msgstr ""
1635
1636 msgid "sign even if the sigfile is modified"
1637 msgstr ""
1638
1639 msgid "do not commit the sigfile after signing"
1640 msgstr ""
1641
1642 msgid "the key id to sign with"
1643 msgstr ""
1644
1645 msgid "commit message"
1646 msgstr ""
1647
1648 msgid "hg sign [OPTION]... [REVISION]..."
1649 msgstr ""
1650
1651 msgid "hg sigcheck REVISION"
1652 msgstr ""
1653
1654 msgid "hg sigs"
1655 msgstr ""
1656
1657 msgid ""
1658 "show revision graphs in terminal windows\n"
1659 "\n"
1660 "This extension adds a --graph option to the incoming, outgoing and log\n"
1661 "commands. When this options is given, an ascii representation of the\n"
1662 "revision graph is also shown.\n"
1663 msgstr ""
1664
1665 msgid ""
1666 "cset DAG generator yielding (rev, node, [parents]) tuples\n"
1667 "\n"
1668 " This generator function walks through the revision history from "
1669 "revision\n"
1670 " start to revision stop (which must be less than or equal to start).\n"
1671 " "
1672 msgstr ""
1673
1674 msgid ""
1675 "file cset DAG generator yielding (rev, node, [parents]) tuples\n"
1676 "\n"
1677 " This generator function walks through the revision history of a single\n"
1678 " file from revision start to revision stop (which must be less than or\n"
1679 " equal to start).\n"
1680 " "
1681 msgstr ""
1682
1683 msgid ""
1684 "grapher for asciigraph on a list of nodes and their parents\n"
1685 "\n"
1686 " nodes must generate tuples (node, parents, char, lines) where\n"
1687 " - parents must generate the parents of node, in sorted order,\n"
1688 " and max length 2,\n"
1689 " - char is the char to print as the node symbol, and\n"
1690 " - lines are the lines to display next to the node.\n"
1691 " "
1692 msgstr ""
1693
1694 msgid ""
1695 "prints an ASCII graph of the DAG returned by the grapher\n"
1696 "\n"
1697 " grapher is a generator that emits tuples with the following elements:\n"
1698 "\n"
1699 " - Character to use as node's symbol.\n"
1700 " - List of lines to display as the node's text.\n"
1701 " - Column of the current node in the set of ongoing edges.\n"
1702 " - Edges; a list of (col, next_col) indicating the edges between\n"
1703 " the current node and its parents.\n"
1704 " - Number of columns (ongoing edges) in the current revision.\n"
1705 " - The difference between the number of columns (ongoing edges)\n"
1706 " in the next revision and the number of columns (ongoing edges)\n"
1707 " in the current revision. That is: -1 means one column removed;\n"
1708 " 0 means no columns added or removed; 1 means one column added.\n"
1709 " "
1710 msgstr ""
1711
1712 #, python-format
1713 msgid "--graph option is incompatible with --%s"
1714 msgstr ""
1715
1716 msgid ""
1717 "show revision history alongside an ASCII revision graph\n"
1718 "\n"
1719 " Print a revision history alongside a revision graph drawn with\n"
1720 " ASCII characters.\n"
1721 "\n"
1722 " Nodes printed as an @ character are parents of the working\n"
1723 " directory.\n"
1724 " "
1725 msgstr ""
1726
1727 msgid ""
1728 "show the outgoing changesets alongside an ASCII revision graph\n"
1729 "\n"
1730 " Print the outgoing changesets alongside a revision graph drawn with\n"
1731 " ASCII characters.\n"
1732 "\n"
1733 " Nodes printed as an @ character are parents of the working\n"
1734 " directory.\n"
1735 " "
1736 msgstr ""
1737
1738 #, python-format
1739 msgid "comparing with %s\n"
1740 msgstr "sammenligner med %s\n"
1741
1742 msgid "no changes found\n"
1743 msgstr "fandt ingen ændringer\n"
1744
1745 msgid ""
1746 "show the incoming changesets alongside an ASCII revision graph\n"
1747 "\n"
1748 " Print the incoming changesets alongside a revision graph drawn with\n"
1749 " ASCII characters.\n"
1750 "\n"
1751 " Nodes printed as an @ character are parents of the working\n"
1752 " directory.\n"
1753 " "
1754 msgstr ""
1755
1756 msgid "wrap the command"
1757 msgstr ""
1758
1759 msgid "show the revision DAG"
1760 msgstr ""
1761
1762 msgid "limit number of changes displayed"
1763 msgstr ""
1764
1765 msgid "show patch"
1766 msgstr ""
1767
1768 msgid "show the specified revision or range"
1769 msgstr ""
1770
1771 msgid "hg glog [OPTION]... [FILE]"
1772 msgstr ""
1773
1774 msgid ""
1775 "CIA notification\n"
1776 "\n"
1777 "This is meant to be run as a changegroup or incoming hook.\n"
1778 "To configure it, set the following options in your hgrc:\n"
1779 "\n"
1780 "[cia]\n"
1781 "# your registered CIA user name\n"
1782 "user = foo\n"
1783 "# the name of the project in CIA\n"
1784 "project = foo\n"
1785 "# the module (subproject) (optional)\n"
1786 "#module = foo\n"
1787 "# Append a diffstat to the log message (optional)\n"
1788 "#diffstat = False\n"
1789 "# Template to use for log messages (optional)\n"
1790 "#template = {desc}\n"
1791 "{baseurl}/rev/{node}-- {diffstat}\n"
1792 "# Style to use (optional)\n"
1793 "#style = foo\n"
1794 "# The URL of the CIA notification service (optional)\n"
1795 "# You can use mailto: URLs to send by email, eg\n"
1796 "# mailto:cia@cia.vc\n"
1797 "# Make sure to set email.from if you do this.\n"
1798 "#url = http://cia.vc/\n"
1799 "# print message instead of sending it (optional)\n"
1800 "#test = False\n"
1801 "\n"
1802 "[hooks]\n"
1803 "# one of these:\n"
1804 "changegroup.cia = python:hgcia.hook\n"
1805 "#incoming.cia = python:hgcia.hook\n"
1806 "\n"
1807 "[web]\n"
1808 "# If you want hyperlinks (optional)\n"
1809 "baseurl = http://server/path/to/repo\n"
1810 msgstr ""
1811
1812 msgid " A CIA message "
1813 msgstr ""
1814
1815 msgid " CIA notification class "
1816 msgstr ""
1817
1818 #, python-format
1819 msgid "hgcia: sending update to %s\n"
1820 msgstr ""
1821
1822 msgid " send CIA notification "
1823 msgstr ""
1824
1825 msgid "email.from must be defined when sending by email"
1826 msgstr ""
1827
1828 msgid "cia: no user specified"
1829 msgstr "cia: ingen bruger angivet"
1830
1831 msgid "cia: no project specified"
1832 msgstr "cia: intet project angivet"
1833
1834 msgid ""
1835 "browsing the repository in a graphical way\n"
1836 "\n"
1837 "The hgk extension allows browsing the history of a repository in a\n"
1838 "graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is\n"
1839 "not distributed with Mercurial.)\n"
1840 "\n"
1841 "hgk consists of two parts: a Tcl script that does the displaying and\n"
1842 "querying of information, and an extension to mercurial named hgk.py,\n"
1843 "which provides hooks for hgk to get information. hgk can be found in\n"
1844 "the contrib directory, and hgk.py can be found in the hgext directory.\n"
1845 "\n"
1846 "To load the hgext.py extension, add it to your .hgrc file (you have\n"
1847 "to use your global $HOME/.hgrc file, not one in a repository). You\n"
1848 "can specify an absolute path:\n"
1849 "\n"
1850 " [extensions]\n"
1851 " hgk=/usr/local/lib/hgk.py\n"
1852 "\n"
1853 "Mercurial can also scan the default python library path for a file\n"
1854 "named 'hgk.py' if you set hgk empty:\n"
1855 "\n"
1856 " [extensions]\n"
1857 " hgk=\n"
1858 "\n"
1859 "The hg view command will launch the hgk Tcl script. For this command\n"
1860 "to work, hgk must be in your search path. Alternately, you can\n"
1861 "specify the path to hgk in your .hgrc file:\n"
1862 "\n"
1863 " [hgk]\n"
1864 " path=/location/of/hgk\n"
1865 "\n"
1866 "hgk can make use of the extdiff extension to visualize revisions.\n"
1867 "Assuming you had already configured extdiff vdiff command, just add:\n"
1868 "\n"
1869 " [hgk]\n"
1870 " vdiff=vdiff\n"
1871 "\n"
1872 "Revisions context menu will now display additional entries to fire\n"
1873 "vdiff on hovered and selected revisions."
1874 msgstr ""
1875
1876 msgid "diff trees from two commits"
1877 msgstr ""
1878
1879 msgid "output common ancestor information"
1880 msgstr ""
1881
1882 msgid "cat a specific revision"
1883 msgstr ""
1884
1885 msgid "cat-file: type or revision not supplied\n"
1886 msgstr ""
1887
1888 msgid "aborting hg cat-file only understands commits\n"
1889 msgstr ""
1890
1891 msgid "parse given revisions"
1892 msgstr ""
1893
1894 msgid "print revisions"
1895 msgstr ""
1896
1897 msgid "print extension options"
1898 msgstr ""
1899
1900 msgid "start interactive history viewer"
1901 msgstr ""
1902
1903 msgid "hg view [-l LIMIT] [REVRANGE]"
1904 msgstr ""
1905
1906 msgid "generate patch"
1907 msgstr ""
1908
1909 msgid "recursive"
1910 msgstr ""
1911
1912 msgid "pretty"
1913 msgstr ""
1914
1915 msgid "stdin"
1916 msgstr ""
1917
1918 msgid "detect copies"
1919 msgstr ""
1920
1921 msgid "search"
1922 msgstr "søg"
1923
1924 msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
1925 msgstr ""
1926
1927 msgid "hg debug-cat-file [OPTION]... TYPE FILE"
1928 msgstr ""
1929
1930 msgid "hg debug-config"
1931 msgstr ""
1932
1933 msgid "hg debug-merge-base node node"
1934 msgstr ""
1935
1936 msgid "ignored"
1937 msgstr "Ignoreret"
1938
1939 msgid "hg debug-rev-parse REV"
1940 msgstr ""
1941
1942 msgid "header"
1943 msgstr ""
1944
1945 msgid "topo-order"
1946 msgstr ""
1947
1948 msgid "parents"
1949 msgstr ""
1950
1951 msgid "max-count"
1952 msgstr ""
1953
1954 msgid "hg debug-rev-list [options] revs"
1955 msgstr ""
1956
1957 msgid ""
1958 "syntax highlighting in hgweb, based on Pygments\n"
1959 "\n"
1960 "It depends on the pygments syntax highlighting library:\n"
1961 "http://pygments.org/\n"
1962 "\n"
1963 "To enable the extension add this to hgrc:\n"
1964 "\n"
1965 "[extensions]\n"
1966 "hgext.highlight =\n"
1967 "\n"
1968 "There is a single configuration option:\n"
1969 "\n"
1970 "[web]\n"
1971 "pygments_style = <style>\n"
1972 "\n"
1973 "The default is 'colorful'.\n"
1974 "\n"
1975 "-- Adam Hupp <adam@hupp.org>\n"
1976 msgstr ""
1977
1978 msgid "inotify-based status acceleration for Linux systems\n"
1979 msgstr ""
1980
1981 msgid "start an inotify server for this repository"
1982 msgstr ""
1983
1984 msgid "(found dead inotify server socket; removing it)\n"
1985 msgstr ""
1986
1987 msgid "(starting inotify server)\n"
1988 msgstr ""
1989
1990 #, python-format
1991 msgid "could not start inotify server: %s\n"
1992 msgstr ""
1993
1994 #, python-format
1995 msgid "could not talk to new inotify server: %s\n"
1996 msgstr ""
1997
1998 msgid "(inotify server not running)\n"
1999 msgstr ""
2000
2001 #, python-format
2002 msgid "failed to contact inotify server: %s\n"
2003 msgstr ""
2004
2005 msgid "run server in background"
2006 msgstr ""
2007
2008 msgid "used internally by daemon mode"
2009 msgstr ""
2010
2011 msgid "minutes to sit idle before exiting"
2012 msgstr ""
2013
2014 msgid "name of file to write process ID to"
2015 msgstr ""
2016
2017 msgid "hg inserve [OPT]..."
2018 msgstr ""
2019
2020 #, python-format
2021 msgid "(inotify: received response from incompatible server version %d)\n"
2022 msgstr ""
2023
2024 msgid "this system does not seem to support inotify"
2025 msgstr ""
2026
2027 #, python-format
2028 msgid "*** the current per-user limit on the number of inotify watches is %s\n"
2029 msgstr ""
2030
2031 msgid "*** this limit is too low to watch every directory in this repository\n"
2032 msgstr ""
2033
2034 msgid "*** counting directories: "
2035 msgstr ""
2036
2037 #, python-format
2038 msgid "found %d\n"
2039 msgstr ""
2040
2041 #, python-format
2042 msgid "*** to raise the limit from %d to %d (run as root):\n"
2043 msgstr ""
2044
2045 #, python-format
2046 msgid "*** echo %d > %s\n"
2047 msgstr ""
2048
2049 #, python-format
2050 msgid "cannot watch %s until inotify watch limit is raised"
2051 msgstr ""
2052
2053 #, python-format
2054 msgid "inotify service not available: %s"
2055 msgstr ""
2056
2057 #, python-format
2058 msgid "watching %r\n"
2059 msgstr ""
2060
2061 #, python-format
2062 msgid "watching directories under %r\n"
2063 msgstr ""
2064
2065 #, python-format
2066 msgid "status: %r dir(%d) -> %s\n"
2067 msgstr ""
2068
2069 #, python-format
2070 msgid "status: %r %s -> %s\n"
2071 msgstr ""
2072
2073 #, python-format
2074 msgid "%s dirstate reload\n"
2075 msgstr ""
2076
2077 #, python-format
2078 msgid "%s end dirstate reload\n"
2079 msgstr ""
2080
2081 msgid "rescanning due to .hgignore change\n"
2082 msgstr ""
2083
2084 #, python-format
2085 msgid "%s event: created %s\n"
2086 msgstr ""
2087
2088 #, python-format
2089 msgid "%s event: deleted %s\n"
2090 msgstr ""
2091
2092 #, python-format
2093 msgid "%s event: modified %s\n"
2094 msgstr ""
2095
2096 #, python-format
2097 msgid "filesystem containing %s was unmounted\n"
2098 msgstr ""
2099
2100 #, python-format
2101 msgid "%s readable: %d bytes\n"
2102 msgstr ""
2103
2104 #, python-format
2105 msgid "%s below threshold - unhooking\n"
2106 msgstr ""
2107
2108 #, python-format
2109 msgid "%s reading %d events\n"
2110 msgstr ""
2111
2112 #, python-format
2113 msgid "%s hooking back up with %d bytes readable\n"
2114 msgstr ""
2115
2116 #, python-format
2117 msgid "%s processing %d deferred events as %d\n"
2118 msgstr ""
2119
2120 #, python-format
2121 msgid "could not start server: %s"
2122 msgstr ""
2123
2124 #, python-format
2125 msgid "received query from incompatible client version %d\n"
2126 msgstr ""
2127
2128 #, python-format
2129 msgid "answering query for %r\n"
2130 msgstr ""
2131
2132 msgid "finished setup\n"
2133 msgstr ""
2134
2135 msgid "polling: no timeout\n"
2136 msgstr ""
2137
2138 #, python-format
2139 msgid "polling: %sms timeout\n"
2140 msgstr ""
2141
2142 #, python-format
2143 msgid "interhg: invalid pattern for %s: %s\n"
2144 msgstr ""
2145
2146 #, python-format
2147 msgid "interhg: invalid regexp for %s: %s\n"
2148 msgstr ""
2149
2150 msgid ""
2151 "keyword expansion in local repositories\n"
2152 "\n"
2153 "This extension expands RCS/CVS-like or self-customized $Keywords$\n"
2154 "in tracked text files selected by your configuration.\n"
2155 "\n"
2156 "Keywords are only expanded in local repositories and not stored in\n"
2157 "the change history. The mechanism can be regarded as a convenience\n"
2158 "for the current user or for archive distribution.\n"
2159 "\n"
2160 "Configuration is done in the [keyword] and [keywordmaps] sections\n"
2161 "of hgrc files.\n"
2162 "\n"
2163 "Example:\n"
2164 "\n"
2165 " [keyword]\n"
2166 " # expand keywords in every python file except those matching \"x*\"\n"
2167 " **.py =\n"
2168 " x* = ignore\n"
2169 "\n"
2170 "Note: the more specific you are in your filename patterns\n"
2171 " the less you lose speed in huge repos.\n"
2172 "\n"
2173 "For [keywordmaps] template mapping and expansion demonstration and\n"
2174 "control run \"hg kwdemo\".\n"
2175 "\n"
2176 "An additional date template filter {date|utcdate} is provided.\n"
2177 "\n"
2178 "The default template mappings (view with \"hg kwdemo -d\") can be replaced\n"
2179 "with customized keywords and templates.\n"
2180 "Again, run \"hg kwdemo\" to control the results of your config changes.\n"
2181 "\n"
2182 "Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
2183 "the risk of inadvertedly storing expanded keywords in the change history.\n"
2184 "\n"
2185 "To force expansion after enabling it, or a configuration change, run\n"
2186 "\"hg kwexpand\".\n"
2187 "\n"
2188 "Also, when committing with the record extension or using mq's qrecord, be "
2189 "aware\n"
2190 "that keywords cannot be updated. Again, run \"hg kwexpand\" on the files in\n"
2191 "question to update keyword expansions after all changes have been checked "
2192 "in.\n"
2193 "\n"
2194 "Expansions spanning more than one line and incremental expansions,\n"
2195 "like CVS' $Log$, are not supported. A keyword template map\n"
2196 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
2197 msgstr ""
2198
2199 msgid "Returns hgdate in cvs-like UTC format."
2200 msgstr ""
2201
2202 msgid ""
2203 "\n"
2204 " Sets up keyword templates, corresponding keyword regex, and\n"
2205 " provides keyword substitution functions.\n"
2206 " "
2207 msgstr ""
2208
2209 msgid "Replaces keywords in data with expanded template."
2210 msgstr ""
2211
2212 msgid "Returns data with keywords expanded."
2213 msgstr ""
2214
2215 msgid ""
2216 "Returns true if path matches [keyword] pattern\n"
2217 " and is not a symbolic link.\n"
2218 " Caveat: localrepository._link fails on Windows."
2219 msgstr ""
2220
2221 msgid "Overwrites selected files expanding/shrinking keywords."
2222 msgstr ""
2223
2224 #, python-format
2225 msgid "overwriting %s %s keywords\n"
2226 msgstr ""
2227
2228 msgid "Unconditionally removes all keyword substitutions from text."
2229 msgstr ""
2230
2231 msgid "Returns text with all keyword substitutions removed."
2232 msgstr ""
2233
2234 msgid "Returns lines with keyword substitutions removed."
2235 msgstr ""
2236
2237 msgid ""
2238 "If in restricted mode returns data read from wdir with\n"
2239 " keyword substitutions removed."
2240 msgstr ""
2241
2242 msgid ""
2243 "\n"
2244 " Subclass of filelog to hook into its read, add, cmp methods.\n"
2245 " Keywords are \"stored\" unexpanded, and processed on reading.\n"
2246 " "
2247 msgstr ""
2248
2249 msgid "Expands keywords when reading filelog."
2250 msgstr ""
2251
2252 msgid "Removes keyword substitutions when adding to filelog."
2253 msgstr ""
2254
2255 msgid "Removes keyword substitutions for comparison."
2256 msgstr ""
2257
2258 msgid ""
2259 "Bails out if [keyword] configuration is not active.\n"
2260 " Returns status of working directory."
2261 msgstr ""
2262
2263 msgid "[keyword] patterns cannot match"
2264 msgstr ""
2265
2266 msgid "no [keyword] patterns configured"
2267 msgstr ""
2268
2269 msgid "Selects files and passes them to kwtemplater.overwrite."
2270 msgstr ""
2271
2272 msgid ""
2273 "print [keywordmaps] configuration and an expansion example\n"
2274 "\n"
2275 " Show current, custom, or default keyword template maps\n"
2276 " and their expansion.\n"
2277 "\n"
2278 " Extend current configuration by specifying maps as arguments\n"
2279 " and optionally by reading from an additional hgrc file.\n"
2280 "\n"
2281 " Override current keyword template maps with \"default\" option.\n"
2282 " "
2283 msgstr ""
2284
2285 #, python-format
2286 msgid ""
2287 "\n"
2288 "\t%s\n"
2289 msgstr ""
2290
2291 #, python-format
2292 msgid "creating temporary repo at %s\n"
2293 msgstr ""
2294
2295 #, python-format
2296 msgid ""
2297 "\n"
2298 "%s keywords written to %s:\n"
2299 msgstr ""
2300
2301 msgid "unhooked all commit hooks\n"
2302 msgstr ""
2303
2304 #, python-format
2305 msgid ""
2306 "\n"
2307 "removing temporary repo %s\n"
2308 msgstr ""
2309
2310 msgid ""
2311 "expand keywords in working directory\n"
2312 "\n"
2313 " Run after (re)enabling keyword expansion.\n"
2314 "\n"
2315 " kwexpand refuses to run if given files contain local changes.\n"
2316 " "
2317 msgstr ""
2318
2319 msgid ""
2320 "print files currently configured for keyword expansion\n"
2321 "\n"
2322 " Crosscheck which files in working directory are potential targets for\n"
2323 " keyword expansion.\n"
2324 " That is, files matched by [keyword] config patterns but not symlinks.\n"
2325 " "
2326 msgstr ""
2327
2328 msgid ""
2329 "revert expanded keywords in working directory\n"
2330 "\n"
2331 " Run before changing/disabling active keywords\n"
2332 " or if you experience problems with \"hg import\" or \"hg merge\".\n"
2333 "\n"
2334 " kwshrink refuses to run if given files contain local changes.\n"
2335 " "
2336 msgstr ""
2337
2338 msgid ""
2339 "Collects [keyword] config in kwtools.\n"
2340 " Monkeypatches dispatch._parse if needed."
2341 msgstr ""
2342
2343 msgid "Monkeypatch dispatch._parse to obtain running hg command."
2344 msgstr ""
2345
2346 msgid ""
2347 "Sets up repo as kwrepo for keyword substitution.\n"
2348 " Overrides file method to return kwfilelog instead of filelog\n"
2349 " if file matches user configuration.\n"
2350 " Wraps commit to overwrite configured files with updated\n"
2351 " keyword substitutions.\n"
2352 " Monkeypatches patch and webcommands."
2353 msgstr ""
2354
2355 msgid ""
2356 "Monkeypatch/wrap patch.patchfile.__init__ to avoid\n"
2357 " rejects or conflicts due to expanded keywords in working dir."
2358 msgstr ""
2359
2360 msgid ""
2361 "Monkeypatch patch.diff to avoid expansion except when\n"
2362 " comparing against working dir."
2363 msgstr ""
2364
2365 msgid "Wraps webcommands.x turning off keyword expansion."
2366 msgstr ""
2367
2368 msgid "show default keyword template maps"
2369 msgstr ""
2370
2371 msgid "read maps from rcfile"
2372 msgstr ""
2373
2374 msgid "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
2375 msgstr ""
2376
2377 msgid "hg kwexpand [OPTION]... [FILE]..."
2378 msgstr ""
2379
2380 msgid "show keyword status flags of all files"
2381 msgstr ""
2382
2383 msgid "show files excluded from expansion"
2384 msgstr ""
2385
2386 msgid "additionally show untracked files"
2387 msgstr ""
2388
2389 msgid "hg kwfiles [OPTION]... [FILE]..."
2390 msgstr ""
2391
2392 msgid "hg kwshrink [OPTION]... [FILE]..."
2393 msgstr ""
2394
2395 msgid ""
2396 "patch management and development\n"
2397 "\n"
2398 "This extension lets you work with a stack of patches in a Mercurial\n"
2399 "repository. It manages two stacks of patches - all known patches, and\n"
2400 "applied patches (subset of known patches).\n"
2401 "\n"
2402 "Known patches are represented as patch files in the .hg/patches\n"
2403 "directory. Applied patches are both patch files and changesets.\n"
2404 "\n"
2405 "Common tasks (use \"hg help command\" for more details):\n"
2406 "\n"
2407 "prepare repository to work with patches qinit\n"
2408 "create new patch qnew\n"
2409 "import existing patch qimport\n"
2410 "\n"
2411 "print patch series qseries\n"
2412 "print applied patches qapplied\n"
2413 "print name of top applied patch qtop\n"
2414 "\n"
2415 "add known patch to applied stack qpush\n"
2416 "remove patch from applied stack qpop\n"
2417 "refresh contents of top applied patch qrefresh\n"
2418 msgstr ""
2419 "udvikling og håndtering af patches\n"
2420 "\n"
2421 "Denne udvidelse lader dig arbejde med en stak af patches i et\n"
2422 "Mercurial repository. Den håndterer to stakke af patches - alle kendte\n"
2423 "patches og alle anvendte patches (en delmængde af de kendte patches).\n"
2424 "\n"
2425 "Kendte patches er repræsenteret som patch-filer i .hg/patches\n"
2426 "biblioteket. Anvendte patches er både patch-filer og Mercurial\n"
2427 "ændringer.\n"
2428 "\n"
2429 "Almindelige opgaver (brug \"hg help kommado\" for flere detaljer):\n"
2430 "\n"
2431 "forbered repository til at arbejde med patches qinit\n"
2432 "opret ny patch qnew\n"
2433 "importer eksisterende patch qimport\n"
2434 "\n"
2435 "list patch-serien qseries\n"
2436 "list anvendte patches qapplied\n"
2437 "list navnet på den øverste patch qtop\n"
2438 "\n"
2439 "anvend og put patch på stakken qpush\n"
2440 "fjern patch fra stakken qpop\n"
2441 "genopfrisk indholdet af den øverste patch qrefresh\n"
2442
2443 msgid ""
2444 "Update all references to a field in the patch header.\n"
2445 " If none found, add it email style."
2446 msgstr ""
2447
2448 msgid ""
2449 "Remove existing message, keeping the rest of the comments fields.\n"
2450 " If comments contains 'subject: ', message will prepend\n"
2451 " the field and a blank line."
2452 msgstr ""
2453
2454 #, python-format
2455 msgid "%s appears more than once in %s"
2456 msgstr "%s findes mere end én gang i %s"
2457
2458 msgid "guard cannot be an empty string"
2459 msgstr ""
2460
2461 #, python-format
2462 msgid "guard %r starts with invalid character: %r"
2463 msgstr ""
2464
2465 #, python-format
2466 msgid "invalid character in guard %r: %r"
2467 msgstr ""
2468
2469 #, python-format
2470 msgid "active guards: %s\n"
2471 msgstr ""
2472
2473 #, python-format
2474 msgid "guard %r too short"
2475 msgstr ""
2476
2477 #, python-format
2478 msgid "guard %r starts with invalid char"
2479 msgstr ""
2480
2481 #, python-format
2482 msgid "allowing %s - no guards in effect\n"
2483 msgstr ""
2484
2485 #, python-format
2486 msgid "allowing %s - no matching negative guards\n"
2487 msgstr ""
2488
2489 #, python-format
2490 msgid "allowing %s - guarded by %r\n"
2491 msgstr ""
2492
2493 #, python-format
2494 msgid "skipping %s - guarded by %r\n"
2495 msgstr ""
2496
2497 #, python-format
2498 msgid "skipping %s - no matching guards\n"
2499 msgstr ""
2500
2501 #, python-format
2502 msgid "error removing undo: %s\n"
2503 msgstr ""
2504
2505 #, python-format
2506 msgid "apply failed for patch %s"
2507 msgstr ""
2508
2509 #, python-format
2510 msgid "patch didn't work out, merging %s\n"
2511 msgstr ""
2512
2513 #, python-format
2514 msgid "update returned %d"
2515 msgstr ""
2516
2517 msgid "repo commit failed"
2518 msgstr ""
2519
2520 #, python-format
2521 msgid "unable to read %s"
2522 msgstr "ikke i stand til at læse %s"
2523
2524 #, python-format
2525 msgid "patch %s does not exist\n"
2526 msgstr "rettelsen %s findes ikke\n"
2527
2528 #, python-format
2529 msgid "patch %s is not applied\n"
2530 msgstr "rettelsen %s er ikke anvendt\n"
2531
2532 msgid ""
2533 "Apply patchfile to the working directory.\n"
2534 " patchfile: file name of patch"
2535 msgstr ""
2536
2537 msgid "patch failed, unable to continue (try -v)\n"
2538 msgstr ""
2539
2540 #, python-format
2541 msgid "applying %s\n"
2542 msgstr "anvender %s\n"
2543
2544 #, python-format
2545 msgid "Unable to read %s\n"
2546 msgstr ""
2547
2548 #, python-format
2549 msgid "imported patch %s\n"
2550 msgstr "importeret rettelse %s\n"
2551
2552 #, python-format
2553 msgid ""
2554 "\n"
2555 "imported patch %s"
2556 msgstr ""
2557 "\n"
2558 "importeret rettelse %s"
2559
2560 #, python-format
2561 msgid "patch %s is empty\n"
2562 msgstr "rettelse %s er tom\n"
2563
2564 msgid "patch failed, rejects left in working dir\n"
2565 msgstr ""
2566
2567 msgid "fuzz found when applying patch, stopping\n"
2568 msgstr ""
2569
2570 #, python-format
2571 msgid "revision %d is not managed"
2572 msgstr ""
2573
2574 #, python-format
2575 msgid "cannot delete revision %d above applied patches"
2576 msgstr "kan ikke slette revision %d ovenover anvendte rettelser"
2577
2578 msgid "qdelete requires at least one revision or patch name"
2579 msgstr ""
2580
2581 #, python-format
2582 msgid "cannot delete applied patch %s"
2583 msgstr "kan ikke slette den anvendte rettelse %s"
2584
2585 #, python-format
2586 msgid "patch %s not in series file"
2587 msgstr "rettelse %s er ikke i series filen"
2588
2589 msgid "no patches applied"
2590 msgstr "ingen rettelser anvendt"
2591
2592 msgid "working directory revision is not qtip"
2593 msgstr ""
2594
2595 msgid "local changes found, refresh first"
2596 msgstr "lokale ændringer fundet, genopfrisk først"
2597
2598 msgid "local changes found"
2599 msgstr "lokale ændringer fundet"
2600
2601 #, python-format
2602 msgid "\"%s\" cannot be used as the name of a patch"
2603 msgstr "\"%s\" kan ikke bruges som navnet på en rettelse"
2604
2605 msgid ""
2606 "options:\n"
2607 " msg: a string or a no-argument function returning a string\n"
2608 " "
2609 msgstr ""
2610
2611 #, python-format
2612 msgid "patch \"%s\" already exists"
2613 msgstr "rettelsen \"%s\" findes allerede"
2614
2615 #, python-format
2616 msgid "error unlinking %s\n"
2617 msgstr "fejl ved sletning af %s\n"
2618
2619 msgid "returns (index, rev, patch)"
2620 msgstr ""
2621
2622 #, python-format
2623 msgid "patch name \"%s\" is ambiguous:\n"
2624 msgstr "rettelsen \"%s\" er tvetydigt:\n"
2625
2626 #, python-format
2627 msgid "patch %s not in series"
2628 msgstr ""
2629
2630 msgid "(working directory not at tip)\n"
2631 msgstr ""
2632
2633 msgid "no patches in series\n"
2634 msgstr "ingen patches i serien\n"
2635
2636 #, python-format
2637 msgid "cannot push to a previous patch: %s"
2638 msgstr ""
2639
2640 #, python-format
2641 msgid "qpush: %s is already at the top\n"
2642 msgstr ""
2643
2644 #, python-format
2645 msgid "guarded by %r"
2646 msgstr ""
2647
2648 msgid "no matching guards"
2649 msgstr ""
2650
2651 #, python-format
2652 msgid "cannot push '%s' - %s\n"
2653 msgstr "kan ikke skubbe '%s' - %s\n"
2654
2655 msgid "all patches are currently applied\n"
2656 msgstr "alle rettelser er i øjeblikket anvendt\n"
2657
2658 msgid "patch series already fully applied\n"
2659 msgstr ""
2660
2661 msgid "cleaning up working directory..."
2662 msgstr "rydder op i arbejdsbiblioteket..."
2663
2664 #, python-format
2665 msgid "errors during apply, please fix and refresh %s\n"
2666 msgstr ""
2667
2668 #, python-format
2669 msgid "now at: %s\n"
2670 msgstr "nu ved: %s\n"
2671
2672 #, python-format
2673 msgid "patch %s is not applied"
2674 msgstr "rettelse %s er ikke anvendt"
2675
2676 msgid "no patches applied\n"
2677 msgstr "ingen rettelser anvendt\n"
2678
2679 #, python-format
2680 msgid "qpop: %s is already at the top\n"
2681 msgstr ""
2682
2683 msgid "qpop: forcing dirstate update\n"
2684 msgstr ""
2685
2686 #, python-format
2687 msgid "trying to pop unknown node %s"
2688 msgstr ""
2689
2690 msgid "popping would remove a revision not managed by this patch queue"
2691 msgstr ""
2692
2693 msgid "deletions found between repo revs"
2694 msgstr ""
2695
2696 msgid "patch queue now empty\n"
2697 msgstr "rettelseskøen er nu tom\n"
2698
2699 msgid "cannot refresh a revision with children"
2700 msgstr ""
2701
2702 msgid ""
2703 "refresh interrupted while patch was popped! (revert --all, qpush to "
2704 "recover)\n"
2705 msgstr ""
2706
2707 msgid "patch queue directory already exists"
2708 msgstr ""
2709
2710 #, python-format
2711 msgid "patch %s is not in series file"
2712 msgstr "rettelse %s er ikke i series filen"
2713
2714 msgid "No saved patch data found\n"
2715 msgstr ""
2716
2717 #, python-format
2718 msgid "restoring status: %s\n"
2719 msgstr "genopretter status: %s\n"
2720
2721 msgid "save entry has children, leaving it alone\n"
2722 msgstr ""
2723
2724 #, python-format
2725 msgid "removing save entry %s\n"
2726 msgstr ""
2727
2728 #, python-format
2729 msgid "saved queue repository parents: %s %s\n"
2730 msgstr ""
2731
2732 msgid "queue directory updating\n"
2733 msgstr ""
2734
2735 msgid "Unable to load queue repository\n"
2736 msgstr ""
2737
2738 msgid "save: no patches applied, exiting\n"
2739 msgstr ""
2740
2741 msgid "status is already saved\n"
2742 msgstr ""
2743
2744 msgid "hg patches saved state"
2745 msgstr ""
2746
2747 msgid "repo commit failed\n"
2748 msgstr ""
2749
2750 msgid ""
2751 "If all_patches is False, return the index of the next pushable patch\n"
2752 " in the series, or the series length. If all_patches is True, return "
2753 "the\n"
2754 " index of the first patch past the last applied one.\n"
2755 " "
2756 msgstr ""
2757
2758 #, python-format
2759 msgid "patch %s is already in the series file"
2760 msgstr ""
2761
2762 msgid "option \"-r\" not valid when importing files"
2763 msgstr ""
2764
2765 msgid "option \"-n\" not valid when importing multiple patches"
2766 msgstr ""
2767
2768 #, python-format
2769 msgid "revision %d is the root of more than one branch"
2770 msgstr ""
2771
2772 #, python-format
2773 msgid "revision %d is already managed"
2774 msgstr ""
2775
2776 #, python-format
2777 msgid "revision %d is not the parent of the queue"
2778 msgstr ""
2779
2780 #, python-format
2781 msgid "revision %d has unmanaged children"
2782 msgstr ""
2783
2784 #, python-format
2785 msgid "cannot import merge revision %d"
2786 msgstr ""
2787
2788 #, python-format
2789 msgid "revision %d is not the parent of %d"
2790 msgstr ""
2791
2792 msgid "-e is incompatible with import from -"
2793 msgstr ""
2794
2795 #, python-format
2796 msgid "patch %s does not exist"
2797 msgstr "rettelse %s eksisterer ikke"
2798
2799 msgid "need --name to import a patch from -"
2800 msgstr ""
2801
2802 #, python-format
2803 msgid "adding %s to series file\n"
2804 msgstr "tilføjer %s til series filen\n"
2805
2806 msgid ""
2807 "remove patches from queue\n"
2808 "\n"
2809 " The patches must not be applied, unless they are arguments to\n"
2810 " the --rev parameter. At least one patch or revision is required.\n"
2811 "\n"
2812 " With --rev, mq will stop managing the named revisions (converting\n"
2813 " them to regular mercurial changesets). The qfinish command should be\n"
2814 " used as an alternative for qdel -r, as the latter option is deprecated.\n"
2815 "\n"
2816 " With --keep, the patch files are preserved in the patch directory."
2817 msgstr ""
2818
2819 msgid "print the patches already applied"
2820 msgstr "udskriver rettelserne som allerede er anvendt"
2821
2822 msgid "print the patches not yet applied"
2823 msgstr "udskriver rettelserne som ikke er anvendt endnu"
2824
2825 msgid ""
2826 "import a patch\n"
2827 "\n"
2828 " The patch is inserted into the series after the last applied patch.\n"
2829 " If no patches have been applied, qimport prepends the patch\n"
2830 " to the series.\n"
2831 "\n"
2832 " The patch will have the same name as its source file unless you\n"
2833 " give it a new one with --name.\n"
2834 "\n"
2835 " You can register an existing patch inside the patch directory\n"
2836 " with the --existing flag.\n"
2837 "\n"
2838 " With --force, an existing patch of the same name will be overwritten.\n"
2839 "\n"
2840 " An existing changeset may be placed under mq control with --rev\n"
2841 " (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
2842 " With --git, patches imported with --rev will use the git diff\n"
2843 " format. See the diffs help topic for information on why this is\n"
2844 " important for preserving rename/copy information and permission "
2845 "changes.\n"
2846 " "
2847 msgstr ""
2848
2849 msgid ""
2850 "init a new queue repository\n"
2851 "\n"
2852 " The queue repository is unversioned by default. If -c is\n"
2853 " specified, qinit will create a separate nested repository\n"
2854 " for patches (qinit -c may also be run later to convert\n"
2855 " an unversioned patch repository into a versioned one).\n"
2856 " You can use qcommit to commit changes to this queue repository."
2857 msgstr ""
2858
2859 msgid ""
2860 "clone main and patch repository at same time\n"
2861 "\n"
2862 " If source is local, destination will have no patches applied. If\n"
2863 " source is remote, this command can not check if patches are\n"
2864 " applied in source, so cannot guarantee that patches are not\n"
2865 " applied in destination. If you clone remote repository, be sure\n"
2866 " before that it has no patches applied.\n"
2867 "\n"
2868 " Source patch repository is looked for in <src>/.hg/patches by\n"
2869 " default. Use -p <url> to change.\n"
2870 "\n"
2871 " The patch directory must be a nested mercurial repository, as\n"
2872 " would be created by qinit -c.\n"
2873 " "
2874 msgstr ""
2875
2876 msgid "versioned patch repository not found (see qinit -c)"
2877 msgstr "versionsstyret arkiv til rettelser blev ikke fundet (se qinit -c)"
2878
2879 msgid "cloning main repo\n"
2880 msgstr "kloner hovedarkiv\n"
2881
2882 msgid "cloning patch repo\n"
2883 msgstr "kloner rettelsesarkiv\n"
2884
2885 msgid "stripping applied patches from destination repo\n"
2886 msgstr ""
2887
2888 msgid "updating destination repo\n"
2889 msgstr ""
2890
2891 msgid "commit changes in the queue repository"
2892 msgstr ""
2893
2894 msgid "print the entire series file"
2895 msgstr "udskriver hele series filen"
2896
2897 msgid "print the name of the current patch"
2898 msgstr "udskriver navnet på den nuværende rettelse"
2899
2900 msgid "print the name of the next patch"
2901 msgstr "udskriver navnet på den næste rettelse"
2902
2903 msgid "all patches applied\n"
2904 msgstr "alle rettelser er anvendt\n"
2905
2906 msgid "print the name of the previous patch"
2907 msgstr "udskriver navnet på den forgående rettelse"
2908
2909 msgid "only one patch applied\n"
2910 msgstr "kun én rettelse er anvendt\n"
2911
2912 msgid ""
2913 "create a new patch\n"
2914 "\n"
2915 " qnew creates a new patch on top of the currently-applied patch (if "
2916 "any).\n"
2917 " It will refuse to run if there are any outstanding changes unless -f is\n"
2918 " specified, in which case the patch will be initialized with them. You\n"
2919 " may also use -I, -X, and/or a list of files after the patch name to add\n"
2920 " only changes to matching files to the new patch, leaving the rest as\n"
2921 " uncommitted modifications.\n"
2922 "\n"
2923 " -u and -d can be used to set the (given) user and date, respectively.\n"
2924 " -U and -D set user to current user and date to current date.\n"
2925 "\n"
2926 " -e, -m or -l set the patch header as well as the commit message. If "
2927 "none\n"
2928 " is specified, the header is empty and the commit message is '[mq]: "
2929 "PATCH'.\n"
2930 "\n"
2931 " Use the --git option to keep the patch in the git extended diff\n"
2932 " format. Read the diffs help topic for more information on why this\n"
2933 " is important for preserving permission changes and copy/rename\n"
2934 " information.\n"
2935 " "
2936 msgstr ""
2937
2938 msgid ""
2939 "update the current patch\n"
2940 "\n"
2941 " If any file patterns are provided, the refreshed patch will contain "
2942 "only\n"
2943 " the modifications that match those patterns; the remaining "
2944 "modifications\n"
2945 " will remain in the working directory.\n"
2946 "\n"
2947 " If --short is specified, files currently included in the patch will\n"
2948 " be refreshed just like matched files and remain in the patch.\n"
2949 "\n"
2950 " hg add/remove/copy/rename work as usual, though you might want to use\n"
2951 " git-style patches (--git or [diff] git=1) to track copies and renames.\n"
2952 " See the diffs help topic for more information on the git diff format.\n"
2953 " "
2954 msgstr ""
2955
2956 msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
2957 msgstr ""
2958
2959 msgid ""
2960 "diff of the current patch and subsequent modifications\n"
2961 "\n"
2962 " Shows a diff which includes the current patch as well as any changes "
2963 "which\n"
2964 " have been made in the working directory since the last refresh (thus\n"
2965 " showing what the current patch would become after a qrefresh).\n"
2966 "\n"
2967 " Use 'hg diff' if you only want to see the changes made since the last\n"
2968 " qrefresh, or 'hg export qtip' if you want to see changes made by the\n"
2969 " current patch without including changes made since the qrefresh.\n"
2970 " "
2971 msgstr ""
2972
2973 msgid ""
2974 "fold the named patches into the current patch\n"
2975 "\n"
2976 " Patches must not yet be applied. Each patch will be successively\n"
2977 " applied to the current patch in the order given. If all the\n"
2978 " patches apply successfully, the current patch will be refreshed\n"
2979 " with the new cumulative patch, and the folded patches will\n"
2980 " be deleted. With -k/--keep, the folded patch files will not\n"
2981 " be removed afterwards.\n"
2982 "\n"
2983 " The header for each folded patch will be concatenated with\n"
2984 " the current patch header, separated by a line of '* * *'."
2985 msgstr ""
2986
2987 msgid "qfold requires at least one patch name"
2988 msgstr ""
2989
2990 msgid "No patches applied"
2991 msgstr "Ingen rettelser anvendt"
2992
2993 #, python-format
2994 msgid "Skipping already folded patch %s"
2995 msgstr ""
2996
2997 #, python-format
2998 msgid "qfold cannot fold already applied patch %s"
2999 msgstr ""
3000
3001 #, python-format
3002 msgid "Error folding patch %s"
3003 msgstr ""
3004
3005 msgid "push or pop patches until named patch is at top of stack"
3006 msgstr ""
3007
3008 msgid ""
3009 "set or print guards for a patch\n"
3010 "\n"
3011 " Guards control whether a patch can be pushed. A patch with no\n"
3012 " guards is always pushed. A patch with a positive guard (\"+foo\") is\n"
3013 " pushed only if the qselect command has activated it. A patch with\n"
3014 " a negative guard (\"-foo\") is never pushed if the qselect command\n"
3015 " has activated it.\n"
3016 "\n"
3017 " With no arguments, print the currently active guards.\n"
3018 " With arguments, set guards for the named patch.\n"
3019 " NOTE: Specifying negative guards now requires '--'.\n"
3020 "\n"
3021 " To set guards on another patch:\n"
3022 " hg qguard -- other.patch +2.6.17 -stable\n"
3023 " "
3024 msgstr ""
3025
3026 msgid "cannot mix -l/--list with options or arguments"
3027 msgstr ""
3028
3029 msgid "no patch to work with"
3030 msgstr ""
3031
3032 #, python-format
3033 msgid "no patch named %s"
3034 msgstr "ingen patch ved navn %s"
3035
3036 msgid "print the header of the topmost or specified patch"
3037 msgstr ""
3038
3039 msgid ""
3040 "push the next patch onto the stack\n"
3041 "\n"
3042 " When --force is applied, all local changes in patched files will be "
3043 "lost.\n"
3044 " "
3045 msgstr ""
3046
3047 msgid "no saved queues found, please use -n\n"
3048 msgstr ""
3049
3050 #, python-format
3051 msgid "merging with queue at: %s\n"
3052 msgstr ""
3053
3054 msgid ""
3055 "pop the current patch off the stack\n"
3056 "\n"
3057 " By default, pops off the top of the patch stack. If given a patch name,\n"
3058 " keeps popping off patches until the named patch is at the top of the "
3059 "stack.\n"
3060 " "
3061 msgstr ""
3062
3063 #, python-format
3064 msgid "using patch queue: %s\n"
3065 msgstr ""
3066
3067 msgid ""
3068 "rename a patch\n"
3069 "\n"
3070 " With one argument, renames the current patch to PATCH1.\n"
3071 " With two arguments, renames PATCH1 to PATCH2."
3072 msgstr ""
3073
3074 #, python-format
3075 msgid "%s already exists"
3076 msgstr "%s eksisterer allerede"
3077
3078 #, python-format
3079 msgid "A patch named %s already exists in the series file"
3080 msgstr ""
3081
3082 msgid "restore the queue state saved by a rev"
3083 msgstr ""
3084
3085 msgid "save current queue state"
3086 msgstr ""
3087
3088 #, python-format
3089 msgid "destination %s exists and is not a directory"
3090 msgstr ""
3091
3092 #, python-format
3093 msgid "destination %s exists, use -f to force"
3094 msgstr ""
3095
3096 #, python-format
3097 msgid "copy %s to %s\n"
3098 msgstr ""
3099
3100 msgid ""
3101 "strip a revision and all its descendants from the repository\n"
3102 "\n"
3103 " If one of the working dir's parent revisions is stripped, the working\n"
3104 " directory will be updated to the parent of the stripped revision.\n"
3105 " "
3106 msgstr ""
3107
3108 msgid ""
3109 "set or print guarded patches to push\n"
3110 "\n"
3111 " Use the qguard command to set or print guards on patch, then use\n"
3112 " qselect to tell mq which guards to use. A patch will be pushed if it\n"
3113 " has no guards or any positive guards match the currently selected "
3114 "guard,\n"
3115 " but will not be pushed if any negative guards match the current guard.\n"
3116 " For example:\n"
3117 "\n"
3118 " qguard foo.patch -stable (negative guard)\n"
3119 " qguard bar.patch +stable (positive guard)\n"
3120 " qselect stable\n"
3121 "\n"
3122 " This activates the \"stable\" guard. mq will skip foo.patch (because\n"
3123 " it has a negative match) but push bar.patch (because it\n"
3124 " has a positive match).\n"
3125 "\n"
3126 " With no arguments, prints the currently active guards.\n"
3127 " With one argument, sets the active guard.\n"
3128 "\n"
3129 " Use -n/--none to deactivate guards (no other arguments needed).\n"
3130 " When no guards are active, patches with positive guards are skipped\n"
3131 " and patches with negative guards are pushed.\n"
3132 "\n"
3133 " qselect can change the guards on applied patches. It does not pop\n"
3134 " guarded patches by default. Use --pop to pop back to the last applied\n"
3135 " patch that is not guarded. Use --reapply (which implies --pop) to push\n"
3136 " back to the current patch afterwards, but skip guarded patches.\n"
3137 "\n"
3138 " Use -s/--series to print a list of all guards in the series file (no\n"
3139 " other arguments needed). Use -v for more information."
3140 msgstr ""
3141
3142 msgid "guards deactivated\n"
3143 msgstr ""
3144
3145 #, python-format
3146 msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
3147 msgstr ""
3148
3149 #, python-format
3150 msgid "number of guarded, applied patches has changed from %d to %d\n"
3151 msgstr ""
3152
3153 msgid "guards in series file:\n"
3154 msgstr ""
3155
3156 msgid "no guards in series file\n"
3157 msgstr ""
3158
3159 msgid "active guards:\n"
3160 msgstr ""
3161
3162 msgid "no active guards\n"
3163 msgstr ""
3164
3165 msgid "popping guarded patches\n"
3166 msgstr ""
3167
3168 msgid "reapplying unguarded patches\n"
3169 msgstr ""
3170
3171 msgid ""
3172 "move applied patches into repository history\n"
3173 "\n"
3174 " Finishes the specified revisions (corresponding to applied patches) by\n"
3175 " moving them out of mq control into regular repository history.\n"
3176 "\n"
3177 " Accepts a revision range or the --applied option. If --applied is\n"
3178 " specified, all applied mq revisions are removed from mq control.\n"
3179 " Otherwise, the given revisions must be at the base of the stack of\n"
3180 " applied patches.\n"
3181 "\n"
3182 " This can be especially useful if your changes have been applied to an\n"
3183 " upstream repository, or if you are about to push your changes to "
3184 "upstream.\n"
3185 " "
3186 msgstr ""
3187
3188 msgid "no revisions specified"
3189 msgstr ""
3190
3191 msgid "cannot commit over an applied mq patch"
3192 msgstr ""
3193
3194 msgid "source has mq patches applied"
3195 msgstr ""
3196
3197 #, python-format
3198 msgid "mq status file refers to unknown node %s\n"
3199 msgstr ""
3200
3201 #, python-format
3202 msgid "Tag %s overrides mq patch of the same name\n"
3203 msgstr ""
3204
3205 msgid "cannot import over an applied patch"
3206 msgstr ""
3207
3208 msgid "print first line of patch header"
3209 msgstr ""
3210
3211 msgid "hg qapplied [-s] [PATCH]"
3212 msgstr ""
3213
3214 msgid "use pull protocol to copy metadata"
3215 msgstr ""
3216
3217 msgid "do not update the new working directories"
3218 msgstr ""
3219
3220 msgid "use uncompressed transfer (fast over LAN)"
3221 msgstr ""
3222
3223 msgid "location of source patch repo"
3224 msgstr ""
3225
3226 msgid "hg qclone [OPTION]... SOURCE [DEST]"
3227 msgstr ""
3228
3229 msgid "hg qcommit [OPTION]... [FILE]..."
3230 msgstr ""
3231
3232 msgid "hg qdiff [OPTION]... [FILE]..."
3233 msgstr ""
3234
3235 msgid "keep patch file"
3236 msgstr ""
3237
3238 msgid "stop managing a revision"
3239 msgstr ""
3240
3241 msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
3242 msgstr ""
3243
3244 msgid "edit patch header"
3245 msgstr ""
3246
3247 msgid "keep folded patch files"
3248 msgstr ""
3249
3250 msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
3251 msgstr ""
3252
3253 msgid "overwrite any local changes"
3254 msgstr ""
3255
3256 msgid "hg qgoto [OPTION]... PATCH"
3257 msgstr ""
3258
3259 msgid "list all patches and guards"
3260 msgstr ""
3261
3262 msgid "drop all guards"
3263 msgstr ""
3264
3265 msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
3266 msgstr ""
3267
3268 msgid "hg qheader [PATCH]"
3269 msgstr ""
3270
3271 msgid "import file in patch dir"
3272 msgstr ""
3273
3274 msgid "patch file name"
3275 msgstr "patch navn"
3276
3277 msgid "overwrite existing files"
3278 msgstr ""
3279
3280 msgid "place existing revisions under mq control"
3281 msgstr ""
3282
3283 msgid "use git extended diff format"
3284 msgstr ""
3285
3286 msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE..."
3287 msgstr ""
3288
3289 msgid "create queue repository"
3290 msgstr "opret kø-repository"
3291
3292 msgid "hg qinit [-c]"
3293 msgstr ""
3294
3295 msgid "import uncommitted changes into patch"
3296 msgstr ""
3297
3298 msgid "add \"From: <current user>\" to patch"
3299 msgstr ""
3300
3301 msgid "add \"From: <given user>\" to patch"
3302 msgstr ""
3303
3304 msgid "add \"Date: <current date>\" to patch"
3305 msgstr ""
3306
3307 msgid "add \"Date: <given date>\" to patch"
3308 msgstr ""
3309
3310 msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
3311 msgstr ""
3312
3313 msgid "hg qnext [-s]"
3314 msgstr ""
3315
3316 msgid "hg qprev [-s]"
3317 msgstr ""
3318
3319 msgid "pop all patches"
3320 msgstr ""
3321
3322 msgid "queue name to pop"
3323 msgstr ""
3324
3325 msgid "forget any local changes"
3326 msgstr ""
3327
3328 msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
3329 msgstr ""
3330
3331 msgid "apply if the patch has rejects"
3332 msgstr ""
3333
3334 msgid "list patch name in commit text"
3335 msgstr ""
3336
3337 msgid "apply all patches"
3338 msgstr ""
3339
3340 msgid "merge from another queue"
3341 msgstr ""
3342
3343 msgid "merge queue name"
3344 msgstr ""
3345
3346 msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
3347 msgstr ""
3348
3349 msgid "refresh only files already in the patch and specified files"
3350 msgstr ""
3351
3352 msgid "add/update \"From: <current user>\" in patch"
3353 msgstr ""
3354
3355 msgid "add/update \"From: <given user>\" in patch"
3356 msgstr ""
3357
3358 msgid "update \"Date: <current date>\" in patch (if present)"
3359 msgstr ""
3360
3361 msgid "update \"Date: <given date>\" in patch (if present)"
3362 msgstr ""
3363
3364 msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
3365 msgstr ""
3366
3367 msgid "hg qrename PATCH1 [PATCH2]"
3368 msgstr ""
3369
3370 msgid "delete save entry"
3371 msgstr ""
3372
3373 msgid "update queue working dir"
3374 msgstr ""
3375
3376 msgid "hg qrestore [-d] [-u] REV"
3377 msgstr ""
3378
3379 msgid "copy patch directory"
3380 msgstr ""
3381
3382 msgid "copy directory name"
3383 msgstr ""
3384
3385 msgid "clear queue status file"
3386 msgstr ""
3387
3388 msgid "force copy"
3389 msgstr ""
3390
3391 msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
3392 msgstr ""
3393
3394 msgid "disable all guards"
3395 msgstr ""
3396
3397 msgid "list all guards in series file"
3398 msgstr ""
3399
3400 msgid "pop to before first guarded applied patch"
3401 msgstr ""
3402
3403 msgid "pop, then reapply patches"
3404 msgstr ""
3405
3406 msgid "hg qselect [OPTION]... [GUARD]..."
3407 msgstr ""
3408
3409 msgid "print patches not in series"
3410 msgstr ""
3411
3412 msgid "hg qseries [-ms]"
3413 msgstr ""
3414
3415 msgid "force removal with local changes"
3416 msgstr ""
3417
3418 msgid "bundle unrelated changesets"
3419 msgstr ""
3420
3421 msgid "no backups"
3422 msgstr ""
3423
3424 msgid "hg strip [-f] [-b] [-n] REV"
3425 msgstr ""
3426
3427 msgid "hg qtop [-s]"
3428 msgstr ""
3429
3430 msgid "hg qunapplied [-s] [PATCH]"
3431 msgstr ""
3432
3433 msgid "finish all applied changesets"
3434 msgstr "afslut alle anvendte ændringer"
3435
3436 msgid "hg qfinish [-a] [REV...]"
3437 msgstr "hg qfinish [-a] [REV...]"
3438
3439 msgid ""
3440 "hook extension to email notifications on commits/pushes\n"
3441 "\n"
3442 "Subscriptions can be managed through hgrc. Default mode is to print\n"
3443 "messages to stdout, for testing and configuring.\n"
3444 "\n"
3445 "To use, configure notify extension and enable in hgrc like this:\n"
3446 "\n"
3447 " [extensions]\n"
3448 " hgext.notify =\n"
3449 "\n"
3450 " [hooks]\n"
3451 " # one email for each incoming changeset\n"
3452 " incoming.notify = python:hgext.notify.hook\n"
3453 " # batch emails when many changesets incoming at one time\n"
3454 " changegroup.notify = python:hgext.notify.hook\n"
3455 "\n"
3456 " [notify]\n"
3457 " # config items go in here\n"
3458 "\n"
3459 " config items:\n"
3460 "\n"
3461 " REQUIRED:\n"
3462 " config = /path/to/file # file containing subscriptions\n"
3463 "\n"
3464 " OPTIONAL:\n"
3465 " test = True # print messages to stdout for testing\n"
3466 " strip = 3 # number of slashes to strip for url paths\n"
3467 " domain = example.com # domain to use if committer missing domain\n"
3468 " style = ... # style file to use when formatting email\n"
3469 " template = ... # template to use when formatting email\n"
3470 " incoming = ... # template to use when run as incoming hook\n"
3471 " changegroup = ... # template when run as changegroup hook\n"
3472 " maxdiff = 300 # max lines of diffs to include (0=none, -1=all)\n"
3473 " maxsubject = 67 # truncate subject line longer than this\n"
3474 " diffstat = True # add a diffstat before the diff content\n"
3475 " sources = serve # notify if source of incoming changes in this "
3476 "list\n"
3477 " # (serve == ssh or http, push, pull, bundle)\n"
3478 " [email]\n"
3479 " from = user@host.com # email address to send as if none given\n"
3480 " [web]\n"
3481 " baseurl = http://hgserver/... # root of hg web site for browsing commits\n"
3482 "\n"
3483 " notify config file has same format as regular hgrc. it has two\n"
3484 " sections so you can express subscriptions in whatever way is handier\n"
3485 " for you.\n"
3486 "\n"
3487 " [usersubs]\n"
3488 " # key is subscriber email, value is \",\"-separated list of glob "
3489 "patterns\n"
3490 " user@host = pattern\n"
3491 "\n"
3492 " [reposubs]\n"
3493 " # key is glob pattern, value is \",\"-separated list of subscriber "
3494 "emails\n"
3495 " pattern = user@host\n"
3496 "\n"
3497 " glob patterns are matched against path to repo root.\n"
3498 "\n"
3499 " if you like, you can put notify config file in repo that users can\n"
3500 " push changes to, they can manage their own subscriptions."
3501 msgstr ""
3502
3503 msgid "email notification class."
3504 msgstr ""
3505
3506 msgid "strip leading slashes from local path, turn into web-safe path."
3507 msgstr ""
3508
3509 msgid "try to clean up email addresses."
3510 msgstr ""
3511
3512 msgid "return list of email addresses of subscribers to this repo."
3513 msgstr ""
3514
3515 msgid "format one changeset."
3516 msgstr ""
3517
3518 msgid "true if incoming changes from this source should be skipped."
3519 msgstr ""
3520
3521 msgid "send message."
3522 msgstr ""
3523
3524 #, python-format
3525 msgid "%s: %d new changesets"
3526 msgstr "%s: %d nye ændringer"
3527
3528 #, python-format
3529 msgid "notify: sending %d subscribers %d changes\n"
3530 msgstr "notify: sender %d abonnenter %d ændringer\n"
3531
3532 #, python-format
3533 msgid ""
3534 "\n"
3535 "diffs (truncated from %d to %d lines):\n"
3536 "\n"
3537 msgstr ""
3538
3539 #, python-format
3540 msgid ""
3541 "\n"
3542 "diffs (%d lines):\n"
3543 "\n"
3544 msgstr ""
3545
3546 msgid ""
3547 "send email notifications to interested subscribers.\n"
3548 "\n"
3549 " if used as changegroup hook, send one email for all changesets in\n"
3550 " changegroup. else send one email per changeset."
3551 msgstr ""
3552
3553 #, python-format
3554 msgid "notify: no subscribers to repo %s\n"
3555 msgstr ""
3556
3557 #, python-format
3558 msgid "notify: changes have source \"%s\" - skipping\n"
3559 msgstr ""
3560
3561 msgid ""
3562 "browse command output with external pager\n"
3563 "\n"
3564 "To set the pager that should be used, set the application variable:\n"
3565 "\n"
3566 " [pager]\n"
3567 " pager = LESS='FSRX' less\n"
3568 "\n"
3569 "If no pager is set, the pager extensions uses the environment\n"
3570 "variable $PAGER. If neither pager.pager, nor $PAGER is set, no pager\n"
3571 "is used.\n"
3572 "\n"
3573 "If you notice \"BROKEN PIPE\" error messages, you can disable them\n"
3574 "by setting:\n"
3575 "\n"
3576 " [pager]\n"
3577 " quiet = True\n"
3578 "\n"
3579 "You can disable the pager for certain commands by adding them to the\n"
3580 "pager.ignore list:\n"
3581 "\n"
3582 " [pager]\n"
3583 " ignore = version, help, update\n"
3584 "\n"
3585 "You can also enable the pager only for certain commands using pager.attend:\n"
3586 "\n"
3587 " [pager]\n"
3588 " attend = log\n"
3589 "\n"
3590 "If pager.attend is present, pager.ignore will be ignored.\n"
3591 "\n"
3592 "To ignore global commands like \"hg version\" or \"hg help\", you have to "
3593 "specify\n"
3594 "them in the global .hgrc\n"
3595 msgstr ""
3596
3597 msgid ""
3598 "use suffixes to refer to ancestor revisions\n"
3599 "\n"
3600 "This extension allows you to use git-style suffixes to refer to\n"
3601 "the ancestors of a specific revision.\n"
3602 "\n"
3603 "For example, if you can refer to a revision as \"foo\", then:\n"
3604 "\n"
3605 "- foo^N = Nth parent of foo:\n"
3606 " foo^0 = foo\n"
3607 " foo^1 = first parent of foo\n"
3608 " foo^2 = second parent of foo\n"
3609 " foo^ = foo^1\n"
3610 "\n"
3611 "- foo~N = Nth first grandparent of foo\n"
3612 " foo~0 = foo\n"
3613 " foo~1 = foo^1 = foo^ = first parent of foo\n"
3614 " foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
3615 msgstr ""
3616
3617 msgid ""
3618 "sending Mercurial changesets as a series of patch emails\n"
3619 "\n"
3620 "The series is started off with a \"[PATCH 0 of N]\" introduction,\n"
3621 "which describes the series as a whole.\n"
3622 "\n"
3623 "Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
3624 "the first line of the changeset description as the subject text.\n"
3625 "The message contains two or three body parts:\n"
3626 "\n"
3627 " The remainder of the changeset description.\n"
3628 "\n"
3629 " [Optional] The result of running diffstat on the patch.\n"
3630 "\n"
3631 " The patch itself, as generated by \"hg export\".\n"
3632 "\n"
3633 "Each message refers to all of its predecessors using the In-Reply-To\n"
3634 "and References headers, so they will show up as a sequence in\n"
3635 "threaded mail and news readers, and in mail archives.\n"
3636 "\n"
3637 "For each changeset, you will be prompted with a diffstat summary and\n"
3638 "the changeset summary, so you can be sure you are sending the right "
3639 "changes.\n"
3640 "\n"
3641 "To enable this extension:\n"
3642 "\n"
3643 " [extensions]\n"
3644 " hgext.patchbomb =\n"
3645 "\n"
3646 "To configure other defaults, add a section like this to your hgrc file:\n"
3647 "\n"
3648 " [email]\n"
3649 " from = My Name <my@email>\n"
3650 " to = recipient1, recipient2, ...\n"
3651 " cc = cc1, cc2, ...\n"
3652 " bcc = bcc1, bcc2, ...\n"
3653 "\n"
3654 "Then you can use the \"hg email\" command to mail a series of changesets\n"
3655 "as a patchbomb.\n"
3656 "\n"
3657 "To avoid sending patches prematurely, it is a good idea to first run\n"
3658 "the \"email\" command with the \"-n\" option (test only). You will be\n"
3659 "prompted for an email recipient address, a subject an an introductory\n"
3660 "message describing the patches of your patchbomb. Then when all is\n"
3661 "done, patchbomb messages are displayed. If PAGER environment variable\n"
3662 "is set, your pager will be fired up once for each patchbomb message, so\n"
3663 "you can verify everything is alright.\n"
3664 "\n"
3665 "The \"-m\" (mbox) option is also very useful. Instead of previewing\n"
3666 "each patchbomb message in a pager or sending the messages directly,\n"
3667 "it will create a UNIX mailbox file with the patch emails. This\n"
3668 "mailbox file can be previewed with any mail user agent which supports\n"
3669 "UNIX mbox files, i.e. with mutt:\n"
3670 "\n"
3671 " % mutt -R -f mbox\n"
3672 "\n"
3673 "When you are previewing the patchbomb messages, you can use `formail'\n"
3674 "(a utility that is commonly installed as part of the procmail package),\n"
3675 "to send each message out:\n"
3676 "\n"
3677 " % formail -s sendmail -bm -t < mbox\n"
3678 "\n"
3679 "That should be all. Now your patchbomb is on its way out.\n"
3680 "\n"
3681 "You can also either configure the method option in the email section\n"
3682 "to be a sendmail compatable mailer or fill out the [smtp] section so\n"
3683 "that the patchbomb extension can automatically send patchbombs directly\n"
3684 "from the commandline. See the [email] and [smtp] sections in hgrc(5)\n"
3685 "for details."
3686 msgstr ""
3687
3688 msgid "Please enter a valid value.\n"
3689 msgstr ""
3690
3691 msgid "does the diffstat above look okay? "
3692 msgstr ""
3693
3694 msgid "diffstat rejected"
3695 msgstr "diffstat afvist"
3696
3697 msgid ""
3698 "send changesets by email\n"
3699 "\n"
3700 " By default, diffs are sent in the format generated by hg export,\n"
3701 " one per message. The series starts with a \"[PATCH 0 of N]\"\n"
3702 " introduction, which describes the series as a whole.\n"
3703 "\n"
3704 " Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
3705 " the first line of the changeset description as the subject text.\n"
3706 " The message contains two or three body parts. First, the rest of\n"
3707 " the changeset description. Next, (optionally) if the diffstat\n"
3708 " program is installed, the result of running diffstat on the patch.\n"
3709 " Finally, the patch itself, as generated by \"hg export\".\n"
3710 "\n"
3711 " With --outgoing, emails will be generated for patches not\n"
3712 " found in the destination repository (or only those which are\n"
3713 " ancestors of the specified revisions if any are provided)\n"
3714 "\n"
3715 " With --bundle, changesets are selected as for --outgoing,\n"
3716 " but a single email containing a binary Mercurial bundle as an\n"
3717 " attachment will be sent.\n"
3718 "\n"
3719 " Examples:\n"
3720 "\n"
3721 " hg email -r 3000 # send patch 3000 only\n"
3722 " hg email -r 3000 -r 3001 # send patches 3000 and 3001\n"
3723 " hg email -r 3000:3005 # send patches 3000 through 3005\n"
3724 " hg email 3000 # send patch 3000 (deprecated)\n"
3725 "\n"
3726 " hg email -o # send all patches not in default\n"
3727 " hg email -o DEST # send all patches not in DEST\n"
3728 " hg email -o -r 3000 # send all ancestors of 3000 not in default\n"
3729 " hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST\n"
3730 "\n"
3731 " hg email -b # send bundle of all patches not in default\n"
3732 " hg email -b DEST # send bundle of all patches not in DEST\n"
3733 " hg email -b -r 3000 # bundle of all ancestors of 3000 not in "
3734 "default\n"
3735 " hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST\n"
3736 "\n"
3737 " Before using this command, you will need to enable email in your hgrc.\n"
3738 " See the [email] section in hgrc(5) for details.\n"
3739 " "
3740 msgstr ""
3741
3742 msgid "Return the revisions present locally but not in dest"
3743 msgstr ""
3744
3745 msgid "specify at least one changeset with -r or -o"
3746 msgstr "angiv mindst en ændring med -r eller -o"
3747
3748 msgid "--outgoing mode always on with --bundle; do not re-specify --outgoing"
3749 msgstr ""
3750
3751 msgid "too many destinations"
3752 msgstr "for mange destinationer"
3753
3754 msgid "use only one form to specify the revision"
3755 msgstr ""
3756
3757 msgid ""
3758 "\n"
3759 "Write the introductory message for the patch series.\n"
3760 "\n"
3761 msgstr ""
3762
3763 #, python-format
3764 msgid ""
3765 "This patch series consists of %d patches.\n"
3766 "\n"
3767 msgstr ""
3768
3769 msgid "Final summary:\n"
3770 msgstr ""
3771
3772 msgid "Displaying "
3773 msgstr ""
3774
3775 msgid "Writing "
3776 msgstr ""
3777
3778 msgid "Sending "
3779 msgstr ""
3780
3781 msgid "send patches as attachments"
3782 msgstr ""
3783
3784 msgid "send patches as inline attachments"
3785 msgstr ""
3786
3787 msgid "email addresses of blind copy recipients"
3788 msgstr ""
3789
3790 msgid "email addresses of copy recipients"
3791 msgstr ""
3792
3793 msgid "add diffstat output to messages"
3794 msgstr ""
3795
3796 msgid "use the given date as the sending date"
3797 msgstr ""
3798
3799 msgid "use the given file as the series description"
3800 msgstr ""
3801
3802 msgid "email address of sender"
3803 msgstr ""
3804
3805 msgid "print messages that would be sent"
3806 msgstr ""
3807
3808 msgid "write messages to mbox file instead of sending them"
3809 msgstr ""
3810
3811 msgid "subject of first message (intro or single patch)"
3812 msgstr ""
3813
3814 msgid "email addresses of recipients"
3815 msgstr ""
3816
3817 msgid "omit hg patch header"
3818 msgstr ""
3819
3820 msgid "send changes not found in the target repository"
3821 msgstr ""
3822
3823 msgid "send changes not in target as a binary bundle"
3824 msgstr ""
3825
3826 msgid "a revision to send"
3827 msgstr ""
3828
3829 msgid "run even when remote repository is unrelated (with -b)"
3830 msgstr ""
3831
3832 msgid "a base changeset to specify instead of a destination (with -b)"
3833 msgstr ""
3834
3835 msgid "send an introduction email for a single patch"
3836 msgstr ""
3837
3838 msgid "hg email [OPTION]... [DEST]..."
3839 msgstr ""
3840
3841 msgid ""
3842 "removes files not tracked by Mercurial\n"
3843 "\n"
3844 " Delete files not known to Mercurial. This is useful to test local and\n"
3845 " uncommitted changes in an otherwise-clean source tree.\n"
3846 "\n"
3847 " This means that purge will delete:\n"
3848 " - Unknown files: files marked with \"?\" by \"hg status\"\n"
3849 " - Empty directories: in fact Mercurial ignores directories unless they\n"
3850 " contain files under source control managment\n"
3851 " But it will leave untouched:\n"
3852 " - Modified and unmodified tracked files\n"
3853 " - Ignored files (unless --all is specified)\n"
3854 " - New files added to the repository (with \"hg add\")\n"
3855 "\n"
3856 " If directories are given on the command line, only files in these\n"
3857 " directories are considered.\n"
3858 "\n"
3859 " Be careful with purge, as you could irreversibly delete some files you\n"
3860 " forgot to add to the repository. If you only want to print the list of\n"
3861 " files that this program would delete, use the --print option.\n"
3862 " "
3863 msgstr ""
3864
3865 #, python-format
3866 msgid "%s cannot be removed"
3867 msgstr ""
3868
3869 #, python-format
3870 msgid "warning: %s\n"
3871 msgstr ""
3872
3873 #, python-format
3874 msgid "Removing file %s\n"
3875 msgstr ""
3876
3877 #, python-format
3878 msgid "Removing directory %s\n"
3879 msgstr ""
3880
3881 msgid "abort if an error occurs"
3882 msgstr ""
3883
3884 msgid "purge ignored files too"
3885 msgstr ""
3886
3887 msgid "print the file names instead of deleting them"
3888 msgstr ""
3889
3890 msgid "end filenames with NUL, for use with xargs (implies -p)"
3891 msgstr ""
3892
3893 msgid "hg purge [OPTION]... [DIR]..."
3894 msgstr ""
3895
3896 msgid ""
3897 "move sets of revisions to a different ancestor\n"
3898 "\n"
3899 "This extension lets you rebase changesets in an existing Mercurial "
3900 "repository.\n"
3901 "\n"
3902 "For more information:\n"
3903 "http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
3904 msgstr ""
3905
3906 msgid "return the correct ancestor"
3907 msgstr ""
3908
3909 msgid "first revision, do not change ancestor\n"
3910 msgstr ""
3911
3912 msgid ""
3913 "move changeset (and descendants) to a different branch\n"
3914 "\n"
3915 " Rebase uses repeated merging to graft changesets from one part of "
3916 "history\n"
3917 " onto another. This can be useful for linearizing local changes relative "
3918 "to\n"
3919 " a master development tree.\n"
3920 "\n"
3921 " If a rebase is interrupted to manually resolve a merge, it can be "
3922 "continued\n"
3923 " with --continue or aborted with --abort.\n"
3924 " "
3925 msgstr ""
3926
3927 msgid "cannot use both keepbranches and extrafn"
3928 msgstr ""
3929
3930 msgid "cannot use both abort and continue"
3931 msgstr ""
3932
3933 msgid "cannot use collapse with continue or abort"
3934 msgstr ""
3935
3936 msgid "abort and continue do not allow specifying revisions"
3937 msgstr ""
3938
3939 msgid "cannot specify both a revision and a base"
3940 msgstr ""
3941
3942 msgid "nothing to rebase\n"
3943 msgstr ""
3944
3945 msgid "rebase merging completed\n"
3946 msgstr ""
3947
3948 msgid "warning: new changesets detected on source branch, not stripping\n"
3949 msgstr ""
3950
3951 msgid "rebase completed\n"
3952 msgstr ""
3953
3954 #, python-format
3955 msgid "%d revisions have been skipped\n"
3956 msgstr ""
3957
3958 msgid ""
3959 "Skip commit if collapsing has been required and rev is not the last\n"
3960 " revision, commit otherwise\n"
3961 " "
3962 msgstr ""
3963
3964 msgid " set parents\n"
3965 msgstr ""
3966
3967 msgid "Rebase a single revision"
3968 msgstr ""
3969
3970 #, python-format
3971 msgid "rebasing %d:%s\n"
3972 msgstr ""
3973
3974 #, python-format
3975 msgid " future parents are %d and %d\n"
3976 msgstr ""
3977
3978 #, python-format
3979 msgid " update to %d:%s\n"
3980 msgstr " opdater til %d:%s\n"
3981
3982 msgid " already in target\n"
3983 msgstr ""
3984
3985 #, python-format
3986 msgid " merge against %d:%s\n"
3987 msgstr ""
3988
3989 msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
3990 msgstr ""
3991
3992 msgid "resuming interrupted rebase\n"
3993 msgstr ""
3994
3995 #, python-format
3996 msgid "no changes, revision %d skipped\n"
3997 msgstr ""
3998
3999 #, python-format
4000 msgid "next revision set to %s\n"
4001 msgstr ""
4002
4003 msgid "Return the new parent relationship of the revision that will be rebased"
4004 msgstr ""
4005
4006 #, python-format
4007 msgid "cannot use revision %d as base, result would have 3 parents"
4008 msgstr ""
4009
4010 msgid "Update rebased mq patches - finalize and then import them"
4011 msgstr ""
4012
4013 #, python-format
4014 msgid "revision %d is an mq patch (%s), finalize it.\n"
4015 msgstr ""
4016
4017 #, python-format
4018 msgid "import mq patch %d (%s)\n"
4019 msgstr ""
4020
4021 msgid "Store the current status to allow recovery"
4022 msgstr ""
4023
4024 msgid "rebase status stored\n"
4025 msgstr ""
4026
4027 msgid "Remove the status files"
4028 msgstr ""
4029
4030 msgid "Restore a previously stored status"
4031 msgstr ""
4032
4033 msgid "rebase status resumed\n"
4034 msgstr ""
4035
4036 msgid "no rebase in progress"
4037 msgstr ""
4038
4039 msgid "Restore the repository to its original state"
4040 msgstr ""
4041
4042 msgid "warning: new changesets detected on target branch, not stripping\n"
4043 msgstr ""
4044
4045 msgid "rebase aborted\n"
4046 msgstr ""
4047
4048 msgid "Define which revisions are going to be rebased and where"
4049 msgstr ""
4050
4051 msgid "cannot rebase onto an applied mq patch"
4052 msgstr ""
4053
4054 msgid "cannot rebase an ancestor"
4055 msgstr ""
4056
4057 msgid "cannot rebase a descendant"
4058 msgstr ""
4059
4060 msgid "already working on current\n"
4061 msgstr ""
4062
4063 msgid "already working on the current branch\n"
4064 msgstr ""
4065
4066 #, python-format
4067 msgid "rebase onto %d starting from %d\n"
4068 msgstr ""
4069
4070 msgid "unable to collapse, there is more than one external parent"
4071 msgstr ""
4072
4073 msgid "Call rebase after pull if the latter has been invoked with --rebase"
4074 msgstr ""
4075
4076 msgid "--update and --rebase are not compatible, ignoring the update flag\n"
4077 msgstr ""
4078
4079 msgid "Replace pull with a decorator to provide --rebase option"
4080 msgstr ""
4081
4082 msgid "rebase working directory to branch head"
4083 msgstr ""
4084
4085 msgid "keep original revisions"
4086 msgstr ""
4087
4088 msgid "keep original branches"
4089 msgstr ""
4090
4091 msgid "rebase from a given revision"
4092 msgstr ""
4093
4094 msgid "rebase from the base of a given revision"
4095 msgstr ""
4096
4097 msgid "rebase onto a given revision"
4098 msgstr ""
4099
4100 msgid "collapse the rebased revisions"
4101 msgstr ""
4102
4103 msgid "continue an interrupted rebase"
4104 msgstr ""
4105
4106 msgid "abort an interrupted rebase"
4107 msgstr ""
4108
4109 msgid ""
4110 "hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]"
4111 msgstr ""
4112
4113 msgid "interactive change selection during commit or qrefresh"
4114 msgstr ""
4115
4116 msgid ""
4117 "like patch.iterhunks, but yield different events\n"
4118 "\n"
4119 " - ('file', [header_lines + fromfile + tofile])\n"
4120 " - ('context', [context_lines])\n"
4121 " - ('hunk', [hunk_lines])\n"
4122 " - ('range', (-start,len, +start,len, diffp))\n"
4123 " "
4124 msgstr ""
4125
4126 msgid "scan lr while predicate holds"
4127 msgstr ""
4128
4129 msgid ""
4130 "patch header\n"
4131 "\n"
4132 " XXX shoudn't we move this to mercurial/patch.py ?\n"
4133 " "
4134 msgstr ""
4135
4136 msgid "this modifies a binary file (all or nothing)\n"
4137 msgstr ""
4138
4139 msgid "this is a binary file\n"
4140 msgstr ""
4141
4142 #, python-format
4143 msgid "%d hunks, %d lines changed\n"
4144 msgstr ""
4145
4146 msgid "hunk -> (n+,n-)"
4147 msgstr ""
4148
4149 msgid ""
4150 "patch hunk\n"
4151 "\n"
4152 " XXX shouldn't we merge this with patch.hunk ?\n"
4153 " "
4154 msgstr ""
4155
4156 msgid "patch -> [] of hunks "
4157 msgstr ""
4158
4159 msgid "patch parsing state machine"
4160 msgstr ""
4161
4162 msgid "Interactively filter patch chunks into applied-only chunks"
4163 msgstr ""
4164
4165 msgid ""
4166 "fetch next portion from chunks until a 'header' is seen\n"
4167 " NB: header == new-file mark\n"
4168 " "
4169 msgstr ""
4170
4171 msgid ""
4172 "prompt query, and process base inputs\n"
4173 "\n"
4174 " - y/n for the rest of file\n"
4175 " - y/n for the rest\n"
4176 " - ? (help)\n"
4177 " - q (quit)\n"
4178 "\n"
4179 " else, input is returned to the caller.\n"
4180 " "
4181 msgstr ""
4182
4183 msgid "[Ynsfdaq?]"
4184 msgstr ""
4185
4186 msgid "y"
4187 msgstr ""
4188
4189 msgid "?"
4190 msgstr ""
4191
4192 msgid "y - record this change"
4193 msgstr ""
4194
4195 msgid "s"
4196 msgstr ""
4197
4198 msgid "f"
4199 msgstr ""
4200
4201 msgid "d"
4202 msgstr ""
4203
4204 msgid "a"
4205 msgstr ""
4206
4207 msgid "q"
4208 msgstr ""
4209
4210 msgid "user quit"
4211 msgstr ""
4212
4213 #, python-format
4214 msgid "examine changes to %s?"
4215 msgstr ""
4216
4217 msgid " and "
4218 msgstr ""
4219
4220 #, python-format
4221 msgid "record this change to %r?"
4222 msgstr ""
4223
4224 msgid ""
4225 "interactively select changes to commit\n"
4226 "\n"
4227 " If a list of files is omitted, all changes reported by \"hg status\"\n"
4228 " will be candidates for recording.\n"
4229 "\n"
4230 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
4231 "\n"
4232 " You will be prompted for whether to record changes to each\n"
4233 " modified file, and for files with multiple changes, for each\n"
4234 " change to use. For each query, the following responses are\n"
4235 " possible:\n"
4236 "\n"
4237 " y - record this change\n"
4238 " n - skip this change\n"
4239 "\n"
4240 " s - skip remaining changes to this file\n"
4241 " f - record remaining changes to this file\n"
4242 "\n"
4243 " d - done, skip remaining changes and files\n"
4244 " a - record all changes to all remaining files\n"
4245 " q - quit, recording no changes\n"
4246 "\n"
4247 " ? - display help"
4248 msgstr ""
4249
4250 msgid ""
4251 "interactively record a new patch\n"
4252 "\n"
4253 " see 'hg help qnew' & 'hg help record' for more information and usage\n"
4254 " "
4255 msgstr ""
4256
4257 msgid "'mq' extension not loaded"
4258 msgstr ""
4259
4260 msgid "running non-interactively, use commit instead"
4261 msgstr ""
4262
4263 msgid ""
4264 "This is generic record driver.\n"
4265 "\n"
4266 " It's job is to interactively filter local changes, and accordingly\n"
4267 " prepare working dir into a state, where the job can be delegated to\n"
4268 " non-interactive commit command such as 'commit' or 'qrefresh'.\n"
4269 "\n"
4270 " After the actual job is done by non-interactive command, working "
4271 "dir\n"
4272 " state is restored to original.\n"
4273 "\n"
4274 " In the end we'll record intresting changes, and everything else will "
4275 "be\n"
4276 " left in place, so the user can continue his work.\n"
4277 " "
4278 msgstr ""
4279
4280 msgid "no changes to record\n"
4281 msgstr ""
4282
4283 #, python-format
4284 msgid "backup %r as %r\n"
4285 msgstr ""
4286
4287 msgid "applying patch\n"
4288 msgstr ""
4289
4290 msgid "patch failed to apply"
4291 msgstr ""
4292
4293 #, python-format
4294 msgid "restoring %r to %r\n"
4295 msgstr ""
4296
4297 msgid "hg record [OPTION]... [FILE]..."
4298 msgstr ""
4299
4300 msgid "hg qrecord [OPTION]... PATCH [FILE]..."
4301 msgstr ""
4302
4303 msgid ""
4304 "patch transplanting tool\n"
4305 "\n"
4306 "This extension allows you to transplant patches from another branch.\n"
4307 "\n"
4308 "Transplanted patches are recorded in .hg/transplant/transplants, as a map\n"
4309 "from a changeset hash to its hash in the source repository.\n"
4310 msgstr ""
4311
4312 msgid ""
4313 "returns True if a node is already an ancestor of parent\n"
4314 " or has already been transplanted"
4315 msgstr ""
4316
4317 msgid "apply the revisions in revmap one by one in revision order"
4318 msgstr ""
4319
4320 #, python-format
4321 msgid "skipping already applied revision %s\n"
4322 msgstr ""
4323
4324 #, python-format
4325 msgid "skipping merge changeset %s:%s\n"
4326 msgstr ""
4327
4328 #, python-format
4329 msgid "%s merged at %s\n"
4330 msgstr ""
4331
4332 #, python-format
4333 msgid "%s transplanted to %s\n"
4334 msgstr ""
4335
4336 msgid "arbitrarily rewrite changeset before applying it"
4337 msgstr ""
4338
4339 #, python-format
4340 msgid "filtering %s\n"
4341 msgstr ""
4342
4343 msgid "filter failed"
4344 msgstr ""
4345
4346 msgid "apply the patch in patchfile to the repository as a transplant"
4347 msgstr ""
4348
4349 msgid "can only omit patchfile if merging"
4350 msgstr ""
4351
4352 #, python-format
4353 msgid "%s: empty changeset"
4354 msgstr "%s: tom ændring"
4355
4356 msgid "Fix up the merge and run hg transplant --continue"
4357 msgstr ""
4358
4359 msgid "recover last transaction and apply remaining changesets"
4360 msgstr ""
4361
4362 #, python-format
4363 msgid "%s transplanted as %s\n"
4364 msgstr ""
4365
4366 msgid "commit working directory using journal metadata"
4367 msgstr ""
4368
4369 msgid "transplant log file is corrupt"
4370 msgstr ""
4371
4372 #, python-format
4373 msgid "working dir not at transplant parent %s"
4374 msgstr ""
4375
4376 msgid "commit failed"
4377 msgstr ""
4378
4379 msgid "journal changelog metadata for later recover"
4380 msgstr ""
4381
4382 msgid "remove changelog journal"
4383 msgstr ""
4384
4385 msgid "interactively transplant changesets"
4386 msgstr "transplanter ændringer interaktivt"
4387
4388 msgid "apply changeset? [ynmpcq?]:"
4389 msgstr ""
4390
4391 msgid ""
4392 "transplant changesets from another branch\n"
4393 "\n"
4394 " Selected changesets will be applied on top of the current working\n"
4395 " directory with the log of the original changeset. If --log is\n"
4396 " specified, log messages will have a comment appended of the form:\n"
4397 "\n"
4398 " (transplanted from CHANGESETHASH)\n"
4399 "\n"
4400 " You can rewrite the changelog message with the --filter option.\n"
4401 " Its argument will be invoked with the current changelog message\n"
4402 " as $1 and the patch as $2.\n"
4403 "\n"
4404 " If --source is specified, selects changesets from the named\n"
4405 " repository. If --branch is specified, selects changesets from the\n"
4406 " branch holding the named revision, up to that revision. If --all\n"
4407 " is specified, all changesets on the branch will be transplanted,\n"
4408 " otherwise you will be prompted to select the changesets you want.\n"
4409 "\n"
4410 " hg transplant --branch REVISION --all will rebase the selected branch\n"
4411 " (up to the named revision) onto your current working directory.\n"
4412 "\n"
4413 " You can optionally mark selected transplanted changesets as\n"
4414 " merge changesets. You will not be prompted to transplant any\n"
4415 " ancestors of a merged transplant, and you can merge descendants\n"
4416 " of them normally instead of transplanting them.\n"
4417 "\n"
4418 " If no merges or revisions are provided, hg transplant will start\n"
4419 " an interactive changeset browser.\n"
4420 "\n"
4421 " If a changeset application fails, you can fix the merge by hand and\n"
4422 " then resume where you left off by calling hg transplant --continue.\n"
4423 " "
4424 msgstr ""
4425
4426 msgid "--continue is incompatible with branch, all or merge"
4427 msgstr ""
4428
4429 msgid "no source URL, branch tag or revision list provided"
4430 msgstr ""
4431
4432 msgid "--all requires a branch revision"
4433 msgstr ""
4434
4435 msgid "--all is incompatible with a revision list"
4436 msgstr ""
4437
4438 msgid "no revision checked out"
4439 msgstr ""
4440
4441 msgid "outstanding uncommitted merges"
4442 msgstr ""
4443
4444 msgid "outstanding local changes"
4445 msgstr ""
4446
4447 msgid "pull patches from REPOSITORY"
4448 msgstr ""
4449
4450 msgid "pull patches from branch BRANCH"
4451 msgstr ""
4452
4453 msgid "pull all changesets up to BRANCH"
4454 msgstr ""
4455
4456 msgid "skip over REV"
4457 msgstr "spring over REV"
4458
4459 msgid "merge at REV"
4460 msgstr ""
4461
4462 msgid "append transplant info to log message"
4463 msgstr ""
4464
4465 msgid "continue last transplant session after repair"
4466 msgstr ""
4467
4468 msgid "filter changesets through FILTER"
4469 msgstr ""
4470
4471 msgid ""
4472 "hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
4473 msgstr ""
4474
4475 msgid ""
4476 "allow to use MBCS path with problematic encoding.\n"
4477 "\n"
4478 "Some MBCS encodings are not good for some path operations\n"
4479 "(i.e. splitting path, case conversion, etc.) with its encoded bytes.\n"
4480 "We call such a encoding (i.e. shift_jis and big5) as \"problematic\n"
4481 "encoding\". This extension can be used to fix the issue with those\n"
4482 "encodings by wrapping some functions to convert to unicode string\n"
4483 "before path operation.\n"
4484 "\n"
4485 "This extension is usefull for:\n"
4486 " * Japanese Windows users using shift_jis encoding.\n"
4487 " * Chinese Windows users using big5 encoding.\n"
4488 " * All users who use a repository with one of problematic encodings\n"
4489 " on case-insensitive file system.\n"
4490 "\n"
4491 "This extension is not needed for:\n"
4492 " * Any user who use only ascii chars in path.\n"
4493 " * Any user who do not use any of problematic encodings.\n"
4494 "\n"
4495 "Note that there are some limitations on using this extension:\n"
4496 " * You should use single encoding in one repository.\n"
4497 " * You should set same encoding for the repository by locale or HGENCODING.\n"
4498 "\n"
4499 "To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
4500 "\n"
4501 " [extensions]\n"
4502 " hgext.win32mbcs =\n"
4503 "\n"
4504 "Path encoding conversion are done between unicode and util._encoding\n"
4505 "which is decided by mercurial from current locale setting or HGENCODING.\n"
4506 "\n"
4507 msgstr ""
4508
4509 #, python-format
4510 msgid "[win32mbcs] filename conversion fail with %s encoding\n"
4511 msgstr ""
4512
4513 msgid "[win32mbcs] cannot activate on this platform.\n"
4514 msgstr ""
4515
4516 #, python-format
4517 msgid "[win32mbcs] activated with encoding: %s\n"
4518 msgstr ""
4519
4520 #, python-format
4521 msgid ""
4522 "WARNING: %s already has %s line endings\n"
4523 "and does not need EOL conversion by the win32text plugin.\n"
4524 "Before your next commit, please reconsider your encode/decode settings in \n"
4525 "Mercurial.ini or %s.\n"
4526 msgstr ""
4527
4528 #, python-format
4529 msgid "Attempt to commit or push text file(s) using %s line endings\n"
4530 msgstr ""
4531
4532 #, python-format
4533 msgid "in %s: %s\n"
4534 msgstr ""
4535
4536 #, python-format
4537 msgid ""
4538 "\n"
4539 "To prevent this mistake in your local repository,\n"
4540 "add to Mercurial.ini or .hg/hgrc:\n"
4541 "\n"
4542 "[hooks]\n"
4543 "pretxncommit.%s = python:hgext.win32text.forbid%s\n"
4544 "\n"
4545 "and also consider adding:\n"
4546 "\n"
4547 "[extensions]\n"
4548 "hgext.win32text =\n"
4549 "[encode]\n"
4550 "** = %sencode:\n"
4551 "[decode]\n"
4552 "** = %sdecode:\n"
4553 msgstr ""
4554
4555 msgid ""
4556 "zeroconf support for mercurial repositories\n"
4557 "\n"
4558 "Zeroconf enabled repositories will be announced in a network without the "
4559 "need\n"
4560 "to configure a server or a service. They can be discovered without knowing\n"
4561 "their actual IP address.\n"
4562 "\n"
4563 "To use the zeroconf extension add the following entry to your hgrc file:\n"
4564 "\n"
4565 "[extensions]\n"
4566 "hgext.zeroconf =\n"
4567 "\n"
4568 "To allow other people to discover your repository using run \"hg serve\" in "
4569 "your\n"
4570 "repository.\n"
4571 "\n"
4572 " $ cd test\n"
4573 " $ hg serve\n"
4574 "\n"
4575 "You can discover zeroconf enabled repositories by running \"hg paths\".\n"
4576 "\n"
4577 " $ hg paths\n"
4578 " zc-test = http://example.com:8000/test\n"
4579 msgstr ""
4580
4581 msgid "archive prefix contains illegal components"
4582 msgstr "arkivpræfix indeholder ugyldige komponenter"
4583
4584 msgid "cannot give prefix when archiving to files"
4585 msgstr "kan ikke give præfix ved arkivering til filer"
4586
4587 #, python-format
4588 msgid "unknown archive type '%s'"
4589 msgstr "ukendt arkivtype '%s'"
4590
4591 msgid "invalid changegroup"
4592 msgstr ""
4593
4594 msgid "unknown parent"
4595 msgstr "ukendt forældre"
4596
4597 #, python-format
4598 msgid "integrity check failed on %s:%d"
4599 msgstr "integritetstjek fejlede på %s:%d"
4600
4601 #, python-format
4602 msgid "%s: not a Mercurial bundle file"
4603 msgstr "%s er ikke en Mercurial bundle fil"
4604
4605 #, python-format
4606 msgid "%s: unknown bundle version"
4607 msgstr "%s: ukendt bundle version"
4608
4609 #, python-format
4610 msgid "%s: unknown bundle compression type"
4611 msgstr "%s: ukendt bundle kompressionstype"
4612
4613 msgid "cannot create new bundle repository"
4614 msgstr ""
4615
4616 #, python-format
4617 msgid "premature EOF reading chunk (got %d bytes, expected %d)"
4618 msgstr "for tidlig EOF ved læsning af chunk (fik %d bytes, forventede %d)"
4619
4620 #, python-format
4621 msgid "username %s contains a newline"
4622 msgstr "brugernavn %s indeholder et linieskift"
4623
4624 msgid "options --message and --logfile are mutually exclusive"
4625 msgstr ""
4626
4627 #, python-format
4628 msgid "can't read commit message '%s': %s"
4629 msgstr "Kan ikke lase commit besked '%s': %s"
4630
4631 msgid "limit must be a positive integer"
4632 msgstr ""
4633
4634 msgid "limit must be positive"
4635 msgstr ""
4636
4637 msgid "too many revisions specified"
4638 msgstr "der er specificeret for mange revisioner"
4639
4640 #, python-format
4641 msgid "invalid format spec '%%%s' in output file name"
4642 msgstr ""
4643
4644 #, python-format
4645 msgid "adding %s\n"
4646 msgstr "tilføjer %s\n"
4647
4648 #, python-format
4649 msgid "removing %s\n"
4650 msgstr "fjerner %s\n"
4651
4652 #, python-format
4653 msgid "recording removal of %s as rename to %s (%d%% similar)\n"
4654 msgstr "noterer fjernelse af %s som en omdøbning til %s (%d%% lighed)\n"
4655
4656 #, python-format
4657 msgid "%s: not copying - file is not managed\n"
4658 msgstr "%s: kopierer ikke - filen er ikke versionsstyret\n"
4659
4660 #, python-format
4661 msgid "%s: not copying - file has been marked for remove\n"
4662 msgstr "%s: kopierer ikke - filen er markeret til sletning\n"
4663
4664 #, python-format
4665 msgid "%s: not overwriting - %s collides with %s\n"
4666 msgstr "%s: overskriver ikke - %s kolliderer med %s\n"
4667
4668 #, python-format
4669 msgid "%s: not overwriting - file exists\n"
4670 msgstr "%s: overskriver ikke - filen eksisterer\n"
4671
4672 #, python-format
4673 msgid "%s: deleted in working copy\n"
4674 msgstr "%s: slettet i arbejdskopien\n"
4675
4676 #, python-format
4677 msgid "%s: cannot copy - %s\n"
4678 msgstr "%s: kan ikke kopiere - %s\n"
4679
4680 #, python-format
4681 msgid "%s %s to %s\n"
4682 msgstr "%s: %s til %s\n"
4683
4684 #, python-format
4685 msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
4686 msgstr ""
4687 "%s er endnu ikke comitted, så der vil ikke blive gemt kopieringsdata for %"
4688 "s.\n"
4689
4690 msgid "no source or destination specified"
4691 msgstr "ingen kilde eller destination angivet"
4692
4693 msgid "no destination specified"
4694 msgstr "ingen destination angivet"
4695
4696 msgid "with multiple sources, destination must be an existing directory"
4697 msgstr ""
4698 "destinationen skal være en eksisterende mappe når der angivet flere kilder"
4699
4700 #, python-format
4701 msgid "destination %s is not a directory"
4702 msgstr "destinationen %s er ikke en mappe"
4703
4704 msgid "no files to copy"
4705 msgstr "ingen filer at kopiere"
4706
4707 msgid "(consider using --after)\n"
4708 msgstr "(overvej at bruge --after)\n"
4709
4710 #, python-format
4711 msgid "changeset: %d:%s\n"
4712 msgstr "ændring: %d:%s\n"
4713
4714 #, python-format
4715 msgid "branch: %s\n"
4716 msgstr "gren: %s\n"
4717
4718 #, python-format
4719 msgid "tag: %s\n"
4720 msgstr "mærkat: %s\n"
4721
4722 #, python-format
4723 msgid "parent: %d:%s\n"
4724 msgstr "forældre: %d:%s\n"
4725
4726 #, python-format
4727 msgid "manifest: %d:%s\n"
4728 msgstr ""
4729
4730 #, python-format
4731 msgid "user: %s\n"
4732 msgstr "bruger: %s\n"
4733
4734 #, python-format
4735 msgid "date: %s\n"
4736 msgstr "dato: %s\n"
4737
4738 msgid "files+:"
4739 msgstr "filer+:"
4740
4741 msgid "files-:"
4742 msgstr "filer-:"
4743
4744 msgid "files:"
4745 msgstr ""
4746
4747 #, python-format
4748 msgid "files: %s\n"
4749 msgstr "filer: %s\n"
4750
4751 #, python-format
4752 msgid "copies: %s\n"
4753 msgstr "kopier: %s\n"
4754
4755 #, python-format
4756 msgid "extra: %s=%s\n"
4757 msgstr "ekstra: %s=%s\n"
4758
4759 msgid "description:\n"
4760 msgstr "beskrivelse:\n"
4761
4762 #, python-format
4763 msgid "summary: %s\n"
4764 msgstr "uddrag: %s\n"
4765
4766 #, python-format
4767 msgid "%s: no key named '%s'"
4768 msgstr ""
4769
4770 #, python-format
4771 msgid "%s: %s"
4772 msgstr ""
4773
4774 #, python-format
4775 msgid "Found revision %s from %s\n"
4776 msgstr ""
4777
4778 msgid "revision matching date not found"
4779 msgstr ""
4780
4781 #, python-format
4782 msgid "cannot follow nonexistent file: \"%s\""
4783 msgstr ""
4784
4785 #, python-format
4786 msgid "%s:%s copy source revision cannot be found!\n"
4787 msgstr ""
4788
4789 msgid "can only follow copies/renames for explicit file names"
4790 msgstr ""
4791
4792 #, python-format
4793 msgid "file %s not found!"
4794 msgstr "filen %s blev ikke fundet!"
4795
4796 #, python-format
4797 msgid "no match under directory %s!"
4798 msgstr ""
4799
4800 #, python-format
4801 msgid "can't commit %s: unsupported file type!"
4802 msgstr ""
4803
4804 #, python-format
4805 msgid "file %s not tracked!"
4806 msgstr ""
4807
4808 msgid ""
4809 "add the specified files on the next commit\n"
4810 "\n"
4811 " Schedule files to be version controlled and added to the repository.\n"
4812 "\n"
4813 " The files will be added to the repository at the next commit. To\n"
4814 " undo an add before that, see hg revert.\n"
4815 "\n"
4816 " If no names are given, add all files in the repository.\n"
4817 " "
4818 msgstr ""
4819 "tilføj de angivne filer ved næste commit\n"
4820 "\n"
4821 " Opskriv filer til at blive versionsstyret og tilføjet til arkivet.\n"
4822 "\n"
4823 " Filerne vil bliver tilføjet til arkivet ved næste commit. For at\n"
4824 " omgøre en tilføjelse før det, se hg revert.\n"
4825 "\n"
4826 " Hvis der ikke er angivet nogen navne tilføjes alle filer i\n"
4827 " arkivet.\n"
4828 " "
4829
4830 msgid ""
4831 "add all new files, delete all missing files\n"
4832 "\n"
4833 " Add all new files and remove all missing files from the repository.\n"
4834 "\n"
4835 " New files are ignored if they match any of the patterns in .hgignore. "
4836 "As\n"
4837 " with add, these changes take effect at the next commit.\n"
4838 "\n"
4839 " Use the -s option to detect renamed files. With a parameter > 0,\n"
4840 " this compares every removed file with every added file and records\n"
4841 " those similar enough as renames. This option takes a percentage\n"
4842 " between 0 (disabled) and 100 (files must be identical) as its\n"
4843 " parameter. Detecting renamed files this way can be expensive.\n"
4844 " "
4845 msgstr ""
4846
4847 msgid "similarity must be a number"
4848 msgstr ""
4849
4850 msgid "similarity must be between 0 and 100"
4851 msgstr ""
4852
4853 msgid ""
4854 "show changeset information per file line\n"
4855 "\n"
4856 " List changes in files, showing the revision id responsible for each "
4857 "line\n"
4858 "\n"
4859 " This command is useful to discover who did a change or when a change "
4860 "took\n"
4861 " place.\n"
4862 "\n"
4863 " Without the -a option, annotate will avoid processing files it\n"
4864 " detects as binary. With -a, annotate will generate an annotation\n"
4865 " anyway, probably with undesirable results.\n"
4866 " "
4867 msgstr ""
4868
4869 msgid "at least one file name or pattern required"
4870 msgstr ""
4871
4872 msgid "at least one of -n/-c is required for -l"
4873 msgstr ""
4874
4875 #, python-format
4876 msgid "%s: binary file\n"
4877 msgstr ""
4878
4879 msgid ""
4880 "create unversioned archive of a repository revision\n"
4881 "\n"
4882 " By default, the revision used is the parent of the working\n"
4883 " directory; use \"-r\" to specify a different revision.\n"
4884 "\n"
4885 " To specify the type of archive to create, use \"-t\". Valid\n"
4886 " types are:\n"
4887 "\n"
4888 " \"files\" (default): a directory full of files\n"
4889 " \"tar\": tar archive, uncompressed\n"
4890 " \"tbz2\": tar archive, compressed using bzip2\n"
4891 " \"tgz\": tar archive, compressed using gzip\n"
4892 " \"uzip\": zip archive, uncompressed\n"
4893 " \"zip\": zip archive, compressed using deflate\n"
4894 "\n"
4895 " The exact name of the destination archive or directory is given\n"
4896 " using a format string; see \"hg help export\" for details.\n"
4897 "\n"
4898 " Each member added to an archive file has a directory prefix\n"
4899 " prepended. Use \"-p\" to specify a format string for the prefix.\n"
4900 " The default is the basename of the archive, with suffixes removed.\n"
4901 " "
4902 msgstr ""
4903
4904 msgid "no working directory: please specify a revision"
4905 msgstr ""
4906
4907 msgid "repository root cannot be destination"
4908 msgstr ""
4909
4910 msgid "cannot archive plain files to stdout"
4911 msgstr ""
4912
4913 msgid ""
4914 "reverse effect of earlier changeset\n"
4915 "\n"
4916 " Commit the backed out changes as a new changeset. The new\n"
4917 " changeset is a child of the backed out changeset.\n"
4918 "\n"
4919 " If you back out a changeset other than the tip, a new head is\n"
4920 " created. This head will be the new tip and you should merge this\n"
4921 " backout changeset with another head (current one by default).\n"
4922 "\n"
4923 " The --merge option remembers the parent of the working directory\n"
4924 " before starting the backout, then merges the new head with that\n"
4925 " changeset afterwards. This saves you from doing the merge by\n"
4926 " hand. The result of this merge is not committed, as for a normal\n"
4927 " merge.\n"
4928 "\n"
4929 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
4930 " "
4931 msgstr ""
4932
4933 msgid "please specify just one revision"
4934 msgstr "angiv venligst kun en revision"
4935
4936 msgid "please specify a revision to backout"
4937 msgstr ""
4938
4939 msgid "cannot back out change on a different branch"
4940 msgstr "kan ikke bakke en ændring på en anden gren ud"
4941
4942 msgid "cannot back out a change with no parents"
4943 msgstr "kan ikke bakke en ændring ud uden forældre"
4944
4945 msgid "cannot back out a merge changeset without --parent"
4946 msgstr ""
4947
4948 #, python-format
4949 msgid "%s is not a parent of %s"
4950 msgstr "%s er ikke forældre til %s"
4951
4952 msgid "cannot use --parent on non-merge changeset"
4953 msgstr ""
4954
4955 #, python-format
4956 msgid "Backed out changeset %s"
4957 msgstr ""
4958
4959 #, python-format
4960 msgid "changeset %s backs out changeset %s\n"
4961 msgstr "ændring %s bakker ændring %s ud\n"
4962
4963 #, python-format
4964 msgid "merging with changeset %s\n"
4965 msgstr ""
4966
4967 msgid "the backout changeset is a new head - do not forget to merge\n"
4968 msgstr ""
4969
4970 msgid "(use \"backout --merge\" if you want to auto-merge)\n"
4971 msgstr ""
4972
4973 msgid ""
4974 "subdivision search of changesets\n"
4975 "\n"
4976 " This command helps to find changesets which introduce problems.\n"
4977 " To use, mark the earliest changeset you know exhibits the problem\n"
4978 " as bad, then mark the latest changeset which is free from the\n"
4979 " problem as good. Bisect will update your working directory to a\n"
4980 " revision for testing (unless the --noupdate option is specified).\n"
4981 " Once you have performed tests, mark the working directory as bad\n"
4982 " or good and bisect will either update to another candidate changeset\n"
4983 " or announce that it has found the bad revision.\n"
4984 "\n"
4985 " As a shortcut, you can also use the revision argument to mark a\n"
4986 " revision as good or bad without checking it out first.\n"
4987 "\n"
4988 " If you supply a command it will be used for automatic bisection. Its "
4989 "exit\n"
4990 " status will be used as flag to mark revision as bad or good. In case "
4991 "exit\n"
4992 " status is 0 the revision is marked as good, 125 - skipped, 127 (command "
4993 "not\n"
4994 " found) - bisection will be aborted and any other status bigger than 0 "
4995 "will\n"
4996 " mark revision as bad.\n"
4997 " "
4998 msgstr ""
4999
5000 #, python-format
5001 msgid "The first %s revision is:\n"
5002 msgstr "Den første %s revision er:\n"
5003
5004 #, python-format
5005 msgid "Due to skipped revisions, the first %s revision could be any of:\n"
5006 msgstr ""
5007
5008 msgid "cannot bisect (no known good revisions)"
5009 msgstr ""
5010
5011 msgid "cannot bisect (no known bad revisions)"
5012 msgstr ""
5013
5014 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
5015 msgstr ""
5016
5017 msgid "incompatible arguments"
5018 msgstr ""
5019
5020 #, python-format
5021 msgid "failed to execute %s"
5022 msgstr ""
5023
5024 #, python-format
5025 msgid "%s killed"
5026 msgstr "%s dræbt"
5027
5028 #, python-format
5029 msgid "Changeset %s: %s\n"
5030 msgstr "Ændring: %s: %s\n"
5031
5032 #, python-format
5033 msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
5034 msgstr ""
5035
5036 msgid ""
5037 "set or show the current branch name\n"
5038 "\n"
5039 " With no argument, show the current branch name. With one argument,\n"
5040 " set the working directory branch name (the branch does not exist in\n"
5041 " the repository until the next commit).\n"
5042 "\n"
5043 " Unless --force is specified, branch will not let you set a\n"
5044 " branch name that shadows an existing branch.\n"
5045 "\n"
5046 " Use --clean to reset the working directory branch to that of the\n"
5047 " parent of the working directory, negating a previous branch change.\n"
5048 "\n"
5049 " Use the command 'hg update' to switch to an existing branch.\n"
5050 " "
5051 msgstr ""
5052
5053 #, python-format
5054 msgid "reset working directory to branch %s\n"
5055 msgstr ""
5056
5057 msgid "a branch of the same name already exists (use --force to override)"
5058 msgstr ""
5059
5060 #, python-format
5061 msgid "marked working directory as branch %s\n"
5062 msgstr ""
5063
5064 msgid ""
5065 "list repository named branches\n"
5066 "\n"
5067 " List the repository's named branches, indicating which ones are\n"
5068 " inactive. If active is specified, only show active branches.\n"
5069 "\n"
5070 " A branch is considered active if it contains repository heads.\n"
5071 "\n"
5072 " Use the command 'hg update' to switch to an existing branch.\n"
5073 " "
5074 msgstr ""
5075
5076 msgid ""
5077 "create a changegroup file\n"
5078 "\n"
5079 " Generate a compressed changegroup file collecting changesets not\n"
5080 " found in the other repository.\n"
5081 "\n"
5082 " If no destination repository is specified the destination is\n"
5083 " assumed to have all the nodes specified by one or more --base\n"
5084 " parameters. To create a bundle containing all changesets, use\n"
5085 " --all (or --base null). To change the compression method applied,\n"
5086 " use the -t option (by default, bundles are compressed using bz2).\n"
5087 "\n"
5088 " The bundle file can then be transferred using conventional means and\n"
5089 " applied to another repository with the unbundle or pull command.\n"
5090 " This is useful when direct push and pull are not available or when\n"
5091 " exporting an entire repository is undesirable.\n"
5092 "\n"
5093 " Applying bundles preserves all changeset contents including\n"
5094 " permissions, copy/rename information, and revision history.\n"
5095 " "
5096 msgstr ""
5097
5098 msgid "--base is incompatible with specifiying a destination"
5099 msgstr ""
5100
5101 msgid "unknown bundle type specified with --type"
5102 msgstr ""
5103
5104 msgid ""
5105 "output the current or given revision of files\n"
5106 "\n"
5107 " Print the specified files as they were at the given revision.\n"
5108 " If no revision is given, the parent of the working directory is used,\n"
5109 " or tip if no revision is checked out.\n"
5110 "\n"
5111 " Output may be to a file, in which case the name of the file is\n"
5112 " given using a format string. The formatting rules are the same as\n"
5113 " for the export command, with the following additions:\n"
5114 "\n"
5115 " %s basename of file being printed\n"
5116 " %d dirname of file being printed, or '.' if in repo root\n"
5117 " %p root-relative path name of file being printed\n"
5118 " "
5119 msgstr ""
5120
5121 msgid ""
5122 "make a copy of an existing repository\n"
5123 "\n"
5124 " Create a copy of an existing repository in a new directory.\n"
5125 "\n"
5126 " If no destination directory name is specified, it defaults to the\n"
5127 " basename of the source.\n"
5128 "\n"
5129 " The location of the source is added to the new repository's\n"
5130 " .hg/hgrc file, as the default to be used for future pulls.\n"
5131 "\n"
5132 " For efficiency, hardlinks are used for cloning whenever the source\n"
5133 " and destination are on the same filesystem (note this applies only\n"
5134 " to the repository data, not to the checked out files). Some\n"
5135 " filesystems, such as AFS, implement hardlinking incorrectly, but\n"
5136 " do not report errors. In these cases, use the --pull option to\n"
5137 " avoid hardlinking.\n"
5138 "\n"
5139 " In some cases, you can clone repositories and checked out files\n"
5140 " using full hardlinks with\n"
5141 "\n"
5142 " $ cp -al REPO REPOCLONE\n"
5143 "\n"
5144 " This is the fastest way to clone, but it is not always safe. The\n"
5145 " operation is not atomic (making sure REPO is not modified during\n"
5146 " the operation is up to you) and you have to make sure your editor\n"
5147 " breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
5148 " this is not compatible with certain extensions that place their\n"
5149 " metadata under the .hg directory, such as mq.\n"
5150 "\n"
5151 " If you use the -r option to clone up to a specific revision, no\n"
5152 " subsequent revisions will be present in the cloned repository.\n"
5153 " This option implies --pull, even on local repositories.\n"
5154 "\n"
5155 " If the -U option is used, the new clone will contain only a repository\n"
5156 " (.hg) and no working copy (the working copy parent is the null "
5157 "revision).\n"
5158 "\n"
5159 " See 'hg help urls' for valid source format details.\n"
5160 "\n"
5161 " It is possible to specify an ssh:// URL as the destination, but no\n"
5162 " .hg/hgrc and working directory will be created on the remote side.\n"
5163 " Look at the help text for urls for important details about ssh:// URLs.\n"
5164 " "
5165 msgstr ""
5166
5167 msgid ""
5168 "commit the specified files or all outstanding changes\n"
5169 "\n"
5170 " Commit changes to the given files into the repository.\n"
5171 "\n"
5172 " If a list of files is omitted, all changes reported by \"hg status\"\n"
5173 " will be committed.\n"
5174 "\n"
5175 " If you are committing the result of a merge, do not provide any\n"
5176 " file names or -I/-X filters.\n"
5177 "\n"
5178 " If no commit message is specified, the configured editor is started to\n"
5179 " enter a message.\n"
5180 "\n"
5181 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
5182 " "
5183 msgstr ""
5184
5185 msgid "created new head\n"
5186 msgstr "lavede et nyt hoved\n"
5187
5188 #, python-format
5189 msgid "committed changeset %d:%s\n"
5190 msgstr ""
5191
5192 msgid ""
5193 "mark files as copied for the next commit\n"
5194 "\n"
5195 " Mark dest as having copies of source files. If dest is a\n"
5196 " directory, copies are put in that directory. If dest is a file,\n"
5197 " there can only be one source.\n"
5198 "\n"
5199 " By default, this command copies the contents of files as they\n"
5200 " stand in the working directory. If invoked with --after, the\n"
5201 " operation is recorded, but no copying is performed.\n"
5202 "\n"
5203 " This command takes effect in the next commit. To undo a copy\n"
5204 " before that, see hg revert.\n"
5205 " "
5206 msgstr ""
5207
5208 msgid "find the ancestor revision of two revisions in a given index"
5209 msgstr ""
5210
5211 msgid "There is no Mercurial repository here (.hg not found)"
5212 msgstr "Der er ikke noget Mercurial arkiv her (fandt ikke .hg)"
5213
5214 msgid "either two or three arguments required"
5215 msgstr "kræver enten to eller tre argumenter"
5216
5217 msgid "returns the completion list associated with the given command"
5218 msgstr ""
5219
5220 msgid "rebuild the dirstate as it would look like for the given revision"
5221 msgstr ""
5222
5223 msgid "validate the correctness of the current dirstate"
5224 msgstr ""
5225
5226 #, python-format
5227 msgid "%s in state %s, but not in manifest1\n"
5228 msgstr ""
5229
5230 #, python-format
5231 msgid "%s in state %s, but also in manifest1\n"
5232 msgstr ""
5233
5234 #, python-format
5235 msgid "%s in state %s, but not in either manifest\n"
5236 msgstr ""
5237
5238 #, python-format
5239 msgid "%s in manifest1, but listed as state %s"
5240 msgstr ""
5241
5242 msgid ".hg/dirstate inconsistent with current parent's manifest"
5243 msgstr ""
5244
5245 msgid ""
5246 "show combined config settings from all hgrc files\n"
5247 "\n"
5248 " With no args, print names and values of all config items.\n"
5249 "\n"
5250 " With one arg of the form section.name, print just the value of\n"
5251 " that config item.\n"
5252 "\n"
5253 " With multiple args, print names and values of all config items\n"
5254 " with matching section names."
5255 msgstr ""
5256
5257 msgid "only one config item permitted"
5258 msgstr ""
5259
5260 msgid ""
5261 "manually set the parents of the current working directory\n"
5262 "\n"
5263 " This is useful for writing repository conversion tools, but should\n"
5264 " be used with care.\n"
5265 " "
5266 msgstr ""
5267
5268 msgid "show the contents of the current dirstate"
5269 msgstr ""
5270
5271 #, python-format
5272 msgid "copy: %s -> %s\n"
5273 msgstr "kopi: %s -> %s\n"
5274
5275 msgid "dump the contents of a data file revision"
5276 msgstr ""
5277
5278 #, python-format
5279 msgid "invalid revision identifier %s"
5280 msgstr "ugyldig revisionsidentification %s"
5281
5282 msgid "parse and display a date"
5283 msgstr ""
5284
5285 msgid "dump the contents of an index file"
5286 msgstr ""
5287
5288 msgid "dump an index DAG as a .dot file"
5289 msgstr ""
5290
5291 msgid "test Mercurial installation"
5292 msgstr ""
5293
5294 #, python-format
5295 msgid "Checking encoding (%s)...\n"
5296 msgstr ""
5297
5298 msgid " (check that your locale is properly set)\n"
5299 msgstr ""
5300
5301 msgid "Checking extensions...\n"
5302 msgstr ""
5303
5304 msgid " One or more extensions could not be found"
5305 msgstr ""
5306
5307 msgid " (check that you compiled the extensions)\n"
5308 msgstr ""
5309
5310 msgid "Checking templates...\n"
5311 msgstr ""
5312
5313 msgid " (templates seem to have been installed incorrectly)\n"
5314 msgstr ""
5315
5316 msgid "Checking patch...\n"
5317 msgstr ""
5318
5319 msgid " patch call failed:\n"
5320 msgstr ""
5321
5322 msgid " unexpected patch output!\n"
5323 msgstr ""
5324
5325 msgid " patch test failed!\n"
5326 msgstr ""
5327
5328 msgid ""
5329 " (Current patch tool may be incompatible with patch, or misconfigured. "
5330 "Please check your .hgrc file)\n"
5331 msgstr ""
5332
5333 msgid ""
5334 " Internal patcher failure, please report this error to http://www.selenic."
5335 "com/mercurial/bts\n"
5336 msgstr ""
5337
5338 msgid "Checking commit editor...\n"
5339 msgstr ""
5340
5341 msgid " No commit editor set and can't find vi in PATH\n"
5342 msgstr ""
5343
5344 msgid " (specify a commit editor in your .hgrc file)\n"
5345 msgstr ""
5346
5347 #, python-format
5348 msgid " Can't find editor '%s' in PATH\n"
5349 msgstr ""
5350
5351 msgid "Checking username...\n"
5352 msgstr ""
5353
5354 msgid " (specify a username in your .hgrc file)\n"
5355 msgstr ""
5356
5357 msgid "No problems detected\n"
5358 msgstr "Fandt ingen problemer\n"
5359
5360 #, python-format
5361 msgid "%s problems detected, please check your install!\n"
5362 msgstr ""
5363
5364 msgid "dump rename information"
5365 msgstr ""
5366
5367 #, python-format
5368 msgid "%s renamed from %s:%s\n"
5369 msgstr "%s omdøbt fra %s:%s\n"
5370
5371 #, python-format
5372 msgid "%s not renamed\n"
5373 msgstr "%s ikke omdøbt\n"
5374
5375 msgid "show how files match on given patterns"
5376 msgstr ""
5377
5378 msgid ""
5379 "diff repository (or selected files)\n"
5380 "\n"
5381 " Show differences between revisions for the specified files.\n"
5382 "\n"
5383 " Differences between files are shown using the unified diff format.\n"
5384 "\n"
5385 " NOTE: diff may generate unexpected results for merges, as it will\n"
5386 " default to comparing against the working directory's first parent\n"
5387 " changeset if no revisions are specified.\n"
5388 "\n"
5389 " When two revision arguments are given, then changes are shown\n"
5390 " between those revisions. If only one revision is specified then\n"
5391 " that revision is compared to the working directory, and, when no\n"
5392 " revisions are specified, the working directory files are compared\n"
5393 " to its parent.\n"
5394 "\n"
5395 " Without the -a option, diff will avoid generating diffs of files\n"
5396 " it detects as binary. With -a, diff will generate a diff anyway,\n"
5397 " probably with undesirable results.\n"
5398 "\n"
5399 " Use the --git option to generate diffs in the git extended diff\n"
5400 " format. Read the diffs help topic for more information.\n"
5401 " "
5402 msgstr ""
5403
5404 msgid ""
5405 "dump the header and diffs for one or more changesets\n"
5406 "\n"
5407 " Print the changeset header and diffs for one or more revisions.\n"
5408 "\n"
5409 " The information shown in the changeset header is: author,\n"
5410 " changeset hash, parent(s) and commit comment.\n"
5411 "\n"
5412 " NOTE: export may generate unexpected diff output for merge changesets,\n"
5413 " as it will compare the merge changeset against its first parent only.\n"
5414 "\n"
5415 " Output may be to a file, in which case the name of the file is\n"
5416 " given using a format string. The formatting rules are as follows:\n"
5417 "\n"
5418 " %% literal \"%\" character\n"
5419 " %H changeset hash (40 bytes of hexadecimal)\n"
5420 " %N number of patches being generated\n"
5421 " %R changeset revision number\n"
5422 " %b basename of the exporting repository\n"
5423 " %h short-form changeset hash (12 bytes of hexadecimal)\n"
5424 " %n zero-padded sequence number, starting at 1\n"
5425 " %r zero-padded changeset revision number\n"
5426 "\n"
5427 " Without the -a option, export will avoid generating diffs of files\n"
5428 " it detects as binary. With -a, export will generate a diff anyway,\n"
5429 " probably with undesirable results.\n"
5430 "\n"
5431 " Use the --git option to generate diffs in the git extended diff\n"
5432 " format. Read the diffs help topic for more information.\n"
5433 "\n"
5434 " With the --switch-parent option, the diff will be against the second\n"
5435 " parent. It can be useful to review a merge.\n"
5436 " "
5437 msgstr ""
5438
5439 msgid "export requires at least one changeset"
5440 msgstr ""
5441
5442 msgid "exporting patches:\n"
5443 msgstr ""
5444
5445 msgid "exporting patch:\n"
5446 msgstr ""
5447
5448 msgid ""
5449 "search for a pattern in specified files and revisions\n"
5450 "\n"
5451 " Search revisions of files for a regular expression.\n"
5452 "\n"
5453 " This command behaves differently than Unix grep. It only accepts\n"
5454 " Python/Perl regexps. It searches repository history, not the\n"
5455 " working directory. It always prints the revision number in which\n"
5456 " a match appears.\n"
5457 "\n"
5458 " By default, grep only prints output for the first revision of a\n"
5459 " file in which it finds a match. To get it to print every revision\n"
5460 " that contains a change in match status (\"-\" for a match that\n"
5461 " becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
5462 " use the --all flag.\n"
5463 " "
5464 msgstr ""
5465
5466 #, python-format
5467 msgid "grep: invalid match pattern: %s\n"
5468 msgstr ""
5469
5470 msgid ""
5471 "show current repository heads or show branch heads\n"
5472 "\n"
5473 " With no arguments, show all repository head changesets.\n"
5474 "\n"
5475 " If branch or revisions names are given this will show the heads of\n"
5476 " the specified branches or the branches those revisions are tagged\n"
5477 " with.\n"
5478 "\n"
5479 " Repository \"heads\" are changesets that don't have child\n"
5480 " changesets. They are where development generally takes place and\n"
5481 " are the usual targets for update and merge operations.\n"
5482 "\n"
5483 " Branch heads are changesets that have a given branch tag, but have\n"
5484 " no child changesets with that tag. They are usually where\n"
5485 " development on the given branch takes place.\n"
5486 " "
5487 msgstr ""
5488
5489 #, python-format
5490 msgid "no changes on branch %s containing %s are reachable from %s\n"
5491 msgstr ""
5492
5493 #, python-format
5494 msgid "no changes on branch %s are reachable from %s\n"
5495 msgstr ""
5496
5497 msgid ""
5498 "show help for a given topic or a help overview\n"
5499 "\n"
5500 " With no arguments, print a list of commands and short help.\n"
5501 "\n"
5502 " Given a topic, extension, or command name, print help for that topic."
5503 msgstr ""
5504
5505 msgid "global options:"
5506 msgstr ""
5507
5508 msgid "use \"hg help\" for the full list of commands"
5509 msgstr "brug \"hg help\" for den fulde liste af kommandoer"
5510
5511 msgid "use \"hg help\" for the full list of commands or \"hg -v\" for details"
5512 msgstr ""
5513 "brug \"hg help\" for den fulde liste af kommandoer eller \"hg -v\" for "
5514 "detaljer"
5515
5516 #, python-format
5517 msgid "use \"hg -v help%s\" to show aliases and global options"
5518 msgstr "brug \"hg -v help%s\" for at vise aliaser og globale valgmuligheder"
5519
5520 #, python-format
5521 msgid "use \"hg -v help %s\" to show global options"
5522 msgstr "brug \"hg -v help %s\" for at vise globale valgmuligheder"
5523
5524 msgid ""
5525 "list of commands:\n"
5526 "\n"
5527 msgstr ""
5528 "liste af kommandoer:\n"
5529 "\n"
5530
5531 #, python-format
5532 msgid ""
5533 "\n"
5534 "aliases: %s\n"
5535 msgstr ""
5536 "\n"
5537 "aliaser %s:\n"
5538
5539 msgid "(no help text available)"
5540 msgstr "(ingen hjælpetekst tilgængelig)"
5541
5542 msgid "options:\n"
5543 msgstr "valgmuligheder:\n"
5544
5545 msgid "no commands defined\n"
5546 msgstr "ingen kommandoer defineret\n"
5547
5548 msgid ""
5549 "\n"
5550 "enabled extensions:\n"
5551 "\n"
5552 msgstr ""
5553 "\n"
5554 "aktiverede udvidelser:\n"
5555 "\n"
5556
5557 #, python-format
5558 msgid " %s %s\n"
5559 msgstr ""
5560
5561 msgid "no help text available"
5562 msgstr "ingen hjælpetekst tilgængelig"
5563
5564 #, python-format
5565 msgid "%s extension - %s\n"
5566 msgstr ""
5567
5568 msgid "Mercurial Distributed SCM\n"
5569 msgstr "Mercurial Distribueret SCM\n"
5570
5571 msgid ""
5572 "basic commands:\n"
5573 "\n"
5574 msgstr ""
5575 "basale kommandoer:\n"
5576 "\n"
5577
5578 msgid ""
5579 "\n"
5580 "additional help topics:\n"
5581 "\n"
5582 msgstr ""
5583 "\n"
5584 "yderligere hjælpeemner:\n"
5585 "\n"
5586
5587 msgid ""
5588 "identify the working copy or specified revision\n"
5589 "\n"
5590 " With no revision, print a summary of the current state of the repo.\n"
5591 "\n"
5592 " With a path, do a lookup in another repository.\n"
5593 "\n"
5594 " This summary identifies the repository state using one or two parent\n"
5595 " hash identifiers, followed by a \"+\" if there are uncommitted changes\n"
5596 " in the working directory, a list of tags for this revision and a branch\n"
5597 " name for non-default branches.\n"
5598 " "
5599 msgstr ""
5600
5601 msgid ""
5602 "import an ordered set of patches\n"
5603 "\n"
5604 " Import a list of patches and commit them individually.\n"
5605 "\n"
5606 " If there are outstanding changes in the working directory, import\n"
5607 " will abort unless given the -f flag.\n"
5608 "\n"
5609 " You can import a patch straight from a mail message. Even patches\n"
5610 " as attachments work (body part must be type text/plain or\n"
5611 " text/x-patch to be used). From and Subject headers of email\n"
5612 " message are used as default committer and commit message. All\n"
5613 " text/plain body parts before first diff are added to commit\n"
5614 " message.\n"
5615 "\n"
5616 " If the imported patch was generated by hg export, user and description\n"
5617 " from patch override values from message headers and body. Values\n"
5618 " given on command line with -m and -u override these.\n"
5619 "\n"
5620 " If --exact is specified, import will set the working directory\n"
5621 " to the parent of each patch before applying it, and will abort\n"
5622 " if the resulting changeset has a different ID than the one\n"
5623 " recorded in the patch. This may happen due to character set\n"
5624 " problems or other deficiencies in the text patch format.\n"
5625 "\n"
5626 " With --similarity, hg will attempt to discover renames and copies\n"
5627 " in the patch in the same way as 'addremove'.\n"
5628 "\n"
5629 " To read a patch from standard input, use patch name \"-\".\n"
5630 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
5631 " "
5632 msgstr ""
5633
5634 msgid "applying patch from stdin\n"
5635 msgstr ""
5636
5637 msgid "no diffs found"
5638 msgstr ""
5639
5640 #, python-format
5641 msgid ""
5642 "message:\n"
5643 "%s\n"
5644 msgstr ""
5645 "meddelse:\n"
5646 "%s\n"
5647
5648 msgid "not a mercurial patch"
5649 msgstr ""
5650
5651 msgid "patch is damaged or loses information"
5652 msgstr ""
5653
5654 msgid ""
5655 "show new changesets found in source\n"
5656 "\n"
5657 " Show new changesets found in the specified path/URL or the default\n"
5658 " pull location. These are the changesets that would be pulled if a pull\n"
5659 " was requested.\n"
5660 "\n"
5661 " For remote repository, using --bundle avoids downloading the changesets\n"
5662 " twice if the incoming is followed by a pull.\n"
5663 "\n"
5664 " See pull for valid source format details.\n"
5665 " "
5666 msgstr ""
5667
5668 msgid ""
5669 "create a new repository in the given directory\n"
5670 "\n"
5671 " Initialize a new repository in the given directory. If the given\n"
5672 " directory does not exist, it is created.\n"
5673 "\n"
5674 " If no directory is given, the current directory is used.\n"
5675 "\n"
5676 " It is possible to specify an ssh:// URL as the destination.\n"
5677 " See 'hg help urls' for more information.\n"
5678 " "
5679 msgstr ""
5680
5681 msgid ""
5682 "locate files matching specific patterns\n"
5683 "\n"
5684 " Print all files under Mercurial control whose names match the\n"
5685 " given patterns.\n"
5686 "\n"
5687 " This command searches the entire repository by default. To search\n"
5688 " just the current directory and its subdirectories, use\n"
5689 " \"--include .\".\n"
5690 "\n"
5691 " If no patterns are given to match, this command prints all file\n"
5692 " names.\n"
5693 "\n"
5694 " If you want to feed the output of this command into the \"xargs\"\n"
5695 " command, use the \"-0\" option to both this command and \"xargs\".\n"
5696 " This will avoid the problem of \"xargs\" treating single filenames\n"
5697 " that contain white space as multiple filenames.\n"
5698 " "
5699 msgstr ""
5700
5701 msgid ""
5702 "show revision history of entire repository or files\n"
5703 "\n"
5704 " Print the revision history of the specified files or the entire\n"
5705 " project.\n"
5706 "\n"
5707 " File history is shown without following rename or copy history of\n"
5708 " files. Use -f/--follow with a file name to follow history across\n"
5709 " renames and copies. --follow without a file name will only show\n"
5710 " ancestors or descendants of the starting revision. --follow-first\n"
5711 " only follows the first parent of merge revisions.\n"
5712 "\n"
5713 " If no revision range is specified, the default is tip:0 unless\n"
5714 " --follow is set, in which case the working directory parent is\n"
5715 " used as the starting revision.\n"
5716 "\n"
5717 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
5718 "\n"
5719 " By default this command outputs: changeset id and hash, tags,\n"
5720 " non-trivial parents, user, date and time, and a summary for each\n"
5721 " commit. When the -v/--verbose switch is used, the list of changed\n"
5722 " files and full commit message is shown.\n"
5723 "\n"
5724 " NOTE: log -p may generate unexpected diff output for merge\n"
5725 " changesets, as it will compare the merge changeset against its\n"
5726 " first parent only. Also, the files: list will only reflect files\n"
5727 " that are different from BOTH parents.\n"
5728 "\n"
5729 " "
5730 msgstr ""
5731
5732 msgid ""
5733 "looks up all renames for a file (up to endrev) the first\n"
5734 " time the file is given. It indexes on the changerev and only\n"
5735 " parses the manifest if linkrev != changerev.\n"
5736 " Returns rename info for fn at changerev rev."
5737 msgstr ""
5738
5739 msgid ""
5740 "output the current or given revision of the project manifest\n"
5741 "\n"
5742 " Print a list of version controlled files for the given revision.\n"
5743 " If no revision is given, the parent of the working directory is used,\n"
5744 " or tip if no revision is checked out.\n"
5745 "\n"
5746 " The manifest is the list of files being version controlled. If no "
5747 "revision\n"
5748 " is given then the first parent of the working directory is used.\n"
5749 "\n"
5750 " With -v flag, print file permissions, symlink and executable bits. With\n"
5751 " --debug flag, print file revision hashes.\n"
5752 " "
5753 msgstr ""
5754
5755 msgid ""
5756 "merge working directory with another revision\n"
5757 "\n"
5758 " Merge the contents of the current working directory and the\n"
5759 " requested revision. Files that changed between either parent are\n"
5760 " marked as changed for the next commit and a commit must be\n"
5761 " performed before any further updates are allowed.\n"
5762 "\n"
5763 " If no revision is specified, the working directory's parent is a\n"
5764 " head revision, and the current branch contains exactly one other head,\n"
5765 " the other head is merged with by default. Otherwise, an explicit\n"
5766 " revision to merge with must be provided.\n"
5767 " "
5768 msgstr ""
5769
5770 #, python-format
5771 msgid "branch '%s' has %d heads - please merge with an explicit rev"
5772 msgstr ""
5773
5774 #, python-format
5775 msgid "branch '%s' has one head - please merge with an explicit rev"
5776 msgstr ""
5777
5778 msgid "there is nothing to merge"
5779 msgstr ""
5780
5781 #, python-format
5782 msgid "%s - use \"hg update\" instead"
5783 msgstr "%s - brug \"hg update\" istedet"
5784
5785 msgid ""
5786 "working dir not at a head rev - use \"hg update\" or merge with an explicit "
5787 "rev"
5788 msgstr ""
5789
5790 msgid ""
5791 "show changesets not found in destination\n"
5792 "\n"
5793 " Show changesets not found in the specified destination repository or\n"
5794 " the default push location. These are the changesets that would be "
5795 "pushed\n"
5796 " if a push was requested.\n"
5797 "\n"
5798 " See pull for valid destination format details.\n"
5799 " "
5800 msgstr ""
5801
5802 msgid ""
5803 "show the parents of the working dir or revision\n"
5804 "\n"
5805 " Print the working directory's parent revisions. If a\n"
5806 " revision is given via --rev, the parent of that revision\n"
5807 " will be printed. If a file argument is given, revision in\n"
5808 " which the file was last changed (before the working directory\n"
5809 " revision or the argument to --rev if given) is printed.\n"
5810 " "
5811 msgstr ""
5812
5813 msgid "can only specify an explicit file name"
5814 msgstr ""
5815
5816 #, python-format
5817 msgid "'%s' not found in manifest!"
5818 msgstr ""
5819
5820 msgid ""
5821 "show aliases for remote repositories\n"
5822 "\n"
5823 " Show definition of symbolic path name NAME. If no name is given, show\n"
5824 " definition of available names.\n"
5825 "\n"
5826 " Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
5827 " and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
5828 "\n"
5829 " See 'hg help urls' for more information.\n"
5830 " "
5831 msgstr ""
5832
5833 msgid "not found!\n"
5834 msgstr "ikke fundet!\n"
5835
5836 msgid "not updating, since new heads added\n"
5837 msgstr "opdaterer ikke idet nye hoveder er tilføjet\n"
5838
5839 msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
5840 msgstr "(kør 'hg heads' for at se hoveder, 'hg merge' for at sammenføje)\n"
5841
5842 msgid "(run 'hg update' to get a working copy)\n"
5843 msgstr "(kør 'hg update' for at få en arbejdskopi)\n"
5844
5845 msgid ""
5846 "pull changes from the specified source\n"
5847 "\n"
5848 " Pull changes from a remote repository to a local one.\n"
5849 "\n"
5850 " This finds all changes from the repository at the specified path\n"
5851 " or URL and adds them to the local repository. By default, this\n"
5852 " does not update the copy of the project in the working directory.\n"
5853 "\n"
5854 " If SOURCE is omitted, the 'default' path will be used.\n"
5855 " See 'hg help urls' for more information.\n"
5856 " "
5857 msgstr ""
5858
5859 msgid ""
5860 "Other repository doesn't support revision lookup, so a rev cannot be "
5861 "specified."
5862 msgstr ""
5863
5864 msgid ""
5865 "push changes to the specified destination\n"
5866 "\n"
5867 " Push changes from the local repository to the given destination.\n"
5868 "\n"
5869 " This is the symmetrical operation for pull. It helps to move\n"
5870 " changes from the current repository to a different one. If the\n"
5871 " destination is local this is identical to a pull in that directory\n"
5872 " from the current one.\n"
5873 "\n"
5874 " By default, push will refuse to run if it detects the result would\n"
5875 " increase the number of remote heads. This generally indicates the\n"
5876 " the client has forgotten to pull and merge before pushing.\n"
5877 "\n"
5878 " If -r is used, the named changeset and all its ancestors will be pushed\n"
5879 " to the remote repository.\n"
5880 "\n"
5881 " Look at the help text for urls for important details about ssh:// URLs.\n"
5882 " If DESTINATION is omitted, a default path will be used.\n"
5883 " See 'hg help urls' for more information.\n"
5884 " "
5885 msgstr ""
5886
5887 #, python-format
5888 msgid "pushing to %s\n"
5889 msgstr "skubber til %s\n"
5890
5891 msgid ""
5892 "raw commit interface (DEPRECATED)\n"
5893 "\n"
5894 " (DEPRECATED)\n"
5895 " Lowlevel commit, for use in helper scripts.\n"
5896 "\n"
5897 " This command is not intended to be used by normal users, as it is\n"
5898 " primarily useful for importing from other SCMs.\n"
5899 "\n"
5900 " This command is now deprecated and will be removed in a future\n"
5901 " release, please use debugsetparents and commit instead.\n"
5902 " "
5903 msgstr ""
5904
5905 msgid "(the rawcommit command is deprecated)\n"
5906 msgstr ""
5907
5908 msgid ""
5909 "roll back an interrupted transaction\n"
5910 "\n"
5911 " Recover from an interrupted commit or pull.\n"
5912 "\n"
5913 " This command tries to fix the repository status after an interrupted\n"
5914 " operation. It should only be necessary when Mercurial suggests it.\n"
5915 " "
5916 msgstr ""
5917
5918 msgid ""
5919 "remove the specified files on the next commit\n"
5920 "\n"
5921 " Schedule the indicated files for removal from the repository.\n"
5922 "\n"
5923 " This only removes files from the current branch, not from the entire\n"
5924 " project history. -A can be used to remove only files that have already\n"
5925 " been deleted, -f can be used to force deletion, and -Af can be used\n"
5926 " to remove files from the next revision without deleting them.\n"
5927 "\n"
5928 " The following table details the behavior of remove for different file\n"
5929 " states (columns) and option combinations (rows). The file states are\n"
5930 " Added, Clean, Modified and Missing (as reported by hg status). The\n"
5931 " actions are Warn, Remove (from branch) and Delete (from disk).\n"
5932 "\n"
5933 " A C M !\n"
5934 " none W RD W R\n"
5935 " -f R RD RD R\n"
5936 " -A W W W R\n"
5937 " -Af R R R R\n"
5938 "\n"
5939 " This command schedules the files to be removed at the next commit.\n"
5940 " To undo a remove before that, see hg revert.\n"
5941 " "
5942 msgstr ""
5943
5944 msgid "no files specified"
5945 msgstr ""
5946
5947 #, python-format
5948 msgid "not removing %s: file %s (use -f to force removal)\n"
5949 msgstr "fjerner ikke %s: filen %s (brug -f for at forcere fjernelsen)\n"
5950
5951 msgid "still exists"
5952 msgstr "eksisterer stadig"
5953
5954 msgid "is modified"
5955 msgstr "er modificeret"
5956
5957 msgid "has been marked for add"
5958 msgstr "er markeret som tilføjet"
5959
5960 msgid ""
5961 "rename files; equivalent of copy + remove\n"
5962 "\n"
5963 " Mark dest as copies of sources; mark sources for deletion. If\n"
5964 " dest is a directory, copies are put in that directory. If dest is\n"
5965 " a file, there can only be one source.\n"
5966 "\n"
5967 " By default, this command copies the contents of files as they\n"
5968 " stand in the working directory. If invoked with --after, the\n"
5969 " operation is recorded, but no copying is performed.\n"
5970 "\n"
5971 " This command takes effect in the next commit. To undo a rename\n"
5972 " before that, see hg revert.\n"
5973 " "
5974 msgstr ""
5975
5976 msgid ""
5977 "retry file merges from a merge or update\n"
5978 "\n"
5979 " This command will cleanly retry unresolved file merges using file\n"
5980 " revisions preserved from the last update or merge. To attempt to\n"
5981 " resolve all unresolved files, use the -a switch.\n"
5982 "\n"
5983 " This command will also allow listing resolved files and manually\n"
5984 " marking and unmarking files as resolved.\n"
5985 "\n"
5986 " The codes used to show the status of files are:\n"
5987 " U = unresolved\n"
5988 " R = resolved\n"
5989 " "
5990 msgstr ""
5991
5992 msgid "too many options specified"
5993 msgstr ""
5994
5995 msgid "can't specify --all and patterns"
5996 msgstr ""
5997
5998 msgid "no files or directories specified; use --all to remerge all files"
5999 msgstr ""
6000 "ingen filer eller mapper specificeret; brug --all for at gen-sammenføje alle "
6001 "filerne"
6002
6003 msgid ""
6004 "restore individual files or dirs to an earlier state\n"
6005 "\n"
6006 " (use update -r to check out earlier revisions, revert does not\n"
6007 " change the working dir parents)\n"
6008 "\n"
6009 " With no revision specified, revert the named files or directories\n"
6010 " to the contents they had in the parent of the working directory.\n"
6011 " This restores the contents of the affected files to an unmodified\n"
6012 " state and unschedules adds, removes, copies, and renames. If the\n"
6013 " working directory has two parents, you must explicitly specify the\n"
6014 " revision to revert to.\n"
6015 "\n"
6016 " Using the -r option, revert the given files or directories to their\n"
6017 " contents as of a specific revision. This can be helpful to \"roll\n"
6018 " back\" some or all of an earlier change.\n"
6019 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
6020 "\n"
6021 " Revert modifies the working directory. It does not commit any\n"
6022 " changes, or change the parent of the working directory. If you\n"
6023 " revert to a revision other than the parent of the working\n"
6024 " directory, the reverted files will thus appear modified\n"
6025 " afterwards.\n"
6026 "\n"
6027 " If a file has been deleted, it is restored. If the executable\n"
6028 " mode of a file was changed, it is reset.\n"
6029 "\n"
6030 " If names are given, all files matching the names are reverted.\n"
6031 " If no arguments are given, no files are reverted.\n"
6032 "\n"
6033 " Modified files are saved with a .orig suffix before reverting.\n"
6034 " To disable these backups, use --no-backup.\n"
6035 " "
6036 msgstr ""
6037
6038 msgid "you can't specify a revision and a date"
6039 msgstr "du kan ikke specificeret en revision og en dato"
6040
6041 msgid "no files or directories specified; use --all to revert the whole repo"
6042 msgstr ""
6043 "ingen filer eller mapper specificeret; brug --all for at føre hele repo'et "
6044 "tilbage"
6045
6046 #, python-format
6047 msgid "forgetting %s\n"
6048 msgstr "glemmer %s\n"
6049
6050 #, python-format
6051 msgid "reverting %s\n"
6052 msgstr "fører %s tilbage\n"
6053
6054 #, python-format
6055 msgid "undeleting %s\n"
6056 msgstr ""
6057
6058 #, python-format
6059 msgid "saving current version of %s as %s\n"
6060 msgstr "gemmer nuværende version af %s som %s\n"
6061
6062 #, python-format
6063 msgid "file not managed: %s\n"
6064 msgstr ""
6065
6066 #, python-format
6067 msgid "no changes needed to %s\n"
6068 msgstr ""
6069
6070 msgid ""
6071 "roll back the last transaction\n"
6072 "\n"
6073 " This command should be used with care. There is only one level of\n"
6074 " rollback, and there is no way to undo a rollback. It will also\n"
6075 " restore the dirstate at the time of the last transaction, losing\n"
6076 " any dirstate changes since that time.\n"
6077 "\n"
6078 " Transactions are used to encapsulate the effects of all commands\n"
6079 " that create new changesets or propagate existing changesets into a\n"
6080 " repository. For example, the following commands are transactional,\n"
6081 " and their effects can be rolled back:\n"
6082 "\n"
6083 " commit\n"
6084 " import\n"
6085 " pull\n"
6086 " push (with this repository as destination)\n"
6087 " unbundle\n"
6088 "\n"
6089 " This command is not intended for use on public repositories. Once\n"
6090 " changes are visible for pull by other users, rolling a transaction\n"
6091 " back locally is ineffective (someone else may already have pulled\n"
6092 " the changes). Furthermore, a race is possible with readers of the\n"
6093 " repository; for example an in-progress pull from the repository\n"
6094 " may fail if a rollback is performed.\n"
6095 " "
6096 msgstr ""
6097
6098 msgid ""
6099 "print the root (top) of the current working dir\n"
6100 "\n"
6101 " Print the root directory of the current repository.\n"
6102 " "
6103 msgstr ""
6104
6105 msgid ""
6106 "export the repository via HTTP\n"
6107 "\n"
6108 " Start a local HTTP repository browser and pull server.\n"
6109 "\n"
6110 " By default, the server logs accesses to stdout and errors to\n"
6111 " stderr. Use the \"-A\" and \"-E\" options to log to files.\n"
6112 " "
6113 msgstr ""
6114
6115 #, python-format
6116 msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
6117 msgstr "lytter på http://%s%s/%s (bundet til %s:%d)\n"
6118
6119 msgid ""
6120 "show changed files in the working directory\n"
6121 "\n"
6122 " Show status of files in the repository. If names are given, only\n"
6123 " files that match are shown. Files that are clean or ignored or\n"
6124 " source of a copy/move operation, are not listed unless -c (clean),\n"
6125 " -i (ignored), -C (copies) or -A is given. Unless options described\n"
6126 " with \"show only ...\" are given, the options -mardu are used.\n"
6127 "\n"
6128 " Option -q/--quiet hides untracked (unknown and ignored) files\n"
6129 " unless explicitly requested with -u/--unknown or -i/-ignored.\n"
6130 "\n"
6131 " NOTE: status may appear to disagree with diff if permissions have\n"
6132 " changed or a merge has occurred. The standard diff format does not\n"
6133 " report permission changes and diff only reports changes relative\n"
6134 " to one merge parent.\n"
6135 "\n"
6136 " If one revision is given, it is used as the base revision.\n"
6137 " If two revisions are given, the difference between them is shown.\n"
6138 "\n"
6139 " The codes used to show the status of files are:\n"
6140 " M = modified\n"
6141 " A = added\n"
6142 " R = removed\n"
6143 " C = clean\n"
6144 " ! = deleted, but still tracked\n"
6145 " ? = not tracked\n"
6146 " I = ignored\n"
6147 " = the previous added file was copied from here\n"
6148 " "
6149 msgstr ""
6150
6151 msgid ""
6152 "add one or more tags for the current or given revision\n"
6153 "\n"
6154 " Name a particular revision using <name>.\n"
6155 "\n"
6156 " Tags are used to name particular revisions of the repository and are\n"
6157 " very useful to compare different revisions, to go back to significant\n"
6158 " earlier versions or to mark branch points as releases, etc.\n"
6159 "\n"
6160 " If no revision is given, the parent of the working directory is used,\n"
6161 " or tip if no revision is checked out.\n"
6162 "\n"
6163 " To facilitate version control, distribution, and merging of tags,\n"
6164 " they are stored as a file named \".hgtags\" which is managed\n"
6165 " similarly to other project files and can be hand-edited if\n"
6166 " necessary. The file '.hg/localtags' is used for local tags (not\n"
6167 " shared among repositories).\n"
6168 "\n"
6169 " See 'hg help dates' for a list of formats valid for -d/--date.\n"
6170 " "
6171 msgstr ""
6172
6173 msgid "tag names must be unique"
6174 msgstr ""
6175
6176 #, python-format
6177 msgid "the name '%s' is reserved"
6178 msgstr ""
6179
6180 msgid "--rev and --remove are incompatible"
6181 msgstr ""
6182
6183 #, python-format
6184 msgid "tag '%s' does not exist"
6185 msgstr ""
6186
6187 #, python-format
6188 msgid "tag '%s' is not a %s tag"
6189 msgstr ""
6190
6191 #, python-format
6192 msgid "Removed tag %s"
6193 msgstr ""
6194
6195 #, python-format
6196 msgid "tag '%s' already exists (use -f to force)"
6197 msgstr ""
6198
6199 #, python-format
6200 msgid "Added tag %s for changeset %s"
6201 msgstr "Tilføjede mærkat %s til ændring %s"
6202
6203 msgid ""
6204 "list repository tags\n"
6205 "\n"
6206 " This lists both regular and local tags. When the -v/--verbose switch\n"
6207 " is used, a third column \"local\" is printed for local tags.\n"
6208 " "
6209 msgstr ""
6210 "vis arkivmærkater\n"
6211 "\n"
6212 " Viser både normale og lokale mærkater. Når -v/--verbose flaget\n"
6213 " bruges, udskrives en tredje kolonne \"local\" for lokale mærkater.\n"
6214 " "
6215
6216 msgid ""
6217 "show the tip revision\n"
6218 "\n"
6219 " The tip revision (usually just called the tip) is the most\n"
6220 " recently added changeset in the repository, the most recently\n"
6221 " changed head.\n"
6222 "\n"
6223 " If you have just made a commit, that commit will be the tip. If\n"
6224 " you have just pulled changes from another repository, the tip of\n"
6225 " that repository becomes the current tip. The \"tip\" tag is special\n"
6226 " and cannot be renamed or assigned to a different changeset.\n"
6227 " "
6228 msgstr ""
6229
6230 msgid ""
6231 "apply one or more changegroup files\n"
6232 "\n"
6233 " Apply one or more compressed changegroup files generated by the\n"
6234 " bundle command.\n"
6235 " "
6236 msgstr ""
6237
6238 msgid ""
6239 "update working directory\n"
6240 "\n"
6241 " Update the repository's working directory to the specified revision,\n"
6242 " or the tip of the current branch if none is specified. Use null as\n"
6243 " the revision to remove the working copy (like 'hg clone -U').\n"
6244 "\n"
6245 " When the working dir contains no uncommitted changes, it will be\n"
6246 " replaced by the state of the requested revision from the repo. When\n"
6247 " the requested revision is on a different branch, the working dir\n"
6248 " will additionally be switched to that branch.\n"
6249 "\n"
6250 " When there are uncommitted changes, use option -C to discard them,\n"
6251 " forcibly replacing the state of the working dir with the requested\n"
6252 " revision.\n"
6253 "\n"
6254 " When there are uncommitted changes and option -C is not used, and\n"
6255 " the parent revision and requested revision are on the same branch,\n"
6256 " and one of them is an ancestor of the other, then the new working\n"
6257 " directory will contain the requested revision merged with the\n"
6258 " uncommitted changes. Otherwise, the update will fail with a\n"
6259 " suggestion to use 'merge' or 'update -C' instead.\n"
6260 "\n"
6261 " If you want to update just one file to an older revision, use revert.\n"
6262 "\n"
6263 " See 'hg help dates' for a list of formats valid for --date.\n"
6264 " "
6265 msgstr ""
6266
6267 msgid ""
6268 "verify the integrity of the repository\n"
6269 "\n"
6270 " Verify the integrity of the current repository.\n"
6271 "\n"
6272 " This will perform an extensive check of the repository's\n"
6273 " integrity, validating the hashes and checksums of each entry in\n"
6274 " the changelog, manifest, and tracked files, as well as the\n"
6275 " integrity of their crosslinks and indices.\n"
6276 " "
6277 msgstr ""
6278
6279 msgid "output version and copyright information"
6280 msgstr ""
6281
6282 #, python-format
6283 msgid "Mercurial Distributed SCM (version %s)\n"
6284 msgstr "Mercurial Distributed SCM (version %s)\n"
6285
6286 msgid ""
6287 "\n"
6288 "Copyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> and others\n"
6289 "This is free software; see the source for copying conditions. There is NO\n"
6290 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
6291 msgstr ""
6292
6293 msgid "repository root directory or symbolic path name"
6294 msgstr ""
6295
6296 msgid "change working directory"
6297 msgstr "skift arbejdsbibliotek"
6298
6299 msgid "do not prompt, assume 'yes' for any required answers"
6300 msgstr "spørg ikke, antag alle svar er 'ja'"
6301
6302 msgid "suppress output"
6303 msgstr "undertryk output"
6304
6305 msgid "enable additional output"
6306 msgstr ""
6307
6308 msgid "set/override config option"
6309 msgstr ""
6310
6311 msgid "enable debugging output"
6312 msgstr ""
6313
6314 msgid "start debugger"
6315 msgstr ""
6316
6317 msgid "set the charset encoding"
6318 msgstr ""
6319
6320 msgid "set the charset encoding mode"
6321 msgstr ""
6322
6323 msgid "print improved command execution profile"
6324 msgstr ""
6325
6326 msgid "print traceback on exception"
6327 msgstr ""
6328
6329 msgid "time how long the command takes"
6330 msgstr ""
6331
6332 msgid "print command execution profile"
6333 msgstr ""
6334
6335 msgid "output version information and exit"
6336 msgstr ""
6337
6338 msgid "display help and exit"
6339 msgstr ""
6340
6341 msgid "do not perform actions, just print output"
6342 msgstr "udfør ingen handlinger, udskriv kun outputttet"
6343
6344 msgid "specify ssh command to use"
6345 msgstr "specificer ssh kommandoen som skal bruges"
6346
6347 msgid "specify hg command to run on the remote side"
6348 msgstr ""
6349
6350 msgid "include names matching the given patterns"
6351 msgstr "inkluder navne som matcher det givne mønster"
6352
6353 msgid "exclude names matching the given patterns"
6354 msgstr "ekskluder navne som matcher det givne mønster"
6355
6356 msgid "use <text> as commit message"
6357 msgstr "brug <tekst> som commit-besked"
6358
6359 msgid "read commit message from <file>"
6360 msgstr "læs commit-beskeden fra <fil>"
6361
6362 msgid "record datecode as commit date"
6363 msgstr ""
6364
6365 msgid "record user as committer"
6366 msgstr ""
6367
6368 msgid "display using template map file"
6369 msgstr ""
6370
6371 msgid "display with template"
6372 msgstr ""
6373
6374 msgid "do not show merges"
6375 msgstr ""
6376
6377 msgid "treat all files as text"
6378 msgstr "behandl alle filer som tekst"
6379
6380 msgid "don't include dates in diff headers"
6381 msgstr ""
6382
6383 msgid "show which function each change is in"
6384 msgstr ""
6385
6386 msgid "ignore white space when comparing lines"
6387 msgstr ""
6388
6389 msgid "ignore changes in the amount of white space"
6390 msgstr ""
6391
6392 msgid "ignore changes whose lines are all blank"
6393 msgstr ""
6394
6395 msgid "number of lines of context to show"
6396 msgstr ""
6397
6398 msgid "guess renamed files by similarity (0<=s<=100)"
6399 msgstr ""
6400
6401 msgid "[OPTION]... [FILE]..."
6402 msgstr ""
6403
6404 msgid "annotate the specified revision"
6405 msgstr "annotér den angivne revision"
6406
6407 msgid "follow file copies and renames"
6408 msgstr "følg kopier og omdøbninger"
6409
6410 msgid "list the author (long with -v)"
6411 msgstr "vis forfatteren (lang med -v)"
6412
6413 msgid "list the date (short with -q)"
6414 msgstr "vis datoen (kort med -q)"
6415
6416 msgid "list the revision number (default)"
6417 msgstr "vis revisionsnummeret (standard)"
6418
6419 msgid "list the changeset"
6420 msgstr "vis ændringen"
6421
6422 msgid "show line number at the first appearance"
6423 msgstr "vil linienummeret for den første forekomst"
6424
6425 msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
6426 msgstr ""
6427
6428 msgid "do not pass files through decoders"
6429 msgstr ""
6430
6431 msgid "directory prefix for files in archive"
6432 msgstr ""
6433
6434 msgid "revision to distribute"
6435 msgstr ""
6436
6437 msgid "type of distribution to create"
6438 msgstr ""
6439
6440 msgid "[OPTION]... DEST"
6441 msgstr ""
6442
6443 msgid "merge with old dirstate parent after backout"
6444 msgstr ""
6445
6446 msgid "parent to choose when backing out merge"
6447 msgstr ""
6448
6449 msgid "revision to backout"
6450 msgstr "revision som skal bakkes ud"
6451
6452 msgid "[OPTION]... [-r] REV"
6453 msgstr ""
6454
6455 msgid "reset bisect state"
6456 msgstr "nulstil bisect"
6457
6458 msgid "mark changeset good"
6459 msgstr "marker ændring som god"
6460
6461 msgid "mark changeset bad"
6462 msgstr "marker ændring som dårlig"
6463
6464 msgid "skip testing changeset"
6465 msgstr ""
6466
6467 msgid "use command to check changeset state"
6468 msgstr "brug kommando for at tjekke tilstanden af ændringen"
6469
6470 msgid "do not update to target"
6471 msgstr "undlad at opdatere til målet"
6472
6473 msgid "[-gbsr] [-c CMD] [REV]"
6474 msgstr ""
6475
6476 msgid "set branch name even if it shadows an existing branch"
6477 msgstr ""
6478
6479 msgid "reset branch name to parent branch name"
6480 msgstr ""
6481
6482 msgid "[-fC] [NAME]"
6483 msgstr ""
6484
6485 msgid "show only branches that have unmerged heads"
6486 msgstr ""
6487
6488 msgid "[-a]"
6489 msgstr ""
6490
6491 msgid "run even when remote repository is unrelated"
6492 msgstr "kør selv hvis fjernarkivet er urelateret"
6493
6494 msgid "a changeset up to which you would like to bundle"
6495 msgstr ""
6496
6497 msgid "a base changeset to specify instead of a destination"
6498 msgstr ""
6499
6500 msgid "bundle all changesets in the repository"
6501 msgstr ""
6502
6503 msgid "bundle compression type to use"
6504 msgstr ""
6505
6506 msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
6507 msgstr ""
6508
6509 msgid "print output to file with formatted name"
6510 msgstr ""
6511
6512 msgid "print the given revision"
6513 msgstr ""
6514
6515 msgid "apply any matching decode filter"
6516 msgstr ""
6517
6518 msgid "[OPTION]... FILE..."
6519 msgstr ""
6520
6521 msgid "the clone will only contain a repository (no working copy)"
6522 msgstr ""
6523
6524 msgid "a changeset you would like to have after cloning"
6525 msgstr ""
6526
6527 msgid "[OPTION]... SOURCE [DEST]"
6528 msgstr ""
6529
6530 msgid "mark new/missing files as added/removed before committing"
6531 msgstr ""
6532
6533 msgid "mark a branch as closed, hiding it from the branch list"
6534 msgstr ""
6535
6536 msgid "record a copy that has already occurred"
6537 msgstr ""
6538
6539 msgid "forcibly copy over an existing managed file"
6540 msgstr ""
6541
6542 msgid "[OPTION]... [SOURCE]... DEST"
6543 msgstr ""
6544
6545 msgid "[INDEX] REV1 REV2"
6546 msgstr ""
6547
6548 msgid "show the command options"
6549 msgstr ""
6550
6551 msgid "[-o] CMD"
6552 msgstr ""
6553
6554 msgid "try extended date formats"
6555 msgstr ""
6556
6557 msgid "[-e] DATE [RANGE]"
6558 msgstr ""
6559
6560 msgid "FILE REV"
6561 msgstr ""
6562
6563 msgid "[PATH]"
6564 msgstr ""
6565
6566 msgid "FILE"
6567 msgstr ""
6568
6569 msgid "parent"
6570 msgstr ""
6571
6572 msgid "file list"
6573 msgstr ""
6574
6575 msgid "revision to rebuild to"
6576 msgstr ""
6577
6578 msgid "[-r REV] [REV]"
6579 msgstr ""
6580
6581 msgid "revision to debug"
6582 msgstr ""
6583
6584 msgid "[-r REV] FILE"
6585 msgstr ""
6586
6587 msgid "REV1 [REV2]"
6588 msgstr ""
6589
6590 msgid "do not display the saved mtime"
6591 msgstr ""
6592
6593 msgid "[OPTION]..."
6594 msgstr ""
6595
6596 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
6597 msgstr ""
6598
6599 msgid "diff against the second parent"
6600 msgstr ""
6601
6602 msgid "[OPTION]... [-o OUTFILESPEC] REV..."
6603 msgstr ""
6604
6605 msgid "end fields with NUL"
6606 msgstr ""
6607
6608 msgid "print all revisions that match"
6609 msgstr ""
6610
6611 msgid "follow changeset history, or file history across copies and renames"
6612 msgstr ""
6613
6614 msgid "ignore case when matching"
6615 msgstr ""
6616
6617 msgid "print only filenames and revs that match"
6618 msgstr ""
6619
6620 msgid "print matching line numbers"
6621 msgstr ""
6622
6623 msgid "search in given revision range"
6624 msgstr ""
6625
6626 msgid "[OPTION]... PATTERN [FILE]..."
6627 msgstr ""
6628
6629 msgid "show only heads which are descendants of rev"
6630 msgstr ""
6631
6632 msgid "show only the active heads from open branches"
6633 msgstr ""
6634
6635 msgid "[-r REV] [REV]..."
6636 msgstr ""
6637
6638 msgid "[TOPIC]"
6639 msgstr ""
6640
6641 msgid "identify the specified rev"
6642 msgstr ""
6643
6644 msgid "show local revision number"
6645 msgstr ""
6646
6647 msgid "show global revision id"
6648 msgstr ""
6649
6650 msgid "show branch"
6651 msgstr ""
6652
6653 msgid "show tags"
6654 msgstr "vis mærkater"
6655
6656 msgid "[-nibt] [-r REV] [SOURCE]"
6657 msgstr ""
6658
6659 msgid ""
6660 "directory strip option for patch. This has the same\n"
6661 "meaning as the corresponding patch option"
6662 msgstr ""
6663
6664 msgid "base path"
6665 msgstr ""
6666
6667 msgid "skip check for outstanding uncommitted changes"
6668 msgstr ""
6669
6670 msgid "don't commit, just update the working directory"
6671 msgstr ""
6672
6673 msgid "apply patch to the nodes from which it was generated"
6674 msgstr ""
6675
6676 msgid "Use any branch information in patch (implied by --exact)"
6677 msgstr ""
6678
6679 msgid "[OPTION]... PATCH..."
6680 msgstr ""
6681
6682 msgid "show newest record first"
6683 msgstr ""
6684
6685 msgid "file to store the bundles into"
6686 msgstr ""
6687
6688 msgid "a specific revision up to which you would like to pull"
6689 msgstr ""
6690
6691 msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
6692 msgstr ""
6693
6694 msgid "[-e CMD] [--remotecmd CMD] [DEST]"
6695 msgstr ""
6696
6697 msgid "search the repository as it stood at rev"
6698 msgstr ""
6699
6700 msgid "end filenames with NUL, for use with xargs"
6701 msgstr ""
6702
6703 msgid "print complete paths from the filesystem root"
6704 msgstr ""
6705
6706 msgid "[OPTION]... [PATTERN]..."
6707 msgstr ""
6708
6709 msgid "only follow the first parent of merge changesets"
6710 msgstr ""
6711
6712 msgid "show revs matching date spec"
6713 msgstr ""
6714
6715 msgid "show copied files"
6716 msgstr ""
6717
6718 msgid "do case-insensitive search for a keyword"
6719 msgstr ""
6720
6721 msgid "include revs where files were removed"
6722 msgstr ""
6723
6724 msgid "show only merges"
6725 msgstr ""
6726
6727 msgid "revs committed by user"
6728 msgstr ""
6729
6730 msgid "show only changesets within the given named branch"
6731 msgstr ""
6732
6733 msgid "do not display revision or any of its ancestors"
6734 msgstr ""
6735
6736 msgid "[OPTION]... [FILE]"
6737 msgstr ""
6738
6739 msgid "revision to display"
6740 msgstr ""
6741
6742 msgid "[-r REV]"
6743 msgstr ""
6744
6745 msgid "force a merge with outstanding changes"
6746 msgstr ""
6747
6748 msgid "revision to merge"
6749 msgstr ""
6750
6751 msgid "[-f] [[-r] REV]"
6752 msgstr ""
6753
6754 msgid "a specific revision up to which you would like to push"
6755 msgstr ""
6756
6757 msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
6758 msgstr ""
6759
6760 msgid "show parents from the specified rev"
6761 msgstr ""
6762
6763 msgid "hg parents [-r REV] [FILE]"
6764 msgstr ""
6765
6766 msgid "[NAME]"
6767 msgstr ""
6768
6769 msgid "update to new tip if changesets were pulled"
6770 msgstr ""
6771
6772 msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
6773 msgstr ""
6774
6775 msgid "force push"
6776 msgstr ""
6777
6778 msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
6779 msgstr ""
6780
6781 msgid "record delete for missing files"
6782 msgstr ""
6783
6784 msgid "remove (and delete) file even if added or modified"
6785 msgstr ""
6786
6787 msgid "record a rename that has already occurred"
6788 msgstr ""
6789
6790 msgid "[OPTION]... SOURCE... DEST"
6791 msgstr ""
6792
6793 msgid "remerge all unresolved files"
6794 msgstr ""
6795
6796 msgid "list state of files needing merge"
6797 msgstr ""
6798
6799 msgid "mark files as resolved"
6800 msgstr ""
6801
6802 msgid "unmark files as resolved"
6803 msgstr ""
6804
6805 msgid "revert all changes when no arguments given"
6806 msgstr ""
6807
6808 msgid "tipmost revision matching date"
6809 msgstr ""
6810
6811 msgid "revision to revert to"
6812 msgstr ""
6813
6814 msgid "do not save backup copies of files"
6815 msgstr ""
6816
6817 msgid "[OPTION]... [-r REV] [NAME]..."
6818 msgstr ""
6819
6820 msgid "name of access log file to write to"
6821 msgstr ""
6822
6823 msgid "name of error log file to write to"
6824 msgstr ""
6825
6826 msgid "port to listen on (default: 8000)"
6827 msgstr ""
6828
6829 msgid "address to listen on (default: all interfaces)"
6830 msgstr ""
6831
6832 msgid "prefix path to serve from (default: server root)"
6833 msgstr ""
6834
6835 msgid "name to show in web pages (default: working dir)"
6836 msgstr ""
6837
6838 msgid "name of the webdir config file (serve more than one repo)"
6839 msgstr ""
6840
6841 msgid "for remote clients"
6842 msgstr ""
6843
6844 msgid "web templates to use"
6845 msgstr ""
6846
6847 msgid "template style to use"
6848 msgstr ""
6849
6850 msgid "use IPv6 in addition to IPv4"
6851 msgstr ""
6852
6853 msgid "SSL certificate file"
6854 msgstr ""
6855
6856 msgid "show untrusted configuration options"
6857 msgstr ""
6858
6859 msgid "[-u] [NAME]..."
6860 msgstr ""
6861
6862 msgid "show status of all files"
6863 msgstr ""
6864
6865 msgid "show only modified files"
6866 msgstr ""
6867
6868 msgid "show only added files"
6869 msgstr ""
6870
6871 msgid "show only removed files"
6872 msgstr ""
6873
6874 msgid "show only deleted (but tracked) files"
6875 msgstr ""
6876
6877 msgid "show only files without changes"
6878 msgstr ""
6879
6880 msgid "show only unknown (not tracked) files"
6881 msgstr ""
6882
6883 msgid "show only ignored files"
6884 msgstr ""
6885
6886 msgid "hide status prefix"
6887 msgstr ""
6888
6889 msgid "show source of copied files"
6890 msgstr ""
6891
6892 msgid "show difference from revision"
6893 msgstr ""
6894
6895 msgid "replace existing tag"
6896 msgstr ""
6897
6898 msgid "make the tag local"
6899 msgstr ""
6900
6901 msgid "revision to tag"
6902 msgstr ""
6903
6904 msgid "remove a tag"
6905 msgstr ""
6906
6907 msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
6908 msgstr ""
6909
6910 msgid "[-p]"
6911 msgstr ""
6912
6913 msgid "update to new tip if changesets were unbundled"
6914 msgstr ""
6915
6916 msgid "[-u] FILE..."
6917 msgstr ""
6918
6919 msgid "overwrite locally modified files (no backup)"
6920 msgstr ""
6921
6922 msgid "[-C] [-d DATE] [[-r] REV]"
6923 msgstr ""
6924
6925 msgid "not found in manifest"
6926 msgstr ""
6927
6928 msgid "branch name not in UTF-8!"
6929 msgstr ""
6930
6931 #, python-format
6932 msgid " searching for copies back to rev %d\n"
6933 msgstr " søger efter kopier tilbage til revision %d\n"
6934
6935 #, python-format
6936 msgid ""
6937 " unmatched files in local:\n"
6938 " %s\n"
6939 msgstr ""
6940
6941 #, python-format
6942 msgid ""
6943 " unmatched files in other:\n"
6944 " %s\n"
6945 msgstr ""
6946
6947 msgid " all copies found (* = to merge, ! = divergent):\n"
6948 msgstr ""
6949
6950 #, python-format
6951 msgid " %s -> %s %s\n"
6952 msgstr ""
6953
6954 msgid " checking for directory renames\n"
6955 msgstr ""
6956
6957 #, python-format
6958 msgid " dir %s -> %s\n"
6959 msgstr ""
6960
6961 #, python-format
6962 msgid " file %s -> %s\n"
6963 msgstr ""
6964
6965 #, python-format
6966 msgid "'\\n' and '\\r' disallowed in filenames: %r"
6967 msgstr ""
6968
6969 #, python-format
6970 msgid "directory %r already in dirstate"
6971 msgstr ""
6972
6973 #, python-format
6974 msgid "file %r in dirstate clashes with %r"
6975 msgstr ""
6976
6977 #, python-format
6978 msgid "not in dirstate: %s\n"
6979 msgstr ""
6980
6981 msgid "character device"
6982 msgstr ""
6983
6984 msgid "block device"
6985 msgstr ""
6986
6987 msgid "fifo"
6988 msgstr ""
6989
6990 msgid "socket"
6991 msgstr ""
6992
6993 msgid "directory"
6994 msgstr ""
6995
6996 #, python-format
6997 msgid "%s: unsupported file type (type is %s)\n"
6998 msgstr ""
6999
7000 #, python-format
7001 msgid "abort: %s\n"
7002 msgstr "afbrudt: %s\n"
7003
7004 #, python-format
7005 msgid ""
7006 "hg: command '%s' is ambiguous:\n"
7007 " %s\n"
7008 msgstr ""
7009 "hg: kommandoen '%s' is tvetydig:\n"
7010 " %s\n"
7011
7012 #, python-format
7013 msgid "timed out waiting for lock held by %s"
7014 msgstr ""
7015
7016 #, python-format
7017 msgid "lock held by %s"
7018 msgstr ""
7019
7020 #, python-format
7021 msgid "abort: %s: %s\n"
7022 msgstr "afbrudt: %s: %s\n"
7023
7024 #, python-format
7025 msgid "abort: could not lock %s: %s\n"
7026 msgstr "afbrudt: kunne ikke låse %s: %s\n"
7027
7028 #, python-format
7029 msgid "hg %s: %s\n"
7030 msgstr "hg %s: %s\n"
7031
7032 #, python-format
7033 msgid "hg: %s\n"
7034 msgstr "hg: %s\n"
7035
7036 #, python-format
7037 msgid "abort: %s!\n"
7038 msgstr "afbrudt: %s!\n"
7039
7040 #, python-format
7041 msgid "abort: %s"
7042 msgstr "afbrudt: %s"
7043
7044 msgid " empty string\n"
7045 msgstr " tom streng\n"
7046
7047 msgid "killed!\n"
7048 msgstr "dræbt!\n"
7049
7050 #, python-format
7051 msgid "hg: unknown command '%s'\n"
7052 msgstr "hg: ukendt kommando '%s'\n"
7053
7054 #, python-format
7055 msgid "abort: could not import module %s!\n"
7056 msgstr "afbrudt: kunne ikke importere modul %s!\n"
7057
7058 msgid "(did you forget to compile extensions?)\n"
7059 msgstr "(glemte du at kompilere udvidelserne?)\n"
7060
7061 msgid "(is your Python install correct?)\n"
7062 msgstr "(er din Python installeret korrekt?)\n"
7063
7064 #, python-format
7065 msgid "abort: error: %s\n"
7066 msgstr ""
7067
7068 msgid "broken pipe\n"
7069 msgstr ""
7070
7071 msgid "interrupted!\n"
7072 msgstr "standset!\n"
7073
7074 msgid ""
7075 "\n"
7076 "broken pipe\n"
7077 msgstr ""
7078
7079 msgid "abort: out of memory\n"
7080 msgstr "afbrudt: løbet tør for hukommelse\n"
7081
7082 msgid "** unknown exception encountered, details follow\n"
7083 msgstr "** der opstod en ukendt fejl, detaljer følger\n"
7084
7085 msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
7086 msgstr "** angiv fejldetaljer på http://www.selenic.com/mercurial/bts\n"
7087
7088 msgid "** or mercurial@selenic.com\n"
7089 msgstr "** eller mercurial@selenic.com\n"
7090
7091 #, python-format
7092 msgid "** Mercurial Distributed SCM (version %s)\n"
7093 msgstr "** Mercurial Distributed SCM (version %s)\n"
7094
7095 #, python-format
7096 msgid "** Extensions loaded: %s\n"
7097 msgstr ""
7098
7099 #, python-format
7100 msgid "malformed --config option: %s"
7101 msgstr ""
7102
7103 #, python-format
7104 msgid "extension '%s' overrides commands: %s\n"
7105 msgstr ""
7106
7107 msgid "Option --config may not be abbreviated!"
7108 msgstr ""
7109
7110 msgid "Option --cwd may not be abbreviated!"
7111 msgstr ""
7112
7113 msgid ""
7114 "Option -R has to be separated from other options (i.e. not -qR) and --"
7115 "repository may only be abbreviated as --repo!"
7116 msgstr ""
7117
7118 #, python-format
7119 msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
7120 msgstr ""
7121
7122 #, python-format
7123 msgid "repository '%s' is not local"
7124 msgstr ""
7125
7126 msgid "invalid arguments"
7127 msgstr ""
7128
7129 msgid "exception raised - generating profile anyway\n"
7130 msgstr ""
7131
7132 msgid ""
7133 "lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
7134 "misc/lsprof/"
7135 msgstr ""
7136
7137 #, python-format
7138 msgid "*** failed to import extension %s from %s: %s\n"
7139 msgstr ""
7140
7141 #, python-format
7142 msgid "*** failed to import extension %s: %s\n"
7143 msgstr ""
7144
7145 #, python-format
7146 msgid "couldn't find merge tool %s\n"
7147 msgstr ""
7148
7149 #, python-format
7150 msgid "tool %s can't handle symlinks\n"
7151 msgstr ""
7152
7153 #, python-format
7154 msgid "tool %s can't handle binary\n"
7155 msgstr ""
7156
7157 #, python-format
7158 msgid "tool %s requires a GUI\n"
7159 msgstr ""
7160
7161 #, python-format
7162 msgid "picked tool '%s' for %s (binary %s symlink %s)\n"
7163 msgstr ""
7164
7165 #, python-format
7166 msgid ""
7167 " no tool found to merge %s\n"
7168 "keep (l)ocal or take (o)ther?"
7169 msgstr ""
7170
7171 msgid "[lo]"
7172 msgstr ""
7173
7174 msgid "l"
7175 msgstr ""
7176
7177 #, python-format
7178 msgid "merging %s and %s to %s\n"
7179 msgstr ""
7180
7181 #, python-format
7182 msgid "merging %s\n"
7183 msgstr ""
7184
7185 #, python-format
7186 msgid "my %s other %s ancestor %s\n"
7187 msgstr ""
7188
7189 msgid " premerge successful\n"
7190 msgstr ""
7191
7192 #, python-format
7193 msgid ""
7194 " output file %s appears unchanged\n"
7195 "was merge successful (yn)?"
7196 msgstr ""
7197
7198 msgid "[yn]"
7199 msgstr ""
7200
7201 msgid "n"
7202 msgstr ""
7203
7204 #, python-format
7205 msgid "merging %s failed!\n"
7206 msgstr ""
7207
7208 #, python-format
7209 msgid "Inconsistent state, %s:%s is good and bad"
7210 msgstr ""
7211
7212 #, python-format
7213 msgid "unknown bisect kind %s"
7214 msgstr ""
7215
7216 msgid "Date Formats"
7217 msgstr "Datoformater"
7218
7219 msgid ""
7220 "\n"
7221 " Some commands allow the user to specify a date, e.g.:\n"
7222 " * backout, commit, import, tag: Specify the commit date.\n"
7223 " * log, revert, update: Select revision(s) by date.\n"
7224 "\n"
7225 " Many date formats are valid. Here are some examples:\n"
7226 "\n"
7227 " \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n"
7228 " \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n"
7229 " \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n"
7230 " \"Dec 6\" (midnight)\n"
7231 " \"13:18\" (today assumed)\n"
7232 " \"3:39\" (3:39AM assumed)\n"
7233 " \"3:39pm\" (15:39)\n"
7234 " \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
7235 " \"2006-12-6 13:18\"\n"
7236 " \"2006-12-6\"\n"
7237 " \"12-6\"\n"
7238 " \"12/6\"\n"
7239 " \"12/6/6\" (Dec 6 2006)\n"
7240 "\n"
7241 " Lastly, there is Mercurial's internal format:\n"
7242 "\n"
7243 " \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
7244 "\n"
7245 " This is the internal representation format for dates. unixtime is\n"
7246 " the number of seconds since the epoch (1970-01-01 00:00 UTC). offset\n"
7247 " is the offset of the local timezone, in seconds west of UTC (negative\n"
7248 " if the timezone is east of UTC).\n"
7249 "\n"
7250 " The log command also accepts date ranges:\n"
7251 "\n"
7252 " \"<{date}\" - on or before a given date\n"
7253 " \">{date}\" - on or after a given date\n"
7254 " \"{date} to {date}\" - a date range, inclusive\n"
7255 " \"-{days}\" - within a given number of days of today\n"
7256 " "
7257 msgstr ""
7258 "\n"
7259 " Nogle kommandoer tillader brugeren at specificere en dato, f.eks.:\n"
7260 " * backout, commit, import, tag: specificer commit-datoen.\n"
7261 " * log, revert, update: vælg revisioner efter dato.\n"
7262 "\n"
7263 " Der er mange gyldige datoformater. Her er nogle eksempler:\n"
7264 "\n"
7265 " \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n"
7266 " \"Dec 6 13:18 -0600\" (antager år, tidszone er angivet)\n"
7267 " \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n"
7268 " \"Dec 6\" (midnat)\n"
7269 " \"13:18\" (antager dags dato)\n"
7270 " \"3:39\"\n"
7271 " \"3:39pm\" (15:39)\n"
7272 " \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
7273 " \"2006-12-6 13:18\"\n"
7274 " \"2006-12-6\"\n"
7275 " \"12-6\"\n"
7276 " \"12/6\"\n"
7277 " \"12/6/6\" (6. dec. 2006)\n"
7278 "\n"
7279 " Endelig er der Mercurials interne format:\n"
7280 "\n"
7281 " \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n"
7282 "\n"
7283 " Dette er den interne repræsentation af datoer. unixtime er\n"
7284 " antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n"
7285 " UTC). offset er den lokale tidszone, angivet i antal sekunder vest\n"
7286 " for UTC (negativ hvis tidszonen er øst for UTC).\n"
7287 "\n"
7288 " Kommandoen log accepterer også datointervaller:\n"
7289 "\n"
7290 " \"<{date}\" - på eller før den angivne dato\n"
7291 " \">{date}\" - på eller efter den angivne dato\n"
7292 " \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n"
7293 " \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n"
7294 " "
7295
7296 msgid "File Name Patterns"
7297 msgstr ""
7298
7299 msgid ""
7300 "\n"
7301 " Mercurial accepts several notations for identifying one or more\n"
7302 " files at a time.\n"
7303 "\n"
7304 " By default, Mercurial treats filenames as shell-style extended\n"
7305 " glob patterns.\n"
7306 "\n"
7307 " Alternate pattern notations must be specified explicitly.\n"
7308 "\n"
7309 " To use a plain path name without any pattern matching, start a\n"
7310 " name with \"path:\". These path names must match completely, from\n"
7311 " the root of the current repository.\n"
7312 "\n"
7313 " To use an extended glob, start a name with \"glob:\". Globs are\n"
7314 " rooted at the current directory; a glob such as \"*.c\" will match\n"
7315 " files ending in \".c\" in the current directory only.\n"
7316 "\n"
7317 " The supported glob syntax extensions are \"**\" to match any string\n"
7318 " across path separators, and \"{a,b}\" to mean \"a or b\".\n"
7319 "\n"
7320 " To use a Perl/Python regular expression, start a name with \"re:\".\n"
7321 " Regexp pattern matching is anchored at the root of the repository.\n"
7322 "\n"
7323 " Plain examples:\n"
7324 "\n"
7325 " path:foo/bar a name bar in a directory named foo in the root of\n"
7326 " the repository\n"
7327 " path:path:name a file or directory named \"path:name\"\n"
7328 "\n"
7329 " Glob examples:\n"
7330 "\n"
7331 " glob:*.c any name ending in \".c\" in the current directory\n"
7332 " *.c any name ending in \".c\" in the current directory\n"
7333 " **.c any name ending in \".c\" in the current directory, or\n"
7334 " any subdirectory\n"
7335 " foo/*.c any name ending in \".c\" in the directory foo\n"
7336 " foo/**.c any name ending in \".c\" in the directory foo, or any\n"
7337 " subdirectory\n"
7338 "\n"
7339 " Regexp examples:\n"
7340 "\n"
7341 " re:.*\\.c$ any name ending in \".c\", anywhere in the repository\n"
7342 "\n"
7343 " "
7344 msgstr ""
7345
7346 msgid "Environment Variables"
7347 msgstr "Miljøvariable"
7348
7349 msgid ""
7350 "\n"
7351 "HG::\n"
7352 " Path to the 'hg' executable, automatically passed when running hooks,\n"
7353 " extensions or external tools. If unset or empty, an executable named\n"
7354 " 'hg' (with com/exe/bat/cmd extension on Windows) is searched.\n"
7355 "\n"
7356 "HGEDITOR::\n"
7357 " This is the name of the editor to use when committing. See EDITOR.\n"
7358 "\n"
7359 " (deprecated, use .hgrc)\n"
7360 "\n"
7361 "HGENCODING::\n"
7362 " This overrides the default locale setting detected by Mercurial.\n"
7363 " This setting is used to convert data including usernames,\n"
7364 " changeset descriptions, tag names, and branches. This setting can\n"
7365 " be overridden with the --encoding command-line option.\n"
7366 "\n"
7367 "HGENCODINGMODE::\n"
7368 " This sets Mercurial's behavior for handling unknown characters\n"
7369 " while transcoding user inputs. The default is \"strict\", which\n"
7370 " causes Mercurial to abort if it can't translate a character. Other\n"
7371 " settings include \"replace\", which replaces unknown characters, and\n"
7372 " \"ignore\", which drops them. This setting can be overridden with\n"
7373 " the --encodingmode command-line option.\n"
7374 "\n"
7375 "HGMERGE::\n"
7376 " An executable to use for resolving merge conflicts. The program\n"
7377 " will be executed with three arguments: local file, remote file,\n"
7378 " ancestor file.\n"
7379 "\n"
7380 " (deprecated, use .hgrc)\n"
7381 "\n"
7382 "HGRCPATH::\n"
7383 " A list of files or directories to search for hgrc files. Item\n"
7384 " separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n"
7385 " platform default search path is used. If empty, only .hg/hgrc of\n"
7386 " current repository is read.\n"
7387 "\n"
7388 " For each element in path, if a directory, all entries in directory\n"
7389 " ending with \".rc\" are added to path. Else, element itself is\n"
7390 " added to path.\n"
7391 "\n"
7392 "HGUSER::\n"
7393 " This is the string used for the author of a commit.\n"
7394 "\n"
7395 " (deprecated, use .hgrc)\n"
7396 "\n"
7397 "EMAIL::\n"
7398 " If HGUSER is not set, this will be used as the author for a commit.\n"
7399 "\n"
7400 "LOGNAME::\n"
7401 " If neither HGUSER nor EMAIL is set, LOGNAME will be used (with\n"
7402 " '@hostname' appended) as the author value for a commit.\n"
7403 "\n"
7404 "VISUAL::\n"
7405 " This is the name of the editor to use when committing. See EDITOR.\n"
7406 "\n"
7407 "EDITOR::\n"
7408 " Sometimes Mercurial needs to open a text file in an editor\n"
7409 " for a user to modify, for example when writing commit messages.\n"
7410 " The editor it uses is determined by looking at the environment\n"
7411 " variables HGEDITOR, VISUAL and EDITOR, in that order. The first\n"
7412 " non-empty one is chosen. If all of them are empty, the editor\n"
7413 " defaults to 'vi'.\n"
7414 "\n"
7415 "PYTHONPATH::\n"
7416 " This is used by Python to find imported modules and may need to be set\n"
7417 " appropriately if Mercurial is not installed system-wide.\n"
7418 " "
7419 msgstr ""
7420
7421 msgid "Specifying Single Revisions"
7422 msgstr "Angivning af en enkelt revision"
7423
7424 msgid ""
7425 "\n"
7426 " Mercurial accepts several notations for identifying individual\n"
7427 " revisions.\n"
7428 "\n"
7429 " A plain integer is treated as a revision number. Negative\n"
7430 " integers are treated as offsets from the tip, with -1 denoting the\n"
7431 " tip.\n"
7432 "\n"
7433 " A 40-digit hexadecimal string is treated as a unique revision\n"
7434 " identifier.\n"
7435 "\n"
7436 " A hexadecimal string less than 40 characters long is treated as a\n"
7437 " unique revision identifier, and referred to as a short-form\n"
7438 " identifier. A short-form identifier is only valid if it is the\n"
7439 " prefix of one full-length identifier.\n"
7440 "\n"
7441 " Any other string is treated as a tag name, which is a symbolic\n"
7442 " name associated with a revision identifier. Tag names may not\n"
7443 " contain the \":\" character.\n"
7444 "\n"
7445 " The reserved name \"tip\" is a special tag that always identifies\n"
7446 " the most recent revision.\n"
7447 "\n"
7448 " The reserved name \"null\" indicates the null revision. This is the\n"
7449 " revision of an empty repository, and the parent of revision 0.\n"
7450 "\n"
7451 " The reserved name \".\" indicates the working directory parent. If\n"
7452 " no working directory is checked out, it is equivalent to null.\n"
7453 " If an uncommitted merge is in progress, \".\" is the revision of\n"
7454 " the first parent.\n"
7455 " "
7456 msgstr ""
7457
7458 msgid "Specifying Multiple Revisions"
7459 msgstr "Angivning af flere revisioner"
7460
7461 msgid ""
7462 "\n"
7463 " When Mercurial accepts more than one revision, they may be\n"
7464 " specified individually, or provided as a continuous range,\n"
7465 " separated by the \":\" character.\n"
7466 "\n"
7467 " The syntax of range notation is [BEGIN]:[END], where BEGIN and END\n"
7468 " are revision identifiers. Both BEGIN and END are optional. If\n"
7469 " BEGIN is not specified, it defaults to revision number 0. If END\n"
7470 " is not specified, it defaults to the tip. The range \":\" thus\n"
7471 " means \"all revisions\".\n"
7472 "\n"
7473 " If BEGIN is greater than END, revisions are treated in reverse\n"
7474 " order.\n"
7475 "\n"
7476 " A range acts as a closed interval. This means that a range of 3:5\n"
7477 " gives 3, 4 and 5. Similarly, a range of 4:2 gives 4, 3, and 2.\n"
7478 " "
7479 msgstr ""
7480
7481 msgid "Diff Formats"
7482 msgstr ""
7483
7484 msgid ""
7485 "\n"
7486 " Mercurial's default format for showing changes between two versions\n"
7487 " of a file is compatible with the unified format of GNU diff, which\n"
7488 " can be used by GNU patch and many other standard tools.\n"
7489 "\n"
7490 " While this standard format is often enough, it does not encode the\n"
7491 " following information:\n"
7492 "\n"
7493 " - executable status\n"
7494 " - copy or rename information\n"
7495 " - changes in binary files\n"
7496 " - creation or deletion of empty files\n"
7497 "\n"
7498 " Mercurial also supports the extended diff format from the git VCS\n"
7499 " which addresses these limitations. The git diff format is not\n"
7500 " produced by default because there are very few tools which\n"
7501 " understand this format.\n"
7502 "\n"
7503 " This means that when generating diffs from a Mercurial repository\n"
7504 " (e.g. with \"hg export\"), you should be careful about things like\n"
7505 " file copies and renames or other things mentioned above, because\n"
7506 " when applying a standard diff to a different repository, this extra\n"
7507 " information is lost. Mercurial's internal operations (like push and\n"
7508 " pull) are not affected by this, because they use an internal binary\n"
7509 " format for communicating changes.\n"
7510 "\n"
7511 " To make Mercurial produce the git extended diff format, use the\n"
7512 " --git option available for many commands, or set 'git = True' in the\n"
7513 " [diff] section of your hgrc. You do not need to set this option when\n"
7514 " importing diffs in this format or using them in the mq extension.\n"
7515 " "
7516 msgstr ""
7517
7518 msgid "Template Usage"
7519 msgstr ""
7520
7521 msgid ""
7522 "\n"
7523 " Mercurial allows you to customize output of commands through\n"
7524 " templates. You can either pass in a template from the command line,\n"
7525 " via the --template option, or select an existing template-style (--"
7526 "style).\n"
7527 "\n"
7528 " You can customize output for any \"log-like\" command: log, outgoing,\n"
7529 " incoming, tip, parents, heads and glog are all template-enabled.\n"
7530 "\n"
7531 " Three styles are packaged with Mercurial: default (the style used\n"
7532 " when no explicit preference is passed), compact and changelog. Usage:\n"
7533 "\n"
7534 " $ hg log -r1 --style changelog\n"
7535 "\n"
7536 " A template is a piece of text, with markup to invoke variable "
7537 "expansion:\n"
7538 "\n"
7539 " $ hg log -r1 --template \"{node}\\n\"\n"
7540 " b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
7541 "\n"
7542 " Strings in curly braces are called keywords. The availability of\n"
7543 " keywords depends on the exact context of the templater. These keywords\n"
7544 " are usually available for templating a log-like command:\n"
7545 "\n"
7546 " - author: String. The unmodified author of the changeset.\n"
7547 " - branches: String. The name of the branch on which the changeset\n"
7548 " was committed. Will be empty if the branch name was default.\n"
7549 " - date: Date information. The date when the changeset was committed.\n"
7550 " - desc: String. The text of the changeset description.\n"
7551 " - files: List of strings. All files modified, added, or removed by\n"
7552 " this changeset.\n"
7553 " - file_adds: List of strings. Files added by this changeset.\n"
7554 " - file_mods: List of strings. Files modified by this changeset.\n"
7555 " - file_dels: List of strings. Files removed by this changeset.\n"
7556 " - node: String. The changeset identification hash, as a 40-character\n"
7557 " hexadecimal string.\n"
7558 " - parents: List of strings. The parents of the changeset.\n"
7559 " - rev: Integer. The repository-local changeset revision number.\n"
7560 " - tags: List of strings. Any tags associated with the changeset.\n"
7561 "\n"
7562 " The \"date\" keyword does not produce human-readable output. If you\n"
7563 " want to use a date in your output, you can use a filter to process it.\n"
7564 " Filters are functions which return a string based on the input "
7565 "variable.\n"
7566 " You can also use a chain of filters to get the wanted output:\n"
7567 "\n"
7568 " $ hg tip --template \"{date|isodate}\\n\"\n"
7569 " 2008-08-21 18:22 +0000\n"
7570 "\n"
7571 " List of filters:\n"
7572 "\n"
7573 " - addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
7574 " every line except the last.\n"
7575 " - age: Date. Returns a human-readable age for the given date.\n"
7576 " - basename: Any text. Treats the text as a path, and returns the\n"
7577 " basename. For example, \"foo/bar/baz\" becomes \"baz\".\n"
7578 " - date: Date. Returns a date in a Unix date command format, including\n"
7579 " the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
7580 " - domain: Any text. Finds the first string that looks like an email\n"
7581 " address, and extracts just the domain component.\n"
7582 " - email: Any text. Extracts the first string that looks like an email\n"
7583 " address.\n"
7584 " - escape: Any text. Replaces the special XML/XHTML characters \"&\",\n"
7585 " \"<\" and \">\" with XML entities.\n"
7586 " - fill68: Any text. Wraps the text to fit in 68 columns.\n"
7587 " - fill76: Any text. Wraps the text to fit in 76 columns.\n"
7588 " - firstline: Any text. Returns the first line of text.\n"
7589 " - hgdate: Date. Returns the date as a pair of numbers:\n"
7590 " \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
7591 " - isodate: Date. Returns the date in ISO 8601 format.\n"
7592 " - obfuscate: Any text. Returns the input text rendered as a sequence\n"
7593 " of XML entities.\n"
7594 " - person: Any text. Returns the text before an email address.\n"
7595 " - rfc822date: Date. Returns a date using the same format used\n"
7596 " in email headers.\n"
7597 " - short: Changeset hash. Returns the short form of a changeset hash,\n"
7598 " i.e. a 12-byte hexadecimal string.\n"
7599 " - shortdate: Date. Returns a date like \"2006-09-04\".\n"
7600 " - strip: Any text. Strips all leading and trailing whitespace.\n"
7601 " - tabindent: Any text. Returns the text, with every line except the\n"
7602 " first starting with a tab character.\n"
7603 " - urlescape: Any text. Escapes all \"special\" characters. For example,\n"
7604 " \"foo bar\" becomes \"foo%20bar\".\n"
7605 " - user: Any text. Returns the user portion of an email address.\n"
7606 " "
7607 msgstr ""
7608
7609 msgid "Url Paths"
7610 msgstr "URL-stier"
7611
7612 msgid ""
7613 "\n"
7614 " Valid URLs are of the form:\n"
7615 "\n"
7616 " local/filesystem/path (or file://local/filesystem/path)\n"
7617 " http://[user[:pass]@]host[:port]/[path]\n"
7618 " https://[user[:pass]@]host[:port]/[path]\n"
7619 " ssh://[user[:pass]@]host[:port]/[path]\n"
7620 "\n"
7621 " Paths in the local filesystem can either point to Mercurial\n"
7622 " repositories or to bundle files (as created by 'hg bundle' or\n"
7623 " 'hg incoming --bundle').\n"
7624 "\n"
7625 " An optional identifier after # indicates a particular branch, tag,\n"
7626 " or changeset to deal with in the remote repository.\n"
7627 "\n"
7628 " Some features, such as pushing to http:// and https:// URLs are\n"
7629 " only possible if the feature is explicitly enabled on the\n"
7630 " remote Mercurial server.\n"
7631 "\n"
7632 " Some notes about using SSH with Mercurial:\n"
7633 " - SSH requires an accessible shell account on the destination machine\n"
7634 " and a copy of hg in the remote path or specified with as remotecmd.\n"
7635 " - path is relative to the remote user's home directory by default.\n"
7636 " Use an extra slash at the start of a path to specify an absolute "
7637 "path:\n"
7638 " ssh://example.com//tmp/repository\n"
7639 " - Mercurial doesn't use its own compression via SSH; the right thing\n"
7640 " to do is to configure it in your ~/.ssh/config, e.g.:\n"
7641 " Host *.mylocalnetwork.example.com\n"
7642 " Compression no\n"
7643 " Host *\n"
7644 " Compression yes\n"
7645 " Alternatively specify \"ssh -C\" as your ssh command in your hgrc or\n"
7646 " with the --ssh command line option.\n"
7647 "\n"
7648 " These urls can all be stored in your hgrc with path aliases under the\n"
7649 " [paths] section like so:\n"
7650 " [paths]\n"
7651 " alias1 = URL1\n"
7652 " alias2 = URL2\n"
7653 " ...\n"
7654 "\n"
7655 " You can then use the alias for any command that uses a url (for example\n"
7656 " 'hg pull alias1' would pull from the 'alias1' path).\n"
7657 "\n"
7658 " Two path aliases are more important because they are used as defaults\n"
7659 " when you do not provide the url to a command:\n"
7660 "\n"
7661 " default:\n"
7662 " When you create a repository with hg clone, the clone command saves\n"
7663 " the location of the source repository as the 'default' path. This is\n"
7664 " then used when you omit a path from the push and pull commands.\n"
7665 "\n"
7666 " default-push:\n"
7667 " The push command will look for a path named 'default-push', and\n"
7668 " prefer it over 'default' if both are defined.\n"
7669 " "
7670 msgstr ""
7671
7672 #, python-format
7673 msgid "destination directory: %s\n"
7674 msgstr ""
7675
7676 #, python-format
7677 msgid "destination '%s' already exists"
7678 msgstr ""
7679
7680 msgid ""
7681 "src repository does not support revision lookup and so doesn't support clone "
7682 "by revision"
7683 msgstr ""
7684
7685 msgid "clone from remote to remote not supported"
7686 msgstr ""
7687
7688 msgid "updating working directory\n"
7689 msgstr "opdaterer arbejdsbibliotek\n"
7690
7691 msgid "updated"
7692 msgstr "opdateret"
7693
7694 msgid "merged"
7695 msgstr "sammenføjet"
7696
7697 msgid "removed"
7698 msgstr "fjernet"
7699
7700 msgid "unresolved"
7701 msgstr "uløst"
7702
7703 #, python-format
7704 msgid "%d files %s"
7705 msgstr "%d filer %s"
7706
7707 msgid "use 'hg resolve' to retry unresolved file merges\n"
7708 msgstr ""
7709
7710 msgid "(branch merge, don't forget to commit)\n"
7711 msgstr ""
7712
7713 #, python-format
7714 msgid "error reading %s/.hg/hgrc: %s\n"
7715 msgstr ""
7716
7717 msgid "SSL support is unavailable"
7718 msgstr "understøttelse for SSL er ikke tilstede"
7719
7720 msgid "IPv6 not available on this system"
7721 msgstr "IPv6 er ikke til rådighed på dette system"
7722
7723 #, python-format
7724 msgid "cannot start server at '%s:%d': %s"
7725 msgstr "kan ikke starte server på '%s:%d': %s"
7726
7727 #, python-format
7728 msgid "calling hook %s: %s\n"
7729 msgstr ""
7730
7731 #, python-format
7732 msgid "%s hook is invalid (\"%s\" not in a module)"
7733 msgstr ""
7734
7735 #, python-format
7736 msgid "%s hook is invalid (import of \"%s\" failed)"
7737 msgstr ""
7738
7739 #, python-format
7740 msgid "%s hook is invalid (\"%s\" is not defined)"
7741 msgstr ""
7742
7743 #, python-format
7744 msgid "%s hook is invalid (\"%s\" is not callable)"
7745 msgstr ""
7746
7747 #, python-format
7748 msgid "error: %s hook failed: %s\n"
7749 msgstr ""
7750
7751 #, python-format
7752 msgid "error: %s hook raised an exception: %s\n"
7753 msgstr ""
7754
7755 #, python-format
7756 msgid "%s hook failed"
7757 msgstr ""
7758
7759 #, python-format
7760 msgid "warning: %s hook failed\n"
7761 msgstr ""
7762
7763 #, python-format
7764 msgid "running hook %s: %s\n"
7765 msgstr ""
7766
7767 #, python-format
7768 msgid "%s hook %s"
7769 msgstr ""
7770
7771 #, python-format
7772 msgid "warning: %s hook %s\n"
7773 msgstr ""
7774
7775 msgid "connection ended unexpectedly"
7776 msgstr "forbindelsen blev uventet afsluttet"
7777
7778 #, python-format
7779 msgid "unsupported URL component: \"%s\""
7780 msgstr "ikke-understøttet URL-komponent: \"%s\""
7781
7782 #, python-format
7783 msgid "using %s\n"
7784 msgstr "bruger %s\n"
7785
7786 #, python-format
7787 msgid "capabilities: %s\n"
7788 msgstr "kapaciteter: %s\n"
7789
7790 msgid "operation not supported over http"
7791 msgstr "operationen understøttes ikke over http"
7792
7793 #, python-format
7794 msgid "sending %s command\n"
7795 msgstr "sender %s kommando\n"
7796
7797 #, python-format
7798 msgid "sending %s bytes\n"
7799 msgstr "sender %s bytes\n"
7800
7801 msgid "authorization failed"
7802 msgstr "autorisation fejlede"
7803
7804 #, python-format
7805 msgid "http error while sending %s command\n"
7806 msgstr ""
7807
7808 msgid "http error, possibly caused by proxy setting"
7809 msgstr ""
7810
7811 #, python-format
7812 msgid "real URL is %s\n"
7813 msgstr "den rigtige URL er %s\n"
7814
7815 #, python-format
7816 msgid "Requested URL: '%s'\n"
7817 msgstr ""
7818
7819 #, python-format
7820 msgid "'%s' does not appear to be an hg repository"
7821 msgstr ""
7822
7823 #, python-format
7824 msgid "'%s' sent a broken Content-Type header (%s)"
7825 msgstr ""
7826
7827 #, python-format
7828 msgid "'%s' uses newer protocol %s"
7829 msgstr "'%s' bruger nyere protokol %s"
7830
7831 msgid "look up remote revision"
7832 msgstr ""
7833
7834 msgid "unexpected response:"
7835 msgstr ""
7836
7837 msgid "look up remote changes"
7838 msgstr ""
7839
7840 msgid "push failed (unexpected response):"
7841 msgstr ""
7842
7843 #, python-format
7844 msgid "push failed: %s"
7845 msgstr "skub fejlede: %s"
7846
7847 msgid "Python support for SSL and HTTPS is not installed"
7848 msgstr ""
7849
7850 msgid "cannot create new http repository"
7851 msgstr "kan ikke lave nyt http arkiv"
7852
7853 #, python-format
7854 msgid "%s: ignoring invalid syntax '%s'\n"
7855 msgstr "%s: ignorerer ugyldig syntaks '%s'\n"
7856
7857 #, python-format
7858 msgid "skipping unreadable ignore file '%s': %s\n"
7859 msgstr ""
7860
7861 #, python-format
7862 msgid "repository %s not found"
7863 msgstr "arkivet %s blev ikke fundet"
7864
7865 #, python-format
7866 msgid "repository %s already exists"
7867 msgstr "arkivet %s eksisterer allerede"
7868
7869 #, python-format
7870 msgid "requirement '%s' not supported"
7871 msgstr ""
7872
7873 #, python-format
7874 msgid "%r cannot be used in a tag name"
7875 msgstr ""
7876
7877 msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
7878 msgstr ""
7879
7880 #, python-format
7881 msgid "%s, line %s: %s\n"
7882 msgstr "%s, linie %s: %s\n"
7883
7884 msgid "cannot parse entry"
7885 msgstr ""
7886
7887 #, python-format
7888 msgid "node '%s' is not well formed"
7889 msgstr ""
7890
7891 #, python-format
7892 msgid "tag '%s' refers to unknown node"
7893 msgstr ""
7894
7895 #, python-format
7896 msgid "unknown revision '%s'"
7897 msgstr "ukendt revision '%s'"
7898
7899 #, python-format
7900 msgid "filtering %s through %s\n"
7901 msgstr "filtrerer %s gennem %s\n"
7902
7903 msgid "journal already exists - run hg recover"
7904 msgstr ""
7905
7906 msgid "rolling back interrupted transaction\n"
7907 msgstr ""
7908
7909 msgid "no interrupted transaction available\n"
7910 msgstr ""
7911
7912 msgid "rolling back last transaction\n"
7913 msgstr ""
7914
7915 #, python-format
7916 msgid "Named branch could not be reset, current branch still is: %s\n"
7917 msgstr ""
7918
7919 msgid "no rollback information available\n"
7920 msgstr ""
7921
7922 #, python-format
7923 msgid "waiting for lock on %s held by %r\n"
7924 msgstr ""
7925
7926 #, python-format
7927 msgid "repository %s"
7928 msgstr "arkiv %s"
7929
7930 #, python-format
7931 msgid "working directory of %s"
7932 msgstr "arbejdsbibliotek for %s"
7933
7934 #, python-format
7935 msgid " %s: searching for copy revision for %s\n"
7936 msgstr ""
7937
7938 #, python-format
7939 msgid " %s: copy %s:%s\n"
7940 msgstr ""
7941
7942 msgid "cannot partially commit a merge (do not specify files or patterns)"
7943 msgstr ""
7944
7945 #, python-format
7946 msgid "%s not tracked!\n"
7947 msgstr ""
7948
7949 msgid "unresolved merge conflicts (see hg resolve)"
7950 msgstr ""
7951
7952 msgid "nothing changed\n"
7953 msgstr ""
7954
7955 #, python-format
7956 msgid "trouble committing %s!\n"
7957 msgstr ""
7958
7959 msgid "HG: Enter commit message. Lines beginning with 'HG:' are removed."
7960 msgstr ""
7961
7962 msgid "empty commit message"
7963 msgstr ""
7964
7965 #, python-format
7966 msgid "%s does not exist!\n"
7967 msgstr ""
7968
7969 #, python-format
7970 msgid ""
7971 "%s: files over 10MB may cause memory and performance problems\n"
7972 "(use 'hg revert %s' to unadd the file)\n"
7973 msgstr ""
7974
7975 #, python-format
7976 msgid "%s not added: only files and symlinks supported currently\n"
7977 msgstr ""
7978
7979 #, python-format
7980 msgid "%s already tracked!\n"
7981 msgstr ""
7982
7983 #, python-format
7984 msgid "%s not added!\n"
7985 msgstr ""
7986
7987 #, python-format
7988 msgid "%s still exists!\n"
7989 msgstr ""
7990
7991 #, python-format
7992 msgid "%s not removed!\n"
7993 msgstr ""
7994
7995 #, python-format
7996 msgid "copy failed: %s is not a file or a symbolic link\n"
7997 msgstr ""
7998
7999 msgid "searching for changes\n"
8000 msgstr "leder efter ændringer\n"
8001
8002 #, python-format
8003 msgid "examining %s:%s\n"
8004 msgstr "undersøger %s:%s\n"
8005
8006 msgid "branch already found\n"
8007 msgstr "gren er allerede fundet\n"
8008
8009 #, python-format
8010 msgid "found incomplete branch %s:%s\n"
8011 msgstr "fandt ukomplet gren %s:%s\n"
8012
8013 #, python-format
8014 msgid "found new changeset %s\n"
8015 msgstr "fandt ny ændring %s\n"
8016
8017 #, python-format
8018 msgid "request %d: %s\n"
8019 msgstr "forespørgsel %d: %s\n"
8020
8021 #, python-format
8022 msgid "received %s:%s\n"
8023 msgstr "modtog %s:%s\n"
8024
8025 #, python-format
8026 msgid "narrowing %d:%d %s\n"
8027 msgstr "indskrænker %d:%d %s\n"
8028
8029 #, python-format
8030 msgid "found new branch changeset %s\n"
8031 msgstr "fandt ny forgreningsændring %s\n"
8032
8033 #, python-format
8034 msgid "narrowed branch search to %s:%s\n"
8035 msgstr "indskrænker forgreningssøgning til %s:%s\n"
8036
8037 msgid "already have changeset "
8038 msgstr "har allerede ændringen "
8039
8040 msgid "warning: repository is unrelated\n"
8041 msgstr "advarsel: arkivet er urelateret\n"
8042
8043 msgid "repository is unrelated"
8044 msgstr "arkivet er urelateret"
8045
8046 msgid "found new changesets starting at "
8047 msgstr "fandt nye ændringer startende ved "
8048
8049 #, python-format
8050 msgid "%d total queries\n"
8051 msgstr "%d forespørgsler i alt\n"
8052
8053 msgid "common changesets up to "
8054 msgstr "fælles ændringer op til "
8055
8056 msgid "requesting all changes\n"
8057 msgstr "anmoder om alle ændringer\n"
8058
8059 msgid ""
8060 "Partial pull cannot be done because other repository doesn't support "
8061 "changegroupsubset."
8062 msgstr ""
8063
8064 msgid "abort: push creates new remote heads!\n"
8065 msgstr ""
8066
8067 msgid "(did you forget to merge? use push -f to force)\n"
8068 msgstr ""
8069
8070 msgid "note: unsynced remote changes!\n"
8071 msgstr ""
8072
8073 #, python-format
8074 msgid "%d changesets found\n"
8075 msgstr ""
8076
8077 msgid "list of changesets:\n"
8078 msgstr ""
8079
8080 #, python-format
8081 msgid "empty or missing revlog for %s"
8082 msgstr ""
8083
8084 #, python-format
8085 msgid "add changeset %s\n"
8086 msgstr "tilføj ændring %s\n"
8087
8088 msgid "adding changesets\n"
8089 msgstr "tilføjer ændringer\n"
8090
8091 msgid "received changelog group is empty"
8092 msgstr ""
8093
8094 msgid "adding manifests\n"
8095 msgstr "tilføjer manifester\n"
8096
8097 msgid "adding file changes\n"
8098 msgstr "tilføjer filændringer\n"
8099
8100 #, python-format
8101 msgid "adding %s revisions\n"
8102 msgstr "tilføjer %s ændringer\n"
8103
8104 msgid "received file revlog group is empty"
8105 msgstr ""
8106
8107 #, python-format
8108 msgid " (%+d heads)"
8109 msgstr " (%+d hoveder)"
8110
8111 #, python-format
8112 msgid "added %d changesets with %d changes to %d files%s\n"
8113 msgstr "tilføjede %d ændringer med %d ændringer i %d filer%s\n"
8114
8115 msgid "updating the branch cache\n"
8116 msgstr ""
8117
8118 msgid "Unexpected response from remote server:"
8119 msgstr ""
8120
8121 msgid "operation forbidden by server"
8122 msgstr ""
8123
8124 msgid "locking the remote repository failed"
8125 msgstr ""
8126
8127 msgid "the server sent an unknown error code"
8128 msgstr ""
8129
8130 msgid "streaming all changes\n"
8131 msgstr ""
8132
8133 #, python-format
8134 msgid "%d files to transfer, %s of data\n"
8135 msgstr ""
8136
8137 #, python-format
8138 msgid "adding %s (%s)\n"
8139 msgstr "tilføjer %s (%s)\n"
8140
8141 #, python-format
8142 msgid "transferred %s in %.1f seconds (%s/sec)\n"
8143 msgstr ""
8144
8145 msgid "no [smtp]host in hgrc - cannot send mail"
8146 msgstr ""
8147
8148 #, python-format
8149 msgid "sending mail: smtp host %s, port %s\n"
8150 msgstr ""
8151
8152 msgid "can't use TLS: Python SSL support not installed"
8153 msgstr ""
8154
8155 msgid "(using tls)\n"
8156 msgstr ""
8157
8158 #, python-format
8159 msgid "(authenticating to mail server as %s)\n"
8160 msgstr ""
8161
8162 #, python-format
8163 msgid "sending mail: %s\n"
8164 msgstr ""
8165
8166 msgid "smtp specified as email transport, but no smtp host configured"
8167 msgstr ""
8168
8169 #, python-format
8170 msgid "%r specified as email transport, but not in PATH"
8171 msgstr ""
8172
8173 #, python-format
8174 msgid "ignoring invalid sendcharset: %s\n"
8175 msgstr ""
8176
8177 #, python-format
8178 msgid "invalid email address: %s"
8179 msgstr ""
8180
8181 #, python-format
8182 msgid "invalid local address: %s"
8183 msgstr ""
8184
8185 msgid "'\\n' and '\\r' disallowed in filenames"
8186 msgstr ""
8187
8188 #, python-format
8189 msgid "failed to remove %s from manifest"
8190 msgstr ""
8191
8192 #, python-format
8193 msgid "diff context lines count must be an integer, not %r"
8194 msgstr ""
8195
8196 #, python-format
8197 msgid ""
8198 "untracked file in working directory differs from file in requested revision: "
8199 "'%s'"
8200 msgstr ""
8201
8202 #, python-format
8203 msgid "case-folding collision between %s and %s"
8204 msgstr ""
8205
8206 msgid "resolving manifests\n"
8207 msgstr ""
8208
8209 #, python-format
8210 msgid " overwrite %s partial %s\n"
8211 msgstr ""
8212
8213 #, python-format
8214 msgid " ancestor %s local %s remote %s\n"
8215 msgstr ""
8216
8217 #, python-format
8218 msgid ""
8219 " conflicting flags for %s\n"
8220 "(n)one, e(x)ec or sym(l)ink?"
8221 msgstr ""
8222
8223 #, python-format
8224 msgid ""
8225 " local changed %s which remote deleted\n"
8226 "use (c)hanged version or (d)elete?"
8227 msgstr ""
8228
8229 msgid "[cd]"
8230 msgstr ""
8231
8232 msgid "c"
8233 msgstr ""
8234
8235 #, python-format
8236 msgid ""
8237 "remote changed %s which local deleted\n"
8238 "use (c)hanged version or leave (d)eleted?"
8239 msgstr ""
8240
8241 #, python-format
8242 msgid "preserving %s for resolve of %s\n"
8243 msgstr ""
8244
8245 #, python-format
8246 msgid "update failed to remove %s: %s!\n"
8247 msgstr ""
8248
8249 #, python-format
8250 msgid "getting %s\n"
8251 msgstr "henter %s\n"
8252
8253 #, python-format
8254 msgid "moving %s to %s\n"
8255 msgstr ""
8256
8257 #, python-format
8258 msgid "getting %s to %s\n"
8259 msgstr ""
8260
8261 #, python-format
8262 msgid "warning: detected divergent renames of %s to:\n"
8263 msgstr ""
8264
8265 #, python-format
8266 msgid "branch %s not found"
8267 msgstr ""
8268
8269 msgid "can't merge with ancestor"
8270 msgstr ""
8271
8272 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
8273 msgstr ""
8274
8275 msgid "crosses branches (use 'hg merge' or 'hg update -C' to discard changes)"
8276 msgstr ""
8277
8278 msgid "crosses branches (use 'hg merge' or 'hg update -C')"
8279 msgstr ""
8280
8281 msgid "crosses named branches (use 'hg update -C' to discard changes)"
8282 msgstr ""
8283
8284 #, python-format
8285 msgid "cannot create %s: destination already exists"
8286 msgstr ""
8287
8288 #, python-format
8289 msgid "cannot create %s: unable to create destination directory"
8290 msgstr ""
8291
8292 #, python-format
8293 msgid "found patch at byte %d\n"
8294 msgstr ""
8295
8296 msgid "patch generated by hg export\n"
8297 msgstr ""
8298
8299 #, python-format
8300 msgid "unable to find '%s' for patching\n"
8301 msgstr ""
8302
8303 #, python-format
8304 msgid "patching file %s\n"
8305 msgstr "retter fil %s\n"
8306
8307 #, python-format
8308 msgid "%d out of %d hunks FAILED -- saving rejects to file %s\n"
8309 msgstr ""
8310
8311 #, python-format
8312 msgid "bad hunk #%d %s (%d %d %d %d)"
8313 msgstr ""
8314
8315 #, python-format
8316 msgid "file %s already exists\n"
8317 msgstr "filen %s eksisterer allerede\n"
8318
8319 #, python-format
8320 msgid "Hunk #%d succeeded at %d %s(offset %d %s).\n"
8321 msgstr ""
8322
8323 #, python-format
8324 msgid "Hunk #%d FAILED at %d\n"
8325 msgstr ""
8326
8327 #, python-format
8328 msgid "bad hunk #%d"
8329 msgstr ""
8330
8331 #, python-format
8332 msgid "bad hunk #%d old text line %d"
8333 msgstr ""
8334
8335 msgid "could not extract binary patch"
8336 msgstr ""
8337
8338 #, python-format
8339 msgid "binary patch is %d bytes, not %d"
8340 msgstr ""
8341
8342 #, python-format
8343 msgid "unable to strip away %d dirs from %s"
8344 msgstr ""
8345
8346 msgid "undefined source and destination files"
8347 msgstr ""
8348
8349 #, python-format
8350 msgid "malformed patch %s %s"
8351 msgstr ""
8352
8353 #, python-format
8354 msgid "unsupported parser state: %s"
8355 msgstr ""
8356
8357 #, python-format
8358 msgid "patch command failed: %s"
8359 msgstr ""
8360
8361 #, python-format
8362 msgid "no valid hunks found; trying with %r instead\n"
8363 msgstr ""
8364
8365 #, python-format
8366 msgid "saving bundle to %s\n"
8367 msgstr ""
8368
8369 msgid "adding branch\n"
8370 msgstr "tilføjer gren\n"
8371
8372 #, python-format
8373 msgid "cannot %s; remote repository does not support the %r capability"
8374 msgstr ""
8375
8376 #, python-format
8377 msgid "unknown compression type %r"
8378 msgstr ""
8379
8380 #, python-format
8381 msgid "index %s unknown flags %#04x for format v0"
8382 msgstr ""
8383
8384 #, python-format
8385 msgid "index %s unknown flags %#04x for revlogng"
8386 msgstr ""
8387
8388 #, python-format
8389 msgid "index %s unknown format %d"
8390 msgstr ""
8391
8392 msgid "no node"
8393 msgstr ""
8394
8395 msgid "ambiguous identifier"
8396 msgstr ""
8397
8398 msgid "no match found"
8399 msgstr ""
8400
8401 #, python-format
8402 msgid "incompatible revision flag %x"
8403 msgstr ""
8404
8405 #, python-format
8406 msgid "%s not found in the transaction"
8407 msgstr ""
8408
8409 msgid "unknown base"
8410 msgstr ""
8411
8412 msgid "consistency error adding group"
8413 msgstr ""
8414
8415 #, python-format
8416 msgid "%s looks like a binary file."
8417 msgstr ""
8418
8419 msgid "can only specify two labels."
8420 msgstr ""
8421
8422 msgid "warning: conflicts during merge.\n"
8423 msgstr ""
8424
8425 #, python-format
8426 msgid "couldn't parse location %s"
8427 msgstr ""
8428
8429 msgid "could not create remote repo"
8430 msgstr ""
8431
8432 msgid "remote: "
8433 msgstr "fjern: "
8434
8435 msgid "no suitable response from remote hg"
8436 msgstr ""
8437
8438 #, python-format
8439 msgid "push refused: %s"
8440 msgstr ""
8441
8442 msgid "unsynced changes"
8443 msgstr ""
8444
8445 msgid "cannot lock static-http repository"
8446 msgstr ""
8447
8448 msgid "cannot create new static-http repository"
8449 msgstr ""
8450
8451 #, python-format
8452 msgid "invalid entry in fncache, line %s"
8453 msgstr ""
8454
8455 msgid "scanning\n"
8456 msgstr ""
8457
8458 #, python-format
8459 msgid "%d files, %d bytes to transfer\n"
8460 msgstr "%d filer, skal overføre %d bytes\n"
8461
8462 #, python-format
8463 msgid "sending %s (%d bytes)\n"
8464 msgstr ""
8465
8466 msgid "unmatched quotes"
8467 msgstr ""
8468
8469 #, python-format
8470 msgid "style not found: %s"
8471 msgstr ""
8472
8473 #, python-format
8474 msgid "%s:%s: parse error"
8475 msgstr ""
8476
8477 #, python-format
8478 msgid "template file %s: %s"
8479 msgstr ""
8480
8481 #, python-format
8482 msgid "Error expanding '%s%%%s'"
8483 msgstr ""
8484
8485 msgid "transaction abort!\n"
8486 msgstr ""
8487
8488 #, python-format
8489 msgid "failed to truncate %s\n"
8490 msgstr ""
8491
8492 msgid "rollback completed\n"
8493 msgstr ""
8494
8495 #, python-format
8496 msgid "Not trusting file %s from untrusted user %s, group %s\n"
8497 msgstr ""
8498
8499 #, python-format
8500 msgid ""
8501 "Failed to parse %s\n"
8502 "%s"
8503 msgstr ""
8504
8505 #, python-format
8506 msgid "Ignored: %s\n"
8507 msgstr "Ignoreret: %s\n"
8508
8509 #, python-format
8510 msgid "unable to open %s: %s"
8511 msgstr "kunne ikke åbne %s: %s"
8512
8513 #, python-format
8514 msgid ""
8515 "failed to parse %s\n"
8516 "%s"
8517 msgstr ""
8518
8519 #, python-format
8520 msgid ""
8521 "Error in configuration section [%s] parameter '%s':\n"
8522 "%s"
8523 msgstr ""
8524
8525 #, python-format
8526 msgid "Ignoring untrusted configuration option %s.%s = %s\n"
8527 msgstr ""
8528
8529 #, python-format
8530 msgid ""
8531 "Error in configuration section [%s]:\n"
8532 "%s"
8533 msgstr ""
8534
8535 msgid "enter a commit username:"
8536 msgstr "angiv et commit brugernavn:"
8537
8538 #, python-format
8539 msgid "No username found, using '%s' instead\n"
8540 msgstr "Fandt intet brugernavn, bruger '%s' istedet\n"
8541
8542 msgid "Please specify a username."
8543 msgstr "Angiv venligst et brugernavn."
8544
8545 #, python-format
8546 msgid "username %s contains a newline\n"
8547 msgstr "brugernavn %s indeholder et linieskift\n"
8548
8549 msgid "unrecognized response\n"
8550 msgstr ""
8551
8552 msgid "response expected"
8553 msgstr ""
8554
8555 msgid "password: "
8556 msgstr "kodeord: "
8557
8558 msgid "edit failed"
8559 msgstr "redigering fejlede"
8560
8561 msgid "http authorization required"
8562 msgstr ""
8563
8564 msgid "http authorization required\n"
8565 msgstr ""
8566
8567 #, python-format
8568 msgid "realm: %s\n"
8569 msgstr ""
8570
8571 #, python-format
8572 msgid "user: %s\n"
8573 msgstr "bruger: %s\n"
8574
8575 msgid "user:"
8576 msgstr "bruger:"
8577
8578 #, python-format
8579 msgid "proxying through http://%s:%s\n"
8580 msgstr ""
8581
8582 #, python-format
8583 msgid "http auth: user %s, password %s\n"
8584 msgstr "http godkendelse: bruger %s, kodeord %s\n"
8585
8586 #, python-format
8587 msgid "%s, please check your locale settings"
8588 msgstr "%s, tjek venligst dine sprogindstillinger"
8589
8590 #, python-format
8591 msgid "command '%s' failed: %s"
8592 msgstr "kommandoen '%s' fejlede: %s"
8593
8594 #, python-format
8595 msgid "path contains illegal component: %s"
8596 msgstr "stien indeholder ugyldig komponent: %s"
8597
8598 #, python-format
8599 msgid "path %r is inside repo %r"
8600 msgstr "stien %r er inde i repo %r"
8601
8602 #, python-format
8603 msgid "path %r traverses symbolic link %r"
8604 msgstr "stien %r følger symbolsk link %r"
8605
8606 msgid "Hardlinks not supported"
8607 msgstr "Hardlinks er ikke supporteret"
8608
8609 msgid "user name not available - set USERNAME environment variable"
8610 msgstr "der er ikke noget brugernavn - sæt USERNAME miljøvariabel"
8611
8612 #, python-format
8613 msgid "exited with status %d"
8614 msgstr "afsluttede med status %d"
8615
8616 #, python-format
8617 msgid "killed by signal %d"
8618 msgstr "dræbt af signal %d"
8619
8620 #, python-format
8621 msgid "stopped by signal %d"
8622 msgstr "stoppet af signal %d"
8623
8624 msgid "invalid exit code"
8625 msgstr "ugyldig returkode"
8626
8627 #, python-format
8628 msgid "could not symlink to %r: %s"
8629 msgstr "kunne ikke lave et symbolsk link til %r: %s"
8630
8631 #, python-format
8632 msgid "invalid date: %r "
8633 msgstr "ugyldig dato: %r "
8634
8635 #, python-format
8636 msgid "date exceeds 32 bits: %d"
8637 msgstr "dato overskrider 32 bit: %d"
8638
8639 #, python-format
8640 msgid "impossible time zone offset: %d"
8641 msgstr "umuligt tidszone: %d"
8642
8643 #, python-format
8644 msgid "invalid day spec: %s"
8645 msgstr ""
8646
8647 #, python-format
8648 msgid "%.0f GB"
8649 msgstr "%.0f GB"
8650
8651 #, python-format
8652 msgid "%.1f GB"
8653 msgstr "%.1f GB"
8654
8655 #, python-format
8656 msgid "%.2f GB"
8657 msgstr "%.2f GB"
8658
8659 #, python-format
8660 msgid "%.0f MB"
8661 msgstr "%.0f MB"
8662
8663 #, python-format
8664 msgid "%.1f MB"
8665 msgstr "%.1f MB"
8666
8667 #, python-format
8668 msgid "%.2f MB"
8669 msgstr "%.2f MB"
8670
8671 #, python-format
8672 msgid "%.0f KB"
8673 msgstr "%.0f KB"
8674
8675 #, python-format
8676 msgid "%.1f KB"
8677 msgstr "%.1f KB"
8678
8679 #, python-format
8680 msgid "%.2f KB"
8681 msgstr "%.2f KB"
8682
8683 #, python-format
8684 msgid "%.0f bytes"
8685 msgstr "%.0f byte"
8686
8687 msgid "cannot verify bundle or remote repos"
8688 msgstr ""
8689
8690 msgid "interrupted"
8691 msgstr "afbrudt"
8692
8693 #, python-format
8694 msgid "empty or missing %s"
8695 msgstr "tom eller mangler %s"
8696
8697 #, python-format
8698 msgid "data length off by %d bytes"
8699 msgstr ""
8700
8701 #, python-format
8702 msgid "index contains %d extra bytes"
8703 msgstr "indekset indeholder %d ekstra bytes"
8704
8705 #, python-format
8706 msgid "warning: `%s' uses revlog format 1"
8707 msgstr "advarsel: '%s' bruger revlog format 1"
8708
8709 #, python-format
8710 msgid "warning: `%s' uses revlog format 0"
8711 msgstr "advarsel: '%s' bruger revlog format 0"
8712
8713 #, python-format
8714 msgid "rev %d point to %s changeset %d"
8715 msgstr ""
8716
8717 #, python-format
8718 msgid " (expected %s)"
8719 msgstr " (forventede %s)"
8720
8721 #, python-format
8722 msgid "unknown parent 1 %s of %s"
8723 msgstr "ukendt forældre 1 %s til %s"
8724
8725 #, python-format
8726 msgid "unknown parent 2 %s of %s"
8727 msgstr "ukendt forældre 2 %s til %s"
8728
8729 #, python-format
8730 msgid "checking parents of %s"
8731 msgstr "tjekkre forældrene til %s"
8732
8733 #, python-format
8734 msgid "duplicate revision %d (%d)"
8735 msgstr "duplikeret revision %d (%d)"
8736
8737 #, python-format
8738 msgid "repository uses revlog format %d\n"
8739 msgstr "arkivet bruger revlog format %d\n"
8740
8741 msgid "checking changesets\n"
8742 msgstr "tjekker ændringer\n"
8743
8744 #, python-format
8745 msgid "unpacking changeset %s"
8746 msgstr "udpakker ændring %s"
8747
8748 msgid "checking manifests\n"
8749 msgstr ""
8750
8751 msgid "file without name in manifest"
8752 msgstr ""
8753
8754 #, python-format
8755 msgid "reading manifest delta %s"
8756 msgstr ""
8757
8758 msgid "crosschecking files in changesets and manifests\n"
8759 msgstr ""
8760
8761 #, python-format
8762 msgid "changeset refers to unknown manifest %s"
8763 msgstr ""
8764
8765 msgid "in changeset but not in manifest"
8766 msgstr ""
8767
8768 msgid "in manifest but not in changeset"
8769 msgstr ""
8770
8771 msgid "checking files\n"
8772 msgstr "tjekker filer\n"
8773
8774 #, python-format
8775 msgid "cannot decode filename '%s'"
8776 msgstr "kan ikke dekode filnavn '%s'"
8777
8778 msgid "missing revlog!"
8779 msgstr "manglende revlog!"
8780
8781 #, python-format
8782 msgid "%s not in manifests"
8783 msgstr ""
8784
8785 #, python-format
8786 msgid "unpacked size is %s, %s expected"
8787 msgstr "udpakket størrelse er %s, forventede %s"
8788
8789 #, python-format
8790 msgid "unpacking %s"
8791 msgstr "udpakker %s"
8792
8793 #, python-format
8794 msgid "empty or missing copy source revlog %s:%s"
8795 msgstr ""
8796
8797 #, python-format
8798 msgid "warning: %s@%s: copy source revision is nullid %s:%s"
8799 msgstr ""
8800
8801 #, python-format
8802 msgid "checking rename of %s"
8803 msgstr "tjekker omdøbning af %s"
8804
8805 #, python-format
8806 msgid "%s in manifests not found"
8807 msgstr ""
8808
8809 #, python-format
8810 msgid "warning: orphan revlog '%s'"
8811 msgstr "advarsel: forældreløs revlog '%s'"
8812
8813 #, python-format
8814 msgid "%d files, %d changesets, %d total revisions\n"
8815 msgstr "%d filer, %d ændringer, ialt %d revisioner\n"
8816
8817 #, python-format
8818 msgid "%d warnings encountered!\n"
8819 msgstr "mødte %d advarsler!\n"
8820
8821 #, python-format
8822 msgid "%d integrity errors encountered!\n"
8823 msgstr "fandt %d integritetsfejl!\n"
8824
8825 #, python-format
8826 msgid "(first damaged changeset appears to be %d)\n"
8827 msgstr "(første beskadigede ændring er tilsyneladende %d)\n"
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
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
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
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
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
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
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
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
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
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
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
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
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
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
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
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
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
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
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
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
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
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
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
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
@@ -27,6 +27,16 b' Output/Mercurial-*.exe'
27 .DS_Store
27 .DS_Store
28 tags
28 tags
29 cscope.*
29 cscope.*
30 i18n/hg.pot
31 locale/*/LC_MESSAGES/hg.mo
32
33 # files installed with a local --pure build
34 mercurial/base85.py
35 mercurial/bdiff.py
36 mercurial/diffhelpers.py
37 mercurial/mpatch.py
38 mercurial/osutil.py
39 mercurial/parsers.py
30
40
31 syntax: regexp
41 syntax: regexp
32 ^\.pc/
42 ^\.pc/
@@ -1,6 +1,7 b''
1 PREFIX=/usr/local
1 PREFIX=/usr/local
2 export PREFIX
2 export PREFIX
3 PYTHON=python
3 PYTHON=python
4 PURE=
4
5
5 help:
6 help:
6 @echo 'Commonly used make targets:'
7 @echo 'Commonly used make targets:'
@@ -13,6 +14,7 b' help:'
13 @echo ' dist - run all tests and create a source tarball in dist/'
14 @echo ' dist - run all tests and create a source tarball in dist/'
14 @echo ' clean - remove files created by other targets'
15 @echo ' clean - remove files created by other targets'
15 @echo ' (except installed files or dist source tarball)'
16 @echo ' (except installed files or dist source tarball)'
17 @echo ' update-pot - update i18n/hg.pot'
16 @echo
18 @echo
17 @echo 'Example for a system-wide installation under /usr/local:'
19 @echo 'Example for a system-wide installation under /usr/local:'
18 @echo ' make all && su -c "make install" && hg version'
20 @echo ' make all && su -c "make install" && hg version'
@@ -23,12 +25,11 b' help:'
23 all: build doc
25 all: build doc
24
26
25 local:
27 local:
26 $(PYTHON) setup.py build_ext -i
28 $(PYTHON) setup.py $(PURE) build_py -c -d . build_ext -i build_mo
27 $(PYTHON) setup.py build_py -c -d .
28 $(PYTHON) hg version
29 $(PYTHON) hg version
29
30
30 build:
31 build:
31 $(PYTHON) setup.py build
32 $(PYTHON) setup.py $(PURE) build
32
33
33 doc:
34 doc:
34 $(MAKE) -C doc
35 $(MAKE) -C doc
@@ -37,12 +38,13 b' clean:'
37 -$(PYTHON) setup.py clean --all # ignore errors of this command
38 -$(PYTHON) setup.py clean --all # ignore errors of this command
38 find . -name '*.py[cdo]' -exec rm -f '{}' ';'
39 find . -name '*.py[cdo]' -exec rm -f '{}' ';'
39 rm -f MANIFEST mercurial/__version__.py mercurial/*.so tests/*.err
40 rm -f MANIFEST mercurial/__version__.py mercurial/*.so tests/*.err
41 rm -rf locale
40 $(MAKE) -C doc clean
42 $(MAKE) -C doc clean
41
43
42 install: install-bin install-doc
44 install: install-bin install-doc
43
45
44 install-bin: build
46 install-bin: build
45 $(PYTHON) setup.py install --prefix="$(PREFIX)" --force
47 $(PYTHON) setup.py $(PURE) install --prefix="$(PREFIX)" --force
46
48
47 install-doc: doc
49 install-doc: doc
48 cd doc && $(MAKE) $(MFLAGS) install
50 cd doc && $(MAKE) $(MFLAGS) install
@@ -50,7 +52,7 b' install-doc: doc'
50 install-home: install-home-bin install-home-doc
52 install-home: install-home-bin install-home-doc
51
53
52 install-home-bin: build
54 install-home-bin: build
53 $(PYTHON) setup.py install --home="$(HOME)" --force
55 $(PYTHON) setup.py $(PURE) install --home="$(HOME)" --force
54
56
55 install-home-doc: doc
57 install-home-doc: doc
56 cd doc && $(MAKE) $(MFLAGS) PREFIX="$(HOME)" install
58 cd doc && $(MAKE) $(MFLAGS) PREFIX="$(HOME)" install
@@ -74,6 +76,20 b' tests:'
74 test-%:
76 test-%:
75 cd tests && $(PYTHON) run-tests.py $(TESTFLAGS) $@
77 cd tests && $(PYTHON) run-tests.py $(TESTFLAGS) $@
76
78
79 update-pot:
80 mkdir -p i18n
81 pygettext -d hg -p i18n --docstrings \
82 mercurial/commands.py hgext/*.py hgext/*/__init__.py
83 # All strings marked for translation in Mercurial contain
84 # ASCII characters only. But some files contain string
85 # literals like this '\037\213'. xgettext thinks it has to
86 # parse these them even though they are not marked for
87 # translation. Extracting with an explicit encoding of
88 # ISO-8859-1 will make xgettext "parse" and ignore them.
89 find mercurial hgext doc -name '*.py' | xargs \
90 xgettext --from-code ISO-8859-1 --join --sort-by-file \
91 -d hg -p i18n -o hg.pot
77
92
78 .PHONY: help all local build doc clean install install-bin install-doc \
93 .PHONY: help all local build doc clean install install-bin install-doc \
79 install-home install-home-bin install-home-doc dist dist-notests tests
94 install-home install-home-bin install-home-doc dist dist-notests tests \
95 update-pot
@@ -265,6 +265,7 b' proc readcommit {id} {'
265
265
266 proc parsecommit {id contents listed olds} {
266 proc parsecommit {id contents listed olds} {
267 global commitinfo children nchildren parents nparents cdate ncleft
267 global commitinfo children nchildren parents nparents cdate ncleft
268 global firstparents
268
269
269 set inhdr 1
270 set inhdr 1
270 set comment {}
271 set comment {}
@@ -338,6 +339,33 b' proc parsecommit {id contents listed old'
338 }
339 }
339 set commitinfo($id) [list $headline $auname $audate \
340 set commitinfo($id) [list $headline $auname $audate \
340 $comname $comdate $comment $rev $branch]
341 $comname $comdate $comment $rev $branch]
342
343 if {[info exists firstparents]} {
344 set i [lsearch $firstparents $id]
345 if {$i != -1} {
346 # remove the parent from firstparents, possible building
347 # an empty list
348 set firstparents [concat \
349 [lrange $firstparents 0 [expr $i - 1]] \
350 [lrange $firstparents [expr $i + 1] end]]
351 if {$firstparents eq {}} {
352 # we have found all parents of the first changeset
353 # which means that we can safely select the first line
354 after idle {
355 selectline 0 0
356 }
357 }
358 }
359 } else {
360 # this is the first changeset, save the parents
361 set firstparents $olds
362 if {$firstparents eq {}} {
363 # a repository with a single changeset
364 after idle {
365 selectline 0 0
366 }
367 }
368 }
341 }
369 }
342
370
343 proc readrefs {} {
371 proc readrefs {} {
@@ -439,7 +467,8 b' proc makewindow {} {'
439 global entries sha1entry sha1string sha1but
467 global entries sha1entry sha1string sha1but
440 global maincursor textcursor curtextcursor
468 global maincursor textcursor curtextcursor
441 global rowctxmenu gaudydiff mergemax
469 global rowctxmenu gaudydiff mergemax
442 global hgvdiff
470 global hgvdiff bgcolor fgcolor diffremcolor diffaddcolor diffmerge1color
471 global diffmerge2color hunksepcolor
443
472
444 menu .bar
473 menu .bar
445 .bar add cascade -label "File" -menu .bar.file
474 .bar add cascade -label "File" -menu .bar.file
@@ -478,16 +507,16 b' proc makewindow {} {'
478 .ctop add .ctop.top
507 .ctop add .ctop.top
479 set canv .ctop.top.clist.canv
508 set canv .ctop.top.clist.canv
480 canvas $canv -height $geometry(canvh) -width $geometry(canv1) \
509 canvas $canv -height $geometry(canvh) -width $geometry(canv1) \
481 -bg white -bd 0 \
510 -bg $bgcolor -bd 0 \
482 -yscrollincr $linespc -yscrollcommand "$cscroll set" -selectbackground grey
511 -yscrollincr $linespc -yscrollcommand "$cscroll set" -selectbackground grey
483 .ctop.top.clist add $canv
512 .ctop.top.clist add $canv
484 set canv2 .ctop.top.clist.canv2
513 set canv2 .ctop.top.clist.canv2
485 canvas $canv2 -height $geometry(canvh) -width $geometry(canv2) \
514 canvas $canv2 -height $geometry(canvh) -width $geometry(canv2) \
486 -bg white -bd 0 -yscrollincr $linespc -selectbackground grey
515 -bg $bgcolor -bd 0 -yscrollincr $linespc -selectbackground grey
487 .ctop.top.clist add $canv2
516 .ctop.top.clist add $canv2
488 set canv3 .ctop.top.clist.canv3
517 set canv3 .ctop.top.clist.canv3
489 canvas $canv3 -height $geometry(canvh) -width $geometry(canv3) \
518 canvas $canv3 -height $geometry(canvh) -width $geometry(canv3) \
490 -bg white -bd 0 -yscrollincr $linespc -selectbackground grey
519 -bg $bgcolor -bd 0 -yscrollincr $linespc -selectbackground grey
491 .ctop.top.clist add $canv3
520 .ctop.top.clist add $canv3
492 bind .ctop.top.clist <Configure> {resizeclistpanes %W %w}
521 bind .ctop.top.clist <Configure> {resizeclistpanes %W %w}
493
522
@@ -547,7 +576,7 b' proc makewindow {} {'
547 .ctop add .ctop.cdet
576 .ctop add .ctop.cdet
548 frame .ctop.cdet.left
577 frame .ctop.cdet.left
549 set ctext .ctop.cdet.left.ctext
578 set ctext .ctop.cdet.left.ctext
550 text $ctext -bg white -state disabled -font $textfont \
579 text $ctext -fg $fgcolor -bg $bgcolor -state disabled -font $textfont \
551 -width $geometry(ctextw) -height $geometry(ctexth) \
580 -width $geometry(ctextw) -height $geometry(ctexth) \
552 -yscrollcommand ".ctop.cdet.left.sb set" \
581 -yscrollcommand ".ctop.cdet.left.sb set" \
553 -xscrollcommand ".ctop.cdet.left.hb set" -wrap none
582 -xscrollcommand ".ctop.cdet.left.hb set" -wrap none
@@ -564,11 +593,16 b' proc makewindow {} {'
564 $ctext tag conf d0 -back "#ff8080"
593 $ctext tag conf d0 -back "#ff8080"
565 $ctext tag conf d1 -back green
594 $ctext tag conf d1 -back green
566 } else {
595 } else {
567 $ctext tag conf hunksep -fore blue
596 $ctext tag conf hunksep -fore $hunksepcolor
568 $ctext tag conf d0 -fore red
597 $ctext tag conf d0 -fore $diffremcolor
569 $ctext tag conf d1 -fore "#00a000"
598 $ctext tag conf d1 -fore $diffaddcolor
570 $ctext tag conf m0 -fore red
599
571 $ctext tag conf m1 -fore blue
600 # The mX colours seem to be used in merge changesets, where m0
601 # is first parent, m1 is second parent and so on. Git can have
602 # several parents, Hg cannot, so I think the m2..mmax would be
603 # unused.
604 $ctext tag conf m0 -fore $diffmerge1color
605 $ctext tag conf m1 -fore $diffmerge2color
572 $ctext tag conf m2 -fore green
606 $ctext tag conf m2 -fore green
573 $ctext tag conf m3 -fore purple
607 $ctext tag conf m3 -fore purple
574 $ctext tag conf m4 -fore brown
608 $ctext tag conf m4 -fore brown
@@ -581,7 +615,8 b' proc makewindow {} {'
581
615
582 frame .ctop.cdet.right
616 frame .ctop.cdet.right
583 set cflist .ctop.cdet.right.cfiles
617 set cflist .ctop.cdet.right.cfiles
584 listbox $cflist -bg white -selectmode extended -width $geometry(cflistw) \
618 listbox $cflist -fg $fgcolor -bg $bgcolor \
619 -selectmode extended -width $geometry(cflistw) \
585 -yscrollcommand ".ctop.cdet.right.sb set"
620 -yscrollcommand ".ctop.cdet.right.sb set"
586 scrollbar .ctop.cdet.right.sb -command "$cflist yview"
621 scrollbar .ctop.cdet.right.sb -command "$cflist yview"
587 pack .ctop.cdet.right.sb -side right -fill y
622 pack .ctop.cdet.right.sb -side right -fill y
@@ -679,7 +714,9 b' proc click {w} {'
679 proc savestuff {w} {
714 proc savestuff {w} {
680 global canv canv2 canv3 ctext cflist mainfont textfont
715 global canv canv2 canv3 ctext cflist mainfont textfont
681 global stuffsaved findmergefiles gaudydiff maxgraphpct
716 global stuffsaved findmergefiles gaudydiff maxgraphpct
682 global maxwidth authorcolors curidfont
717 global maxwidth authorcolors curidfont bgcolor fgcolor
718 global diffremcolor diffaddcolor hunksepcolor
719 global diffmerge1color diffmerge2color
683
720
684 if {$stuffsaved} return
721 if {$stuffsaved} return
685 if {![winfo viewable .]} return
722 if {![winfo viewable .]} return
@@ -721,6 +758,27 b' proc savestuff {w} {'
721 puts $f "# the last entry will be reused."
758 puts $f "# the last entry will be reused."
722 puts $f "#"
759 puts $f "#"
723 puts $f "set authorcolors {$authorcolors}"
760 puts $f "set authorcolors {$authorcolors}"
761 puts $f "#"
762 puts $f "# The background color in the text windows"
763 puts $f "set bgcolor $bgcolor"
764 puts $f "#"
765 puts $f "# The text color used in the diff and file list view"
766 puts $f "set fgcolor $fgcolor"
767 puts $f "#"
768 puts $f "# Color to display + lines in diffs"
769 puts $f "set diffaddcolor $diffaddcolor"
770 puts $f "#"
771 puts $f "# Color to display - lines in diffs"
772 puts $f "set diffremcolor $diffremcolor"
773 puts $f "#"
774 puts $f "# Merge diffs: Color to signal lines from first parent"
775 puts $f "set diffmerge1color $diffmerge1color"
776 puts $f "#"
777 puts $f "# Merge diffs: Color to signal lines from second parent"
778 puts $f "set diffmerge2color $diffmerge2color"
779 puts $f "#"
780 puts $f "# Hunkseparator (@@ -lineno,lines +lineno,lines @@) color"
781 puts $f "set hunksepcolor $hunksepcolor"
724 close $f
782 close $f
725 file rename -force "~/.hgk-new" "~/.hgk"
783 file rename -force "~/.hgk-new" "~/.hgk"
726 }
784 }
@@ -3891,6 +3949,16 b' set colors {green red blue magenta darkg'
3891 set authorcolors {
3949 set authorcolors {
3892 black blue deeppink mediumorchid blue burlywood4 goldenrod slateblue red2 navy dimgrey
3950 black blue deeppink mediumorchid blue burlywood4 goldenrod slateblue red2 navy dimgrey
3893 }
3951 }
3952 set bgcolor white
3953
3954 # This color should probably be some system color (provided by tk),
3955 # but as the bgcolor has always been set to white, I choose to ignore
3956 set fgcolor black
3957 set diffaddcolor "#00a000"
3958 set diffremcolor red
3959 set diffmerge1color red
3960 set diffmerge2color blue
3961 set hunksepcolor blue
3894
3962
3895 catch {source ~/.hgk}
3963 catch {source ~/.hgk}
3896
3964
@@ -22,7 +22,6 b' from mercurial import demandimport; dema'
22 #os.environ["HGENCODING"] = "UTF-8"
22 #os.environ["HGENCODING"] = "UTF-8"
23
23
24 from mercurial.hgweb.hgwebdir_mod import hgwebdir
24 from mercurial.hgweb.hgwebdir_mod import hgwebdir
25 from mercurial.hgweb.request import wsgiapplication
26 from flup.server.fcgi import WSGIServer
25 from flup.server.fcgi import WSGIServer
27
26
28 # The config file looks like this. You can have paths to individual
27 # The config file looks like this. You can have paths to individual
@@ -60,7 +59,4 b' from flup.server.fcgi import WSGIServer'
60 # Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
59 # Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
61 # or use a dictionary with entries like 'virtual/path': '/real/path'
60 # or use a dictionary with entries like 'virtual/path': '/real/path'
62
61
63 def make_web_app():
62 WSGIServer(hgwebdir('hgweb.config')).run()
64 return hgwebdir("hgweb.config")
65
66 WSGIServer(wsgiapplication(make_web_app)).run()
@@ -38,8 +38,9 b' p4merge.regappend=\\p4merge.exe'
38 p4merge.gui=True
38 p4merge.gui=True
39 p4merge.priority=-8
39 p4merge.priority=-8
40
40
41 tortoisemerge.args=/base: $output /mine:$local /theirs:$other /merged:$output
41 tortoisemerge.args=/base:$base /mine:$local /theirs:$other /merged:$output
42 tortoisemerge.regkey=Software\TortoiseSVN
42 tortoisemerge.regkey=Software\TortoiseSVN
43 tortoisemerge.checkchanged=True
43 tortoisemerge.gui=True
44 tortoisemerge.gui=True
44
45
45 ecmerge.args=$base $local $other --mode=merge3 --title0=base --title1=local --title2=other --to=$output
46 ecmerge.args=$base $local $other --mode=merge3 --title0=base --title1=local --title2=other --to=$output
@@ -49,3 +50,14 b' ecmerge.gui=True'
49 filemerge.executable=/Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge
50 filemerge.executable=/Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge
50 filemerge.args=-left $other -right $local -ancestor $base -merge $output
51 filemerge.args=-left $other -right $local -ancestor $base -merge $output
51 filemerge.gui=True
52 filemerge.gui=True
53
54 beyondcompare3.args=$local $other $base $output /ro /lefttitle=local /centerfile=base /righttitle=other /automerge /reviewconflicts /solo
55 beyondcompare3.regkey=Software\Scooter Software\Beyond Compare 3
56 beyondcompare3.regname=ExePath
57 beyondcompare3.gui=True
58
59 winmerge.args=/e /u /dl local /dr other /wr $local $other $output
60 winmerge.regkey=Software\Thingamahoochie\WinMerge
61 winmerge.regname=Executable
62 winmerge.checkchanged=True
63 winmerge.gui=True
@@ -2,7 +2,7 b''
2 # tcsh completion for Mercurial
2 # tcsh completion for Mercurial
3 #
3 #
4 # This file has been auto-generated by tcsh_completion_build.sh for
4 # This file has been auto-generated by tcsh_completion_build.sh for
5 # Mercurial Distributed SCM (version 325c07fd2ebd)
5 # Mercurial Distributed SCM (version 1.1.2)
6 #
6 #
7 # Copyright (C) 2005 TK Soh.
7 # Copyright (C) 2005 TK Soh.
8 #
8 #
@@ -19,24 +19,31 b' complete hg \\'
19 -y --noninteractive \
19 -y --noninteractive \
20 -q --quiet \
20 -q --quiet \
21 -v --verbose \
21 -v --verbose \
22 --config \
22 --debug \
23 --debug \
23 --debugger \
24 --debugger \
25 --encoding \
26 --encodingmode \
27 --lsprof \
24 --traceback \
28 --traceback \
25 --time \
29 --time \
26 --profile \
30 --profile \
27 --version \
31 --version \
28 -h --help)/' \
32 -h --help)/' \
29 'p/1/(add addremove annotate bundle cat \
33 'p/1/(add addremove annotate blame archive \
30 clone commit ci copy cp \
34 backout bisect branch branches bundle \
31 debugancestor debugcheckstate debugconfig debugdata debugindex \
35 cat clone commit ci copy \
32 debugindexdot debugrename debugstate debugwalk diff \
36 cp debugancestor debugcheckstate debugcomplete debugdata \
33 export forget grep heads help \
37 debugdate debugfsinfo debugindex debugindexdot debuginstall \
34 identify id import patch incoming \
38 debugrawcommit rawcommit debugrebuildstate debugrename debugsetparents \
35 in init locate log history \
39 debugstate debugwalk diff export grep \
36 manifest outgoing out parents paths \
40 heads help identify id import \
37 pull push rawcommit recover remove \
41 patch incoming in init locate \
38 rm rename mv revert root \
42 log history manifest merge outgoing \
39 serve status tag tags tip \
43 out parents paths pull push \
40 unbundle undo update up checkout \
44 recover remove rm rename mv \
41 co verify version)/'
45 resolve revert rollback root serve \
46 showconfig debugconfig status st tag \
47 tags tip unbundle update up \
48 checkout co verify version)/'
42
49
@@ -37,7 +37,7 b' tcsh_file=${1-tcsh_completion}'
37
37
38 hg_commands=`hg --debug help | \
38 hg_commands=`hg --debug help | \
39 sed -e '1,/^list of commands:/d' \
39 sed -e '1,/^list of commands:/d' \
40 -e '/^global options:/,$d' \
40 -e '/^enabled extensions:/,$d' \
41 -e '/^ [^ ]/!d; s/[,:]//g;' | \
41 -e '/^ [^ ]/!d; s/[,:]//g;' | \
42 xargs -n5 | \
42 xargs -n5 | \
43 sed -e '$!s/$/ \\\\/g; 2,$s/^ */ /g'`
43 sed -e '$!s/$/ \\\\/g; 2,$s/^ */ /g'`
@@ -5,6 +5,13 b''
5
5
6 [ui]
6 [ui]
7 editor = notepad
7 editor = notepad
8 ; show changed files and be a bit more verbose if True
9 ; verbose = True
10
11 ; username data to appear in commits
12 ; it usually takes the form: Joe User <joe.user@host.com>
13 ; username = Joe User <j.user@example.com>
14
8
15
9 ; By default, we try to encode and decode all files that do not
16 ; By default, we try to encode and decode all files that do not
10 ; contain ASCII NUL characters. What this means is that we try to set
17 ; contain ASCII NUL characters. What this means is that we try to set
@@ -37,5 +44,10 b' hgext.win32text ='
37
44
38 ; Alternatively, you can explicitly specify each file extension that
45 ; Alternatively, you can explicitly specify each file extension that
39 ; you want decoded (any you omit will be left untouched), like this:
46 ; you want decoded (any you omit will be left untouched), like this:
47 ; **.txt = dumbdecode:
48 [hgk]
49 ; Replace the following with your path to hgk, uncomment it and
50 ; install ActiveTcl (or another win32 port)
51 ; path="C:\Program Files\Mercurial\Contrib\hgk.tcl"
40
52
41 ; **.txt = dumbdecode:
53
@@ -1,8 +1,7 b''
1 ; Script generated by the Inno Setup Script Wizard.
1 ; Script generated by the Inno Setup Script Wizard.
2 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
2 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3
4 [Setup]
3 [Setup]
5 AppCopyright=Copyright 2005-2008 Matt Mackall and others
4 AppCopyright=Copyright 2005-2009 Matt Mackall and others
6 AppName=Mercurial
5 AppName=Mercurial
7 AppVerName=Mercurial snapshot
6 AppVerName=Mercurial snapshot
8 InfoAfterFile=contrib/win32/postinstall.txt
7 InfoAfterFile=contrib/win32/postinstall.txt
@@ -18,7 +17,7 b' OutputBaseFilename=Mercurial-snapshot'
18 DefaultDirName={pf}\Mercurial
17 DefaultDirName={pf}\Mercurial
19 SourceDir=..\..
18 SourceDir=..\..
20 VersionInfoDescription=Mercurial distributed SCM
19 VersionInfoDescription=Mercurial distributed SCM
21 VersionInfoCopyright=Copyright 2005-2008 Matt Mackall and others
20 VersionInfoCopyright=Copyright 2005-2009 Matt Mackall and others
22 VersionInfoCompany=Matt Mackall and others
21 VersionInfoCompany=Matt Mackall and others
23 InternalCompressLevel=max
22 InternalCompressLevel=max
24 SolidCompression=true
23 SolidCompression=true
@@ -31,8 +30,10 b' PrivilegesRequired=none'
31 Source: contrib\mercurial.el; DestDir: {app}/Contrib
30 Source: contrib\mercurial.el; DestDir: {app}/Contrib
32 Source: contrib\vim\*.*; DestDir: {app}/Contrib/Vim
31 Source: contrib\vim\*.*; DestDir: {app}/Contrib/Vim
33 Source: contrib\zsh_completion; DestDir: {app}/Contrib
32 Source: contrib\zsh_completion; DestDir: {app}/Contrib
33 Source: contrib\hgk; DestDir: {app}/Contrib; DestName: hgk.tcl
34 Source: contrib\win32\ReadMe.html; DestDir: {app}; Flags: isreadme
34 Source: contrib\win32\ReadMe.html; DestDir: {app}; Flags: isreadme
35 Source: contrib\win32\mercurial.ini; DestDir: {app}; DestName: Mercurial.ini; Flags: confirmoverwrite
35 Source: contrib\mergetools.hgrc; DestDir: {tmp};
36 Source: contrib\win32\mercurial.ini; DestDir: {app}; DestName: Mercurial.ini; Check: CheckFile; AfterInstall: ConcatenateFiles;
36 Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
37 Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
37 Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
38 Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
38 Source: dist\library.zip; DestDir: {app}
39 Source: dist\library.zip; DestDir: {app}
@@ -64,8 +65,32 b' Filename: "{app}\\add_path.exe"; Paramete'
64
65
65 [UninstallDelete]
66 [UninstallDelete]
66 Type: files; Name: "{app}\hg.exe.local"
67 Type: files; Name: "{app}\hg.exe.local"
68 [Code]
69 var
70 WriteFile: Boolean;
71 CheckDone: Boolean;
67
72
68 [Code]
73 function CheckFile(): Boolean;
74 begin
75 if not CheckDone then begin
76 WriteFile := True;
77 if FileExists(ExpandConstant(CurrentFileName)) then begin
78 WriteFile := MsgBox('' + ExpandConstant(CurrentFileName) + '' #13#13 'The file already exists.' #13#13 'Would you like Setup to overwrite it?', mbConfirmation, MB_YESNO) = idYes;
79 end;
80 CheckDone := True;
81 end;
82 Result := WriteFile;
83 end;
84
85 procedure ConcatenateFiles();
86 var
87 MergeConfigs: TArrayOfString;
88 begin
89 if LoadStringsFromFile(ExpandConstant('{tmp}\mergetools.hgrc'),MergeConfigs) then begin
90 SaveStringsToFile(ExpandConstant(CurrentFileName),MergeConfigs,True);
91 end;
92 end;
93
69 procedure Touch(fn: String);
94 procedure Touch(fn: String);
70 begin
95 begin
71 SaveStringToFile(ExpandConstant(fn), '', False);
96 SaveStringToFile(ExpandConstant(fn), '', False);
@@ -4,14 +4,13 b''
4 # it into your zsh function path (/usr/share/zsh/site-functions for
4 # it into your zsh function path (/usr/share/zsh/site-functions for
5 # instance)
5 # instance)
6 #
6 #
7 # Copyright (C) 2005 Steve Borho
7 # Copyright (C) 2005-6 Steve Borho
8 # Copyright (C) 2006-8 Brendan Cully <brendan@kublai.com>
8 # Copyright (C) 2006-8 Brendan Cully <brendan@kublai.com>
9 #
9 #
10 # This is free software; you can redistribute it and/or modify it under
10 # This is free software; you can redistribute it and/or modify it under
11 # the terms of the GNU General Public License as published by the Free
11 # the terms of the GNU General Public License as published by the Free
12 # Software Foundation; either version 2 of the License, or (at your
12 # Software Foundation; either version 2 of the License, or (at your
13 # option) any later version.
13 # option) any later version.
14 #
15
14
16 emulate -LR zsh
15 emulate -LR zsh
17 setopt extendedglob
16 setopt extendedglob
@@ -118,27 +117,17 b' typeset -A _hg_cmd_globals'
118 typeset -ga _hg_cmd_list
117 typeset -ga _hg_cmd_list
119 typeset -gA _hg_alias_list
118 typeset -gA _hg_alias_list
120 local hline cmd cmdalias
119 local hline cmd cmdalias
121 _call_program help hg --verbose help | while read -A hline
120
121 _call_program hg hg debugcomplete -v 2>/dev/null | while read -A hline
122 do
122 do
123 cmd="$hline[1]"
123 cmd=$hline[1]
124 case $cmd in
124 _hg_cmd_list+=($cmd)
125 *:)
125
126 cmd=${cmd%:}
126 for cmdalias in $hline[2,-1]
127 _hg_cmd_list+=($cmd)
127 do
128 ;;
128 _hg_cmd_list+=($cmdalias)
129 *,)
129 _hg_alias_list+=($cmdalias $cmd)
130 cmd=${cmd%,}
130 done
131 _hg_cmd_list+=($cmd)
132 integer i=2
133 while (( i <= $#hline ))
134 do
135 cmdalias=${hline[$i]%(:|,)}
136 _hg_cmd_list+=($cmdalias)
137 _hg_alias_list+=($cmdalias $cmd)
138 (( i++ ))
139 done
140 ;;
141 esac
142 done
131 done
143 }
132 }
144
133
@@ -3,7 +3,7 b' MAN=$(SOURCES:%.txt=%)'
3 HTML=$(SOURCES:%.txt=%.html)
3 HTML=$(SOURCES:%.txt=%.html)
4 PREFIX=/usr/local
4 PREFIX=/usr/local
5 MANDIR=$(PREFIX)/share/man
5 MANDIR=$(PREFIX)/share/man
6 INSTALL=install -c
6 INSTALL=install -c -m 644
7 PYTHON=python
7 PYTHON=python
8 ASCIIDOC=asciidoc
8 ASCIIDOC=asciidoc
9
9
@@ -8,7 +8,14 b''
8 # of the GNU General Public License, incorporated herein by reference.
8 # of the GNU General Public License, incorporated herein by reference.
9
9
10 # enable importing on demand to reduce startup time
10 # enable importing on demand to reduce startup time
11 from mercurial import demandimport; demandimport.enable()
11 try:
12 from mercurial import demandimport; demandimport.enable()
13 except ImportError:
14 import sys
15 sys.stderr.write("abort: couldn't find mercurial libraries in [%s]\n" %
16 ' '.join(sys.path))
17 sys.stderr.write("(check your install and PYTHONPATH)\n")
18 sys.exit(-1)
12
19
13 import sys
20 import sys
14 import mercurial.util
21 import mercurial.util
@@ -9,9 +9,8 b' To use, create entries in your hgrc of t'
9 mycmd = cmd --args
9 mycmd = cmd --args
10 '''
10 '''
11
11
12 from mercurial.cmdutil import findcmd, UnknownCommand, AmbiguousCommand
13 from mercurial import commands
14 from mercurial.i18n import _
12 from mercurial.i18n import _
13 from mercurial import commands, cmdutil, error
15
14
16 cmdtable = {}
15 cmdtable = {}
17
16
@@ -43,16 +42,16 b' class lazycommand(object):'
43 return
42 return
44
43
45 try:
44 try:
46 self._cmd = findcmd(self._target, commands.table, False)[1]
45 self._cmd = cmdutil.findcmd(self._target, commands.table, False)[1]
47 if self._cmd == self:
46 if self._cmd == self:
48 raise RecursiveCommand()
47 raise RecursiveCommand()
49 if self._target in commands.norepo.split(' '):
48 if self._target in commands.norepo.split(' '):
50 commands.norepo += ' %s' % self._name
49 commands.norepo += ' %s' % self._name
51 return
50 return
52 except UnknownCommand:
51 except error.UnknownCommand:
53 msg = _('*** [alias] %s: command %s is unknown') % \
52 msg = _('*** [alias] %s: command %s is unknown') % \
54 (self._name, self._target)
53 (self._name, self._target)
55 except AmbiguousCommand:
54 except error.AmbiguousCommand:
56 msg = _('*** [alias] %s: command %s is ambiguous') % \
55 msg = _('*** [alias] %s: command %s is ambiguous') % \
57 (self._name, self._target)
56 (self._name, self._target)
58 except RecursiveCommand:
57 except RecursiveCommand:
@@ -14,19 +14,26 b' bookmark is forwarded to the new changes'
14
14
15 It is possible to use bookmark names in every revision lookup (e.g. hg
15 It is possible to use bookmark names in every revision lookup (e.g. hg
16 merge, hg update).
16 merge, hg update).
17
18 The bookmark extension offers the possiblity to have a more git-like experience
19 by adding the following configuration option to your .hgrc:
20
21 [bookmarks]
22 track.current = True
23
24 This will cause bookmarks to track the bookmark that you are currently on, and
25 just updates it. This is similar to git's approach of branching.
17 '''
26 '''
18
27
19 from mercurial.commands import templateopts, hex, short
20 from mercurial.i18n import _
28 from mercurial.i18n import _
21 from mercurial import cmdutil, util, commands, changelog
29 from mercurial.node import nullid, nullrev, hex, short
22 from mercurial.node import nullid, nullrev
30 from mercurial import util, commands, localrepo, repair, extensions
23 from mercurial.repo import RepoError
31 import os
24 import mercurial, mercurial.localrepo, mercurial.repair, os
25
32
26 def parse(repo):
33 def parse(repo):
27 '''Parse .hg/bookmarks file and return a dictionary
34 '''Parse .hg/bookmarks file and return a dictionary
28
35
29 Bookmarks are stored as {HASH}\s{NAME}\n (localtags format) values
36 Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values
30 in the .hg/bookmarks file. They are read by the parse() method and
37 in the .hg/bookmarks file. They are read by the parse() method and
31 returned as a dictionary with name => hash values.
38 returned as a dictionary with name => hash values.
32
39
@@ -54,11 +61,55 b' def write(repo, refs):'
54 '''
61 '''
55 if os.path.exists(repo.join('bookmarks')):
62 if os.path.exists(repo.join('bookmarks')):
56 util.copyfile(repo.join('bookmarks'), repo.join('undo.bookmarks'))
63 util.copyfile(repo.join('bookmarks'), repo.join('undo.bookmarks'))
64 if current(repo) not in refs:
65 setcurrent(repo, None)
57 file = repo.opener('bookmarks', 'w+')
66 file = repo.opener('bookmarks', 'w+')
58 for refspec, node in refs.items():
67 for refspec, node in refs.iteritems():
59 file.write("%s %s\n" % (hex(node), refspec))
68 file.write("%s %s\n" % (hex(node), refspec))
60 file.close()
69 file.close()
61
70
71 def current(repo):
72 '''Get the current bookmark
73
74 If we use gittishsh branches we have a current bookmark that
75 we are on. This function returns the name of the bookmark. It
76 is stored in .hg/bookmarks.current
77 '''
78 if repo._bookmarkcurrent:
79 return repo._bookmarkcurrent
80 mark = None
81 if os.path.exists(repo.join('bookmarks.current')):
82 file = repo.opener('bookmarks.current')
83 # No readline() in posixfile_nt, reading everything is cheap
84 mark = (file.readlines() or [''])[0]
85 if mark == '':
86 mark = None
87 file.close()
88 repo._bookmarkcurrent = mark
89 return mark
90
91 def setcurrent(repo, mark):
92 '''Set the name of the bookmark that we are currently on
93
94 Set the name of the bookmark that we are on (hg update <bookmark>).
95 The name is recoreded in .hg/bookmarks.current
96 '''
97 if current(repo) == mark:
98 return
99
100 refs = parse(repo)
101
102 # do not update if we do update to a rev equal to the current bookmark
103 if (mark not in refs and
104 current(repo) and refs[current(repo)] == repo.changectx('.').node()):
105 return
106 if mark not in refs:
107 mark = ''
108 file = repo.opener('bookmarks.current', 'w+')
109 file.write(mark)
110 file.close()
111 repo._bookmarkcurrent = mark
112
62 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
113 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
63 '''mercurial bookmarks
114 '''mercurial bookmarks
64
115
@@ -85,6 +136,8 b' def bookmark(ui, repo, mark=None, rev=No'
85 raise util.Abort(_("new bookmark name required"))
136 raise util.Abort(_("new bookmark name required"))
86 marks[mark] = marks[rename]
137 marks[mark] = marks[rename]
87 del marks[rename]
138 del marks[rename]
139 if current(repo) == rename:
140 setcurrent(repo, mark)
88 write(repo, marks)
141 write(repo, marks)
89 return
142 return
90
143
@@ -121,7 +174,11 b' def bookmark(ui, repo, mark=None, rev=No'
121 ui.status("no bookmarks set\n")
174 ui.status("no bookmarks set\n")
122 else:
175 else:
123 for bmark, n in marks.iteritems():
176 for bmark, n in marks.iteritems():
124 prefix = (n == cur) and '*' or ' '
177 if ui.configbool('bookmarks', 'track.current'):
178 prefix = (bmark == current(repo) and n == cur) and '*' or ' '
179 else:
180 prefix = (n == cur) and '*' or ' '
181
125 ui.write(" %s %-25s %d:%s\n" % (
182 ui.write(" %s %-25s %d:%s\n" % (
126 prefix, bmark, repo.changelog.rev(n), hexfn(n)))
183 prefix, bmark, repo.changelog.rev(n), hexfn(n)))
127 return
184 return
@@ -140,14 +197,14 b' def _revstostrip(changelog, node):'
140 saveheads.append(p)
197 saveheads.append(p)
141 return [r for r in tostrip if r not in saveheads]
198 return [r for r in tostrip if r not in saveheads]
142
199
143 def strip(ui, repo, node, backup="all"):
200 def strip(oldstrip, ui, repo, node, backup="all"):
144 """Strip bookmarks if revisions are stripped using
201 """Strip bookmarks if revisions are stripped using
145 the mercurial.strip method. This usually happens during
202 the mercurial.strip method. This usually happens during
146 qpush and qpop"""
203 qpush and qpop"""
147 revisions = _revstostrip(repo.changelog, node)
204 revisions = _revstostrip(repo.changelog, node)
148 marks = parse(repo)
205 marks = parse(repo)
149 update = []
206 update = []
150 for mark, n in marks.items():
207 for mark, n in marks.iteritems():
151 if repo.changelog.rev(n) in revisions:
208 if repo.changelog.rev(n) in revisions:
152 update.append(mark)
209 update.append(mark)
153 oldstrip(ui, repo, node, backup)
210 oldstrip(ui, repo, node, backup)
@@ -156,16 +213,14 b' def strip(ui, repo, node, backup="all"):'
156 marks[m] = repo.changectx('.').node()
213 marks[m] = repo.changectx('.').node()
157 write(repo, marks)
214 write(repo, marks)
158
215
159 oldstrip = mercurial.repair.strip
160 mercurial.repair.strip = strip
161
162 def reposetup(ui, repo):
216 def reposetup(ui, repo):
163 if not isinstance(repo, mercurial.localrepo.localrepository):
217 if not isinstance(repo, localrepo.localrepository):
164 return
218 return
165
219
166 # init a bookmark cache as otherwise we would get a infinite reading
220 # init a bookmark cache as otherwise we would get a infinite reading
167 # in lookup()
221 # in lookup()
168 repo._bookmarks = None
222 repo._bookmarks = None
223 repo._bookmarkcurrent = None
169
224
170 class bookmark_repo(repo.__class__):
225 class bookmark_repo(repo.__class__):
171 def rollback(self):
226 def rollback(self):
@@ -192,9 +247,14 b' def reposetup(ui, repo):'
192 marks = parse(repo)
247 marks = parse(repo)
193 update = False
248 update = False
194 for mark, n in marks.items():
249 for mark, n in marks.items():
195 if n in parents:
250 if ui.configbool('bookmarks', 'track.current'):
196 marks[mark] = node
251 if mark == current(repo) and n in parents:
197 update = True
252 marks[mark] = node
253 update = True
254 else:
255 if n in parents:
256 marks[mark] = node
257 update = True
198 if update:
258 if update:
199 write(repo, marks)
259 write(repo, marks)
200 return node
260 return node
@@ -218,8 +278,35 b' def reposetup(ui, repo):'
218 write(repo, marks)
278 write(repo, marks)
219 return result
279 return result
220
280
281 def tags(self):
282 """Merge bookmarks with normal tags"""
283 if self.tagscache:
284 return self.tagscache
285
286 tagscache = super(bookmark_repo, self).tags()
287 tagscache.update(parse(repo))
288 return tagscache
289
221 repo.__class__ = bookmark_repo
290 repo.__class__ = bookmark_repo
222
291
292 def uisetup(ui):
293 extensions.wrapfunction(repair, "strip", strip)
294 if ui.configbool('bookmarks', 'track.current'):
295 extensions.wrapcommand(commands.table, 'update', updatecurbookmark)
296
297 def updatecurbookmark(orig, ui, repo, *args, **opts):
298 '''Set the current bookmark
299
300 If the user updates to a bookmark we update the .hg/bookmarks.current
301 file.
302 '''
303 res = orig(ui, repo, *args, **opts)
304 rev = opts['rev']
305 if not rev and len(args) > 0:
306 rev = args[0]
307 setcurrent(repo, rev)
308 return res
309
223 cmdtable = {
310 cmdtable = {
224 "bookmarks":
311 "bookmarks":
225 (bookmark,
312 (bookmark,
@@ -227,5 +314,5 b' cmdtable = {'
227 ('r', 'rev', '', _('revision')),
314 ('r', 'rev', '', _('revision')),
228 ('d', 'delete', False, _('delete a given bookmark')),
315 ('d', 'delete', False, _('delete a given bookmark')),
229 ('m', 'rename', '', _('rename a given bookmark'))],
316 ('m', 'rename', '', _('rename a given bookmark'))],
230 _('hg bookmarks [-d] [-m NAME] [-r NAME] [NAME]')),
317 _('hg bookmarks [-f] [-d] [-m NAME] [-r NAME] [NAME]')),
231 }
318 }
@@ -4,53 +4,111 b''
4 #
4 #
5 # This software may be used and distributed according to the terms
5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference.
6 # of the GNU General Public License, incorporated herein by reference.
7 #
7
8 # hook extension to update comments of bugzilla bugs when changesets
8 '''Bugzilla integration
9 # that refer to bugs by id are seen. this hook does not change bug
9
10 # status, only comments.
10 This hook extension adds comments on bugs in Bugzilla when changesets
11 #
11 that refer to bugs by Bugzilla ID are seen. The hook does not change bug
12 # to configure, add items to '[bugzilla]' section of hgrc.
12 status.
13 #
13
14 # to use, configure bugzilla extension and enable like this:
14 The hook updates the Bugzilla database directly. Only Bugzilla installations
15 #
15 using MySQL are supported.
16 # [extensions]
16
17 # hgext.bugzilla =
17 The hook relies on a Bugzilla script to send bug change notification emails.
18 #
18 That script changes between Bugzilla versions; the 'processmail' script used
19 # [hooks]
19 prior to 2.18 is replaced in 2.18 and subsequent versions by
20 # # run bugzilla hook on every change pulled or pushed in here
20 'config/sendbugmail.pl'. Note that these will be run by Mercurial as the user
21 # incoming.bugzilla = python:hgext.bugzilla.hook
21 pushing the change; you will need to ensure the Bugzilla install file
22 #
22 permissions are set appropriately.
23 # config items:
23
24 #
24 Configuring the extension:
25 # section name is 'bugzilla'.
25
26 # [bugzilla]
26 [bugzilla]
27 #
27 host Hostname of the MySQL server holding the Bugzilla database.
28 # REQUIRED:
28 db Name of the Bugzilla database in MySQL. Default 'bugs'.
29 # host = bugzilla # mysql server where bugzilla database lives
29 user Username to use to access MySQL server. Default 'bugs'.
30 # password = ** # user's password
30 password Password to use to access MySQL server.
31 # version = 2.16 # version of bugzilla installed
31 timeout Database connection timeout (seconds). Default 5.
32 #
32 version Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 and
33 # OPTIONAL:
33 later, '2.18' for Bugzilla versions from 2.18 and '2.16' for
34 # bzuser = ... # fallback bugzilla user name to record comments with
34 versions prior to 2.18.
35 # db = bugs # database to connect to
35 bzuser Fallback Bugzilla user name to record comments with, if
36 # notify = ... # command to run to get bugzilla to send mail
36 changeset committer cannot be found as a Bugzilla user.
37 # regexp = ... # regexp to match bug ids (must contain one "()" group)
37 bzdir Bugzilla install directory. Used by default notify.
38 # strip = 0 # number of slashes to strip for url paths
38 Default '/var/www/html/bugzilla'.
39 # style = ... # style file to use when formatting comments
39 notify The command to run to get Bugzilla to send bug change
40 # template = ... # template to use when formatting comments
40 notification emails. Substitutes from a map with 3 keys,
41 # timeout = 5 # database connection timeout (seconds)
41 'bzdir', 'id' (bug id) and 'user' (committer bugzilla email).
42 # user = bugs # user to connect to database as
42 Default depends on version; from 2.18 it is
43 # [web]
43 "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s".
44 # baseurl = http://hgserver/... # root of hg web site for browsing commits
44 regexp Regular expression to match bug IDs in changeset commit message.
45 #
45 Must contain one "()" group. The default expression matches
46 # if hg committer names are not same as bugzilla user names, use
46 'Bug 1234', 'Bug no. 1234', 'Bug number 1234',
47 # "usermap" feature to map from committer email to bugzilla user name.
47 'Bugs 1234,5678', 'Bug 1234 and 5678' and variations thereof.
48 # usermap can be in hgrc or separate config file.
48 Matching is case insensitive.
49 #
49 style The style file to use when formatting comments.
50 # [bugzilla]
50 template Template to use when formatting comments. Overrides
51 # usermap = filename # cfg file with "committer"="bugzilla user" info
51 style if specified. In addition to the usual Mercurial
52 # [usermap]
52 keywords, the extension specifies:
53 # committer_email = bugzilla_user_name
53 {bug} The Bugzilla bug ID.
54 {root} The full pathname of the Mercurial repository.
55 {webroot} Stripped pathname of the Mercurial repository.
56 {hgweb} Base URL for browsing Mercurial repositories.
57 Default 'changeset {node|short} in repo {root} refers '
58 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'
59 strip The number of slashes to strip from the front of {root}
60 to produce {webroot}. Default 0.
61 usermap Path of file containing Mercurial committer ID to Bugzilla user
62 ID mappings. If specified, the file should contain one mapping
63 per line, "committer"="Bugzilla user". See also the
64 [usermap] section.
65
66 [usermap]
67 Any entries in this section specify mappings of Mercurial committer ID
68 to Bugzilla user ID. See also [bugzilla].usermap.
69 "committer"="Bugzilla user"
70
71 [web]
72 baseurl Base URL for browsing Mercurial repositories. Reference from
73 templates as {hgweb}.
74
75 Activating the extension:
76
77 [extensions]
78 hgext.bugzilla =
79
80 [hooks]
81 # run bugzilla hook on every change pulled or pushed in here
82 incoming.bugzilla = python:hgext.bugzilla.hook
83
84 Example configuration:
85
86 This example configuration is for a collection of Mercurial repositories
87 in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in
88 /opt/bugzilla-3.2.
89
90 [bugzilla]
91 host=localhost
92 password=XYZZY
93 version=3.0
94 bzuser=unknown@domain.com
95 bzdir=/opt/bugzilla-3.2
96 template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/rev/{node|short}\\n\\n{desc}\\n
97 strip=5
98
99 [web]
100 baseurl=http://dev.domain.com/hg
101
102 [usermap]
103 user@emaildomain.com=user.name@bugzilladomain.com
104
105 Commits add a comment to the Bugzilla bug record of the form:
106
107 Changeset 3b16791d6642 in repository-name.
108 http://dev.domain.com/hg/repository-name/rev/3b16791d6642
109
110 Changeset commit comment. Bug 1234.
111 '''
54
112
55 from mercurial.i18n import _
113 from mercurial.i18n import _
56 from mercurial.node import short
114 from mercurial.node import short
@@ -82,6 +140,7 b' class bugzilla_2_16(object):'
82 self.cursor = self.conn.cursor()
140 self.cursor = self.conn.cursor()
83 self.longdesc_id = self.get_longdesc_id()
141 self.longdesc_id = self.get_longdesc_id()
84 self.user_ids = {}
142 self.user_ids = {}
143 self.default_notify = "cd %(bzdir)s && ./processmail %(id)s %(user)s"
85
144
86 def run(self, *args, **kwargs):
145 def run(self, *args, **kwargs):
87 '''run a query.'''
146 '''run a query.'''
@@ -118,15 +177,23 b' class bugzilla_2_16(object):'
118 unknown.pop(id, None)
177 unknown.pop(id, None)
119 return util.sort(unknown.keys())
178 return util.sort(unknown.keys())
120
179
121 def notify(self, ids):
180 def notify(self, ids, committer):
122 '''tell bugzilla to send mail.'''
181 '''tell bugzilla to send mail.'''
123
182
124 self.ui.status(_('telling bugzilla to send mail:\n'))
183 self.ui.status(_('telling bugzilla to send mail:\n'))
184 (user, userid) = self.get_bugzilla_user(committer)
125 for id in ids:
185 for id in ids:
126 self.ui.status(_(' bug %s\n') % id)
186 self.ui.status(_(' bug %s\n') % id)
127 cmd = self.ui.config('bugzilla', 'notify',
187 cmdfmt = self.ui.config('bugzilla', 'notify', self.default_notify)
128 'cd /var/www/html/bugzilla && '
188 bzdir = self.ui.config('bugzilla', 'bzdir', '/var/www/html/bugzilla')
129 './processmail %s nobody@nowhere.com') % id
189 try:
190 # Backwards-compatible with old notify string, which
191 # took one string. This will throw with a new format
192 # string.
193 cmd = cmdfmt % id
194 except TypeError:
195 cmd = cmdfmt % {'bzdir': bzdir, 'id': id, 'user': user}
196 self.ui.note(_('running notify command %s\n') % cmd)
130 fp = util.popen('(%s) 2>&1' % cmd)
197 fp = util.popen('(%s) 2>&1' % cmd)
131 out = fp.read()
198 out = fp.read()
132 ret = fp.close()
199 ret = fp.close()
@@ -161,9 +228,10 b' class bugzilla_2_16(object):'
161 return bzuser
228 return bzuser
162 return user
229 return user
163
230
164 def add_comment(self, bugid, text, committer):
231 def get_bugzilla_user(self, committer):
165 '''add comment to bug. try adding comment as committer of
232 '''see if committer is a registered bugzilla user. Return
166 changeset, otherwise as default bugzilla user.'''
233 bugzilla username and userid if so. If not, return default
234 bugzilla username and userid.'''
167 user = self.map_committer(committer)
235 user = self.map_committer(committer)
168 try:
236 try:
169 userid = self.get_user_id(user)
237 userid = self.get_user_id(user)
@@ -174,9 +242,16 b' class bugzilla_2_16(object):'
174 raise util.Abort(_('cannot find bugzilla user id for %s') %
242 raise util.Abort(_('cannot find bugzilla user id for %s') %
175 user)
243 user)
176 userid = self.get_user_id(defaultuser)
244 userid = self.get_user_id(defaultuser)
245 user = defaultuser
177 except KeyError:
246 except KeyError:
178 raise util.Abort(_('cannot find bugzilla user id for %s or %s') %
247 raise util.Abort(_('cannot find bugzilla user id for %s or %s') %
179 (user, defaultuser))
248 (user, defaultuser))
249 return (user, userid)
250
251 def add_comment(self, bugid, text, committer):
252 '''add comment to bug. try adding comment as committer of
253 changeset, otherwise as default bugzilla user.'''
254 (user, userid) = self.get_bugzilla_user(committer)
180 now = time.strftime('%Y-%m-%d %H:%M:%S')
255 now = time.strftime('%Y-%m-%d %H:%M:%S')
181 self.run('''insert into longdescs
256 self.run('''insert into longdescs
182 (bug_id, who, bug_when, thetext)
257 (bug_id, who, bug_when, thetext)
@@ -185,12 +260,20 b' class bugzilla_2_16(object):'
185 self.run('''insert into bugs_activity (bug_id, who, bug_when, fieldid)
260 self.run('''insert into bugs_activity (bug_id, who, bug_when, fieldid)
186 values (%s, %s, %s, %s)''',
261 values (%s, %s, %s, %s)''',
187 (bugid, userid, now, self.longdesc_id))
262 (bugid, userid, now, self.longdesc_id))
263 self.conn.commit()
188
264
189 class bugzilla_3_0(bugzilla_2_16):
265 class bugzilla_2_18(bugzilla_2_16):
266 '''support for bugzilla 2.18 series.'''
267
268 def __init__(self, ui):
269 bugzilla_2_16.__init__(self, ui)
270 self.default_notify = "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s"
271
272 class bugzilla_3_0(bugzilla_2_18):
190 '''support for bugzilla 3.0 series.'''
273 '''support for bugzilla 3.0 series.'''
191
274
192 def __init__(self, ui):
275 def __init__(self, ui):
193 bugzilla_2_16.__init__(self, ui)
276 bugzilla_2_18.__init__(self, ui)
194
277
195 def get_longdesc_id(self):
278 def get_longdesc_id(self):
196 '''get identity of longdesc field'''
279 '''get identity of longdesc field'''
@@ -205,6 +288,7 b' class bugzilla(object):'
205 # different schemas.
288 # different schemas.
206 _versions = {
289 _versions = {
207 '2.16': bugzilla_2_16,
290 '2.16': bugzilla_2_16,
291 '2.18': bugzilla_2_18,
208 '3.0': bugzilla_3_0
292 '3.0': bugzilla_3_0
209 }
293 }
210
294
@@ -283,7 +367,7 b' class bugzilla(object):'
283 mapfile = self.ui.config('bugzilla', 'style')
367 mapfile = self.ui.config('bugzilla', 'style')
284 tmpl = self.ui.config('bugzilla', 'template')
368 tmpl = self.ui.config('bugzilla', 'template')
285 t = cmdutil.changeset_templater(self.ui, self.repo,
369 t = cmdutil.changeset_templater(self.ui, self.repo,
286 False, mapfile, False)
370 False, None, mapfile, False)
287 if not mapfile and not tmpl:
371 if not mapfile and not tmpl:
288 tmpl = _('changeset {node|short} in repo {root} refers '
372 tmpl = _('changeset {node|short} in repo {root} refers '
289 'to bug {bug}.\ndetails:\n\t{desc|tabindent}')
373 'to bug {bug}.\ndetails:\n\t{desc|tabindent}')
@@ -320,7 +404,7 b' def hook(ui, repo, hooktype, node=None, '
320 if ids:
404 if ids:
321 for id in ids:
405 for id in ids:
322 bz.update(id, ctx)
406 bz.update(id, ctx)
323 bz.notify(ids)
407 bz.notify(ids, util.email(ctx.user()))
324 except MySQLdb.MySQLError, err:
408 except MySQLdb.MySQLError, err:
325 raise util.Abort(_('database error: %s') % err[1])
409 raise util.Abort(_('database error: %s') % err[1])
326
410
@@ -12,31 +12,10 b' from mercurial import patch, cmdutil, ut'
12 import os, sys
12 import os, sys
13 import time, datetime
13 import time, datetime
14
14
15 def get_tty_width():
16 if 'COLUMNS' in os.environ:
17 try:
18 return int(os.environ['COLUMNS'])
19 except ValueError:
20 pass
21 try:
22 import termios, array, fcntl
23 for dev in (sys.stdout, sys.stdin):
24 try:
25 fd = dev.fileno()
26 if not os.isatty(fd):
27 continue
28 arri = fcntl.ioctl(fd, termios.TIOCGWINSZ, '\0' * 8)
29 return array.array('h', arri)[1]
30 except ValueError:
31 pass
32 except ImportError:
33 pass
34 return 80
35
36 def maketemplater(ui, repo, tmpl):
15 def maketemplater(ui, repo, tmpl):
37 tmpl = templater.parsestring(tmpl, quoted=False)
16 tmpl = templater.parsestring(tmpl, quoted=False)
38 try:
17 try:
39 t = cmdutil.changeset_templater(ui, repo, False, None, False)
18 t = cmdutil.changeset_templater(ui, repo, False, None, None, False)
40 except SyntaxError, inst:
19 except SyntaxError, inst:
41 raise util.Abort(inst.args[0])
20 raise util.Abort(inst.args[0])
42 t.use_template(tmpl)
21 t.use_template(tmpl)
@@ -100,7 +79,7 b' def countrate(ui, repo, amap, *pats, **o'
100 newpct = int(100.0 * count / max(len(repo), 1))
79 newpct = int(100.0 * count / max(len(repo), 1))
101 if pct < newpct:
80 if pct < newpct:
102 pct = newpct
81 pct = newpct
103 ui.write(_("\rGenerating stats: %d%%") % pct)
82 ui.write(_("\rgenerating stats: %d%%") % pct)
104 sys.stdout.flush()
83 sys.stdout.flush()
105
84
106 if opts.get('progress'):
85 if opts.get('progress'):
@@ -111,7 +90,7 b' def countrate(ui, repo, amap, *pats, **o'
111
90
112
91
113 def churn(ui, repo, *pats, **opts):
92 def churn(ui, repo, *pats, **opts):
114 '''Graph count of revisions grouped by template
93 '''graph count of revisions grouped by template
115
94
116 Will graph count of changed lines or revisions grouped by template or
95 Will graph count of changed lines or revisions grouped by template or
117 alternatively by date, if dateformat is used. In this case it will override
96 alternatively by date, if dateformat is used. In this case it will override
@@ -157,7 +136,7 b' def churn(ui, repo, *pats, **opts):'
157 maxcount = float(max([v for k, v in rate]))
136 maxcount = float(max([v for k, v in rate]))
158 maxname = max([len(k) for k, v in rate])
137 maxname = max([len(k) for k, v in rate])
159
138
160 ttywidth = get_tty_width()
139 ttywidth = util.termwidth()
161 ui.debug(_("assuming %i character terminal\n") % ttywidth)
140 ui.debug(_("assuming %i character terminal\n") % ttywidth)
162 width = ttywidth - maxname - 2 - 6 - 2 - 2
141 width = ttywidth - maxname - 2 - 6 - 2 - 2
163
142
@@ -204,6 +204,7 b' def colordiff(orig, ui, repo, *pats, **o'
204 _diff_prefixes = [('diff', 'diffline'),
204 _diff_prefixes = [('diff', 'diffline'),
205 ('copy', 'extended'),
205 ('copy', 'extended'),
206 ('rename', 'extended'),
206 ('rename', 'extended'),
207 ('old', 'extended'),
207 ('new', 'extended'),
208 ('new', 'extended'),
208 ('deleted', 'extended'),
209 ('deleted', 'extended'),
209 ('---', 'file_a'),
210 ('---', 'file_a'),
@@ -7,13 +7,14 b''
7 '''converting foreign VCS repositories to Mercurial'''
7 '''converting foreign VCS repositories to Mercurial'''
8
8
9 import convcmd
9 import convcmd
10 import cvsps
10 from mercurial import commands
11 from mercurial import commands
11 from mercurial.i18n import _
12 from mercurial.i18n import _
12
13
13 # Commands definition was moved elsewhere to ease demandload job.
14 # Commands definition was moved elsewhere to ease demandload job.
14
15
15 def convert(ui, src, dest=None, revmapfile=None, **opts):
16 def convert(ui, src, dest=None, revmapfile=None, **opts):
16 """Convert a foreign SCM repository to a Mercurial one.
17 """convert a foreign SCM repository to a Mercurial one.
17
18
18 Accepted source formats [identifiers]:
19 Accepted source formats [identifiers]:
19 - Mercurial [hg]
20 - Mercurial [hg]
@@ -183,7 +184,18 b' def convert(ui, src, dest=None, revmapfi'
183 def debugsvnlog(ui, **opts):
184 def debugsvnlog(ui, **opts):
184 return convcmd.debugsvnlog(ui, **opts)
185 return convcmd.debugsvnlog(ui, **opts)
185
186
186 commands.norepo += " convert debugsvnlog"
187 def debugcvsps(ui, *args, **opts):
188 '''create changeset information from CVS
189
190 This command is intended as a debugging tool for the CVS to Mercurial
191 converter, and can be used as a direct replacement for cvsps.
192
193 Hg debugcvsps reads the CVS rlog for current directory (or any named
194 directory) in the CVS repository, and converts the log to a series of
195 changesets based on matching commit log entries and dates.'''
196 return cvsps.debugcvsps(ui, *args, **opts)
197
198 commands.norepo += " convert debugsvnlog debugcvsps"
187
199
188 cmdtable = {
200 cmdtable = {
189 "convert":
201 "convert":
@@ -200,4 +212,22 b' cmdtable = {'
200 (debugsvnlog,
212 (debugsvnlog,
201 [],
213 [],
202 'hg debugsvnlog'),
214 'hg debugsvnlog'),
215 "debugcvsps":
216 (debugcvsps,
217 [
218 # Main options shared with cvsps-2.1
219 ('b', 'branches', [], _('only return changes on specified branches')),
220 ('p', 'prefix', '', _('prefix to remove from file names')),
221 ('r', 'revisions', [], _('only return changes after or between specified tags')),
222 ('u', 'update-cache', None, _("update cvs log cache")),
223 ('x', 'new-cache', None, _("create new cvs log cache")),
224 ('z', 'fuzz', 60, _('set commit time fuzz in seconds')),
225 ('', 'root', '', _('specify cvsroot')),
226 # Options specific to builtin cvsps
227 ('', 'parents', '', _('show parent changesets')),
228 ('', 'ancestors', '', _('show current changeset in ancestor branches')),
229 # Options that are ignored for compatibility with cvsps-2.1
230 ('A', 'cvs-direct', None, _('ignored for compatibility')),
231 ],
232 _('hg debugcvsps [OPTION]... [PATH]...')),
203 }
233 }
@@ -228,7 +228,9 b' class commandline(object):'
228 except TypeError:
228 except TypeError:
229 pass
229 pass
230 cmdline = [util.shellquote(arg) for arg in cmdline]
230 cmdline = [util.shellquote(arg) for arg in cmdline]
231 cmdline += ['2>', util.nulldev, '<', util.nulldev]
231 if not self.ui.debugflag:
232 cmdline += ['2>', util.nulldev]
233 cmdline += ['<', util.nulldev]
232 cmdline = ' '.join(cmdline)
234 cmdline = ' '.join(cmdline)
233 return cmdline
235 return cmdline
234
236
@@ -323,7 +325,7 b' class mapfile(dict):'
323 self._read()
325 self._read()
324
326
325 def _read(self):
327 def _read(self):
326 if self.path is None:
328 if not self.path:
327 return
329 return
328 try:
330 try:
329 fp = open(self.path, 'r')
331 fp = open(self.path, 'r')
@@ -206,7 +206,7 b' class converter(object):'
206 _('Overriding mapping for author %s, was %s, will be %s\n')
206 _('Overriding mapping for author %s, was %s, will be %s\n')
207 % (srcauthor, self.authors[srcauthor], dstauthor))
207 % (srcauthor, self.authors[srcauthor], dstauthor))
208 else:
208 else:
209 self.ui.debug(_('Mapping author %s to %s\n')
209 self.ui.debug(_('mapping author %s to %s\n')
210 % (srcauthor, dstauthor))
210 % (srcauthor, dstauthor))
211 self.authors[srcauthor] = dstauthor
211 self.authors[srcauthor] = dstauthor
212 except IndexError:
212 except IndexError:
@@ -144,11 +144,11 b' class convert_cvs(converter_source):'
144 if branch == "HEAD":
144 if branch == "HEAD":
145 branch = ""
145 branch = ""
146 if branch:
146 if branch:
147 latest = None
147 latest = 0
148 # the last changeset that contains a base
148 # the last changeset that contains a base
149 # file is our parent
149 # file is our parent
150 for r in oldrevs:
150 for r in oldrevs:
151 latest = max(filerevids.get(r, None), latest)
151 latest = max(filerevids.get(r, 0), latest)
152 if latest:
152 if latest:
153 p = [latest]
153 p = [latest]
154
154
@@ -191,7 +191,13 b' def createlog(ui, directory=None, root="'
191 ui.note(_("running %s\n") % (' '.join(cmd)))
191 ui.note(_("running %s\n") % (' '.join(cmd)))
192 ui.debug(_("prefix=%r directory=%r root=%r\n") % (prefix, directory, root))
192 ui.debug(_("prefix=%r directory=%r root=%r\n") % (prefix, directory, root))
193
193
194 for line in util.popen(' '.join(cmd)):
194 pfp = util.popen(' '.join(cmd))
195 peek = pfp.readline()
196 while True:
197 line = peek
198 if line == '':
199 break
200 peek = pfp.readline()
195 if line.endswith('\n'):
201 if line.endswith('\n'):
196 line = line[:-1]
202 line = line[:-1]
197 #ui.debug('state=%d line=%r\n' % (state, line))
203 #ui.debug('state=%d line=%r\n' % (state, line))
@@ -263,7 +269,7 b' def createlog(ui, directory=None, root="'
263 if re_31.match(line):
269 if re_31.match(line):
264 state = 5
270 state = 5
265 else:
271 else:
266 assert not re_32.match(line), _('Must have at least some revisions')
272 assert not re_32.match(line), _('must have at least some revisions')
267
273
268 elif state == 5:
274 elif state == 5:
269 # expecting revision number and possibly (ignored) lock indication
275 # expecting revision number and possibly (ignored) lock indication
@@ -312,7 +318,7 b' def createlog(ui, directory=None, root="'
312 e.branches = [tuple([int(y) for y in x.strip().split('.')])
318 e.branches = [tuple([int(y) for y in x.strip().split('.')])
313 for x in m.group(1).split(';')]
319 for x in m.group(1).split(';')]
314 state = 8
320 state = 8
315 elif re_31.match(line):
321 elif re_31.match(line) and re_50.match(peek):
316 state = 5
322 state = 5
317 store = True
323 store = True
318 elif re_32.match(line):
324 elif re_32.match(line):
@@ -584,3 +590,95 b' def createchangeset(ui, log, fuzz=60, me'
584 ui.status(_('%d changeset entries\n') % len(changesets))
590 ui.status(_('%d changeset entries\n') % len(changesets))
585
591
586 return changesets
592 return changesets
593
594
595 def debugcvsps(ui, *args, **opts):
596 '''Read CVS rlog for current directory or named path in repository, and
597 convert the log to changesets based on matching commit log entries and dates.'''
598
599 if opts["new_cache"]:
600 cache = "write"
601 elif opts["update_cache"]:
602 cache = "update"
603 else:
604 cache = None
605
606 revisions = opts["revisions"]
607
608 try:
609 if args:
610 log = []
611 for d in args:
612 log += createlog(ui, d, root=opts["root"], cache=cache)
613 else:
614 log = createlog(ui, root=opts["root"], cache=cache)
615 except logerror, e:
616 ui.write("%r\n"%e)
617 return
618
619 changesets = createchangeset(ui, log, opts["fuzz"])
620 del log
621
622 # Print changesets (optionally filtered)
623
624 off = len(revisions)
625 branches = {} # latest version number in each branch
626 ancestors = {} # parent branch
627 for cs in changesets:
628
629 if opts["ancestors"]:
630 if cs.branch not in branches and cs.parents and cs.parents[0].id:
631 ancestors[cs.branch] = changesets[cs.parents[0].id-1].branch, cs.parents[0].id
632 branches[cs.branch] = cs.id
633
634 # limit by branches
635 if opts["branches"] and (cs.branch or 'HEAD') not in opts["branches"]:
636 continue
637
638 if not off:
639 # Note: trailing spaces on several lines here are needed to have
640 # bug-for-bug compatibility with cvsps.
641 ui.write('---------------------\n')
642 ui.write('PatchSet %d \n' % cs.id)
643 ui.write('Date: %s\n' % util.datestr(cs.date, '%Y/%m/%d %H:%M:%S %1%2'))
644 ui.write('Author: %s\n' % cs.author)
645 ui.write('Branch: %s\n' % (cs.branch or 'HEAD'))
646 ui.write('Tag%s: %s \n' % (['', 's'][len(cs.tags)>1],
647 ','.join(cs.tags) or '(none)'))
648 if opts["parents"] and cs.parents:
649 if len(cs.parents)>1:
650 ui.write('Parents: %s\n' % (','.join([str(p.id) for p in cs.parents])))
651 else:
652 ui.write('Parent: %d\n' % cs.parents[0].id)
653
654 if opts["ancestors"]:
655 b = cs.branch
656 r = []
657 while b:
658 b, c = ancestors[b]
659 r.append('%s:%d:%d' % (b or "HEAD", c, branches[b]))
660 if r:
661 ui.write('Ancestors: %s\n' % (','.join(r)))
662
663 ui.write('Log:\n')
664 ui.write('%s\n\n' % cs.comment)
665 ui.write('Members: \n')
666 for f in cs.entries:
667 fn = f.file
668 if fn.startswith(opts["prefix"]):
669 fn = fn[len(opts["prefix"]):]
670 ui.write('\t%s:%s->%s%s \n' % (fn, '.'.join([str(x) for x in f.parent]) or 'INITIAL',
671 '.'.join([str(x) for x in f.revision]), ['', '(DEAD)'][f.dead]))
672 ui.write('\n')
673
674 # have we seen the start tag?
675 if revisions and off:
676 if revisions[0] == str(cs.id) or \
677 revisions[0] in cs.tags:
678 off = False
679
680 # see if we reached the end tag
681 if len(revisions)>1 and not off:
682 if revisions[1] == str(cs.id) or \
683 revisions[1] in cs.tags:
684 break
@@ -32,7 +32,7 b' class darcs_source(converter_source, com'
32 if ElementTree is None:
32 if ElementTree is None:
33 raise util.Abort(_("Python ElementTree module is not available"))
33 raise util.Abort(_("Python ElementTree module is not available"))
34
34
35 if not os.path.exists(os.path.join(path, '_darcs', 'inventory')):
35 if not os.path.exists(os.path.join(path, '_darcs', 'inventories')):
36 raise NoRepo("%s does not look like a darcs repo" % path)
36 raise NoRepo("%s does not look like a darcs repo" % path)
37
37
38 self.path = os.path.realpath(path)
38 self.path = os.path.realpath(path)
@@ -3,7 +3,8 b''
3 from common import NoRepo, commandline, commit, converter_source
3 from common import NoRepo, commandline, commit, converter_source
4 from mercurial.i18n import _
4 from mercurial.i18n import _
5 from mercurial import util
5 from mercurial import util
6 import os, shutil, tempfile, stat
6 import os, shutil, tempfile, stat, locale
7 from email.Parser import Parser
7
8
8 class gnuarch_source(converter_source, commandline):
9 class gnuarch_source(converter_source, commandline):
9
10
@@ -13,6 +14,7 b' class gnuarch_source(converter_source, c'
13 self.summary = ''
14 self.summary = ''
14 self.date = None
15 self.date = None
15 self.author = ''
16 self.author = ''
17 self.continuationof = None
16 self.add_files = []
18 self.add_files = []
17 self.mod_files = []
19 self.mod_files = []
18 self.del_files = []
20 self.del_files = []
@@ -46,38 +48,74 b' class gnuarch_source(converter_source, c'
46 self.parents = {}
48 self.parents = {}
47 self.tags = {}
49 self.tags = {}
48 self.modecache = {}
50 self.modecache = {}
51 self.catlogparser = Parser()
52 self.locale = locale.getpreferredencoding()
53 self.archives = []
49
54
50 def before(self):
55 def before(self):
56 # Get registered archives
57 self.archives = [i.rstrip('\n')
58 for i in self.runlines0('archives', '-n')]
59
51 if self.execmd == 'tla':
60 if self.execmd == 'tla':
52 output = self.run0('tree-version', self.path)
61 output = self.run0('tree-version', self.path)
53 else:
62 else:
54 output = self.run0('tree-version', '-d', self.path)
63 output = self.run0('tree-version', '-d', self.path)
55 self.treeversion = output.strip()
64 self.treeversion = output.strip()
56
65
57 self.ui.status(_('analyzing tree version %s...\n') % self.treeversion)
58
59 # Get name of temporary directory
66 # Get name of temporary directory
60 version = self.treeversion.split('/')
67 version = self.treeversion.split('/')
61 self.tmppath = os.path.join(tempfile.gettempdir(),
68 self.tmppath = os.path.join(tempfile.gettempdir(),
62 'hg-%s' % version[1])
69 'hg-%s' % version[1])
63
70
64 # Generate parents dictionary
71 # Generate parents dictionary
65 child = []
72 self.parents[None] = []
66 output, status = self.runlines('revisions', self.treeversion)
73 treeversion = self.treeversion
67 self.checkexit(status, 'archive registered?')
74 child = None
68 for l in output:
75 while treeversion:
69 rev = l.strip()
76 self.ui.status(_('analyzing tree version %s...\n') % treeversion)
70 self.changes[rev] = self.gnuarch_rev(rev)
77
78 archive = treeversion.split('/')[0]
79 if archive not in self.archives:
80 self.ui.status(_('tree analysis stopped because it points to an unregistered archive %s...\n') % archive)
81 break
82
83 # Get the complete list of revisions for that tree version
84 output, status = self.runlines('revisions', '-r', '-f', treeversion)
85 self.checkexit(status, 'failed retrieveing revisions for %s' % treeversion)
86
87 # No new iteration unless a revision has a continuation-of header
88 treeversion = None
89
90 for l in output:
91 rev = l.strip()
92 self.changes[rev] = self.gnuarch_rev(rev)
93 self.parents[rev] = []
71
94
72 # Read author, date and summary
95 # Read author, date and summary
73 catlog = self.runlines0('cat-log', '-d', self.path, rev)
96 catlog, status = self.run('cat-log', '-d', self.path, rev)
74 self._parsecatlog(catlog, rev)
97 if status:
98 catlog = self.run0('cat-archive-log', rev)
99 self._parsecatlog(catlog, rev)
100
101 # Populate the parents map
102 self.parents[child].append(rev)
75
103
76 self.parents[rev] = child
104 # Keep track of the current revision as the child of the next
77 child = [rev]
105 # revision scanned
78 if rev == self.rev:
106 child = rev
79 break
107
80 self.parents[None] = child
108 # Check if we have to follow the usual incremental history
109 # or if we have to 'jump' to a different treeversion given
110 # by the continuation-of header.
111 if self.changes[rev].continuationof:
112 treeversion = '--'.join(self.changes[rev].continuationof.split('--')[:-1])
113 break
114
115 # If we reached a base-0 revision w/o any continuation-of
116 # header, it means the tree history ends here.
117 if rev[-6:] == 'base-0':
118 break
81
119
82 def after(self):
120 def after(self):
83 self.ui.debug(_('cleaning up %s\n') % self.tmppath)
121 self.ui.debug(_('cleaning up %s\n') % self.tmppath)
@@ -135,7 +173,7 b' class gnuarch_source(converter_source, c'
135 def getcommit(self, rev):
173 def getcommit(self, rev):
136 changes = self.changes[rev]
174 changes = self.changes[rev]
137 return commit(author = changes.author, date = changes.date,
175 return commit(author = changes.author, date = changes.date,
138 desc = changes.summary, parents = self.parents[rev])
176 desc = changes.summary, parents = self.parents[rev], rev=rev)
139
177
140 def gettags(self):
178 def gettags(self):
141 return self.tags
179 return self.tags
@@ -150,26 +188,19 b' class gnuarch_source(converter_source, c'
150 return os.system(cmdline)
188 return os.system(cmdline)
151
189
152 def _update(self, rev):
190 def _update(self, rev):
153 if rev == 'base-0':
191 self.ui.debug(_('applying revision %s...\n') % rev)
154 # Initialise 'base-0' revision
192 changeset, status = self.runlines('replay', '-d', self.tmppath,
193 rev)
194 if status:
195 # Something went wrong while merging (baz or tla
196 # issue?), get latest revision and try from there
197 shutil.rmtree(self.tmppath, ignore_errors=True)
155 self._obtainrevision(rev)
198 self._obtainrevision(rev)
156 else:
199 else:
157 self.ui.debug(_('applying revision %s...\n') % rev)
200 old_rev = self.parents[rev][0]
158 revision = '%s--%s' % (self.treeversion, rev)
201 self.ui.debug(_('computing changeset between %s and %s...\n')
159 changeset, status = self.runlines('replay', '-d', self.tmppath,
202 % (old_rev, rev))
160 revision)
203 self._parsechangeset(changeset, rev)
161 if status:
162 # Something went wrong while merging (baz or tla
163 # issue?), get latest revision and try from there
164 shutil.rmtree(self.tmppath, ignore_errors=True)
165 self._obtainrevision(rev)
166 else:
167 old_rev = self.parents[rev][0]
168 self.ui.debug(_('computing changeset between %s and %s...\n')
169 % (old_rev, rev))
170 rev_a = '%s--%s' % (self.treeversion, old_rev)
171 rev_b = '%s--%s' % (self.treeversion, rev)
172 self._parsechangeset(changeset, rev)
173
204
174 def _getfile(self, name, rev):
205 def _getfile(self, name, rev):
175 mode = os.lstat(os.path.join(self.tmppath, name)).st_mode
206 mode = os.lstat(os.path.join(self.tmppath, name)).st_mode
@@ -217,8 +248,7 b' class gnuarch_source(converter_source, c'
217
248
218 def _obtainrevision(self, rev):
249 def _obtainrevision(self, rev):
219 self.ui.debug(_('obtaining revision %s...\n') % rev)
250 self.ui.debug(_('obtaining revision %s...\n') % rev)
220 revision = '%s--%s' % (self.treeversion, rev)
251 output = self._execute('get', rev, self.tmppath)
221 output = self._execute('get', revision, self.tmppath)
222 self.checkexit(output)
252 self.checkexit(output)
223 self.ui.debug(_('analysing revision %s...\n') % rev)
253 self.ui.debug(_('analysing revision %s...\n') % rev)
224 files = self._readcontents(self.tmppath)
254 files = self._readcontents(self.tmppath)
@@ -230,20 +260,27 b' class gnuarch_source(converter_source, c'
230 return path
260 return path
231
261
232 def _parsecatlog(self, data, rev):
262 def _parsecatlog(self, data, rev):
233 summary = []
263 try:
234 for l in data:
264 catlog = self.catlogparser.parsestr(data)
235 l = l.strip()
265
236 if summary:
266 # Commit date
237 summary.append(l)
267 self.changes[rev].date = util.datestr(
238 elif l.startswith('Summary:'):
268 util.strdate(catlog['Standard-date'],
239 summary.append(l[len('Summary: '):])
269 '%Y-%m-%d %H:%M:%S'))
240 elif l.startswith('Standard-date:'):
270
241 date = l[len('Standard-date: '):]
271 # Commit author
242 strdate = util.strdate(date, '%Y-%m-%d %H:%M:%S')
272 self.changes[rev].author = self.recode(catlog['Creator'])
243 self.changes[rev].date = util.datestr(strdate)
273
244 elif l.startswith('Creator:'):
274 # Commit description
245 self.changes[rev].author = l[len('Creator: '):]
275 self.changes[rev].summary = '\n\n'.join((catlog['Summary'],
246 self.changes[rev].summary = '\n'.join(summary)
276 catlog.get_payload()))
277 self.changes[rev].summary = self.recode(self.changes[rev].summary)
278
279 # Commit revision origin when dealing with a branch or tag
280 if catlog.has_key('Continuation-of'):
281 self.changes[rev].continuationof = self.recode(catlog['Continuation-of'])
282 except Exception, err:
283 raise util.Abort(_('could not parse cat-log of %s') % rev)
247
284
248 def _parsechangeset(self, data, rev):
285 def _parsechangeset(self, data, rev):
249 for l in data:
286 for l in data:
@@ -15,9 +15,8 b''
15
15
16 import os, time
16 import os, time
17 from mercurial.i18n import _
17 from mercurial.i18n import _
18 from mercurial.repo import RepoError
19 from mercurial.node import bin, hex, nullid
18 from mercurial.node import bin, hex, nullid
20 from mercurial import hg, revlog, util, context
19 from mercurial import hg, util, context, error
21
20
22 from common import NoRepo, commit, converter_source, converter_sink
21 from common import NoRepo, commit, converter_source, converter_sink
23
22
@@ -33,7 +32,7 b' class mercurial_sink(converter_sink):'
33 self.repo = hg.repository(self.ui, path)
32 self.repo = hg.repository(self.ui, path)
34 if not self.repo.local():
33 if not self.repo.local():
35 raise NoRepo(_('%s is not a local Mercurial repo') % path)
34 raise NoRepo(_('%s is not a local Mercurial repo') % path)
36 except RepoError, err:
35 except error.RepoError, err:
37 ui.print_exc()
36 ui.print_exc()
38 raise NoRepo(err.args[0])
37 raise NoRepo(err.args[0])
39 else:
38 else:
@@ -43,7 +42,7 b' class mercurial_sink(converter_sink):'
43 if not self.repo.local():
42 if not self.repo.local():
44 raise NoRepo(_('%s is not a local Mercurial repo') % path)
43 raise NoRepo(_('%s is not a local Mercurial repo') % path)
45 self.created.append(path)
44 self.created.append(path)
46 except RepoError, err:
45 except error.RepoError, err:
47 ui.print_exc()
46 ui.print_exc()
48 raise NoRepo("could not create hg repo %s as sink" % path)
47 raise NoRepo("could not create hg repo %s as sink" % path)
49 self.lock = None
48 self.lock = None
@@ -159,7 +158,7 b' class mercurial_sink(converter_sink):'
159 try:
158 try:
160 parentctx = self.repo[self.tagsbranch]
159 parentctx = self.repo[self.tagsbranch]
161 tagparent = parentctx.node()
160 tagparent = parentctx.node()
162 except RepoError, inst:
161 except error.RepoError, inst:
163 parentctx = None
162 parentctx = None
164 tagparent = nullid
163 tagparent = nullid
165
164
@@ -200,8 +199,8 b' class mercurial_source(converter_source)'
200 # try to provoke an exception if this isn't really a hg
199 # try to provoke an exception if this isn't really a hg
201 # repo, but some other bogus compatible-looking url
200 # repo, but some other bogus compatible-looking url
202 if not self.repo.local():
201 if not self.repo.local():
203 raise RepoError()
202 raise error.RepoError()
204 except RepoError:
203 except error.RepoError:
205 ui.print_exc()
204 ui.print_exc()
206 raise NoRepo("%s is not a local Mercurial repo" % path)
205 raise NoRepo("%s is not a local Mercurial repo" % path)
207 self.lastrev = None
206 self.lastrev = None
@@ -213,7 +212,7 b' class mercurial_source(converter_source)'
213 if startnode is not None:
212 if startnode is not None:
214 try:
213 try:
215 startnode = self.repo.lookup(startnode)
214 startnode = self.repo.lookup(startnode)
216 except repo.RepoError:
215 except error.RepoError:
217 raise util.Abort(_('%s is not a valid start revision')
216 raise util.Abort(_('%s is not a valid start revision')
218 % startnode)
217 % startnode)
219 startrev = self.repo.changelog.rev(startnode)
218 startrev = self.repo.changelog.rev(startnode)
@@ -244,7 +243,7 b' class mercurial_source(converter_source)'
244 def getfile(self, name, rev):
243 def getfile(self, name, rev):
245 try:
244 try:
246 return self.changectx(rev)[name].data()
245 return self.changectx(rev)[name].data()
247 except revlog.LookupError, err:
246 except error.LookupError, err:
248 raise IOError(err)
247 raise IOError(err)
249
248
250 def getmode(self, name, rev):
249 def getmode(self, name, rev):
@@ -283,7 +282,7 b' class mercurial_source(converter_source)'
283 copies[name] = copysource
282 copies[name] = copysource
284 except TypeError:
283 except TypeError:
285 pass
284 pass
286 except revlog.LookupError, e:
285 except error.LookupError, e:
287 if not self.ignoreerrors:
286 if not self.ignoreerrors:
288 raise
287 raise
289 self.ignored[name] = 1
288 self.ignored[name] = 1
@@ -601,7 +601,7 b' class svn_source(converter_source):'
601 part = "/".join(parts[:i])
601 part = "/".join(parts[:i])
602 info = part, copyfrom.get(part, None)
602 info = part, copyfrom.get(part, None)
603 if info[1] is not None:
603 if info[1] is not None:
604 self.ui.debug(_("Found parent directory %s\n") % info[1])
604 self.ui.debug(_("found parent directory %s\n") % info[1])
605 rc = info
605 rc = info
606 return rc
606 return rc
607
607
@@ -616,7 +616,7 b' class svn_source(converter_source):'
616 self.ui.debug(entrypath[len(frompath):] + '\n')
616 self.ui.debug(entrypath[len(frompath):] + '\n')
617 entrypath = froment.copyfrom_path + entrypath[len(frompath):]
617 entrypath = froment.copyfrom_path + entrypath[len(frompath):]
618 fromrev = froment.copyfrom_rev
618 fromrev = froment.copyfrom_rev
619 self.ui.debug(_("Info: %s %s %s %s\n") % (frompath, froment, ent, entrypath))
619 self.ui.debug(_("info: %s %s %s %s\n") % (frompath, froment, ent, entrypath))
620
620
621 # We can avoid the reparent calls if the module has not changed
621 # We can avoid the reparent calls if the module has not changed
622 # but it probably does not worth the pain.
622 # but it probably does not worth the pain.
@@ -757,7 +757,7 b' class svn_source(converter_source):'
757 self.ui.note(_('found parent of branch %s at %d: %s\n') %
757 self.ui.note(_('found parent of branch %s at %d: %s\n') %
758 (self.module, prevnum, prevmodule))
758 (self.module, prevnum, prevmodule))
759 else:
759 else:
760 self.ui.debug(_("No copyfrom path, don't know what to do.\n"))
760 self.ui.debug(_("no copyfrom path, don't know what to do.\n"))
761
761
762 paths = []
762 paths = []
763 # filter out unrelated paths
763 # filter out unrelated paths
@@ -80,9 +80,7 b' def snapshot_wdir(ui, repo, files, tmpro'
80 '''snapshot files from working directory.
80 '''snapshot files from working directory.
81 if not using snapshot, -I/-X does not work and recursive diff
81 if not using snapshot, -I/-X does not work and recursive diff
82 in tools like kdiff3 and meld displays too many files.'''
82 in tools like kdiff3 and meld displays too many files.'''
83 repo_root = repo.root
83 dirname = os.path.basename(repo.root)
84
85 dirname = os.path.basename(repo_root)
86 if dirname == "":
84 if dirname == "":
87 dirname = "root"
85 dirname = "root"
88 base = os.path.join(tmproot, dirname)
86 base = os.path.join(tmproot, dirname)
@@ -105,8 +103,7 b' def snapshot_wdir(ui, repo, files, tmpro'
105 fp.write(chunk)
103 fp.write(chunk)
106 fp.close()
104 fp.close()
107
105
108 fns_and_mtime.append((dest, os.path.join(repo_root, fn),
106 fns_and_mtime.append((dest, repo.wjoin(fn), os.path.getmtime(dest)))
109 os.path.getmtime(dest)))
110
107
111
108
112 return dirname, fns_and_mtime
109 return dirname, fns_and_mtime
@@ -120,7 +117,19 b' def dodiff(ui, repo, diffcmd, diffopts, '
120 another one and more than 1 file is changed
117 another one and more than 1 file is changed
121 - just invoke the diff for a single file in the working dir
118 - just invoke the diff for a single file in the working dir
122 '''
119 '''
123 node1, node2 = cmdutil.revpair(repo, opts['rev'])
120
121 revs = opts.get('rev')
122 change = opts.get('change')
123
124 if revs and change:
125 msg = _('cannot specify --rev and --change at the same time')
126 raise util.Abort(msg)
127 elif change:
128 node2 = repo.lookup(change)
129 node1 = repo[node2].parents()[0].node()
130 else:
131 node1, node2 = cmdutil.revpair(repo, revs)
132
124 matcher = cmdutil.match(repo, pats, opts)
133 matcher = cmdutil.match(repo, pats, opts)
125 modified, added, removed = repo.status(node1, node2, matcher)[:3]
134 modified, added, removed = repo.status(node1, node2, matcher)[:3]
126 if not (modified or added or removed):
135 if not (modified or added or removed):
@@ -169,7 +178,7 b' def dodiff(ui, repo, diffcmd, diffopts, '
169
178
170 for copy_fn, working_fn, mtime in fns_and_mtime:
179 for copy_fn, working_fn, mtime in fns_and_mtime:
171 if os.path.getmtime(copy_fn) != mtime:
180 if os.path.getmtime(copy_fn) != mtime:
172 ui.debug(_('File changed while diffing. '
181 ui.debug(_('file changed while diffing. '
173 'Overwriting: %s (src: %s)\n') % (working_fn, copy_fn))
182 'Overwriting: %s (src: %s)\n') % (working_fn, copy_fn))
174 util.copyfile(copy_fn, working_fn)
183 util.copyfile(copy_fn, working_fn)
175
184
@@ -208,6 +217,7 b' cmdtable = {'
208 [('p', 'program', '', _('comparison program to run')),
217 [('p', 'program', '', _('comparison program to run')),
209 ('o', 'option', [], _('pass option to comparison program')),
218 ('o', 'option', [], _('pass option to comparison program')),
210 ('r', 'rev', [], _('revision')),
219 ('r', 'rev', [], _('revision')),
220 ('c', 'change', '', _('change made by revision')),
211 ] + commands.walkopts,
221 ] + commands.walkopts,
212 _('hg extdiff [OPT]... [FILE]...')),
222 _('hg extdiff [OPT]... [FILE]...')),
213 }
223 }
@@ -11,7 +11,7 b' from mercurial.node import nullid, short'
11 from mercurial import commands, cmdutil, hg, util, url
11 from mercurial import commands, cmdutil, hg, util, url
12
12
13 def fetch(ui, repo, source='default', **opts):
13 def fetch(ui, repo, source='default', **opts):
14 '''Pull changes from a remote repository, merge new changes if needed.
14 '''pull changes from a remote repository, merge new changes if needed.
15
15
16 This finds all changes from the repository at the specified path
16 This finds all changes from the repository at the specified path
17 or URL and adds them to the local repository.
17 or URL and adds them to the local repository.
@@ -17,9 +17,8 b' from mercurial.cmdutil import revrange, '
17 from mercurial.commands import templateopts, logopts, remoteopts
17 from mercurial.commands import templateopts, logopts, remoteopts
18 from mercurial.i18n import _
18 from mercurial.i18n import _
19 from mercurial.node import nullrev
19 from mercurial.node import nullrev
20 from mercurial.util import Abort, canonpath
21 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions
20 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions
22 from mercurial import hg, ui, url
21 from mercurial import hg, ui, url, util
23
22
24 def revisions(repo, start, stop):
23 def revisions(repo, start, stop):
25 """cset DAG generator yielding (rev, node, [parents]) tuples
24 """cset DAG generator yielding (rev, node, [parents]) tuples
@@ -245,18 +244,6 b' def ascii(ui, grapher):'
245 prev_node_index = node_index
244 prev_node_index = node_index
246 prev_n_columns_diff = n_columns_diff
245 prev_n_columns_diff = n_columns_diff
247
246
248 def get_limit(limit_opt):
249 if limit_opt:
250 try:
251 limit = int(limit_opt)
252 except ValueError:
253 raise Abort(_("limit must be a positive integer"))
254 if limit <= 0:
255 raise Abort(_("limit must be positive"))
256 else:
257 limit = sys.maxint
258 return limit
259
260 def get_revs(repo, rev_opt):
247 def get_revs(repo, rev_opt):
261 if rev_opt:
248 if rev_opt:
262 revs = revrange(repo, rev_opt)
249 revs = revrange(repo, rev_opt)
@@ -269,8 +256,7 b' def check_unsupported_flags(opts):'
269 "only_merges", "user", "only_branch", "prune", "newest_first",
256 "only_merges", "user", "only_branch", "prune", "newest_first",
270 "no_merges", "include", "exclude"]:
257 "no_merges", "include", "exclude"]:
271 if op in opts and opts[op]:
258 if op in opts and opts[op]:
272 raise Abort(_("--graph option is incompatible with --%s") % op)
259 raise util.Abort(_("--graph option is incompatible with --%s") % op)
273
274
260
275 def graphlog(ui, repo, path=None, **opts):
261 def graphlog(ui, repo, path=None, **opts):
276 """show revision history alongside an ASCII revision graph
262 """show revision history alongside an ASCII revision graph
@@ -283,39 +269,56 b' def graphlog(ui, repo, path=None, **opts'
283 """
269 """
284
270
285 check_unsupported_flags(opts)
271 check_unsupported_flags(opts)
286 limit = get_limit(opts["limit"])
272 limit = cmdutil.loglimit(opts)
287 start, stop = get_revs(repo, opts["rev"])
273 start, stop = get_revs(repo, opts["rev"])
288 stop = max(stop, start - limit + 1)
274 stop = max(stop, start - limit + 1)
289 if start == nullrev:
275 if start == nullrev:
290 return
276 return
291
277
292 if path:
278 if path:
293 path = canonpath(repo.root, os.getcwd(), path)
279 path = util.canonpath(repo.root, os.getcwd(), path)
294 if path: # could be reset in canonpath
280 if path: # could be reset in canonpath
295 revdag = filerevs(repo, path, start, stop)
281 revdag = filerevs(repo, path, start, stop)
296 else:
282 else:
297 revdag = revisions(repo, start, stop)
283 revdag = revisions(repo, start, stop)
298
284
299 repo_parents = repo.dirstate.parents()
285 graphdag = graphabledag(ui, repo, revdag, opts)
286 ascii(ui, grapher(graphdag))
287
288 def graphrevs(repo, nodes, opts):
289 nodes.reverse()
290 include = util.set(nodes)
291 limit = cmdutil.loglimit(opts)
292 count = 0
293 for node in nodes:
294 if count >= limit:
295 break
296 ctx = repo[node]
297 parents = [p.rev() for p in ctx.parents() if p.node() in include]
298 parents.sort()
299 yield (ctx, parents)
300 count += 1
301
302 def graphabledag(ui, repo, revdag, opts):
303 showparents = [ctx.node() for ctx in repo[None].parents()]
300 displayer = show_changeset(ui, repo, opts, buffered=True)
304 displayer = show_changeset(ui, repo, opts, buffered=True)
301 def graphabledag():
305 for (ctx, parents) in revdag:
302 for (ctx, parents) in revdag:
306 displayer.show(ctx)
303 # log_strings is the list of all log strings to draw alongside
307 lines = displayer.hunk.pop(ctx.rev()).split('\n')[:-1]
304 # the graph.
308 char = ctx.node() in showparents and '@' or 'o'
305 displayer.show(ctx)
309 yield (ctx.rev(), parents, char, lines)
306 lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
310
307 char = ctx.node() in repo_parents and '@' or 'o'
311 def goutgoing(ui, repo, dest=None, **opts):
308 yield (ctx.rev(), parents, char, lines)
312 """show the outgoing changesets alongside an ASCII revision graph
309
313
310 ascii(ui, grapher(graphabledag()))
314 Print the outgoing changesets alongside a revision graph drawn with
311
315 ASCII characters.
312 def outgoing_revs(ui, repo, dest, opts):
313 """cset DAG generator yielding (node, [parents]) tuples
314
316
315 This generator function walks through the revisions not found
317 Nodes printed as an @ character are parents of the working
316 in the destination
318 directory.
317 """
319 """
318 limit = cmdutil.loglimit(opts)
320
321 check_unsupported_flags(opts)
319 dest, revs, checkout = hg.parseurl(
322 dest, revs, checkout = hg.parseurl(
320 ui.expandpath(dest or 'default-push', dest or 'default'),
323 ui.expandpath(dest or 'default-push', dest or 'default'),
321 opts.get('rev'))
324 opts.get('rev'))
@@ -328,65 +331,11 b' def outgoing_revs(ui, repo, dest, opts):'
328 if not o:
331 if not o:
329 ui.status(_("no changes found\n"))
332 ui.status(_("no changes found\n"))
330 return
333 return
334
331 o = repo.changelog.nodesbetween(o, revs)[0]
335 o = repo.changelog.nodesbetween(o, revs)[0]
332 o.reverse()
336 revdag = graphrevs(repo, o, opts)
333 revdict = {}
337 graphdag = graphabledag(ui, repo, revdag, opts)
334 for n in o:
338 ascii(ui, grapher(graphdag))
335 revdict[repo.changectx(n).rev()]=True
336 count = 0
337 for n in o:
338 if count >= limit:
339 break
340 ctx = repo.changectx(n)
341 parents = [p.rev() for p in ctx.parents() if p.rev() in revdict]
342 parents.sort()
343 yield (ctx, parents)
344 count += 1
345
346 def goutgoing(ui, repo, dest=None, **opts):
347 """show the outgoing changesets alongside an ASCII revision graph
348
349 Print the outgoing changesets alongside a revision graph drawn with
350 ASCII characters.
351
352 Nodes printed as an @ character are parents of the working
353 directory.
354 """
355 check_unsupported_flags(opts)
356 revdag = outgoing_revs(ui, repo, dest, opts)
357 repo_parents = repo.dirstate.parents()
358 displayer = show_changeset(ui, repo, opts, buffered=True)
359 def graphabledag():
360 for (ctx, parents) in revdag:
361 # log_strings is the list of all log strings to draw alongside
362 # the graph.
363 displayer.show(ctx)
364 lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
365 char = ctx.node() in repo_parents and '@' or 'o'
366 yield (ctx.rev(), parents, char, lines)
367
368 ascii(ui, grapher(graphabledag()))
369
370 def incoming_revs(other, chlist, opts):
371 """cset DAG generator yielding (node, [parents]) tuples
372
373 This generator function walks through the revisions of the destination
374 not found in repo
375 """
376 limit = cmdutil.loglimit(opts)
377 chlist.reverse()
378 revdict = {}
379 for n in chlist:
380 revdict[other.changectx(n).rev()]=True
381 count = 0
382 for n in chlist:
383 if count >= limit:
384 break
385 ctx = other.changectx(n)
386 parents = [p.rev() for p in ctx.parents() if p.rev() in revdict]
387 parents.sort()
388 yield (ctx, parents)
389 count += 1
390
339
391 def gincoming(ui, repo, source="default", **opts):
340 def gincoming(ui, repo, source="default", **opts):
392 """show the incoming changesets alongside an ASCII revision graph
341 """show the incoming changesets alongside an ASCII revision graph
@@ -417,6 +366,7 b' def gincoming(ui, repo, source="default"'
417
366
418 cleanup = None
367 cleanup = None
419 try:
368 try:
369
420 fname = opts["bundle"]
370 fname = opts["bundle"]
421 if fname or not other.local():
371 if fname or not other.local():
422 # create a bundle (uncompressed if other repo is not local)
372 # create a bundle (uncompressed if other repo is not local)
@@ -434,19 +384,12 b' def gincoming(ui, repo, source="default"'
434 other = bundlerepo.bundlerepository(ui, repo.root, fname)
384 other = bundlerepo.bundlerepository(ui, repo.root, fname)
435
385
436 chlist = other.changelog.nodesbetween(incoming, revs)[0]
386 chlist = other.changelog.nodesbetween(incoming, revs)[0]
437 revdag = incoming_revs(other, chlist, opts)
387 revdag = graphrevs(other, chlist, opts)
438 other_parents = []
388 other_parents = []
439 displayer = show_changeset(ui, other, opts, buffered=True)
389 displayer = show_changeset(ui, other, opts, buffered=True)
440 def graphabledag():
390 graphdag = graphabledag(ui, repo, revdag, opts)
441 for (ctx, parents) in revdag:
391 ascii(ui, grapher(graphdag))
442 # log_strings is the list of all log strings to draw alongside
443 # the graph.
444 displayer.show(ctx)
445 lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
446 char = ctx.node() in other_parents and '@' or 'o'
447 yield (ctx.rev(), parents, char, lines)
448
392
449 ascii(ui, grapher(graphabledag()))
450 finally:
393 finally:
451 if hasattr(other, 'close'):
394 if hasattr(other, 'close'):
452 other.close()
395 other.close()
@@ -466,7 +409,7 b' def _wrapcmd(ui, cmd, table, wrapfn):'
466 return wrapfn(*args, **kwargs)
409 return wrapfn(*args, **kwargs)
467 return orig(*args, **kwargs)
410 return orig(*args, **kwargs)
468 entry = extensions.wrapcommand(table, cmd, graph)
411 entry = extensions.wrapcommand(table, cmd, graph)
469 entry[1].append(('g', 'graph', None, _("show the revision DAG")))
412 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
470
413
471 cmdtable = {
414 cmdtable = {
472 "glog":
415 "glog":
@@ -188,7 +188,8 b' class hgcia(object):'
188 if not template:
188 if not template:
189 template = self.diffstat and self.dstemplate or self.deftemplate
189 template = self.diffstat and self.dstemplate or self.deftemplate
190 template = templater.parsestring(template, quoted=False)
190 template = templater.parsestring(template, quoted=False)
191 t = cmdutil.changeset_templater(self.ui, self.repo, False, style, False)
191 t = cmdutil.changeset_templater(self.ui, self.repo, False, None,
192 style, False)
192 t.use_template(template)
193 t.use_template(template)
193 self.templater = t
194 self.templater = t
194
195
@@ -130,7 +130,7 b' def catcommit(ui, repo, n, prefix, ctx=N'
130 ui.write('\0')
130 ui.write('\0')
131
131
132 def base(ui, repo, node1, node2):
132 def base(ui, repo, node1, node2):
133 """Output common ancestor information"""
133 """output common ancestor information"""
134 node1 = repo.lookup(node1)
134 node1 = repo.lookup(node1)
135 node2 = repo.lookup(node2)
135 node2 = repo.lookup(node2)
136 n = repo.changelog.ancestor(node1, node2)
136 n = repo.changelog.ancestor(node1, node2)
@@ -282,7 +282,7 b' def revtree(ui, args, repo, full="tree",'
282 count += 1
282 count += 1
283
283
284 def revparse(ui, repo, *revs, **opts):
284 def revparse(ui, repo, *revs, **opts):
285 """Parse given revisions"""
285 """parse given revisions"""
286 def revstr(rev):
286 def revstr(rev):
287 if rev == 'HEAD':
287 if rev == 'HEAD':
288 rev = 'tip'
288 rev = 'tip'
@@ -137,7 +137,7 b' class kwtemplater(object):'
137
137
138 templatefilters.filters['utcdate'] = utcdate
138 templatefilters.filters['utcdate'] = utcdate
139 self.ct = cmdutil.changeset_templater(self.ui, self.repo,
139 self.ct = cmdutil.changeset_templater(self.ui, self.repo,
140 False, '', False)
140 False, None, '', False)
141
141
142 def substitute(self, data, path, ctx, subfunc):
142 def substitute(self, data, path, ctx, subfunc):
143 '''Replaces keywords in data with expanded template.'''
143 '''Replaces keywords in data with expanded template.'''
@@ -425,14 +425,10 b' def reposetup(ui, repo):'
425 keyword substitutions.
425 keyword substitutions.
426 Monkeypatches patch and webcommands.'''
426 Monkeypatches patch and webcommands.'''
427
427
428 try:
428 if (not hasattr(repo, 'dirstate') or not kwtools['inc']
429 if (not repo.local() or not kwtools['inc']
429 or kwtools['hgcmd'] in nokwcommands.split()
430 or kwtools['hgcmd'] in nokwcommands.split()
430 or '.hg' in util.splitpath(repo.root)):
431 or '.hg' in util.splitpath(repo.root)
431 return
432 or repo._url.startswith('bundle:')):
433 return
434 except AttributeError:
435 pass
436
432
437 kwtools['templater'] = kwt = kwtemplater(ui, repo)
433 kwtools['templater'] = kwt = kwtemplater(ui, repo)
438
434
@@ -30,10 +30,9 b' refresh contents of top applied patch '
30 '''
30 '''
31
31
32 from mercurial.i18n import _
32 from mercurial.i18n import _
33 from mercurial.node import bin, hex, short
33 from mercurial.node import bin, hex, short, nullid, nullrev
34 from mercurial.repo import RepoError
34 from mercurial import commands, cmdutil, hg, patch, util
35 from mercurial import commands, cmdutil, hg, patch, revlog, util
35 from mercurial import repair, extensions, url, error
36 from mercurial import repair, extensions, url
37 import os, sys, re, errno
36 import os, sys, re, errno
38
37
39 commands.norepo += " qclone"
38 commands.norepo += " qclone"
@@ -428,16 +427,16 b' class queue:'
428 def qparents(self, repo, rev=None):
427 def qparents(self, repo, rev=None):
429 if rev is None:
428 if rev is None:
430 (p1, p2) = repo.dirstate.parents()
429 (p1, p2) = repo.dirstate.parents()
431 if p2 == revlog.nullid:
430 if p2 == nullid:
432 return p1
431 return p1
433 if len(self.applied) == 0:
432 if len(self.applied) == 0:
434 return None
433 return None
435 return revlog.bin(self.applied[-1].rev)
434 return bin(self.applied[-1].rev)
436 pp = repo.changelog.parents(rev)
435 pp = repo.changelog.parents(rev)
437 if pp[1] != revlog.nullid:
436 if pp[1] != nullid:
438 arevs = [ x.rev for x in self.applied ]
437 arevs = [ x.rev for x in self.applied ]
439 p0 = revlog.hex(pp[0])
438 p0 = hex(pp[0])
440 p1 = revlog.hex(pp[1])
439 p1 = hex(pp[1])
441 if p0 in arevs:
440 if p0 in arevs:
442 return pp[0]
441 return pp[0]
443 if p1 in arevs:
442 if p1 in arevs:
@@ -455,7 +454,7 b' class queue:'
455 pname = ".hg.patches.merge.marker"
454 pname = ".hg.patches.merge.marker"
456 n = repo.commit(None, '[mq]: merge marker', user=None, force=1)
455 n = repo.commit(None, '[mq]: merge marker', user=None, force=1)
457 self.removeundo(repo)
456 self.removeundo(repo)
458 self.applied.append(statusentry(revlog.hex(n), pname))
457 self.applied.append(statusentry(hex(n), pname))
459 self.applied_dirty = 1
458 self.applied_dirty = 1
460
459
461 head = self.qparents(repo)
460 head = self.qparents(repo)
@@ -473,10 +472,10 b' class queue:'
473 if not info:
472 if not info:
474 self.ui.warn(_("patch %s is not applied\n") % patch)
473 self.ui.warn(_("patch %s is not applied\n") % patch)
475 return (1, None)
474 return (1, None)
476 rev = revlog.bin(info[1])
475 rev = bin(info[1])
477 (err, head) = self.mergeone(repo, mergeq, head, patch, rev)
476 (err, head) = self.mergeone(repo, mergeq, head, patch, rev)
478 if head:
477 if head:
479 self.applied.append(statusentry(revlog.hex(head), patch))
478 self.applied.append(statusentry(hex(head), patch))
480 self.applied_dirty = 1
479 self.applied_dirty = 1
481 if err:
480 if err:
482 return (err, head)
481 return (err, head)
@@ -552,9 +551,13 b' class queue:'
552 message.append(_("\nimported patch %s") % patchname)
551 message.append(_("\nimported patch %s") % patchname)
553 message = '\n'.join(message)
552 message = '\n'.join(message)
554
553
555 (patcherr, files, fuzz) = self.patch(repo, pf)
554 if ph.haspatch:
556 all_files.update(files)
555 (patcherr, files, fuzz) = self.patch(repo, pf)
557 patcherr = not patcherr
556 all_files.update(files)
557 patcherr = not patcherr
558 else:
559 self.ui.warn(_("patch %s is empty\n") % patchname)
560 patcherr, files, fuzz = 0, [], 0
558
561
559 if merge and files:
562 if merge and files:
560 # Mark as removed/merged and update dirstate parent info
563 # Mark as removed/merged and update dirstate parent info
@@ -581,15 +584,11 b' class queue:'
581 raise util.Abort(_("repo commit failed"))
584 raise util.Abort(_("repo commit failed"))
582
585
583 if update_status:
586 if update_status:
584 self.applied.append(statusentry(revlog.hex(n), patchname))
587 self.applied.append(statusentry(hex(n), patchname))
585
588
586 if patcherr:
589 if patcherr:
587 if not ph.haspatch:
590 self.ui.warn(_("patch failed, rejects left in working dir\n"))
588 self.ui.warn(_("patch %s is empty\n") % patchname)
591 err = 1
589 err = 0
590 else:
591 self.ui.warn(_("patch failed, rejects left in working dir\n"))
592 err = 1
593 break
592 break
594
593
595 if fuzz and strict:
594 if fuzz and strict:
@@ -613,7 +612,7 b' class queue:'
613 for rev in util.sort(revs):
612 for rev in util.sort(revs):
614 if rev < firstrev:
613 if rev < firstrev:
615 raise util.Abort(_('revision %d is not managed') % rev)
614 raise util.Abort(_('revision %d is not managed') % rev)
616 base = revlog.bin(self.applied[appliedbase].rev)
615 base = bin(self.applied[appliedbase].rev)
617 node = repo.changelog.node(rev)
616 node = repo.changelog.node(rev)
618 if node != base:
617 if node != base:
619 raise util.Abort(_('cannot delete revision %d above '
618 raise util.Abort(_('cannot delete revision %d above '
@@ -658,7 +657,7 b' class queue:'
658 if appliedbase >= len(self.applied):
657 if appliedbase >= len(self.applied):
659 raise util.Abort(_("revision %d is not managed") % rev)
658 raise util.Abort(_("revision %d is not managed") % rev)
660
659
661 base = revlog.bin(self.applied[appliedbase].rev)
660 base = bin(self.applied[appliedbase].rev)
662 node = repo.changelog.node(rev)
661 node = repo.changelog.node(rev)
663 if node != base:
662 if node != base:
664 raise util.Abort(_("cannot delete revision %d above "
663 raise util.Abort(_("cannot delete revision %d above "
@@ -681,7 +680,7 b' class queue:'
681
680
682 def check_toppatch(self, repo):
681 def check_toppatch(self, repo):
683 if len(self.applied) > 0:
682 if len(self.applied) > 0:
684 top = revlog.bin(self.applied[-1].rev)
683 top = bin(self.applied[-1].rev)
685 pp = repo.dirstate.parents()
684 pp = repo.dirstate.parents()
686 if top not in pp:
685 if top not in pp:
687 raise util.Abort(_("working directory revision is not qtip"))
686 raise util.Abort(_("working directory revision is not qtip"))
@@ -751,7 +750,7 b' class queue:'
751 raise util.Abort(_("repo commit failed"))
750 raise util.Abort(_("repo commit failed"))
752 try:
751 try:
753 self.full_series[insert:insert] = [patchfn]
752 self.full_series[insert:insert] = [patchfn]
754 self.applied.append(statusentry(revlog.hex(n), patchfn))
753 self.applied.append(statusentry(hex(n), patchfn))
755 self.parse_series()
754 self.parse_series()
756 self.series_dirty = 1
755 self.series_dirty = 1
757 self.applied_dirty = 1
756 self.applied_dirty = 1
@@ -963,10 +962,10 b' class queue:'
963 raise
962 raise
964 top = self.applied[-1].name
963 top = self.applied[-1].name
965 if ret[0]:
964 if ret[0]:
966 self.ui.write(
965 self.ui.write(_("errors during apply, please fix and "
967 "Errors during apply, please fix and refresh %s\n" % top)
966 "refresh %s\n") % top)
968 else:
967 else:
969 self.ui.write("Now at: %s\n" % top)
968 self.ui.write(_("now at: %s\n") % top)
970 return ret[0]
969 return ret[0]
971 finally:
970 finally:
972 del wlock
971 del wlock
@@ -993,38 +992,49 b' class queue:'
993 self.ui.warn(_("no patches applied\n"))
992 self.ui.warn(_("no patches applied\n"))
994 return not all
993 return not all
995
994
995 if all:
996 start = 0
997 elif patch:
998 start = info[0] + 1
999 else:
1000 start = len(self.applied) - 1
1001
1002 if start >= len(self.applied):
1003 self.ui.warn(_("qpop: %s is already at the top\n") % patch)
1004 return
1005
996 if not update:
1006 if not update:
997 parents = repo.dirstate.parents()
1007 parents = repo.dirstate.parents()
998 rr = [ revlog.bin(x.rev) for x in self.applied ]
1008 rr = [ bin(x.rev) for x in self.applied ]
999 for p in parents:
1009 for p in parents:
1000 if p in rr:
1010 if p in rr:
1001 self.ui.warn(_("qpop: forcing dirstate update\n"))
1011 self.ui.warn(_("qpop: forcing dirstate update\n"))
1002 update = True
1012 update = True
1013 else:
1014 parents = [p.hex() for p in repo[None].parents()]
1015 needupdate = False
1016 for entry in self.applied[start:]:
1017 if entry.rev in parents:
1018 needupdate = True
1019 break
1020 update = needupdate
1003
1021
1004 if not force and update:
1022 if not force and update:
1005 self.check_localchanges(repo)
1023 self.check_localchanges(repo)
1006
1024
1007 self.applied_dirty = 1;
1025 self.applied_dirty = 1
1008 end = len(self.applied)
1026 end = len(self.applied)
1009 if not patch:
1027 rev = bin(self.applied[start].rev)
1010 if all:
1011 popi = 0
1012 else:
1013 popi = len(self.applied) - 1
1014 else:
1015 popi = info[0] + 1
1016 if popi >= end:
1017 self.ui.warn(_("qpop: %s is already at the top\n") % patch)
1018 return
1019 info = [ popi ] + [self.applied[popi].rev, self.applied[popi].name]
1020
1021 start = info[0]
1022 rev = revlog.bin(info[1])
1023
1024 if update:
1028 if update:
1025 top = self.check_toppatch(repo)
1029 top = self.check_toppatch(repo)
1026
1030
1027 if repo.changelog.heads(rev) != [revlog.bin(self.applied[-1].rev)]:
1031 try:
1032 heads = repo.changelog.heads(rev)
1033 except error.LookupError:
1034 node = short(rev)
1035 raise util.Abort(_('trying to pop unknown node %s') % node)
1036
1037 if heads != [bin(self.applied[-1].rev)]:
1028 raise util.Abort(_("popping would remove a revision not "
1038 raise util.Abort(_("popping would remove a revision not "
1029 "managed by this patch queue"))
1039 "managed by this patch queue"))
1030
1040
@@ -1052,20 +1062,20 b' class queue:'
1052 try: os.removedirs(os.path.dirname(repo.wjoin(f)))
1062 try: os.removedirs(os.path.dirname(repo.wjoin(f)))
1053 except: pass
1063 except: pass
1054 repo.dirstate.forget(f)
1064 repo.dirstate.forget(f)
1055 repo.dirstate.setparents(qp, revlog.nullid)
1065 repo.dirstate.setparents(qp, nullid)
1056 del self.applied[start:end]
1066 del self.applied[start:end]
1057 self.strip(repo, rev, update=False, backup='strip')
1067 self.strip(repo, rev, update=False, backup='strip')
1058 if len(self.applied):
1068 if len(self.applied):
1059 self.ui.write(_("Now at: %s\n") % self.applied[-1].name)
1069 self.ui.write(_("now at: %s\n") % self.applied[-1].name)
1060 else:
1070 else:
1061 self.ui.write(_("Patch queue now empty\n"))
1071 self.ui.write(_("patch queue now empty\n"))
1062 finally:
1072 finally:
1063 del wlock
1073 del wlock
1064
1074
1065 def diff(self, repo, pats, opts):
1075 def diff(self, repo, pats, opts):
1066 top = self.check_toppatch(repo)
1076 top = self.check_toppatch(repo)
1067 if not top:
1077 if not top:
1068 self.ui.write(_("No patches applied\n"))
1078 self.ui.write(_("no patches applied\n"))
1069 return
1079 return
1070 qp = self.qparents(repo, top)
1080 qp = self.qparents(repo, top)
1071 self._diffopts = patch.diffopts(self.ui, opts)
1081 self._diffopts = patch.diffopts(self.ui, opts)
@@ -1073,7 +1083,7 b' class queue:'
1073
1083
1074 def refresh(self, repo, pats=None, **opts):
1084 def refresh(self, repo, pats=None, **opts):
1075 if len(self.applied) == 0:
1085 if len(self.applied) == 0:
1076 self.ui.write(_("No patches applied\n"))
1086 self.ui.write(_("no patches applied\n"))
1077 return 1
1087 return 1
1078 msg = opts.get('msg', '').rstrip()
1088 msg = opts.get('msg', '').rstrip()
1079 newuser = opts.get('user')
1089 newuser = opts.get('user')
@@ -1084,7 +1094,7 b' class queue:'
1084 try:
1094 try:
1085 self.check_toppatch(repo)
1095 self.check_toppatch(repo)
1086 (top, patchfn) = (self.applied[-1].rev, self.applied[-1].name)
1096 (top, patchfn) = (self.applied[-1].rev, self.applied[-1].name)
1087 top = revlog.bin(top)
1097 top = bin(top)
1088 if repo.changelog.heads(top) != [top]:
1098 if repo.changelog.heads(top) != [top]:
1089 raise util.Abort(_("cannot refresh a revision with children"))
1099 raise util.Abort(_("cannot refresh a revision with children"))
1090 cparents = repo.changelog.parents(top)
1100 cparents = repo.changelog.parents(top)
@@ -1258,7 +1268,7 b' class queue:'
1258 patchf.rename()
1268 patchf.rename()
1259 n = repo.commit(match.files(), message, user, ph.date,
1269 n = repo.commit(match.files(), message, user, ph.date,
1260 match=match, force=1)
1270 match=match, force=1)
1261 self.applied.append(statusentry(revlog.hex(n), patchfn))
1271 self.applied.append(statusentry(hex(n), patchfn))
1262 except:
1272 except:
1263 ctx = repo[cparents[0]]
1273 ctx = repo[cparents[0]]
1264 repo.dirstate.rebuild(ctx.node(), ctx.manifest())
1274 repo.dirstate.rebuild(ctx.node(), ctx.manifest())
@@ -1446,7 +1456,7 b' class queue:'
1446 if not n:
1456 if not n:
1447 self.ui.warn(_("repo commit failed\n"))
1457 self.ui.warn(_("repo commit failed\n"))
1448 return 1
1458 return 1
1449 self.applied.append(statusentry(revlog.hex(n),'.hg.patches.save.line'))
1459 self.applied.append(statusentry(hex(n),'.hg.patches.save.line'))
1450 self.applied_dirty = 1
1460 self.applied_dirty = 1
1451 self.removeundo(repo)
1461 self.removeundo(repo)
1452
1462
@@ -1524,14 +1534,14 b' class queue:'
1524 raise util.Abort(_('revision %d is the root of more than one '
1534 raise util.Abort(_('revision %d is the root of more than one '
1525 'branch') % rev[-1])
1535 'branch') % rev[-1])
1526 if self.applied:
1536 if self.applied:
1527 base = revlog.hex(repo.changelog.node(rev[0]))
1537 base = hex(repo.changelog.node(rev[0]))
1528 if base in [n.rev for n in self.applied]:
1538 if base in [n.rev for n in self.applied]:
1529 raise util.Abort(_('revision %d is already managed')
1539 raise util.Abort(_('revision %d is already managed')
1530 % rev[0])
1540 % rev[0])
1531 if heads != [revlog.bin(self.applied[-1].rev)]:
1541 if heads != [bin(self.applied[-1].rev)]:
1532 raise util.Abort(_('revision %d is not the parent of '
1542 raise util.Abort(_('revision %d is not the parent of '
1533 'the queue') % rev[0])
1543 'the queue') % rev[0])
1534 base = repo.changelog.rev(revlog.bin(self.applied[0].rev))
1544 base = repo.changelog.rev(bin(self.applied[0].rev))
1535 lastparent = repo.changelog.parentrevs(base)[0]
1545 lastparent = repo.changelog.parentrevs(base)[0]
1536 else:
1546 else:
1537 if heads != [repo.changelog.node(rev[0])]:
1547 if heads != [repo.changelog.node(rev[0])]:
@@ -1545,7 +1555,7 b' class queue:'
1545 for r in rev:
1555 for r in rev:
1546 p1, p2 = repo.changelog.parentrevs(r)
1556 p1, p2 = repo.changelog.parentrevs(r)
1547 n = repo.changelog.node(r)
1557 n = repo.changelog.node(r)
1548 if p2 != revlog.nullrev:
1558 if p2 != nullrev:
1549 raise util.Abort(_('cannot import merge revision %d') % r)
1559 raise util.Abort(_('cannot import merge revision %d') % r)
1550 if lastparent and lastparent != r:
1560 if lastparent and lastparent != r:
1551 raise util.Abort(_('revision %d is not the parent of %d')
1561 raise util.Abort(_('revision %d is not the parent of %d')
@@ -1563,7 +1573,7 b' class queue:'
1563 patch.export(repo, [n], fp=patchf, opts=self.diffopts())
1573 patch.export(repo, [n], fp=patchf, opts=self.diffopts())
1564 patchf.close()
1574 patchf.close()
1565
1575
1566 se = statusentry(revlog.hex(n), patchname)
1576 se = statusentry(hex(n), patchname)
1567 self.applied.insert(0, se)
1577 self.applied.insert(0, se)
1568
1578
1569 added.append(patchname)
1579 added.append(patchname)
@@ -1602,7 +1612,7 b' class queue:'
1602 index = self.full_series_end() + i
1612 index = self.full_series_end() + i
1603 self.full_series[index:index] = [patchname]
1613 self.full_series[index:index] = [patchname]
1604 self.parse_series()
1614 self.parse_series()
1605 self.ui.warn("adding %s to series file\n" % patchname)
1615 self.ui.warn(_("adding %s to series file\n") % patchname)
1606 i += 1
1616 i += 1
1607 added.append(patchname)
1617 added.append(patchname)
1608 patchname = None
1618 patchname = None
@@ -1727,16 +1737,19 b' def clone(ui, source, dest=None, **opts)'
1727 if dest is None:
1737 if dest is None:
1728 dest = hg.defaultdest(source)
1738 dest = hg.defaultdest(source)
1729 sr = hg.repository(ui, ui.expandpath(source))
1739 sr = hg.repository(ui, ui.expandpath(source))
1730 patchespath = opts['patches'] or patchdir(sr)
1740 if opts['patches']:
1741 patchespath = ui.expandpath(opts['patches'])
1742 else:
1743 patchespath = patchdir(sr)
1731 try:
1744 try:
1732 pr = hg.repository(ui, patchespath)
1745 pr = hg.repository(ui, patchespath)
1733 except RepoError:
1746 except error.RepoError:
1734 raise util.Abort(_('versioned patch repository not found'
1747 raise util.Abort(_('versioned patch repository not found'
1735 ' (see qinit -c)'))
1748 ' (see qinit -c)'))
1736 qbase, destrev = None, None
1749 qbase, destrev = None, None
1737 if sr.local():
1750 if sr.local():
1738 if sr.mq.applied:
1751 if sr.mq.applied:
1739 qbase = revlog.bin(sr.mq.applied[0].rev)
1752 qbase = bin(sr.mq.applied[0].rev)
1740 if not hg.islocal(dest):
1753 if not hg.islocal(dest):
1741 heads = dict.fromkeys(sr.heads())
1754 heads = dict.fromkeys(sr.heads())
1742 for h in sr.heads(qbase):
1755 for h in sr.heads(qbase):
@@ -1746,7 +1759,7 b' def clone(ui, source, dest=None, **opts)'
1746 elif sr.capable('lookup'):
1759 elif sr.capable('lookup'):
1747 try:
1760 try:
1748 qbase = sr.lookup('qbase')
1761 qbase = sr.lookup('qbase')
1749 except RepoError:
1762 except error.RepoError:
1750 pass
1763 pass
1751 ui.note(_('cloning main repo\n'))
1764 ui.note(_('cloning main repo\n'))
1752 sr, dr = hg.clone(ui, sr.url(), dest,
1765 sr, dr = hg.clone(ui, sr.url(), dest,
@@ -1786,7 +1799,7 b' def top(ui, repo, **opts):'
1786 return q.qseries(repo, start=t-1, length=1, status='A',
1799 return q.qseries(repo, start=t-1, length=1, status='A',
1787 summary=opts.get('summary'))
1800 summary=opts.get('summary'))
1788 else:
1801 else:
1789 ui.write("No patches applied\n")
1802 ui.write(_("no patches applied\n"))
1790 return 1
1803 return 1
1791
1804
1792 def next(ui, repo, **opts):
1805 def next(ui, repo, **opts):
@@ -1794,7 +1807,7 b' def next(ui, repo, **opts):'
1794 q = repo.mq
1807 q = repo.mq
1795 end = q.series_end()
1808 end = q.series_end()
1796 if end == len(q.series):
1809 if end == len(q.series):
1797 ui.write("All patches applied\n")
1810 ui.write(_("all patches applied\n"))
1798 return 1
1811 return 1
1799 return q.qseries(repo, start=end, length=1, summary=opts.get('summary'))
1812 return q.qseries(repo, start=end, length=1, summary=opts.get('summary'))
1800
1813
@@ -1803,10 +1816,10 b' def prev(ui, repo, **opts):'
1803 q = repo.mq
1816 q = repo.mq
1804 l = len(q.applied)
1817 l = len(q.applied)
1805 if l == 1:
1818 if l == 1:
1806 ui.write("Only one patch applied\n")
1819 ui.write(_("only one patch applied\n"))
1807 return 1
1820 return 1
1808 if not l:
1821 if not l:
1809 ui.write("No patches applied\n")
1822 ui.write(_("no patches applied\n"))
1810 return 1
1823 return 1
1811 return q.qseries(repo, start=l-2, length=1, status='A',
1824 return q.qseries(repo, start=l-2, length=1, status='A',
1812 summary=opts.get('summary'))
1825 summary=opts.get('summary'))
@@ -1870,7 +1883,7 b' def refresh(ui, repo, *pats, **opts):'
1870 message = cmdutil.logmessage(opts)
1883 message = cmdutil.logmessage(opts)
1871 if opts['edit']:
1884 if opts['edit']:
1872 if not q.applied:
1885 if not q.applied:
1873 ui.write(_("No patches applied\n"))
1886 ui.write(_("no patches applied\n"))
1874 return 1
1887 return 1
1875 if message:
1888 if message:
1876 raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
1889 raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
@@ -1980,13 +1993,10 b' def guard(ui, repo, *args, **opts):'
1980
1993
1981 With no arguments, print the currently active guards.
1994 With no arguments, print the currently active guards.
1982 With arguments, set guards for the named patch.
1995 With arguments, set guards for the named patch.
1983
1996 NOTE: Specifying negative guards now requires '--'.
1984 To set a negative guard "-foo" on topmost patch ("--" is needed so
1985 hg will not interpret "-foo" as an option):
1986 hg qguard -- -foo
1987
1997
1988 To set guards on another patch:
1998 To set guards on another patch:
1989 hg qguard other.patch +2.6.17 -stable
1999 hg qguard -- other.patch +2.6.17 -stable
1990 '''
2000 '''
1991 def status(idx):
2001 def status(idx):
1992 guards = q.series_guards[idx] or ['unguarded']
2002 guards = q.series_guards[idx] or ['unguarded']
@@ -2018,14 +2028,14 b' def guard(ui, repo, *args, **opts):'
2018 status(q.series.index(q.lookup(patch)))
2028 status(q.series.index(q.lookup(patch)))
2019
2029
2020 def header(ui, repo, patch=None):
2030 def header(ui, repo, patch=None):
2021 """Print the header of the topmost or specified patch"""
2031 """print the header of the topmost or specified patch"""
2022 q = repo.mq
2032 q = repo.mq
2023
2033
2024 if patch:
2034 if patch:
2025 patch = q.lookup(patch)
2035 patch = q.lookup(patch)
2026 else:
2036 else:
2027 if not q.applied:
2037 if not q.applied:
2028 ui.write('No patches applied\n')
2038 ui.write('no patches applied\n')
2029 return 1
2039 return 1
2030 patch = q.lookup('qtip')
2040 patch = q.lookup('qtip')
2031 ph = repo.mq.readheaders(patch)
2041 ph = repo.mq.readheaders(patch)
@@ -2112,7 +2122,7 b' def rename(ui, repo, patch, name=None, *'
2112 patch = q.lookup(patch)
2122 patch = q.lookup(patch)
2113 else:
2123 else:
2114 if not q.applied:
2124 if not q.applied:
2115 ui.write(_('No patches applied\n'))
2125 ui.write(_('no patches applied\n'))
2116 return
2126 return
2117 patch = q.lookup('qtip')
2127 patch = q.lookup('qtip')
2118 absdest = q.join(name)
2128 absdest = q.join(name)
@@ -2126,7 +2136,7 b' def rename(ui, repo, patch, name=None, *'
2126 raise util.Abort(_('A patch named %s already exists in the series file') % name)
2136 raise util.Abort(_('A patch named %s already exists in the series file') % name)
2127
2137
2128 if ui.verbose:
2138 if ui.verbose:
2129 ui.write('Renaming %s to %s\n' % (patch, name))
2139 ui.write('renaming %s to %s\n' % (patch, name))
2130 i = q.find_series(patch)
2140 i = q.find_series(patch)
2131 guards = q.guard_re.findall(q.full_series[i])
2141 guards = q.guard_re.findall(q.full_series[i])
2132 q.full_series[i] = name + ''.join([' #' + g for g in guards])
2142 q.full_series[i] = name + ''.join([' #' + g for g in guards])
@@ -2211,9 +2221,9 b' def strip(ui, repo, rev, **opts):'
2211 p = repo.dirstate.parents()
2221 p = repo.dirstate.parents()
2212 cl = repo.changelog
2222 cl = repo.changelog
2213 update = True
2223 update = True
2214 if p[0] == revlog.nullid:
2224 if p[0] == nullid:
2215 update = False
2225 update = False
2216 elif p[1] == revlog.nullid and rev != cl.ancestor(p[0], rev):
2226 elif p[1] == nullid and rev != cl.ancestor(p[0], rev):
2217 update = False
2227 update = False
2218 elif rev not in (cl.ancestor(p[0], rev), cl.ancestor(p[1], rev)):
2228 elif rev not in (cl.ancestor(p[0], rev), cl.ancestor(p[1], rev)):
2219 update = False
2229 update = False
@@ -2356,7 +2366,7 b' def reposetup(ui, repo):'
2356 class mqrepo(repo.__class__):
2366 class mqrepo(repo.__class__):
2357 def abort_if_wdir_patched(self, errmsg, force=False):
2367 def abort_if_wdir_patched(self, errmsg, force=False):
2358 if self.mq.applied and not force:
2368 if self.mq.applied and not force:
2359 parent = revlog.hex(self.dirstate.parents()[0])
2369 parent = hex(self.dirstate.parents()[0])
2360 if parent in [s.rev for s in self.mq.applied]:
2370 if parent in [s.rev for s in self.mq.applied]:
2361 raise util.Abort(errmsg)
2371 raise util.Abort(errmsg)
2362
2372
@@ -2386,11 +2396,11 b' def reposetup(ui, repo):'
2386 if not q.applied:
2396 if not q.applied:
2387 return tagscache
2397 return tagscache
2388
2398
2389 mqtags = [(revlog.bin(patch.rev), patch.name) for patch in q.applied]
2399 mqtags = [(bin(patch.rev), patch.name) for patch in q.applied]
2390
2400
2391 if mqtags[-1][0] not in self.changelog.nodemap:
2401 if mqtags[-1][0] not in self.changelog.nodemap:
2392 self.ui.warn(_('mq status file refers to unknown node %s\n')
2402 self.ui.warn(_('mq status file refers to unknown node %s\n')
2393 % revlog.short(mqtags[-1][0]))
2403 % short(mqtags[-1][0]))
2394 return tagscache
2404 return tagscache
2395
2405
2396 mqtags.append((mqtags[-1][0], 'qtip'))
2406 mqtags.append((mqtags[-1][0], 'qtip'))
@@ -2411,10 +2421,10 b' def reposetup(ui, repo):'
2411 return super(mqrepo, self)._branchtags(partial, lrev)
2421 return super(mqrepo, self)._branchtags(partial, lrev)
2412
2422
2413 cl = self.changelog
2423 cl = self.changelog
2414 qbasenode = revlog.bin(q.applied[0].rev)
2424 qbasenode = bin(q.applied[0].rev)
2415 if qbasenode not in cl.nodemap:
2425 if qbasenode not in cl.nodemap:
2416 self.ui.warn(_('mq status file refers to unknown node %s\n')
2426 self.ui.warn(_('mq status file refers to unknown node %s\n')
2417 % revlog.short(qbasenode))
2427 % short(qbasenode))
2418 return super(mqrepo, self)._branchtags(partial, lrev)
2428 return super(mqrepo, self)._branchtags(partial, lrev)
2419
2429
2420 qbase = cl.rev(qbasenode)
2430 qbase = cl.rev(qbasenode)
@@ -2486,7 +2496,7 b' cmdtable = {'
2486 (guard,
2496 (guard,
2487 [('l', 'list', None, _('list all patches and guards')),
2497 [('l', 'list', None, _('list all patches and guards')),
2488 ('n', 'none', None, _('drop all guards'))],
2498 ('n', 'none', None, _('drop all guards'))],
2489 _('hg qguard [-l] [-n] [PATCH] [+GUARD]... [-GUARD]...')),
2499 _('hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]...')),
2490 'qheader': (header, [], _('hg qheader [PATCH]')),
2500 'qheader': (header, [], _('hg qheader [PATCH]')),
2491 "^qimport":
2501 "^qimport":
2492 (qimport,
2502 (qimport,
@@ -113,7 +113,7 b' class notifier(object):'
113 template = (self.ui.config('notify', hooktype) or
113 template = (self.ui.config('notify', hooktype) or
114 self.ui.config('notify', 'template'))
114 self.ui.config('notify', 'template'))
115 self.t = cmdutil.changeset_templater(self.ui, self.repo,
115 self.t = cmdutil.changeset_templater(self.ui, self.repo,
116 False, mapfile, False)
116 False, None, mapfile, False)
117 if not mapfile and not template:
117 if not mapfile and not template:
118 template = deftemplates.get(hooktype) or single_template
118 template = deftemplates.get(hooktype) or single_template
119 if template:
119 if template:
@@ -147,7 +147,6 b' class notifier(object):'
147
147
148 def subscribers(self):
148 def subscribers(self):
149 '''return list of email addresses of subscribers to this repo.'''
149 '''return list of email addresses of subscribers to this repo.'''
150
151 subs = {}
150 subs = {}
152 for user, pats in self.ui.configitems('usersubs'):
151 for user, pats in self.ui.configitems('usersubs'):
153 for pat in pats.split(','):
152 for pat in pats.split(','):
@@ -164,20 +163,18 b' class notifier(object):'
164 def url(self, path=None):
163 def url(self, path=None):
165 return self.ui.config('web', 'baseurl') + (path or self.root)
164 return self.ui.config('web', 'baseurl') + (path or self.root)
166
165
167 def node(self, node):
166 def node(self, ctx):
168 '''format one changeset.'''
167 '''format one changeset.'''
169
168 self.t.show(ctx, changes=ctx.changeset(),
170 self.t.show(self.repo[node], changes=self.repo.changelog.read(node),
171 baseurl=self.ui.config('web', 'baseurl'),
169 baseurl=self.ui.config('web', 'baseurl'),
172 root=self.repo.root,
170 root=self.repo.root, webroot=self.root)
173 webroot=self.root)
174
171
175 def skipsource(self, source):
172 def skipsource(self, source):
176 '''true if incoming changes from this source should be skipped.'''
173 '''true if incoming changes from this source should be skipped.'''
177 ok_sources = self.ui.config('notify', 'sources', 'serve').split()
174 ok_sources = self.ui.config('notify', 'sources', 'serve').split()
178 return source not in ok_sources
175 return source not in ok_sources
179
176
180 def send(self, node, count, data):
177 def send(self, ctx, count, data):
181 '''send message.'''
178 '''send message.'''
182
179
183 p = email.Parser.Parser()
180 p = email.Parser.Parser()
@@ -196,40 +193,33 b' class notifier(object):'
196 for k, v in headers:
193 for k, v in headers:
197 msg[k] = v
194 msg[k] = v
198
195
199 def fix_subject(subject):
196 msg['Date'] = util.datestr(format="%a, %d %b %Y %H:%M:%S %1%2")
200 '''try to make subject line exist and be useful.'''
201
202 if not subject:
203 if count > 1:
204 subject = _('%s: %d new changesets') % (self.root, count)
205 else:
206 changes = self.repo.changelog.read(node)
207 s = changes[4].lstrip().split('\n', 1)[0].rstrip()
208 subject = '%s: %s' % (self.root, s)
209 maxsubject = int(self.ui.config('notify', 'maxsubject', 67))
210 if maxsubject and len(subject) > maxsubject:
211 subject = subject[:maxsubject-3] + '...'
212 msg['Subject'] = mail.headencode(self.ui, subject,
213 self.charsets, self.test)
214
197
215 def fix_sender(sender):
198 # try to make subject line exist and be useful
216 '''try to make message have proper sender.'''
199 if not subject:
200 if count > 1:
201 subject = _('%s: %d new changesets') % (self.root, count)
202 else:
203 s = ctx.description().lstrip().split('\n', 1)[0].rstrip()
204 subject = '%s: %s' % (self.root, s)
205 maxsubject = int(self.ui.config('notify', 'maxsubject', 67))
206 if maxsubject and len(subject) > maxsubject:
207 subject = subject[:maxsubject-3] + '...'
208 msg['Subject'] = mail.headencode(self.ui, subject,
209 self.charsets, self.test)
217
210
218 if not sender:
211 # try to make message have proper sender
219 sender = self.ui.config('email', 'from') or self.ui.username()
212 if not sender:
220 if '@' not in sender or '@localhost' in sender:
213 sender = self.ui.config('email', 'from') or self.ui.username()
221 sender = self.fixmail(sender)
214 if '@' not in sender or '@localhost' in sender:
222 msg['From'] = mail.addressencode(self.ui, sender,
215 sender = self.fixmail(sender)
223 self.charsets, self.test)
216 msg['From'] = mail.addressencode(self.ui, sender,
217 self.charsets, self.test)
224
218
225 msg['Date'] = util.datestr(format="%a, %d %b %Y %H:%M:%S %1%2")
219 msg['X-Hg-Notification'] = 'changeset %s' % ctx
226 fix_subject(subject)
227 fix_sender(sender)
228
229 msg['X-Hg-Notification'] = 'changeset ' + short(node)
230 if not msg['Message-Id']:
220 if not msg['Message-Id']:
231 msg['Message-Id'] = ('<hg.%s.%s.%s@%s>' %
221 msg['Message-Id'] = ('<hg.%s.%s.%s@%s>' %
232 (short(node), int(time.time()),
222 (ctx, int(time.time()),
233 hash(self.repo.root), socket.getfqdn()))
223 hash(self.repo.root), socket.getfqdn()))
234 msg['To'] = ', '.join(self.subs)
224 msg['To'] = ', '.join(self.subs)
235
225
@@ -244,10 +234,11 b' class notifier(object):'
244 mail.sendmail(self.ui, util.email(msg['From']),
234 mail.sendmail(self.ui, util.email(msg['From']),
245 self.subs, msgtext)
235 self.subs, msgtext)
246
236
247 def diff(self, node, ref):
237 def diff(self, ctx, ref=None):
238
248 maxdiff = int(self.ui.config('notify', 'maxdiff', 300))
239 maxdiff = int(self.ui.config('notify', 'maxdiff', 300))
249 prev = self.repo.changelog.parents(node)[0]
240 prev = ctx.parents()[0].node()
250
241 ref = ref and ref.node() or ctx.node()
251 chunks = patch.diff(self.repo, prev, ref, opts=patch.diffopts(self.ui))
242 chunks = patch.diff(self.repo, prev, ref, opts=patch.diffopts(self.ui))
252 difflines = ''.join(chunks).splitlines()
243 difflines = ''.join(chunks).splitlines()
253
244
@@ -256,14 +247,16 b' class notifier(object):'
256 # s may be nil, don't include the header if it is
247 # s may be nil, don't include the header if it is
257 if s:
248 if s:
258 self.ui.write('\ndiffstat:\n\n%s' % s)
249 self.ui.write('\ndiffstat:\n\n%s' % s)
250
259 if maxdiff == 0:
251 if maxdiff == 0:
260 return
252 return
261 if maxdiff > 0 and len(difflines) > maxdiff:
253 elif maxdiff > 0 and len(difflines) > maxdiff:
262 self.ui.write(_('\ndiffs (truncated from %d to %d lines):\n\n') %
254 msg = _('\ndiffs (truncated from %d to %d lines):\n\n')
263 (len(difflines), maxdiff))
255 self.ui.write(msg % (len(difflines), maxdiff))
264 difflines = difflines[:maxdiff]
256 difflines = difflines[:maxdiff]
265 elif difflines:
257 elif difflines:
266 self.ui.write(_('\ndiffs (%d lines):\n\n') % len(difflines))
258 self.ui.write(_('\ndiffs (%d lines):\n\n') % len(difflines))
259
267 self.ui.write("\n".join(difflines))
260 self.ui.write("\n".join(difflines))
268
261
269 def hook(ui, repo, hooktype, node=None, source=None, **kwargs):
262 def hook(ui, repo, hooktype, node=None, source=None, **kwargs):
@@ -271,26 +264,28 b' def hook(ui, repo, hooktype, node=None, '
271
264
272 if used as changegroup hook, send one email for all changesets in
265 if used as changegroup hook, send one email for all changesets in
273 changegroup. else send one email per changeset.'''
266 changegroup. else send one email per changeset.'''
267
274 n = notifier(ui, repo, hooktype)
268 n = notifier(ui, repo, hooktype)
269 ctx = repo[node]
270
275 if not n.subs:
271 if not n.subs:
276 ui.debug(_('notify: no subscribers to repo %s\n') % n.root)
272 ui.debug(_('notify: no subscribers to repo %s\n') % n.root)
277 return
273 return
278 if n.skipsource(source):
274 if n.skipsource(source):
279 ui.debug(_('notify: changes have source "%s" - skipping\n') %
275 ui.debug(_('notify: changes have source "%s" - skipping\n') % source)
280 source)
281 return
276 return
282 node = bin(node)
277
283 ui.pushbuffer()
278 ui.pushbuffer()
284 if hooktype == 'changegroup':
279 if hooktype == 'changegroup':
285 start = repo[node].rev()
280 start, end = ctx.rev(), len(repo)
286 end = len(repo)
287 count = end - start
281 count = end - start
288 for rev in xrange(start, end):
282 for rev in xrange(start, end):
289 n.node(repo[rev].node())
283 n.node(repo[rev])
290 n.diff(node, repo.changelog.tip())
284 n.diff(ctx, repo['tip'])
291 else:
285 else:
292 count = 1
286 count = 1
293 n.node(node)
287 n.node(ctx)
294 n.diff(node, node)
288 n.diff(ctx)
289
295 data = ui.popbuffer()
290 data = ui.popbuffer()
296 n.send(node, count, data)
291 n.send(ctx, count, data)
@@ -24,6 +24,7 b' For example, if you can refer to a revis'
24 foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo
24 foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo
25 '''
25 '''
26 import mercurial.repo
26 import mercurial.repo
27 from mercurial import error
27
28
28 def reposetup(ui, repo):
29 def reposetup(ui, repo):
29 if not repo.local():
30 if not repo.local():
@@ -34,7 +35,7 b' def reposetup(ui, repo):'
34 try:
35 try:
35 _super = super(parentrevspecrepo, self)
36 _super = super(parentrevspecrepo, self)
36 return _super.lookup(key)
37 return _super.lookup(key)
37 except mercurial.repo.RepoError:
38 except error.RepoError:
38 pass
39 pass
39
40
40 circ = key.find('^')
41 circ = key.find('^')
@@ -50,7 +51,7 b' def reposetup(ui, repo):'
50 base = key[:end]
51 base = key[:end]
51 try:
52 try:
52 node = _super.lookup(base)
53 node = _super.lookup(base)
53 except mercurial.repo.RepoError:
54 except error.RepoError:
54 # eek - reraise the first error
55 # eek - reraise the first error
55 return _super.lookup(key)
56 return _super.lookup(key)
56
57
@@ -9,8 +9,7 b' The message contains two or three body p'
9
9
10 The remainder of the changeset description.
10 The remainder of the changeset description.
11
11
12 [Optional] If the diffstat program is installed, the result of
12 [Optional] The result of running diffstat on the patch.
13 running diffstat on the patch.
14
13
15 The patch itself, as generated by "hg export".
14 The patch itself, as generated by "hg export".
16
15
@@ -59,7 +58,13 b' to send each message out:'
59
58
60 % formail -s sendmail -bm -t < mbox
59 % formail -s sendmail -bm -t < mbox
61
60
62 That should be all. Now your patchbomb is on its way out.'''
61 That should be all. Now your patchbomb is on its way out.
62
63 You can also either configure the method option in the email section
64 to be a sendmail compatable mailer or fill out the [smtp] section so
65 that the patchbomb extension can automatically send patchbombs directly
66 from the commandline. See the [email] and [smtp] sections in hgrc(5)
67 for details.'''
63
68
64 import os, errno, socket, tempfile, cStringIO
69 import os, errno, socket, tempfile, cStringIO
65 import email.MIMEMultipart, email.MIMEBase
70 import email.MIMEMultipart, email.MIMEBase
@@ -68,19 +73,6 b' from mercurial import cmdutil, commands,'
68 from mercurial.i18n import _
73 from mercurial.i18n import _
69 from mercurial.node import bin
74 from mercurial.node import bin
70
75
71 class exportee:
72 def __init__(self, container):
73 self.lines = []
74 self.container = container
75 self.name = 'email'
76
77 def write(self, data):
78 self.lines.append(data)
79
80 def close(self):
81 self.container.append(''.join(self.lines).split('\n'))
82 self.lines = []
83
84 def prompt(ui, prompt, default=None, rest=': ', empty_ok=False):
76 def prompt(ui, prompt, default=None, rest=': ', empty_ok=False):
85 if not ui.interactive:
77 if not ui.interactive:
86 return default
78 return default
@@ -99,16 +91,12 b' def prompt(ui, prompt, default=None, res'
99
91
100 def cdiffstat(ui, summary, patchlines):
92 def cdiffstat(ui, summary, patchlines):
101 s = patch.diffstat(patchlines)
93 s = patch.diffstat(patchlines)
102 if s:
94 if summary:
103 if summary:
95 ui.write(summary, '\n')
104 ui.write(summary, '\n')
96 ui.write(s, '\n')
105 ui.write(s, '\n')
97 ans = prompt(ui, _('does the diffstat above look okay? '), 'y')
106 ans = prompt(ui, _('Does the diffstat above look okay? '), 'y')
98 if not ans.lower().startswith('y'):
107 if not ans.lower().startswith('y'):
99 raise util.Abort(_('diffstat rejected'))
108 raise util.Abort(_('diffstat rejected'))
109 elif s is None:
110 ui.warn(_('no diffstat information available\n'))
111 s = ''
112 return s
100 return s
113
101
114 def makepatch(ui, repo, patch, opts, _charsets, idx, total, patchname=None):
102 def makepatch(ui, repo, patch, opts, _charsets, idx, total, patchname=None):
@@ -239,6 +227,13 b' def patchbomb(ui, repo, *revs, **opts):'
239 o = repo.changelog.nodesbetween(o, revs or None)[0]
227 o = repo.changelog.nodesbetween(o, revs or None)[0]
240 return [str(repo.changelog.rev(r)) for r in o]
228 return [str(repo.changelog.rev(r)) for r in o]
241
229
230 def getpatches(revs):
231 for r in cmdutil.revrange(repo, revs):
232 output = cStringIO.StringIO()
233 p = patch.export(repo, [r], fp=output,
234 opts=patch.diffopts(ui, opts))
235 yield output.getvalue().split('\n')
236
242 def getbundle(dest):
237 def getbundle(dest):
243 tmpdir = tempfile.mkdtemp(prefix='hg-email-bundle-')
238 tmpdir = tempfile.mkdtemp(prefix='hg-email-bundle-')
244 tmpfn = os.path.join(tmpdir, 'bundle')
239 tmpfn = os.path.join(tmpdir, 'bundle')
@@ -308,7 +303,7 b' def patchbomb(ui, repo, *revs, **opts):'
308 % len(patches))
303 % len(patches))
309
304
310 name = None
305 name = None
311 for p, i in zip(patches, xrange(len(patches))):
306 for i, p in enumerate(patches):
312 jumbo.extend(p)
307 jumbo.extend(p)
313 if patchnames:
308 if patchnames:
314 name = patchnames[i]
309 name = patchnames[i]
@@ -360,18 +355,14 b' def patchbomb(ui, repo, *revs, **opts):'
360 ui.config('patchbomb', 'from') or
355 ui.config('patchbomb', 'from') or
361 prompt(ui, 'From', ui.username()))
356 prompt(ui, 'From', ui.username()))
362
357
358 # internal option used by pbranches
363 patches = opts.get('patches')
359 patches = opts.get('patches')
364 if patches:
360 if patches:
365 msgs = getpatchmsgs(patches, opts.get('patchnames'))
361 msgs = getpatchmsgs(patches, opts.get('patchnames'))
366 elif opts.get('bundle'):
362 elif opts.get('bundle'):
367 msgs = getbundlemsgs(getbundle(dest))
363 msgs = getbundlemsgs(getbundle(dest))
368 else:
364 else:
369 patches = []
365 msgs = getpatchmsgs(list(getpatches(revs)))
370 commands.export(ui, repo, *revs, **{'output': exportee(patches),
371 'switch_parent': False,
372 'text': None,
373 'git': opts.get('git')})
374 msgs = getpatchmsgs(patches)
375
366
376 def getaddrs(opt, prpt, default = None):
367 def getaddrs(opt, prpt, default = None):
377 addrs = opts.get(opt) or (ui.config('email', opt) or
368 addrs = opts.get(opt) or (ui.config('email', opt) or
@@ -32,28 +32,26 b' from mercurial.i18n import _'
32 import os
32 import os
33
33
34 def purge(ui, repo, *dirs, **opts):
34 def purge(ui, repo, *dirs, **opts):
35 '''removes files not tracked by mercurial
35 '''removes files not tracked by Mercurial
36
36
37 Delete files not known to mercurial, this is useful to test local and
37 Delete files not known to Mercurial. This is useful to test local and
38 uncommitted changes in the otherwise clean source tree.
38 uncommitted changes in an otherwise-clean source tree.
39
39
40 This means that purge will delete:
40 This means that purge will delete:
41 - Unknown files: files marked with "?" by "hg status"
41 - Unknown files: files marked with "?" by "hg status"
42 - Ignored files: files usually ignored by Mercurial because they match
43 a pattern in a ".hgignore" file
44 - Empty directories: in fact Mercurial ignores directories unless they
42 - Empty directories: in fact Mercurial ignores directories unless they
45 contain files under source control managment
43 contain files under source control managment
46 But it will leave untouched:
44 But it will leave untouched:
47 - Unmodified tracked files
45 - Modified and unmodified tracked files
48 - Modified tracked files
46 - Ignored files (unless --all is specified)
49 - New files added to the repository (with "hg add")
47 - New files added to the repository (with "hg add")
50
48
51 If directories are given on the command line, only files in these
49 If directories are given on the command line, only files in these
52 directories are considered.
50 directories are considered.
53
51
54 Be careful with purge, you could irreversibly delete some files you
52 Be careful with purge, as you could irreversibly delete some files you
55 forgot to add to the repository. If you only want to print the list of
53 forgot to add to the repository. If you only want to print the list of
56 files that this program would delete use the --print option.
54 files that this program would delete, use the --print option.
57 '''
55 '''
58 act = not opts['print']
56 act = not opts['print']
59 eol = '\n'
57 eol = '\n'
@@ -64,7 +62,7 b' def purge(ui, repo, *dirs, **opts):'
64 def remove(remove_func, name):
62 def remove(remove_func, name):
65 if act:
63 if act:
66 try:
64 try:
67 remove_func(os.path.join(repo.root, name))
65 remove_func(repo.wjoin(name))
68 except OSError:
66 except OSError:
69 m = _('%s cannot be removed') % name
67 m = _('%s cannot be removed') % name
70 if opts['abort_on_err']:
68 if opts['abort_on_err']:
@@ -13,7 +13,7 b' For more information:'
13 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject
13 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject
14 '''
14 '''
15
15
16 from mercurial import util, repair, merge, cmdutil, dispatch, commands
16 from mercurial import util, repair, merge, cmdutil, commands, error
17 from mercurial import extensions, ancestor
17 from mercurial import extensions, ancestor
18 from mercurial.commands import templateopts
18 from mercurial.commands import templateopts
19 from mercurial.node import nullrev
19 from mercurial.node import nullrev
@@ -34,7 +34,7 b' def rebasemerge(repo, rev, first=False):'
34 if not first:
34 if not first:
35 ancestor.ancestor = newancestor
35 ancestor.ancestor = newancestor
36 else:
36 else:
37 repo.ui.debug(_("First revision, do not change ancestor\n"))
37 repo.ui.debug(_("first revision, do not change ancestor\n"))
38 stats = merge.update(repo, rev, True, True, False)
38 stats = merge.update(repo, rev, True, True, False)
39 return stats
39 return stats
40
40
@@ -67,21 +67,21 b' def rebase(ui, repo, **opts):'
67 extrafn = opts.get('extrafn')
67 extrafn = opts.get('extrafn')
68 if opts.get('keepbranches', None):
68 if opts.get('keepbranches', None):
69 if extrafn:
69 if extrafn:
70 raise dispatch.ParseError('rebase',
70 raise error.ParseError(
71 _('cannot use both keepbranches and extrafn'))
71 'rebase', _('cannot use both keepbranches and extrafn'))
72 def extrafn(ctx, extra):
72 def extrafn(ctx, extra):
73 extra['branch'] = ctx.branch()
73 extra['branch'] = ctx.branch()
74
74
75 if contf or abortf:
75 if contf or abortf:
76 if contf and abortf:
76 if contf and abortf:
77 raise dispatch.ParseError('rebase',
77 raise error.ParseError('rebase',
78 _('cannot use both abort and continue'))
78 _('cannot use both abort and continue'))
79 if collapsef:
79 if collapsef:
80 raise dispatch.ParseError('rebase',
80 raise error.ParseError(
81 _('cannot use collapse with continue or abort'))
81 'rebase', _('cannot use collapse with continue or abort'))
82
82
83 if (srcf or basef or destf):
83 if (srcf or basef or destf):
84 raise dispatch.ParseError('rebase',
84 raise error.ParseError('rebase',
85 _('abort and continue do not allow specifying revisions'))
85 _('abort and continue do not allow specifying revisions'))
86
86
87 originalwd, target, state, collapsef, external = restorestatus(repo)
87 originalwd, target, state, collapsef, external = restorestatus(repo)
@@ -90,8 +90,8 b' def rebase(ui, repo, **opts):'
90 return
90 return
91 else:
91 else:
92 if srcf and basef:
92 if srcf and basef:
93 raise dispatch.ParseError('rebase', _('cannot specify both a '
93 raise error.ParseError('rebase', _('cannot specify both a '
94 'revision and a base'))
94 'revision and a base'))
95 cmdutil.bail_if_changed(repo)
95 cmdutil.bail_if_changed(repo)
96 result = buildstate(repo, destf, srcf, basef, collapsef)
96 result = buildstate(repo, destf, srcf, basef, collapsef)
97 if result:
97 if result:
@@ -281,7 +281,7 b' def storestatus(repo, originalwd, target'
281 f.write(repo[target].hex() + '\n')
281 f.write(repo[target].hex() + '\n')
282 f.write(repo[external].hex() + '\n')
282 f.write(repo[external].hex() + '\n')
283 f.write('%d\n' % int(collapse))
283 f.write('%d\n' % int(collapse))
284 for d, v in state.items():
284 for d, v in state.iteritems():
285 oldrev = repo[d].hex()
285 oldrev = repo[d].hex()
286 newrev = repo[v].hex()
286 newrev = repo[v].hex()
287 f.write("%s:%s\n" % (oldrev, newrev))
287 f.write("%s:%s\n" % (oldrev, newrev))
@@ -400,7 +400,9 b' def pullrebase(orig, ui, repo, *args, **'
400 'Call rebase after pull if the latter has been invoked with --rebase'
400 'Call rebase after pull if the latter has been invoked with --rebase'
401 if opts.get('rebase'):
401 if opts.get('rebase'):
402 if opts.get('update'):
402 if opts.get('update'):
403 raise util.Abort(_('--update and --rebase are not compatible'))
403 del opts.get['update']
404 ui.debug(_('--update and --rebase are not compatible, ignoring '
405 'the update flag\n'))
404
406
405 cmdutil.bail_if_changed(repo)
407 cmdutil.bail_if_changed(repo)
406 revsprepull = len(repo)
408 revsprepull = len(repo)
@@ -408,6 +410,11 b' def pullrebase(orig, ui, repo, *args, **'
408 revspostpull = len(repo)
410 revspostpull = len(repo)
409 if revspostpull > revsprepull:
411 if revspostpull > revsprepull:
410 rebase(ui, repo, **opts)
412 rebase(ui, repo, **opts)
413 branch = repo[None].branch()
414 dest = repo[branch].rev()
415 if dest != repo['.'].rev():
416 # there was nothing to rebase we force an update
417 merge.update(repo, dest, False, False, False)
411 else:
418 else:
412 orig(ui, repo, *args, **opts)
419 orig(ui, repo, *args, **opts)
413
420
@@ -406,15 +406,10 b' def dorecord(ui, repo, committer, *pats,'
406 In the end we'll record intresting changes, and everything else will be
406 In the end we'll record intresting changes, and everything else will be
407 left in place, so the user can continue his work.
407 left in place, so the user can continue his work.
408 """
408 """
409 if match.files():
409
410 changes = None
410 changes = repo.status(match=match)[:3]
411 else:
412 changes = repo.status(match=match)[:3]
413 modified, added, removed = changes
414 match = cmdutil.matchfiles(repo, modified + added + removed)
415 diffopts = mdiff.diffopts(git=True, nodates=True)
411 diffopts = mdiff.diffopts(git=True, nodates=True)
416 chunks = patch.diff(repo, repo.dirstate.parents()[0], match=match,
412 chunks = patch.diff(repo, changes=changes, opts=diffopts)
417 changes=changes, opts=diffopts)
418 fp = cStringIO.StringIO()
413 fp = cStringIO.StringIO()
419 fp.write(''.join(chunks))
414 fp.write(''.join(chunks))
420 fp.seek(0)
415 fp.seek(0)
@@ -428,15 +423,12 b' def dorecord(ui, repo, committer, *pats,'
428 try: contenders.update(dict.fromkeys(h.files()))
423 try: contenders.update(dict.fromkeys(h.files()))
429 except AttributeError: pass
424 except AttributeError: pass
430
425
431 newfiles = [f for f in match.files() if f in contenders]
426 changed = changes[0] + changes[1] + changes[2]
432
427 newfiles = [f for f in changed if f in contenders]
433 if not newfiles:
428 if not newfiles:
434 ui.status(_('no changes to record\n'))
429 ui.status(_('no changes to record\n'))
435 return 0
430 return 0
436
431
437 if changes is None:
438 match = cmdutil.matchfiles(repo, newfiles)
439 changes = repo.status(match=match)
440 modified = dict.fromkeys(changes[0])
432 modified = dict.fromkeys(changes[0])
441
433
442 # 2. backup changed files, so we can restore them in the end
434 # 2. backup changed files, so we can restore them in the end
@@ -475,7 +467,9 b' def dorecord(ui, repo, committer, *pats,'
475 try:
467 try:
476 ui.debug(_('applying patch\n'))
468 ui.debug(_('applying patch\n'))
477 ui.debug(fp.getvalue())
469 ui.debug(fp.getvalue())
478 patch.internalpatch(fp, ui, 1, repo.root)
470 pfiles = {}
471 patch.internalpatch(fp, ui, 1, repo.root, files=pfiles)
472 patch.updatedir(ui, repo, pfiles)
479 except patch.PatchError, err:
473 except patch.PatchError, err:
480 s = str(err)
474 s = str(err)
481 if s:
475 if s:
@@ -5,11 +5,6 b''
5 # This software may be used and distributed according to the terms
5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference.
6 # of the GNU General Public License, incorporated herein by reference.
7
7
8 from mercurial.i18n import _
9 import os, tempfile
10 from mercurial import bundlerepo, changegroup, cmdutil, hg, merge
11 from mercurial import patch, revlog, util
12
13 '''patch transplanting tool
8 '''patch transplanting tool
14
9
15 This extension allows you to transplant patches from another branch.
10 This extension allows you to transplant patches from another branch.
@@ -18,6 +13,11 b' Transplanted patches are recorded in .hg'
18 from a changeset hash to its hash in the source repository.
13 from a changeset hash to its hash in the source repository.
19 '''
14 '''
20
15
16 from mercurial.i18n import _
17 import os, tempfile
18 from mercurial import bundlerepo, changegroup, cmdutil, hg, merge
19 from mercurial import patch, revlog, util, error
20
21 class transplantentry:
21 class transplantentry:
22 def __init__(self, lnode, rnode):
22 def __init__(self, lnode, rnode):
23 self.lnode = lnode
23 self.lnode = lnode
@@ -69,7 +69,8 b' class transplanter:'
69 self.ui = ui
69 self.ui = ui
70 self.path = repo.join('transplant')
70 self.path = repo.join('transplant')
71 self.opener = util.opener(self.path)
71 self.opener = util.opener(self.path)
72 self.transplants = transplants(self.path, 'transplants', opener=self.opener)
72 self.transplants = transplants(self.path, 'transplants',
73 opener=self.opener)
73
74
74 def applied(self, repo, node, parent):
75 def applied(self, repo, node, parent):
75 '''returns True if a node is already an ancestor of parent
76 '''returns True if a node is already an ancestor of parent
@@ -109,8 +110,8 b' class transplanter:'
109
110
110 parents = source.changelog.parents(node)
111 parents = source.changelog.parents(node)
111 if not opts.get('filter'):
112 if not opts.get('filter'):
112 # If the changeset parent is the same as the wdir's parent,
113 # If the changeset parent is the same as the
113 # just pull it.
114 # wdir's parent, just pull it.
114 if parents[0] == p1:
115 if parents[0] == p1:
115 pulls.append(node)
116 pulls.append(node)
116 p1 = node
117 p1 = node
@@ -124,9 +125,9 b' class transplanter:'
124
125
125 domerge = False
126 domerge = False
126 if node in merges:
127 if node in merges:
127 # pulling all the merge revs at once would mean we couldn't
128 # pulling all the merge revs at once would mean we
128 # transplant after the latest even if transplants before them
129 # couldn't transplant after the latest even if
129 # fail.
130 # transplants before them fail.
130 domerge = True
131 domerge = True
131 if not hasnode(repo, node):
132 if not hasnode(repo, node):
132 repo.pull(source, heads=[node])
133 repo.pull(source, heads=[node])
@@ -155,8 +156,9 b' class transplanter:'
155 self.ui.status(_('%s merged at %s\n') % (revstr,
156 self.ui.status(_('%s merged at %s\n') % (revstr,
156 revlog.short(n)))
157 revlog.short(n)))
157 elif n:
158 elif n:
158 self.ui.status(_('%s transplanted to %s\n') % (revlog.short(node),
159 self.ui.status(_('%s transplanted to %s\n')
159 revlog.short(n)))
160 % (revlog.short(node),
161 revlog.short(n)))
160 finally:
162 finally:
161 if patchfile:
163 if patchfile:
162 os.unlink(patchfile)
164 os.unlink(patchfile)
@@ -217,7 +219,8 b' class transplanter:'
217 fuzz = patch.patch(patchfile, self.ui, cwd=repo.root,
219 fuzz = patch.patch(patchfile, self.ui, cwd=repo.root,
218 files=files)
220 files=files)
219 if not files:
221 if not files:
220 self.ui.warn(_('%s: empty changeset') % revlog.hex(node))
222 self.ui.warn(_('%s: empty changeset')
223 % revlog.hex(node))
221 return None
224 return None
222 finally:
225 finally:
223 files = patch.updatedir(self.ui, repo, files)
226 files = patch.updatedir(self.ui, repo, files)
@@ -231,7 +234,8 b' class transplanter:'
231 p2 = node
234 p2 = node
232 self.log(user, date, message, p1, p2, merge=merge)
235 self.log(user, date, message, p1, p2, merge=merge)
233 self.ui.write(str(inst) + '\n')
236 self.ui.write(str(inst) + '\n')
234 raise util.Abort(_('Fix up the merge and run hg transplant --continue'))
237 raise util.Abort(_('Fix up the merge and run '
238 'hg transplant --continue'))
235 else:
239 else:
236 files = None
240 files = None
237 if merge:
241 if merge:
@@ -380,7 +384,7 b' class transplanter:'
380 def hasnode(repo, node):
384 def hasnode(repo, node):
381 try:
385 try:
382 return repo.changelog.rev(node) != None
386 return repo.changelog.rev(node) != None
383 except revlog.RevlogError:
387 except error.RevlogError:
384 return False
388 return False
385
389
386 def browserevs(ui, repo, nodes, opts):
390 def browserevs(ui, repo, nodes, opts):
@@ -496,16 +500,19 b' def transplant(ui, repo, *revs, **opts):'
496 def checkopts(opts, revs):
500 def checkopts(opts, revs):
497 if opts.get('continue'):
501 if opts.get('continue'):
498 if filter(lambda opt: opts.get(opt), ('branch', 'all', 'merge')):
502 if filter(lambda opt: opts.get(opt), ('branch', 'all', 'merge')):
499 raise util.Abort(_('--continue is incompatible with branch, all or merge'))
503 raise util.Abort(_('--continue is incompatible with '
504 'branch, all or merge'))
500 return
505 return
501 if not (opts.get('source') or revs or
506 if not (opts.get('source') or revs or
502 opts.get('merge') or opts.get('branch')):
507 opts.get('merge') or opts.get('branch')):
503 raise util.Abort(_('no source URL, branch tag or revision list provided'))
508 raise util.Abort(_('no source URL, branch tag or revision '
509 'list provided'))
504 if opts.get('all'):
510 if opts.get('all'):
505 if not opts.get('branch'):
511 if not opts.get('branch'):
506 raise util.Abort(_('--all requires a branch revision'))
512 raise util.Abort(_('--all requires a branch revision'))
507 if revs:
513 if revs:
508 raise util.Abort(_('--all is incompatible with a revision list'))
514 raise util.Abort(_('--all is incompatible with a '
515 'revision list'))
509
516
510 checkopts(opts, revs)
517 checkopts(opts, revs)
511
518
@@ -553,9 +560,11 b' def transplant(ui, repo, *revs, **opts):'
553 revmap[int(r)] = source.lookup(r)
560 revmap[int(r)] = source.lookup(r)
554 elif opts.get('all') or not merges:
561 elif opts.get('all') or not merges:
555 if source != repo:
562 if source != repo:
556 alltransplants = incwalk(source, incoming, branches, match=matchfn)
563 alltransplants = incwalk(source, incoming, branches,
564 match=matchfn)
557 else:
565 else:
558 alltransplants = transplantwalk(source, p1, branches, match=matchfn)
566 alltransplants = transplantwalk(source, p1, branches,
567 match=matchfn)
559 if opts.get('all'):
568 if opts.get('all'):
560 revs = alltransplants
569 revs = alltransplants
561 else:
570 else:
@@ -581,7 +590,9 b' cmdtable = {'
581 ('p', 'prune', [], _('skip over REV')),
590 ('p', 'prune', [], _('skip over REV')),
582 ('m', 'merge', [], _('merge at REV')),
591 ('m', 'merge', [], _('merge at REV')),
583 ('', 'log', None, _('append transplant info to log message')),
592 ('', 'log', None, _('append transplant info to log message')),
584 ('c', 'continue', None, _('continue last transplant session after repair')),
593 ('c', 'continue', None, _('continue last transplant session '
594 'after repair')),
585 ('', 'filter', '', _('filter changesets through FILTER'))],
595 ('', 'filter', '', _('filter changesets through FILTER'))],
586 _('hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]...'))
596 _('hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] '
597 '[-m REV] [REV]...'))
587 }
598 }
@@ -8,7 +8,7 b''
8 # This software may be used and distributed according to the terms
8 # This software may be used and distributed according to the terms
9 # of the GNU General Public License, incorporated herein by reference.
9 # of the GNU General Public License, incorporated herein by reference.
10 #
10 #
11 """Allow to use MBCS path with problematic encoding.
11 """allow to use MBCS path with problematic encoding.
12
12
13 Some MBCS encodings are not good for some path operations
13 Some MBCS encodings are not good for some path operations
14 (i.e. splitting path, case conversion, etc.) with its encoded bytes.
14 (i.e. splitting path, case conversion, etc.) with its encoded bytes.
@@ -6,6 +6,29 b''
6 # the GNU General Public License (version 2), incorporated herein by
6 # the GNU General Public License (version 2), incorporated herein by
7 # reference.
7 # reference.
8
8
9 '''zeroconf support for mercurial repositories
10
11 Zeroconf enabled repositories will be announced in a network without the need
12 to configure a server or a service. They can be discovered without knowing
13 their actual IP address.
14
15 To use the zeroconf extension add the following entry to your hgrc file:
16
17 [extensions]
18 hgext.zeroconf =
19
20 To allow other people to discover your repository using run "hg serve" in your
21 repository.
22
23 $ cd test
24 $ hg serve
25
26 You can discover zeroconf enabled repositories by running "hg paths".
27
28 $ hg paths
29 zc-test = http://example.com:8000/test
30 '''
31
9 import Zeroconf, socket, time, os
32 import Zeroconf, socket, time, os
10 from mercurial import ui
33 from mercurial import ui
11 from mercurial import extensions
34 from mercurial import extensions
@@ -29,7 +52,7 b' def getip():'
29
52
30 # Generic method, sometimes gives useless results
53 # Generic method, sometimes gives useless results
31 dumbip = socket.gethostbyaddr(socket.gethostname())[2][0]
54 dumbip = socket.gethostbyaddr(socket.gethostname())[2][0]
32 if not dumbip.startswith('127.'):
55 if not dumbip.startswith('127.') and ':' not in dumbip:
33 return dumbip
56 return dumbip
34
57
35 # works elsewhere, but actually sends a packet
58 # works elsewhere, but actually sends a packet
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, binary diff hidden
NO CONTENT: modified file, binary diff hidden
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, binary diff hidden
NO CONTENT: modified file, binary diff hidden
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
1 NO CONTENT: file was removed
NO CONTENT: file was removed
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