##// END OF EJS Templates
Merge with redone c655432c2c24 (issue1860)
Mads Kiilerich -
r9602:fc493cb9 merge default
parent child Browse files
Show More

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

@@ -0,0 +1,218 b''
1 #!/usr/bin/env python
2
3 """\
4 Reorder a revlog (by default the the manifest file in the current
5 repository) to save space. Specifically, this topologically sorts the
6 revisions in the revlog so that revisions on the same branch are adjacent
7 as much as possible. This is a workaround for the fact that Mercurial
8 computes deltas relative to the previous revision rather than relative to a
9 parent revision. This is *not* safe to run on a changelog.
10 """
11
12 # Originally written by Benoit Boissinot <benoit.boissinot at ens-lyon.org>
13 # as a patch to rewrite-log. Cleaned up, refactored, documented, and
14 # renamed by Greg Ward <greg at gerg.ca>.
15
16 # XXX would be nice to have a way to verify the repository after shrinking,
17 # e.g. by comparing "before" and "after" states of random changesets
18 # (maybe: export before, shrink, export after, diff).
19
20 import sys, os, tempfile
21 import optparse
22 from mercurial import ui as ui_, hg, revlog, transaction, node, util
23
24 def toposort(rl):
25 write = sys.stdout.write
26
27 children = {}
28 root = []
29 # build children and roots
30 write('reading %d revs ' % len(rl))
31 try:
32 for i in rl:
33 children[i] = []
34 parents = [p for p in rl.parentrevs(i) if p != node.nullrev]
35 # in case of duplicate parents
36 if len(parents) == 2 and parents[0] == parents[1]:
37 del parents[1]
38 for p in parents:
39 assert p in children
40 children[p].append(i)
41
42 if len(parents) == 0:
43 root.append(i)
44
45 if i % 1000 == 0:
46 write('.')
47 finally:
48 write('\n')
49
50 # XXX this is a reimplementation of the 'branchsort' topo sort
51 # algorithm in hgext.convert.convcmd... would be nice not to duplicate
52 # the algorithm
53 write('sorting ...')
54 visit = root
55 ret = []
56 while visit:
57 i = visit.pop(0)
58 ret.append(i)
59 if i not in children:
60 # This only happens if some node's p1 == p2, which can
61 # happen in the manifest in certain circumstances.
62 continue
63 next = []
64 for c in children.pop(i):
65 parents_unseen = [p for p in rl.parentrevs(c)
66 if p != node.nullrev and p in children]
67 if len(parents_unseen) == 0:
68 next.append(c)
69 visit = next + visit
70 write('\n')
71 return ret
72
73 def writerevs(r1, r2, order, tr):
74 write = sys.stdout.write
75 write('writing %d revs ' % len(order))
76 try:
77 count = 0
78 for rev in order:
79 n = r1.node(rev)
80 p1, p2 = r1.parents(n)
81 l = r1.linkrev(rev)
82 t = r1.revision(n)
83 n2 = r2.addrevision(t, tr, l, p1, p2)
84
85 if count % 1000 == 0:
86 write('.')
87 count += 1
88 finally:
89 write('\n')
90
91 def report(olddatafn, newdatafn):
92 oldsize = float(os.stat(olddatafn).st_size)
93 newsize = float(os.stat(newdatafn).st_size)
94
95 # argh: have to pass an int to %d, because a float >= 2^32
96 # blows up under Python 2.5 or earlier
97 sys.stdout.write('old file size: %12d bytes (%6.1f MiB)\n'
98 % (int(oldsize), oldsize/1024/1024))
99 sys.stdout.write('new file size: %12d bytes (%6.1f MiB)\n'
100 % (int(newsize), newsize/1024/1024))
101
102 shrink_percent = (oldsize - newsize) / oldsize * 100
103 shrink_factor = oldsize / newsize
104 sys.stdout.write('shrinkage: %.1f%% (%.1fx)\n'
105 % (shrink_percent, shrink_factor))
106
107 def main():
108
109 # Unbuffer stdout for nice progress output.
110 sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
111 write = sys.stdout.write
112
113 parser = optparse.OptionParser(description=__doc__)
114 parser.add_option('-R', '--repository',
115 default=os.path.curdir,
116 metavar='REPO',
117 help='repository root directory [default: current dir]')
118 parser.add_option('--revlog',
119 metavar='FILE',
120 help='shrink FILE [default: REPO/hg/store/00manifest.i]')
121 (options, args) = parser.parse_args()
122 if args:
123 parser.error('too many arguments')
124
125 # Open the specified repository.
126 ui = ui_.ui()
127 repo = hg.repository(ui, options.repository)
128 if not repo.local():
129 parser.error('not a local repository: %s' % options.repository)
130
131 if options.revlog is None:
132 indexfn = repo.sjoin('00manifest.i')
133 else:
134 if not options.revlog.endswith('.i'):
135 parser.error('--revlog option must specify the revlog index file '
136 '(*.i), not %s' % options.revlog)
137
138 indexfn = os.path.realpath(options.revlog)
139 store = repo.sjoin('')
140 if not indexfn.startswith(store):
141 parser.error('--revlog option must specify a revlog in %s, not %s'
142 % (store, indexfn))
143
144 datafn = indexfn[:-2] + '.d'
145 if not os.path.exists(indexfn):
146 parser.error('no such file: %s' % indexfn)
147 if '00changelog' in indexfn:
148 parser.error('shrinking the changelog will corrupt your repository')
149 if not os.path.exists(datafn):
150 # This is just a lazy shortcut because I can't be bothered to
151 # handle all the special cases that entail from no .d file.
152 parser.error('%s does not exist: revlog not big enough '
153 'to be worth shrinking' % datafn)
154
155 oldindexfn = indexfn + '.old'
156 olddatafn = datafn + '.old'
157 if os.path.exists(oldindexfn) or os.path.exists(olddatafn):
158 parser.error('one or both of\n'
159 ' %s\n'
160 ' %s\n'
161 'exists from a previous run; please clean up before '
162 'running again'
163 % (oldindexfn, olddatafn))
164
165 write('shrinking %s\n' % indexfn)
166 prefix = os.path.basename(indexfn)[:-1]
167 (tmpfd, tmpindexfn) = tempfile.mkstemp(dir=os.path.dirname(indexfn),
168 prefix=prefix,
169 suffix='.i')
170 tmpdatafn = tmpindexfn[:-2] + '.d'
171 os.close(tmpfd)
172
173 r1 = revlog.revlog(util.opener(os.getcwd(), audit=False), indexfn)
174 r2 = revlog.revlog(util.opener(os.getcwd(), audit=False), tmpindexfn)
175
176 # Don't use repo.transaction(), because then things get hairy with
177 # paths: some need to be relative to .hg, and some need to be
178 # absolute. Doing it this way keeps things simple: everything is an
179 # absolute path.
180 lock = repo.lock(wait=False)
181 tr = transaction.transaction(sys.stderr.write,
182 open,
183 repo.sjoin('journal'))
184
185 try:
186 try:
187 order = toposort(r1)
188 writerevs(r1, r2, order, tr)
189 report(datafn, tmpdatafn)
190 tr.close()
191 except:
192 # Abort transaction first, so we truncate the files before
193 # deleting them.
194 tr.abort()
195 if os.path.exists(tmpindexfn):
196 os.unlink(tmpindexfn)
197 if os.path.exists(tmpdatafn):
198 os.unlink(tmpdatafn)
199 raise
200 finally:
201 lock.release()
202
203 os.link(indexfn, oldindexfn)
204 os.link(datafn, olddatafn)
205 os.rename(tmpindexfn, indexfn)
206 os.rename(tmpdatafn, datafn)
207 write('note: old revlog saved in:\n'
208 ' %s\n'
209 ' %s\n'
210 '(You can delete those files when you are satisfied that your\n'
211 'repository is still sane. '
212 'Running \'hg verify\' is strongly recommended.)\n'
213 % (oldindexfn, olddatafn))
214
215 try:
216 main()
217 except KeyboardInterrupt:
218 sys.exit("interrupted")
@@ -0,0 +1,36 b''
1 Some commands allow the user to specify a date, e.g.:
2
3 - backout, commit, import, tag: Specify the commit date.
4 - log, revert, update: Select revision(s) by date.
5
6 Many date formats are valid. Here are some examples::
7
8 "Wed Dec 6 13:18:29 2006" (local timezone assumed)
9 "Dec 6 13:18 -0600" (year assumed, time offset provided)
10 "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
11 "Dec 6" (midnight)
12 "13:18" (today assumed)
13 "3:39" (3:39AM assumed)
14 "3:39pm" (15:39)
15 "2006-12-06 13:18:29" (ISO 8601 format)
16 "2006-12-6 13:18"
17 "2006-12-6"
18 "12-6"
19 "12/6"
20 "12/6/6" (Dec 6 2006)
21
22 Lastly, there is Mercurial's internal format::
23
24 "1165432709 0" (Wed Dec 6 13:18:29 2006 UTC)
25
26 This is the internal representation format for dates. unixtime is the
27 number of seconds since the epoch (1970-01-01 00:00 UTC). offset is
28 the offset of the local timezone, in seconds west of UTC (negative if
29 the timezone is east of UTC).
30
31 The log command also accepts date ranges::
32
33 "<{datetime}" - at or before a given date/time
34 ">{datetime}" - on or after a given date/time
35 "{datetime} to {datetime}" - a date range, inclusive
36 "-{days}" - within a given number of days of today
@@ -0,0 +1,29 b''
1 Mercurial's default format for showing changes between two versions of
2 a file is compatible with the unified format of GNU diff, which can be
3 used by GNU patch and many other standard tools.
4
5 While this standard format is often enough, it does not encode the
6 following information:
7
8 - executable status and other permission bits
9 - copy or rename information
10 - changes in binary files
11 - creation or deletion of empty files
12
13 Mercurial also supports the extended diff format from the git VCS
14 which addresses these limitations. The git diff format is not produced
15 by default because a few widespread tools still do not understand this
16 format.
17
18 This means that when generating diffs from a Mercurial repository
19 (e.g. with "hg export"), you should be careful about things like file
20 copies and renames or other things mentioned above, because when
21 applying a standard diff to a different repository, this extra
22 information is lost. Mercurial's internal operations (like push and
23 pull) are not affected by this, because they use an internal binary
24 format for communicating changes.
25
26 To make Mercurial produce the git extended diff format, use the --git
27 option available for many commands, or set 'git = True' in the [diff]
28 section of your hgrc. You do not need to set this option when
29 importing diffs in this format or using them in the mq extension.
@@ -0,0 +1,76 b''
1 HG
2 Path to the 'hg' executable, automatically passed when running
3 hooks, extensions or external tools. If unset or empty, this is
4 the hg executable's name if it's frozen, or an executable named
5 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on
6 Windows) is searched.
7
8 HGEDITOR
9 This is the name of the editor to run when committing. See EDITOR.
10
11 (deprecated, use .hgrc)
12
13 HGENCODING
14 This overrides the default locale setting detected by Mercurial.
15 This setting is used to convert data including usernames,
16 changeset descriptions, tag names, and branches. This setting can
17 be overridden with the --encoding command-line option.
18
19 HGENCODINGMODE
20 This sets Mercurial's behavior for handling unknown characters
21 while transcoding user input. The default is "strict", which
22 causes Mercurial to abort if it can't map a character. Other
23 settings include "replace", which replaces unknown characters, and
24 "ignore", which drops them. This setting can be overridden with
25 the --encodingmode command-line option.
26
27 HGMERGE
28 An executable to use for resolving merge conflicts. The program
29 will be executed with three arguments: local file, remote file,
30 ancestor file.
31
32 (deprecated, use .hgrc)
33
34 HGRCPATH
35 A list of files or directories to search for hgrc files. Item
36 separator is ":" on Unix, ";" on Windows. If HGRCPATH is not set,
37 platform default search path is used. If empty, only the .hg/hgrc
38 from the current repository is read.
39
40 For each element in HGRCPATH:
41
42 - if it's a directory, all files ending with .rc are added
43 - otherwise, the file itself will be added
44
45 HGUSER
46 This is the string used as the author of a commit. If not set,
47 available values will be considered in this order:
48
49 - HGUSER (deprecated)
50 - hgrc files from the HGRCPATH
51 - EMAIL
52 - interactive prompt
53 - LOGNAME (with '@hostname' appended)
54
55 (deprecated, use .hgrc)
56
57 EMAIL
58 May be used as the author of a commit; see HGUSER.
59
60 LOGNAME
61 May be used as the author of a commit; see HGUSER.
62
63 VISUAL
64 This is the name of the editor to use when committing. See EDITOR.
65
66 EDITOR
67 Sometimes Mercurial needs to open a text file in an editor for a
68 user to modify, for example when writing commit messages. The
69 editor it uses is determined by looking at the environment
70 variables HGEDITOR, VISUAL and EDITOR, in that order. The first
71 non-empty one is chosen. If all of them are empty, the editor
72 defaults to 'vi'.
73
74 PYTHONPATH
75 This is used by Python to find imported modules and may need to be
76 set appropriately if this Mercurial is not installed system-wide.
@@ -0,0 +1,33 b''
1 Mercurial has the ability to add new features through the use of
2 extensions. Extensions may add new commands, add options to
3 existing commands, change the default behavior of commands, or
4 implement hooks.
5
6 Extensions are not loaded by default for a variety of reasons:
7 they can increase startup overhead; they may be meant for advanced
8 usage only; they may provide potentially dangerous abilities (such
9 as letting you destroy or modify history); they might not be ready
10 for prime time; or they may alter some usual behaviors of stock
11 Mercurial. It is thus up to the user to activate extensions as
12 needed.
13
14 To enable the "foo" extension, either shipped with Mercurial or in
15 the Python search path, create an entry for it in your hgrc, like
16 this::
17
18 [extensions]
19 foo =
20
21 You may also specify the full path to an extension::
22
23 [extensions]
24 myfeature = ~/.hgext/myfeature.py
25
26 To explicitly disable an extension enabled in an hgrc of broader
27 scope, prepend its path with !::
28
29 [extensions]
30 # disabling extension bar residing in /path/to/extension/bar.py
31 hgext.bar = !/path/to/extension/bar.py
32 # ditto, but no path was supplied for extension baz
33 hgext.baz = !
@@ -0,0 +1,13 b''
1 When Mercurial accepts more than one revision, they may be specified
2 individually, or provided as a topologically continuous range,
3 separated by the ":" character.
4
5 The syntax of range notation is [BEGIN]:[END], where BEGIN and END are
6 revision identifiers. Both BEGIN and END are optional. If BEGIN is not
7 specified, it defaults to revision number 0. If END is not specified,
8 it defaults to the tip. The range ":" thus means "all revisions".
9
10 If BEGIN is greater than END, revisions are treated in reverse order.
11
12 A range acts as a closed interval. This means that a range of 3:5
13 gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.
@@ -0,0 +1,41 b''
1 Mercurial accepts several notations for identifying one or more files
2 at a time.
3
4 By default, Mercurial treats filenames as shell-style extended glob
5 patterns.
6
7 Alternate pattern notations must be specified explicitly.
8
9 To use a plain path name without any pattern matching, start it with
10 "path:". These path names must completely match starting at the
11 current repository root.
12
13 To use an extended glob, start a name with "glob:". Globs are rooted
14 at the current directory; a glob such as "``*.c``" will only match
15 files in the current directory ending with ".c".
16
17 The supported glob syntax extensions are "``**``" to match any string
18 across path separators and "{a,b}" to mean "a or b".
19
20 To use a Perl/Python regular expression, start a name with "re:".
21 Regexp pattern matching is anchored at the root of the repository.
22
23 Plain examples::
24
25 path:foo/bar a name bar in a directory named foo in the root
26 of the repository
27 path:path:name a file or directory named "path:name"
28
29 Glob examples::
30
31 glob:*.c any name ending in ".c" in the current directory
32 *.c any name ending in ".c" in the current directory
33 **.c any name ending in ".c" in any subdirectory of the
34 current directory including itself.
35 foo/*.c any name ending in ".c" in the directory foo
36 foo/**.c any name ending in ".c" in any subdirectory of foo
37 including itself.
38
39 Regexp examples::
40
41 re:.*\.c$ any name ending in ".c", anywhere in the repository
@@ -0,0 +1,29 b''
1 Mercurial supports several ways to specify individual revisions.
2
3 A plain integer is treated as a revision number. Negative integers are
4 treated as sequential offsets from the tip, with -1 denoting the tip,
5 -2 denoting the revision prior to the tip, and so forth.
6
7 A 40-digit hexadecimal string is treated as a unique revision
8 identifier.
9
10 A hexadecimal string less than 40 characters long is treated as a
11 unique revision identifier and is referred to as a short-form
12 identifier. A short-form identifier is only valid if it is the prefix
13 of exactly one full-length identifier.
14
15 Any other string is treated as a tag or branch name. A tag name is a
16 symbolic name associated with a revision identifier. A branch name
17 denotes the tipmost revision of that branch. Tag and branch names must
18 not contain the ":" character.
19
20 The reserved name "tip" is a special tag that always identifies the
21 most recent revision.
22
23 The reserved name "null" indicates the null revision. This is the
24 revision of an empty repository, and the parent of revision 0.
25
26 The reserved name "." indicates the working directory parent. If no
27 working directory is checked out, it is equivalent to null. If an
28 uncommitted merge is in progress, "." is the revision of the first
29 parent.
@@ -0,0 +1,113 b''
1 Mercurial allows you to customize output of commands through
2 templates. You can either pass in a template from the command
3 line, via the --template option, or select an existing
4 template-style (--style).
5
6 You can customize output for any "log-like" command: log,
7 outgoing, incoming, tip, parents, heads and glog.
8
9 Three styles are packaged with Mercurial: default (the style used
10 when no explicit preference is passed), compact and changelog.
11 Usage::
12
13 $ hg log -r1 --style changelog
14
15 A template is a piece of text, with markup to invoke variable
16 expansion::
17
18 $ hg log -r1 --template "{node}\n"
19 b56ce7b07c52de7d5fd79fb89701ea538af65746
20
21 Strings in curly braces are called keywords. The availability of
22 keywords depends on the exact context of the templater. These
23 keywords are usually available for templating a log-like command:
24
25 :author: String. The unmodified author of the changeset.
26 :branches: String. The name of the branch on which the changeset
27 was committed. Will be empty if the branch name was
28 default.
29 :date: Date information. The date when the changeset was
30 committed.
31 :desc: String. The text of the changeset description.
32 :diffstat: String. Statistics of changes with the following
33 format: "modified files: +added/-removed lines"
34 :files: List of strings. All files modified, added, or removed
35 by this changeset.
36 :file_adds: List of strings. Files added by this changeset.
37 :file_mods: List of strings. Files modified by this changeset.
38 :file_dels: List of strings. Files removed by this changeset.
39 :node: String. The changeset identification hash, as a
40 40-character hexadecimal string.
41 :parents: List of strings. The parents of the changeset.
42 :rev: Integer. The repository-local changeset revision
43 number.
44 :tags: List of strings. Any tags associated with the
45 changeset.
46 :latesttag: String. Most recent global tag in the ancestors of this
47 changeset.
48 :latesttagdistance: Integer. Longest path to the latest tag.
49
50 The "date" keyword does not produce human-readable output. If you
51 want to use a date in your output, you can use a filter to process
52 it. Filters are functions which return a string based on the input
53 variable. You can also use a chain of filters to get the desired
54 output::
55
56 $ hg tip --template "{date|isodate}\n"
57 2008-08-21 18:22 +0000
58
59 List of filters:
60
61 :addbreaks: Any text. Add an XHTML "<br />" tag before the end of
62 every line except the last.
63 :age: Date. Returns a human-readable date/time difference
64 between the given date/time and the current
65 date/time.
66 :basename: Any text. Treats the text as a path, and returns the
67 last component of the path after splitting by the
68 path separator (ignoring trailing separators). For
69 example, "foo/bar/baz" becomes "baz" and "foo/bar//"
70 becomes "bar".
71 :stripdir: Treat the text as path and strip a directory level,
72 if possible. For example, "foo" and "foo/bar" becomes
73 "foo".
74 :date: Date. Returns a date in a Unix date format, including
75 the timezone: "Mon Sep 04 15:13:13 2006 0700".
76 :domain: Any text. Finds the first string that looks like an
77 email address, and extracts just the domain
78 component. Example: 'User <user@example.com>' becomes
79 'example.com'.
80 :email: Any text. Extracts the first string that looks like
81 an email address. Example: 'User <user@example.com>'
82 becomes 'user@example.com'.
83 :escape: Any text. Replaces the special XML/XHTML characters
84 "&", "<" and ">" with XML entities.
85 :fill68: Any text. Wraps the text to fit in 68 columns.
86 :fill76: Any text. Wraps the text to fit in 76 columns.
87 :firstline: Any text. Returns the first line of text.
88 :nonempty: Any text. Returns '(none)' if the string is empty.
89 :hgdate: Date. Returns the date as a pair of numbers:
90 "1157407993 25200" (Unix timestamp, timezone offset).
91 :isodate: Date. Returns the date in ISO 8601 format:
92 "2009-08-18 13:00 +0200".
93 :isodatesec: Date. Returns the date in ISO 8601 format, including
94 seconds: "2009-08-18 13:00:13 +0200". See also the
95 rfc3339date filter.
96 :localdate: Date. Converts a date to local date.
97 :obfuscate: Any text. Returns the input text rendered as a
98 sequence of XML entities.
99 :person: Any text. Returns the text before an email address.
100 :rfc822date: Date. Returns a date using the same format used in
101 email headers: "Tue, 18 Aug 2009 13:00:13 +0200".
102 :rfc3339date: Date. Returns a date using the Internet date format
103 specified in RFC 3339: "2009-08-18T13:00:13+02:00".
104 :short: Changeset hash. Returns the short form of a changeset
105 hash, i.e. a 12-byte hexadecimal string.
106 :shortdate: Date. Returns a date like "2006-09-18".
107 :strip: Any text. Strips all leading and trailing whitespace.
108 :tabindent: Any text. Returns the text, with every line except
109 the first starting with a tab character.
110 :urlescape: Any text. Escapes all "special" characters. For
111 example, "foo bar" becomes "foo%20bar".
112 :user: Any text. Returns the user portion of an email
113 address.
@@ -0,0 +1,63 b''
1 Valid URLs are of the form::
2
3 local/filesystem/path[#revision]
4 file://local/filesystem/path[#revision]
5 http://[user[:pass]@]host[:port]/[path][#revision]
6 https://[user[:pass]@]host[:port]/[path][#revision]
7 ssh://[user[:pass]@]host[:port]/[path][#revision]
8
9 Paths in the local filesystem can either point to Mercurial
10 repositories or to bundle files (as created by 'hg bundle' or 'hg
11 incoming --bundle').
12
13 An optional identifier after # indicates a particular branch, tag, or
14 changeset to use from the remote repository. See also 'hg help
15 revisions'.
16
17 Some features, such as pushing to http:// and https:// URLs are only
18 possible if the feature is explicitly enabled on the remote Mercurial
19 server.
20
21 Some notes about using SSH with Mercurial:
22
23 - SSH requires an accessible shell account on the destination machine
24 and a copy of hg in the remote path or specified with as remotecmd.
25 - path is relative to the remote user's home directory by default. Use
26 an extra slash at the start of a path to specify an absolute path::
27
28 ssh://example.com//tmp/repository
29
30 - Mercurial doesn't use its own compression via SSH; the right thing
31 to do is to configure it in your ~/.ssh/config, e.g.::
32
33 Host *.mylocalnetwork.example.com
34 Compression no
35 Host *
36 Compression yes
37
38 Alternatively specify "ssh -C" as your ssh command in your hgrc or
39 with the --ssh command line option.
40
41 These URLs can all be stored in your hgrc with path aliases under the
42 [paths] section like so::
43
44 [paths]
45 alias1 = URL1
46 alias2 = URL2
47 ...
48
49 You can then use the alias for any command that uses a URL (for
50 example 'hg pull alias1' would pull from the 'alias1' path).
51
52 Two path aliases are special because they are used as defaults when
53 you do not provide the URL to a command:
54
55 default:
56 When you create a repository with hg clone, the clone command saves
57 the location of the source repository as the new repository's
58 'default' path. This is then used when you omit path from push- and
59 pull-like commands (including incoming and outgoing).
60
61 default-push:
62 The push command will look for a path named 'default-push', and
63 prefer it over 'default' if both are defined.
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -79,16 +79,16 b' test-%:'
79
79
80 update-pot: i18n/hg.pot
80 update-pot: i18n/hg.pot
81
81
82 i18n/hg.pot: $(PYTHON_FILES)
82 i18n/hg.pot: $(PYTHON_FILES) help/*.txt
83 $(PYTHON) i18n/hggettext mercurial/commands.py \
83 $(PYTHON) i18n/hggettext mercurial/commands.py \
84 hgext/*.py hgext/*/__init__.py > i18n/hg.pot
84 hgext/*.py hgext/*/__init__.py help/*.txt > i18n/hg.pot
85 # All strings marked for translation in Mercurial contain
85 # All strings marked for translation in Mercurial contain
86 # ASCII characters only. But some files contain string
86 # ASCII characters only. But some files contain string
87 # literals like this '\037\213'. xgettext thinks it has to
87 # literals like this '\037\213'. xgettext thinks it has to
88 # parse them even though they are not marked for translation.
88 # parse them even though they are not marked for translation.
89 # Extracting with an explicit encoding of ISO-8859-1 will make
89 # Extracting with an explicit encoding of ISO-8859-1 will make
90 # xgettext "parse" and ignore them.
90 # xgettext "parse" and ignore them.
91 echo $^ | xargs \
91 echo $(PYTHON_FILES) | xargs \
92 xgettext --package-name "Mercurial" \
92 xgettext --package-name "Mercurial" \
93 --msgid-bugs-address "<mercurial-devel@selenic.com>" \
93 --msgid-bugs-address "<mercurial-devel@selenic.com>" \
94 --copyright-holder "Matt Mackall <mpm@selenic.com> and others" \
94 --copyright-holder "Matt Mackall <mpm@selenic.com> and others" \
@@ -546,3 +546,20 b' complete -o bashdefault -o default -F _h'
546 return
546 return
547 }
547 }
548
548
549 # shelve
550 _hg_shelves()
551 {
552 local shelves="$("$hg" unshelve -l . 2>/dev/null)"
553 local IFS=$'\n'
554 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$shelves' -- "$cur"))
555 }
556
557 _hg_cmd_shelve()
558 {
559 _hg_status "mard"
560 }
561
562 _hg_cmd_unshelve()
563 {
564 _hg_shelves
565 }
@@ -1,9 +1,10 b''
1 import os, sys, textwrap
1 import os, sys
2 # import from the live mercurial repo
2 # import from the live mercurial repo
3 sys.path.insert(0, "..")
3 sys.path.insert(0, "..")
4 # fall back to pure modules if required C extensions are not available
4 # fall back to pure modules if required C extensions are not available
5 sys.path.append(os.path.join('..', 'mercurial', 'pure'))
5 sys.path.append(os.path.join('..', 'mercurial', 'pure'))
6 from mercurial import demandimport; demandimport.enable()
6 from mercurial import demandimport; demandimport.enable()
7 from mercurial import encoding
7 from mercurial.commands import table, globalopts
8 from mercurial.commands import table, globalopts
8 from mercurial.i18n import _
9 from mercurial.i18n import _
9 from mercurial.help import helptable
10 from mercurial.help import helptable
@@ -55,9 +56,9 b' def get_cmd(cmd):'
55
56
56 def show_doc(ui):
57 def show_doc(ui):
57 def section(s):
58 def section(s):
58 ui.write("%s\n%s\n\n" % (s, "-" * len(s)))
59 ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s)))
59 def subsection(s):
60 def subsection(s):
60 ui.write("%s\n%s\n\n" % (s, '"' * len(s)))
61 ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s)))
61
62
62 # print options
63 # print options
63 section(_("OPTIONS"))
64 section(_("OPTIONS"))
@@ -92,9 +93,7 b' def show_doc(ui):'
92 s = "%-*s %s" % (opts_len, optstr, desc)
93 s = "%-*s %s" % (opts_len, optstr, desc)
93 else:
94 else:
94 s = optstr
95 s = optstr
95 s = textwrap.fill(s, initial_indent=4 * " ",
96 ui.write(" %s\n" % s)
96 subsequent_indent=(6 + opts_len) * " ")
97 ui.write("%s\n" % s)
98 ui.write("\n")
97 ui.write("\n")
99 # aliases
98 # aliases
100 if d['aliases']:
99 if d['aliases']:
@@ -95,6 +95,6 b' COPYING'
95 -------
95 -------
96 Copyright \(C) 2005-2009 Matt Mackall.
96 Copyright \(C) 2005-2009 Matt Mackall.
97 Free use of this software is granted under the terms of the GNU General
97 Free use of this software is granted under the terms of the GNU General
98 Public License (GPL).
98 Public License version 2.
99
99
100 .. include:: common.txt
100 .. include:: common.txt
@@ -106,6 +106,6 b' COPYING'
106 This manual page is copyright 2006 Vadim Gelfer.
106 This manual page is copyright 2006 Vadim Gelfer.
107 Mercurial is copyright 2005-2009 Matt Mackall.
107 Mercurial is copyright 2005-2009 Matt Mackall.
108 Free use of this software is granted under the terms of the GNU General
108 Free use of this software is granted under the terms of the GNU General
109 Public License (GPL).
109 Public License version 2.
110
110
111 .. include:: common.txt
111 .. include:: common.txt
@@ -946,6 +946,6 b' COPYING'
946 This manual page is copyright 2005 Bryan O'Sullivan.
946 This manual page is copyright 2005 Bryan O'Sullivan.
947 Mercurial is copyright 2005-2009 Matt Mackall.
947 Mercurial is copyright 2005-2009 Matt Mackall.
948 Free use of this software is granted under the terms of the GNU General
948 Free use of this software is granted under the terms of the GNU General
949 Public License (GPL).
949 Public License version 2.
950
950
951 .. include:: common.txt
951 .. include:: common.txt
@@ -60,12 +60,12 b' import getpass, urllib'
60 def buildmatch(ui, repo, user, key):
60 def buildmatch(ui, repo, user, key):
61 '''return tuple of (match function, list enabled).'''
61 '''return tuple of (match function, list enabled).'''
62 if not ui.has_section(key):
62 if not ui.has_section(key):
63 ui.debug(_('acl: %s not enabled\n') % key)
63 ui.debug('acl: %s not enabled\n' % key)
64 return None
64 return None
65
65
66 pats = [pat for pat, users in ui.configitems(key)
66 pats = [pat for pat, users in ui.configitems(key)
67 if user in users.replace(',', ' ').split()]
67 if user in users.replace(',', ' ').split()]
68 ui.debug(_('acl: %s enabled, %d entries for user %s\n') %
68 ui.debug('acl: %s enabled, %d entries for user %s\n' %
69 (key, len(pats), user))
69 (key, len(pats), user))
70 if pats:
70 if pats:
71 return match.match(repo.root, '', pats)
71 return match.match(repo.root, '', pats)
@@ -77,7 +77,7 b' def hook(ui, repo, hooktype, node=None, '
77 raise util.Abort(_('config error - hook type "%s" cannot stop '
77 raise util.Abort(_('config error - hook type "%s" cannot stop '
78 'incoming changesets') % hooktype)
78 'incoming changesets') % hooktype)
79 if source not in ui.config('acl', 'sources', 'serve').split():
79 if source not in ui.config('acl', 'sources', 'serve').split():
80 ui.debug(_('acl: changes have source "%s" - skipping\n') % source)
80 ui.debug('acl: changes have source "%s" - skipping\n' % source)
81 return
81 return
82
82
83 user = None
83 user = None
@@ -99,9 +99,9 b' def hook(ui, repo, hooktype, node=None, '
99 ctx = repo[rev]
99 ctx = repo[rev]
100 for f in ctx.files():
100 for f in ctx.files():
101 if deny and deny(f):
101 if deny and deny(f):
102 ui.debug(_('acl: user %s denied on %s\n') % (user, f))
102 ui.debug('acl: user %s denied on %s\n' % (user, f))
103 raise util.Abort(_('acl: access denied for changeset %s') % ctx)
103 raise util.Abort(_('acl: access denied for changeset %s') % ctx)
104 if allow and not allow(f):
104 if allow and not allow(f):
105 ui.debug(_('acl: user %s not allowed on %s\n') % (user, f))
105 ui.debug('acl: user %s not allowed on %s\n' % (user, f))
106 raise util.Abort(_('acl: access denied for changeset %s') % ctx)
106 raise util.Abort(_('acl: access denied for changeset %s') % ctx)
107 ui.debug(_('acl: allowing changeset %s\n') % ctx)
107 ui.debug('acl: allowing changeset %s\n' % ctx)
@@ -153,7 +153,7 b' def churn(ui, repo, *pats, **opts):'
153 maxname = max(len(k) for k, v in rate)
153 maxname = max(len(k) for k, v in rate)
154
154
155 ttywidth = util.termwidth()
155 ttywidth = util.termwidth()
156 ui.debug(_("assuming %i character terminal\n") % ttywidth)
156 ui.debug("assuming %i character terminal\n" % ttywidth)
157 width = ttywidth - maxname - 2 - 6 - 2 - 2
157 width = ttywidth - maxname - 2 - 6 - 2 - 2
158
158
159 for date, count in rate:
159 for date, count in rate:
@@ -160,25 +160,26 b' def colorqseries(orig, ui, repo, *dummy,'
160 return retval
160 return retval
161
161
162 _patch_effects = { 'applied': ['blue', 'bold', 'underline'],
162 _patch_effects = { 'applied': ['blue', 'bold', 'underline'],
163 'missing': ['red', 'bold'],
163 'missing': ['red', 'bold'],
164 'unapplied': ['black', 'bold'], }
164 'unapplied': ['black', 'bold'], }
165
165 def colorwrap(orig, *args):
166 def colorwrap(orig, s):
167 '''wrap ui.write for colored diff output'''
166 '''wrap ui.write for colored diff output'''
168 lines = s.split('\n')
167 def _colorize(s):
169 for i, line in enumerate(lines):
168 lines = s.split('\n')
170 stripline = line
169 for i, line in enumerate(lines):
171 if line and line[0] in '+-':
170 stripline = line
172 # highlight trailing whitespace, but only in changed lines
171 if line and line[0] in '+-':
173 stripline = line.rstrip()
172 # highlight trailing whitespace, but only in changed lines
174 for prefix, style in _diff_prefixes:
173 stripline = line.rstrip()
175 if stripline.startswith(prefix):
174 for prefix, style in _diff_prefixes:
176 lines[i] = render_effects(stripline, _diff_effects[style])
175 if stripline.startswith(prefix):
177 break
176 lines[i] = render_effects(stripline, _diff_effects[style])
178 if line != stripline:
177 break
179 lines[i] += render_effects(
178 if line != stripline:
180 line[len(stripline):], _diff_effects['trailingwhitespace'])
179 lines[i] += render_effects(
181 orig('\n'.join(lines))
180 line[len(stripline):], _diff_effects['trailingwhitespace'])
181 return '\n'.join(lines)
182 orig(*[_colorize(s) for s in args])
182
183
183 def colorshowpatch(orig, self, node):
184 def colorshowpatch(orig, self, node):
184 '''wrap cmdutil.changeset_printer.showpatch with colored output'''
185 '''wrap cmdutil.changeset_printer.showpatch with colored output'''
@@ -235,6 +236,13 b' def uisetup(ui):'
235 # The mq extension is not enabled
236 # The mq extension is not enabled
236 pass
237 pass
237
238
239 try:
240 rec = extensions.find('record')
241 _setupcmd(ui, 'record', rec.cmdtable, colordiff, _diff_effects)
242 except KeyError:
243 # The record extension is not enabled
244 pass
245
238 def _setupcmd(ui, cmd, table, func, effectsmap):
246 def _setupcmd(ui, cmd, table, func, effectsmap):
239 '''patch in command to command table and load effect map'''
247 '''patch in command to command table and load effect map'''
240 def nocolor(orig, *args, **opts):
248 def nocolor(orig, *args, **opts):
@@ -256,7 +264,7 b' def _setupcmd(ui, cmd, table, func, effe'
256 entry = extensions.wrapcommand(table, cmd, nocolor)
264 entry = extensions.wrapcommand(table, cmd, nocolor)
257 entry[1].extend([
265 entry[1].extend([
258 ('', 'color', 'auto', _("when to colorize (always, auto, or never)")),
266 ('', 'color', 'auto', _("when to colorize (always, auto, or never)")),
259 ('', 'no-color', None, _("don't colorize output")),
267 ('', 'no-color', None, _("don't colorize output (DEPRECATED)")),
260 ])
268 ])
261
269
262 for status in effectsmap:
270 for status in effectsmap:
@@ -142,23 +142,8 b' def convert(ui, src, dest=None, revmapfi'
142 converted, and that any directory reorganization in the CVS
142 converted, and that any directory reorganization in the CVS
143 sandbox is ignored.
143 sandbox is ignored.
144
144
145 Because CVS does not have changesets, it is necessary to collect
146 individual commits to CVS and merge them into changesets. CVS
147 source uses its internal changeset merging code by default but can
148 be configured to call the external 'cvsps' program by setting::
149
150 --config convert.cvsps='cvsps -A -u --cvs-direct -q'
151
152 This option is deprecated and will be removed in Mercurial 1.4.
153
154 The options shown are the defaults.
145 The options shown are the defaults.
155
146
156 Internal cvsps is selected by setting ::
157
158 --config convert.cvsps=builtin
159
160 and has a few more configurable options:
161
162 --config convert.cvsps.cache=True (boolean)
147 --config convert.cvsps.cache=True (boolean)
163 Set to False to disable remote log caching, for testing and
148 Set to False to disable remote log caching, for testing and
164 debugging purposes.
149 debugging purposes.
@@ -178,9 +163,10 b' def convert(ui, src, dest=None, revmapfi'
178 add the most recent revision on the branch indicated in the
163 add the most recent revision on the branch indicated in the
179 regex as the second parent of the changeset.
164 regex as the second parent of the changeset.
180
165
181 The hgext/convert/cvsps wrapper script allows the builtin
166 An additional "debugcvsps" Mercurial command allows the builtin
182 changeset merging code to be run without doing a conversion. Its
167 changeset merging code to be run without doing a conversion. Its
183 parameters and output are similar to that of cvsps 2.1.
168 parameters and output are similar to that of cvsps 2.1. Please see
169 the command help for more details.
184
170
185 Subversion Source
171 Subversion Source
186 -----------------
172 -----------------
@@ -266,7 +266,7 b' class commandline(object):'
266
266
267 def _run(self, cmd, *args, **kwargs):
267 def _run(self, cmd, *args, **kwargs):
268 cmdline = self._cmdline(cmd, *args, **kwargs)
268 cmdline = self._cmdline(cmd, *args, **kwargs)
269 self.ui.debug(_('running: %s\n') % (cmdline,))
269 self.ui.debug('running: %s\n' % (cmdline,))
270 self.prerun()
270 self.prerun()
271 try:
271 try:
272 return util.popen(cmdline)
272 return util.popen(cmdline)
@@ -365,7 +365,7 b' class mapfile(dict):'
365 return
365 return
366 for i, line in enumerate(fp):
366 for i, line in enumerate(fp):
367 try:
367 try:
368 key, value = line[:-1].rsplit(' ', 1)
368 key, value = line.splitlines()[0].rsplit(' ', 1)
369 except ValueError:
369 except ValueError:
370 raise util.Abort(_('syntax error in %s(%d): key/value pair expected')
370 raise util.Abort(_('syntax error in %s(%d): key/value pair expected')
371 % (self.path, i+1))
371 % (self.path, i+1))
@@ -22,21 +22,11 b' class convert_cvs(converter_source):'
22 raise NoRepo("%s does not look like a CVS checkout" % path)
22 raise NoRepo("%s does not look like a CVS checkout" % path)
23
23
24 checktool('cvs')
24 checktool('cvs')
25 self.cmd = ui.config('convert', 'cvsps', 'builtin')
26 cvspsexe = self.cmd.split(None, 1)[0]
27 self.builtin = cvspsexe == 'builtin'
28 if not self.builtin:
29 ui.warn(_('warning: support for external cvsps is deprecated and '
30 'will be removed in Mercurial 1.4\n'))
31
32 if not self.builtin:
33 checktool(cvspsexe)
34
25
35 self.changeset = None
26 self.changeset = None
36 self.files = {}
27 self.files = {}
37 self.tags = {}
28 self.tags = {}
38 self.lastbranch = {}
29 self.lastbranch = {}
39 self.parent = {}
40 self.socket = None
30 self.socket = None
41 self.cvsroot = open(os.path.join(cvs, "Root")).read()[:-1]
31 self.cvsroot = open(os.path.join(cvs, "Root")).read()[:-1]
42 self.cvsrepo = open(os.path.join(cvs, "Repository")).read()[:-1]
32 self.cvsrepo = open(os.path.join(cvs, "Repository")).read()[:-1]
@@ -50,19 +40,13 b' class convert_cvs(converter_source):'
50 self.changeset = {}
40 self.changeset = {}
51
41
52 maxrev = 0
42 maxrev = 0
53 cmd = self.cmd
54 if self.rev:
43 if self.rev:
55 # TODO: handle tags
44 # TODO: handle tags
56 try:
45 try:
57 # patchset number?
46 # patchset number?
58 maxrev = int(self.rev)
47 maxrev = int(self.rev)
59 except ValueError:
48 except ValueError:
60 try:
49 raise util.Abort(_('revision %s is not a patchset number') % self.rev)
61 # date
62 util.parsedate(self.rev, ['%Y/%m/%d %H:%M:%S'])
63 cmd = '%s -d "1970/01/01 00:00:01" -d "%s"' % (cmd, self.rev)
64 except util.Abort:
65 raise util.Abort(_('revision %s is not a patchset number or date') % self.rev)
66
50
67 d = os.getcwd()
51 d = os.getcwd()
68 try:
52 try:
@@ -71,116 +55,36 b' class convert_cvs(converter_source):'
71 state = 0
55 state = 0
72 filerevids = {}
56 filerevids = {}
73
57
74 if self.builtin:
58 cache = 'update'
75 # builtin cvsps code
59 if not self.ui.configbool('convert', 'cvsps.cache', True):
76 self.ui.status(_('using builtin cvsps\n'))
60 cache = None
77
61 db = cvsps.createlog(self.ui, cache=cache)
78 cache = 'update'
62 db = cvsps.createchangeset(self.ui, db,
79 if not self.ui.configbool('convert', 'cvsps.cache', True):
63 fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)),
80 cache = None
64 mergeto=self.ui.config('convert', 'cvsps.mergeto', None),
81 db = cvsps.createlog(self.ui, cache=cache)
65 mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None))
82 db = cvsps.createchangeset(self.ui, db,
83 fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)),
84 mergeto=self.ui.config('convert', 'cvsps.mergeto', None),
85 mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None))
86
87 for cs in db:
88 if maxrev and cs.id>maxrev:
89 break
90 id = str(cs.id)
91 cs.author = self.recode(cs.author)
92 self.lastbranch[cs.branch] = id
93 cs.comment = self.recode(cs.comment)
94 date = util.datestr(cs.date)
95 self.tags.update(dict.fromkeys(cs.tags, id))
96
97 files = {}
98 for f in cs.entries:
99 files[f.file] = "%s%s" % ('.'.join([str(x) for x in f.revision]),
100 ['', '(DEAD)'][f.dead])
101
66
102 # add current commit to set
67 for cs in db:
103 c = commit(author=cs.author, date=date,
68 if maxrev and cs.id>maxrev:
104 parents=[str(p.id) for p in cs.parents],
69 break
105 desc=cs.comment, branch=cs.branch or '')
70 id = str(cs.id)
106 self.changeset[id] = c
71 cs.author = self.recode(cs.author)
107 self.files[id] = files
72 self.lastbranch[cs.branch] = id
108 else:
73 cs.comment = self.recode(cs.comment)
109 # external cvsps
74 date = util.datestr(cs.date)
110 for l in util.popen(cmd):
75 self.tags.update(dict.fromkeys(cs.tags, id))
111 if state == 0: # header
112 if l.startswith("PatchSet"):
113 id = l[9:-2]
114 if maxrev and int(id) > maxrev:
115 # ignore everything
116 state = 3
117 elif l.startswith("Date:"):
118 date = util.parsedate(l[6:-1], ["%Y/%m/%d %H:%M:%S"])
119 date = util.datestr(date)
120 elif l.startswith("Branch:"):
121 branch = l[8:-1]
122 self.parent[id] = self.lastbranch.get(branch, 'bad')
123 self.lastbranch[branch] = id
124 elif l.startswith("Ancestor branch:"):
125 ancestor = l[17:-1]
126 # figure out the parent later
127 self.parent[id] = self.lastbranch[ancestor]
128 elif l.startswith("Author:"):
129 author = self.recode(l[8:-1])
130 elif l.startswith("Tag:") or l.startswith("Tags:"):
131 t = l[l.index(':')+1:]
132 t = [ut.strip() for ut in t.split(',')]
133 if (len(t) > 1) or (t[0] and (t[0] != "(none)")):
134 self.tags.update(dict.fromkeys(t, id))
135 elif l.startswith("Log:"):
136 # switch to gathering log
137 state = 1
138 log = ""
139 elif state == 1: # log
140 if l == "Members: \n":
141 # switch to gathering members
142 files = {}
143 oldrevs = []
144 log = self.recode(log[:-1])
145 state = 2
146 else:
147 # gather log
148 log += l
149 elif state == 2: # members
150 if l == "\n": # start of next entry
151 state = 0
152 p = [self.parent[id]]
153 if id == "1":
154 p = []
155 if branch == "HEAD":
156 branch = ""
157 if branch:
158 latest = 0
159 # the last changeset that contains a base
160 # file is our parent
161 for r in oldrevs:
162 latest = max(filerevids.get(r, 0), latest)
163 if latest:
164 p = [latest]
165
76
166 # add current commit to set
77 files = {}
167 c = commit(author=author, date=date, parents=p,
78 for f in cs.entries:
168 desc=log, branch=branch)
79 files[f.file] = "%s%s" % ('.'.join([str(x) for x in f.revision]),
169 self.changeset[id] = c
80 ['', '(DEAD)'][f.dead])
170 self.files[id] = files
171 else:
172 colon = l.rfind(':')
173 file = l[1:colon]
174 rev = l[colon+1:-2]
175 oldrev, rev = rev.split("->")
176 files[file] = rev
177
81
178 # save some information for identifying branch points
82 # add current commit to set
179 oldrevs.append("%s:%s" % (oldrev, file))
83 c = commit(author=cs.author, date=date,
180 filerevids["%s:%s" % (rev, file)] = id
84 parents=[str(p.id) for p in cs.parents],
181 elif state == 3:
85 desc=cs.comment, branch=cs.branch or '')
182 # swallow all input
86 self.changeset[id] = c
183 continue
87 self.files[id] = files
184
88
185 self.heads = self.lastbranch.values()
89 self.heads = self.lastbranch.values()
186 finally:
90 finally:
@@ -199,7 +199,7 b' def createlog(ui, directory=None, root="'
199
199
200 cmd = [util.shellquote(arg) for arg in cmd]
200 cmd = [util.shellquote(arg) for arg in cmd]
201 ui.note(_("running %s\n") % (' '.join(cmd)))
201 ui.note(_("running %s\n") % (' '.join(cmd)))
202 ui.debug(_("prefix=%r directory=%r root=%r\n") % (prefix, directory, root))
202 ui.debug("prefix=%r directory=%r root=%r\n" % (prefix, directory, root))
203
203
204 pfp = util.popen(' '.join(cmd))
204 pfp = util.popen(' '.join(cmd))
205 peek = pfp.readline()
205 peek = pfp.readline()
@@ -378,7 +378,7 b' def createlog(ui, directory=None, root="'
378 e.revision[-1] == 1 and # 1.1 or 1.1.x.1
378 e.revision[-1] == 1 and # 1.1 or 1.1.x.1
379 len(e.comment) == 1 and
379 len(e.comment) == 1 and
380 file_added_re.match(e.comment[0])):
380 file_added_re.match(e.comment[0])):
381 ui.debug(_('found synthetic revision in %s: %r\n')
381 ui.debug('found synthetic revision in %s: %r\n'
382 % (e.rcs, e.comment[0]))
382 % (e.rcs, e.comment[0]))
383 e.synthetic = True
383 e.synthetic = True
384
384
@@ -75,7 +75,7 b' class darcs_source(converter_source, com'
75 self.parents[child] = []
75 self.parents[child] = []
76
76
77 def after(self):
77 def after(self):
78 self.ui.debug(_('cleaning up %s\n') % self.tmppath)
78 self.ui.debug('cleaning up %s\n' % self.tmppath)
79 shutil.rmtree(self.tmppath, ignore_errors=True)
79 shutil.rmtree(self.tmppath, ignore_errors=True)
80
80
81 def xml(self, cmd, **kwargs):
81 def xml(self, cmd, **kwargs):
@@ -85,6 +85,17 b' class darcs_source(converter_source, com'
85 self.checkexit(fp.close())
85 self.checkexit(fp.close())
86 return etree.getroot()
86 return etree.getroot()
87
87
88 def manifest(self):
89 man = []
90 output, status = self.run('show', 'files', no_directories=True,
91 repodir=self.tmppath)
92 self.checkexit(status)
93 for line in output.split('\n'):
94 path = line[2:]
95 if path:
96 man.append(path)
97 return man
98
88 def getheads(self):
99 def getheads(self):
89 return self.parents[None]
100 return self.parents[None]
90
101
@@ -107,18 +118,35 b' class darcs_source(converter_source, com'
107 output, status = self.run('revert', all=True, repodir=self.tmppath)
118 output, status = self.run('revert', all=True, repodir=self.tmppath)
108 self.checkexit(status, output)
119 self.checkexit(status, output)
109
120
110 def getchanges(self, rev):
121 def getchanges(self, rev):
111 self.pull(rev)
112 copies = {}
122 copies = {}
113 changes = []
123 changes = []
124 man = None
114 for elt in self.changes[rev].find('summary').getchildren():
125 for elt in self.changes[rev].find('summary').getchildren():
115 if elt.tag in ('add_directory', 'remove_directory'):
126 if elt.tag in ('add_directory', 'remove_directory'):
116 continue
127 continue
117 if elt.tag == 'move':
128 if elt.tag == 'move':
118 changes.append((elt.get('from'), rev))
129 if man is None:
119 copies[elt.get('from')] = elt.get('to')
130 man = self.manifest()
131 source, dest = elt.get('from'), elt.get('to')
132 if source in man:
133 # File move
134 changes.append((source, rev))
135 changes.append((dest, rev))
136 copies[dest] = source
137 else:
138 # Directory move, deduce file moves from manifest
139 source = source + '/'
140 for f in man:
141 if not f.startswith(source):
142 continue
143 fdest = dest + '/' + f[len(source):]
144 changes.append((f, rev))
145 changes.append((fdest, rev))
146 copies[fdest] = f
120 else:
147 else:
121 changes.append((elt.text.strip(), rev))
148 changes.append((elt.text.strip(), rev))
149 self.pull(rev)
122 self.lastrev = rev
150 self.lastrev = rev
123 return sorted(changes), copies
151 return sorted(changes), copies
124
152
@@ -125,7 +125,7 b' class gnuarch_source(converter_source, c'
125 break
125 break
126
126
127 def after(self):
127 def after(self):
128 self.ui.debug(_('cleaning up %s\n') % self.tmppath)
128 self.ui.debug('cleaning up %s\n' % self.tmppath)
129 shutil.rmtree(self.tmppath, ignore_errors=True)
129 shutil.rmtree(self.tmppath, ignore_errors=True)
130
130
131 def getheads(self):
131 def getheads(self):
@@ -195,7 +195,7 b' class gnuarch_source(converter_source, c'
195 return os.system(cmdline)
195 return os.system(cmdline)
196
196
197 def _update(self, rev):
197 def _update(self, rev):
198 self.ui.debug(_('applying revision %s...\n') % rev)
198 self.ui.debug('applying revision %s...\n' % rev)
199 changeset, status = self.runlines('replay', '-d', self.tmppath,
199 changeset, status = self.runlines('replay', '-d', self.tmppath,
200 rev)
200 rev)
201 if status:
201 if status:
@@ -205,7 +205,7 b' class gnuarch_source(converter_source, c'
205 self._obtainrevision(rev)
205 self._obtainrevision(rev)
206 else:
206 else:
207 old_rev = self.parents[rev][0]
207 old_rev = self.parents[rev][0]
208 self.ui.debug(_('computing changeset between %s and %s...\n')
208 self.ui.debug('computing changeset between %s and %s...\n'
209 % (old_rev, rev))
209 % (old_rev, rev))
210 self._parsechangeset(changeset, rev)
210 self._parsechangeset(changeset, rev)
211
211
@@ -254,10 +254,10 b' class gnuarch_source(converter_source, c'
254 return changes, copies
254 return changes, copies
255
255
256 def _obtainrevision(self, rev):
256 def _obtainrevision(self, rev):
257 self.ui.debug(_('obtaining revision %s...\n') % rev)
257 self.ui.debug('obtaining revision %s...\n' % rev)
258 output = self._execute('get', rev, self.tmppath)
258 output = self._execute('get', rev, self.tmppath)
259 self.checkexit(output)
259 self.checkexit(output)
260 self.ui.debug(_('analyzing revision %s...\n') % rev)
260 self.ui.debug('analyzing revision %s...\n' % rev)
261 files = self._readcontents(self.tmppath)
261 files = self._readcontents(self.tmppath)
262 self.changes[rev].add_files += files
262 self.changes[rev].add_files += files
263
263
@@ -55,12 +55,12 b' class mercurial_sink(converter_sink):'
55 self.filemapmode = False
55 self.filemapmode = False
56
56
57 def before(self):
57 def before(self):
58 self.ui.debug(_('run hg sink pre-conversion action\n'))
58 self.ui.debug('run hg sink pre-conversion action\n')
59 self.wlock = self.repo.wlock()
59 self.wlock = self.repo.wlock()
60 self.lock = self.repo.lock()
60 self.lock = self.repo.lock()
61
61
62 def after(self):
62 def after(self):
63 self.ui.debug(_('run hg sink post-conversion action\n'))
63 self.ui.debug('run hg sink post-conversion action\n')
64 self.lock.release()
64 self.lock.release()
65 self.wlock.release()
65 self.wlock.release()
66
66
@@ -248,8 +248,7 b' class mercurial_source(converter_source)'
248 return self.lastctx
248 return self.lastctx
249
249
250 def parents(self, ctx):
250 def parents(self, ctx):
251 return [p.node() for p in ctx.parents()
251 return [p for p in ctx.parents() if p and self.keep(p.node())]
252 if p and self.keep(p.node())]
253
252
254 def getheads(self):
253 def getheads(self):
255 if self.rev:
254 if self.rev:
@@ -275,20 +274,20 b' class mercurial_source(converter_source)'
275 if self.ignoreerrors:
274 if self.ignoreerrors:
276 # calling getcopies() is a simple way to detect missing
275 # calling getcopies() is a simple way to detect missing
277 # revlogs and populate self.ignored
276 # revlogs and populate self.ignored
278 self.getcopies(ctx, files)
277 self.getcopies(ctx, parents, files)
279 return [(f, rev) for f in files if f not in self.ignored], {}
278 return [(f, rev) for f in files if f not in self.ignored], {}
280 if self._changescache and self._changescache[0] == rev:
279 if self._changescache and self._changescache[0] == rev:
281 m, a, r = self._changescache[1]
280 m, a, r = self._changescache[1]
282 else:
281 else:
283 m, a, r = self.repo.status(parents[0], ctx.node())[:3]
282 m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3]
284 # getcopies() detects missing revlogs early, run it before
283 # getcopies() detects missing revlogs early, run it before
285 # filtering the changes.
284 # filtering the changes.
286 copies = self.getcopies(ctx, m + a)
285 copies = self.getcopies(ctx, parents, m + a)
287 changes = [(name, rev) for name in m + a + r
286 changes = [(name, rev) for name in m + a + r
288 if name not in self.ignored]
287 if name not in self.ignored]
289 return sorted(changes), copies
288 return sorted(changes), copies
290
289
291 def getcopies(self, ctx, files):
290 def getcopies(self, ctx, parents, files):
292 copies = {}
291 copies = {}
293 for name in files:
292 for name in files:
294 if name in self.ignored:
293 if name in self.ignored:
@@ -297,6 +296,14 b' class mercurial_source(converter_source)'
297 copysource, copynode = ctx.filectx(name).renamed()
296 copysource, copynode = ctx.filectx(name).renamed()
298 if copysource in self.ignored or not self.keep(copynode):
297 if copysource in self.ignored or not self.keep(copynode):
299 continue
298 continue
299 # Ignore copy sources not in parent revisions
300 found = False
301 for p in parents:
302 if copysource in p:
303 found = True
304 break
305 if not found:
306 continue
300 copies[name] = copysource
307 copies[name] = copysource
301 except TypeError:
308 except TypeError:
302 pass
309 pass
@@ -309,7 +316,7 b' class mercurial_source(converter_source)'
309
316
310 def getcommit(self, rev):
317 def getcommit(self, rev):
311 ctx = self.changectx(rev)
318 ctx = self.changectx(rev)
312 parents = [hex(p) for p in self.parents(ctx)]
319 parents = [p.hex() for p in self.parents(ctx)]
313 if self.saverev:
320 if self.saverev:
314 crev = rev
321 crev = rev
315 else:
322 else:
@@ -332,7 +339,7 b' class mercurial_source(converter_source)'
332 changes = [], ctx.manifest().keys(), []
339 changes = [], ctx.manifest().keys(), []
333 else:
340 else:
334 i = i or 0
341 i = i or 0
335 changes = self.repo.status(parents[i], ctx.node())[:3]
342 changes = self.repo.status(parents[i].node(), ctx.node())[:3]
336 changes = [[f for f in l if f not in self.ignored] for l in changes]
343 changes = [[f for f in l if f not in self.ignored] for l in changes]
337
344
338 if i == 0:
345 if i == 0:
@@ -348,10 +355,10 b' class mercurial_source(converter_source)'
348 self.convertfp.flush()
355 self.convertfp.flush()
349
356
350 def before(self):
357 def before(self):
351 self.ui.debug(_('run hg source pre-conversion action\n'))
358 self.ui.debug('run hg source pre-conversion action\n')
352
359
353 def after(self):
360 def after(self):
354 self.ui.debug(_('run hg source post-conversion action\n'))
361 self.ui.debug('run hg source post-conversion action\n')
355
362
356 def hasnativeorder(self):
363 def hasnativeorder(self):
357 return True
364 return True
@@ -53,7 +53,7 b' class p4_source(converter_source):'
53 def _parse_view(self, path):
53 def _parse_view(self, path):
54 "Read changes affecting the path"
54 "Read changes affecting the path"
55 cmd = 'p4 -G changes -s submitted "%s"' % path
55 cmd = 'p4 -G changes -s submitted "%s"' % path
56 stdout = util.popen(cmd)
56 stdout = util.popen(cmd, mode='rb')
57 for d in loaditer(stdout):
57 for d in loaditer(stdout):
58 c = d.get("change", None)
58 c = d.get("change", None)
59 if c:
59 if c:
@@ -72,7 +72,7 b' class p4_source(converter_source):'
72 views = {"//": ""}
72 views = {"//": ""}
73 else:
73 else:
74 cmd = 'p4 -G client -o "%s"' % path
74 cmd = 'p4 -G client -o "%s"' % path
75 clientspec = marshal.load(util.popen(cmd))
75 clientspec = marshal.load(util.popen(cmd, mode='rb'))
76
76
77 views = {}
77 views = {}
78 for client in clientspec:
78 for client in clientspec:
@@ -105,7 +105,7 b' class p4_source(converter_source):'
105 lastid = None
105 lastid = None
106 for change in self.p4changes:
106 for change in self.p4changes:
107 cmd = "p4 -G describe %s" % change
107 cmd = "p4 -G describe %s" % change
108 stdout = util.popen(cmd)
108 stdout = util.popen(cmd, mode='rb')
109 d = marshal.load(stdout)
109 d = marshal.load(stdout)
110
110
111 desc = self.recode(d["desc"])
111 desc = self.recode(d["desc"])
@@ -147,7 +147,7 b' class p4_source(converter_source):'
147
147
148 def getfile(self, name, rev):
148 def getfile(self, name, rev):
149 cmd = 'p4 -G print "%s#%s"' % (self.depotname[name], rev)
149 cmd = 'p4 -G print "%s#%s"' % (self.depotname[name], rev)
150 stdout = util.popen(cmd)
150 stdout = util.popen(cmd, mode='rb')
151
151
152 mode = None
152 mode = None
153 contents = ""
153 contents = ""
@@ -22,6 +22,7 b' from common import NoRepo, MissingTool, '
22 from common import commandline, converter_source, converter_sink, mapfile
22 from common import commandline, converter_source, converter_sink, mapfile
23
23
24 try:
24 try:
25 raise ImportError("SVN support disabled due to license incompatibility")
25 from svn.core import SubversionException, Pool
26 from svn.core import SubversionException, Pool
26 import svn
27 import svn
27 import svn.client
28 import svn.client
@@ -114,7 +115,11 b' class logstream(object):'
114
115
115 def __iter__(self):
116 def __iter__(self):
116 while True:
117 while True:
117 entry = pickle.load(self._stdout)
118 try:
119 entry = pickle.load(self._stdout)
120 except EOFError:
121 raise util.Abort(_('Mercurial failed to run itself, check'
122 ' hg executable is in PATH'))
118 try:
123 try:
119 orig_paths, revnum, author, date, message = entry
124 orig_paths, revnum, author, date, message = entry
120 except:
125 except:
@@ -152,11 +157,13 b" protomap = {'http': httpcheck,"
152 def issvnurl(url):
157 def issvnurl(url):
153 try:
158 try:
154 proto, path = url.split('://', 1)
159 proto, path = url.split('://', 1)
155 path = urllib.url2pathname(path)
160 if proto == 'file':
161 path = urllib.url2pathname(path)
156 except ValueError:
162 except ValueError:
157 proto = 'file'
163 proto = 'file'
158 path = os.path.abspath(url)
164 path = os.path.abspath(url)
159 path = path.replace(os.sep, '/')
165 if proto == 'file':
166 path = path.replace(os.sep, '/')
160 check = protomap.get(proto, lambda p, p2: False)
167 check = protomap.get(proto, lambda p, p2: False)
161 while '/' in path:
168 while '/' in path:
162 if check(path, proto):
169 if check(path, proto):
@@ -531,7 +538,7 b' class svn_source(converter_source):'
531 """
538 """
532 if not path.startswith(self.rootmodule):
539 if not path.startswith(self.rootmodule):
533 # Requests on foreign branches may be forbidden at server level
540 # Requests on foreign branches may be forbidden at server level
534 self.ui.debug(_('ignoring foreign branch %r\n') % path)
541 self.ui.debug('ignoring foreign branch %r\n' % path)
535 return None
542 return None
536
543
537 if not stop:
544 if not stop:
@@ -559,7 +566,7 b' class svn_source(converter_source):'
559 if not path.startswith(p) or not paths[p].copyfrom_path:
566 if not path.startswith(p) or not paths[p].copyfrom_path:
560 continue
567 continue
561 newpath = paths[p].copyfrom_path + path[len(p):]
568 newpath = paths[p].copyfrom_path + path[len(p):]
562 self.ui.debug(_("branch renamed from %s to %s at %d\n") %
569 self.ui.debug("branch renamed from %s to %s at %d\n" %
563 (path, newpath, revnum))
570 (path, newpath, revnum))
564 path = newpath
571 path = newpath
565 break
572 break
@@ -567,7 +574,7 b' class svn_source(converter_source):'
567 stream.close()
574 stream.close()
568
575
569 if not path.startswith(self.rootmodule):
576 if not path.startswith(self.rootmodule):
570 self.ui.debug(_('ignoring foreign branch %r\n') % path)
577 self.ui.debug('ignoring foreign branch %r\n' % path)
571 return None
578 return None
572 return self.revid(dirent.created_rev, path)
579 return self.revid(dirent.created_rev, path)
573
580
@@ -579,7 +586,7 b' class svn_source(converter_source):'
579 prevmodule = self.prevmodule
586 prevmodule = self.prevmodule
580 if prevmodule is None:
587 if prevmodule is None:
581 prevmodule = ''
588 prevmodule = ''
582 self.ui.debug(_("reparent to %s\n") % svnurl)
589 self.ui.debug("reparent to %s\n" % svnurl)
583 svn.ra.reparent(self.ra, svnurl)
590 svn.ra.reparent(self.ra, svnurl)
584 self.prevmodule = module
591 self.prevmodule = module
585 return prevmodule
592 return prevmodule
@@ -612,14 +619,14 b' class svn_source(converter_source):'
612 copyfrom_path = self.getrelpath(ent.copyfrom_path, pmodule)
619 copyfrom_path = self.getrelpath(ent.copyfrom_path, pmodule)
613 if not copyfrom_path:
620 if not copyfrom_path:
614 continue
621 continue
615 self.ui.debug(_("copied to %s from %s@%s\n") %
622 self.ui.debug("copied to %s from %s@%s\n" %
616 (entrypath, copyfrom_path, ent.copyfrom_rev))
623 (entrypath, copyfrom_path, ent.copyfrom_rev))
617 copies[self.recode(entrypath)] = self.recode(copyfrom_path)
624 copies[self.recode(entrypath)] = self.recode(copyfrom_path)
618 elif kind == 0: # gone, but had better be a deleted *file*
625 elif kind == 0: # gone, but had better be a deleted *file*
619 self.ui.debug(_("gone from %s\n") % ent.copyfrom_rev)
626 self.ui.debug("gone from %s\n" % ent.copyfrom_rev)
620 pmodule, prevnum = self.revsplit(parents[0])[1:]
627 pmodule, prevnum = self.revsplit(parents[0])[1:]
621 parentpath = pmodule + "/" + entrypath
628 parentpath = pmodule + "/" + entrypath
622 self.ui.debug(_("entry %s\n") % parentpath)
629 self.ui.debug("entry %s\n" % parentpath)
623
630
624 # We can avoid the reparent calls if the module has
631 # We can avoid the reparent calls if the module has
625 # not changed but it probably does not worth the pain.
632 # not changed but it probably does not worth the pain.
@@ -646,7 +653,7 b' class svn_source(converter_source):'
646 del copies[childpath]
653 del copies[childpath]
647 entries.append(childpath)
654 entries.append(childpath)
648 else:
655 else:
649 self.ui.debug(_('unknown path in revision %d: %s\n') % \
656 self.ui.debug('unknown path in revision %d: %s\n' % \
650 (revnum, path))
657 (revnum, path))
651 elif kind == svn.core.svn_node_dir:
658 elif kind == svn.core.svn_node_dir:
652 # If the directory just had a prop change,
659 # If the directory just had a prop change,
@@ -679,7 +686,7 b' class svn_source(converter_source):'
679 if not copyfrompath:
686 if not copyfrompath:
680 continue
687 continue
681 copyfrom[path] = ent
688 copyfrom[path] = ent
682 self.ui.debug(_("mark %s came from %s:%d\n")
689 self.ui.debug("mark %s came from %s:%d\n"
683 % (path, copyfrompath, ent.copyfrom_rev))
690 % (path, copyfrompath, ent.copyfrom_rev))
684 children = self._find_children(ent.copyfrom_path, ent.copyfrom_rev)
691 children = self._find_children(ent.copyfrom_path, ent.copyfrom_rev)
685 children.sort()
692 children.sort()
@@ -703,7 +710,7 b' class svn_source(converter_source):'
703 """Return the parsed commit object or None, and True if
710 """Return the parsed commit object or None, and True if
704 the revision is a branch root.
711 the revision is a branch root.
705 """
712 """
706 self.ui.debug(_("parsing revision %d (%d changes)\n") %
713 self.ui.debug("parsing revision %d (%d changes)\n" %
707 (revnum, len(orig_paths)))
714 (revnum, len(orig_paths)))
708
715
709 branched = False
716 branched = False
@@ -732,7 +739,7 b' class svn_source(converter_source):'
732 self.ui.note(_('found parent of branch %s at %d: %s\n') %
739 self.ui.note(_('found parent of branch %s at %d: %s\n') %
733 (self.module, prevnum, prevmodule))
740 (self.module, prevnum, prevmodule))
734 else:
741 else:
735 self.ui.debug(_("no copyfrom path, don't know what to do.\n"))
742 self.ui.debug("no copyfrom path, don't know what to do.\n")
736
743
737 paths = []
744 paths = []
738 # filter out unrelated paths
745 # filter out unrelated paths
@@ -785,7 +792,7 b' class svn_source(converter_source):'
785 lastonbranch = True
792 lastonbranch = True
786 break
793 break
787 if not paths:
794 if not paths:
788 self.ui.debug(_('revision %d has no entries\n') % revnum)
795 self.ui.debug('revision %d has no entries\n' % revnum)
789 continue
796 continue
790 cset, lastonbranch = parselogentry(paths, revnum, author,
797 cset, lastonbranch = parselogentry(paths, revnum, author,
791 date, message)
798 date, message)
@@ -867,7 +874,7 b' class svn_source(converter_source):'
867 return relative
874 return relative
868
875
869 # The path is outside our tracked tree...
876 # The path is outside our tracked tree...
870 self.ui.debug(_('%r is not under %r, ignoring\n') % (path, module))
877 self.ui.debug('%r is not under %r, ignoring\n' % (path, module))
871 return None
878 return None
872
879
873 def _checkpath(self, path, revnum):
880 def _checkpath(self, path, revnum):
@@ -42,9 +42,9 b' fast (at least faster than having to com'
42 '''
42 '''
43
43
44 from mercurial.i18n import _
44 from mercurial.i18n import _
45 from mercurial.node import short
45 from mercurial.node import short, nullid
46 from mercurial import cmdutil, util, commands
46 from mercurial import cmdutil, util, commands
47 import os, shlex, shutil, tempfile
47 import os, shlex, shutil, tempfile, re
48
48
49 def snapshot(ui, repo, files, node, tmproot):
49 def snapshot(ui, repo, files, node, tmproot):
50 '''snapshot files as of some revision
50 '''snapshot files as of some revision
@@ -69,7 +69,7 b' def snapshot(ui, repo, files, node, tmpr'
69 for fn in files:
69 for fn in files:
70 wfn = util.pconvert(fn)
70 wfn = util.pconvert(fn)
71 if not wfn in ctx:
71 if not wfn in ctx:
72 # skipping new file after a merge ?
72 # File doesn't exist; could be a bogus modify
73 continue
73 continue
74 ui.note(' %s\n' % wfn)
74 ui.note(' %s\n' % wfn)
75 dest = os.path.join(base, wfn)
75 dest = os.path.join(base, wfn)
@@ -96,59 +96,102 b' def dodiff(ui, repo, diffcmd, diffopts, '
96
96
97 revs = opts.get('rev')
97 revs = opts.get('rev')
98 change = opts.get('change')
98 change = opts.get('change')
99 args = ' '.join(diffopts)
100 do3way = '$parent2' in args
99
101
100 if revs and change:
102 if revs and change:
101 msg = _('cannot specify --rev and --change at the same time')
103 msg = _('cannot specify --rev and --change at the same time')
102 raise util.Abort(msg)
104 raise util.Abort(msg)
103 elif change:
105 elif change:
104 node2 = repo.lookup(change)
106 node2 = repo.lookup(change)
105 node1 = repo[node2].parents()[0].node()
107 node1a, node1b = repo.changelog.parents(node2)
106 else:
108 else:
107 node1, node2 = cmdutil.revpair(repo, revs)
109 node1a, node2 = cmdutil.revpair(repo, revs)
110 if not revs:
111 node1b = repo.dirstate.parents()[1]
112 else:
113 node1b = nullid
114
115 # Disable 3-way merge if there is only one parent
116 if do3way:
117 if node1b == nullid:
118 do3way = False
108
119
109 matcher = cmdutil.match(repo, pats, opts)
120 matcher = cmdutil.match(repo, pats, opts)
110 modified, added, removed = repo.status(node1, node2, matcher)[:3]
121 mod_a, add_a, rem_a = map(set, repo.status(node1a, node2, matcher)[:3])
111 if not (modified or added or removed):
122 if do3way:
112 return 0
123 mod_b, add_b, rem_b = map(set, repo.status(node1b, node2, matcher)[:3])
124 else:
125 mod_b, add_b, rem_b = set(), set(), set()
126 modadd = mod_a | add_a | mod_b | add_b
127 common = modadd | rem_a | rem_b
128 if not common:
129 return 0
113
130
114 tmproot = tempfile.mkdtemp(prefix='extdiff.')
131 tmproot = tempfile.mkdtemp(prefix='extdiff.')
115 dir2root = ''
116 try:
132 try:
117 # Always make a copy of node1
133 # Always make a copy of node1a (and node1b, if applicable)
118 dir1 = snapshot(ui, repo, modified + removed, node1, tmproot)[0]
134 dir1a_files = mod_a | rem_a | ((mod_b | add_b) - add_a)
119 changes = len(modified) + len(removed) + len(added)
135 dir1a = snapshot(ui, repo, dir1a_files, node1a, tmproot)[0]
136 if do3way:
137 dir1b_files = mod_b | rem_b | ((mod_a | add_a) - add_b)
138 dir1b = snapshot(ui, repo, dir1b_files, node1b, tmproot)[0]
139 else:
140 dir1b = None
141
142 fns_and_mtime = []
120
143
121 # If node2 in not the wc or there is >1 change, copy it
144 # If node2 in not the wc or there is >1 change, copy it
122 if node2 or changes > 1:
145 dir2root = ''
123 dir2, fns_and_mtime = snapshot(ui, repo, modified + added, node2, tmproot)
146 if node2:
147 dir2 = snapshot(ui, repo, modadd, node2, tmproot)[0]
148 elif len(common) > 1:
149 #we only actually need to get the files to copy back to the working
150 #dir in this case (because the other cases are: diffing 2 revisions
151 #or single file -- in which case the file is already directly passed
152 #to the diff tool).
153 dir2, fns_and_mtime = snapshot(ui, repo, modadd, None, tmproot)
124 else:
154 else:
125 # This lets the diff tool open the changed file directly
155 # This lets the diff tool open the changed file directly
126 dir2 = ''
156 dir2 = ''
127 dir2root = repo.root
157 dir2root = repo.root
128 fns_and_mtime = []
129
158
130 # If only one change, diff the files instead of the directories
159 # If only one change, diff the files instead of the directories
131 if changes == 1 :
160 # Handle bogus modifies correctly by checking if the files exist
132 if len(modified):
161 if len(common) == 1:
133 dir1 = os.path.join(dir1, util.localpath(modified[0]))
162 common_file = util.localpath(common.pop())
134 dir2 = os.path.join(dir2root, dir2, util.localpath(modified[0]))
163 dir1a = os.path.join(dir1a, common_file)
135 elif len(removed) :
164 if not os.path.isfile(os.path.join(tmproot, dir1a)):
136 dir1 = os.path.join(dir1, util.localpath(removed[0]))
165 dir1a = os.devnull
137 dir2 = os.devnull
166 if do3way:
138 else:
167 dir1b = os.path.join(dir1b, common_file)
139 dir1 = os.devnull
168 if not os.path.isfile(os.path.join(tmproot, dir1b)):
140 dir2 = os.path.join(dir2root, dir2, util.localpath(added[0]))
169 dir1b = os.devnull
170 dir2 = os.path.join(dir2root, dir2, common_file)
141
171
142 cmdline = ('%s %s %s %s' %
172 # Function to quote file/dir names in the argument string
143 (util.shellquote(diffcmd), ' '.join(diffopts),
173 # When not operating in 3-way mode, an empty string is returned for parent2
144 util.shellquote(dir1), util.shellquote(dir2)))
174 replace = dict(parent=dir1a, parent1=dir1a, parent2=dir1b, child=dir2)
145 ui.debug(_('running %r in %s\n') % (cmdline, tmproot))
175 def quote(match):
176 key = match.group()[1:]
177 if not do3way and key == 'parent2':
178 return ''
179 return util.shellquote(replace[key])
180
181 # Match parent2 first, so 'parent1?' will match both parent1 and parent
182 regex = '\$(parent2|parent1?|child)'
183 if not do3way and not re.search(regex, args):
184 args += ' $parent1 $child'
185 args = re.sub(regex, quote, args)
186 cmdline = util.shellquote(diffcmd) + ' ' + args
187
188 ui.debug('running %r in %s\n' % (cmdline, tmproot))
146 util.system(cmdline, cwd=tmproot)
189 util.system(cmdline, cwd=tmproot)
147
190
148 for copy_fn, working_fn, mtime in fns_and_mtime:
191 for copy_fn, working_fn, mtime in fns_and_mtime:
149 if os.path.getmtime(copy_fn) != mtime:
192 if os.path.getmtime(copy_fn) != mtime:
150 ui.debug(_('file changed while diffing. '
193 ui.debug('file changed while diffing. '
151 'Overwriting: %s (src: %s)\n') % (working_fn, copy_fn))
194 'Overwriting: %s (src: %s)\n' % (working_fn, copy_fn))
152 util.copyfile(copy_fn, working_fn)
195 util.copyfile(copy_fn, working_fn)
153
196
154 return 1
197 return 1
@@ -173,11 +216,11 b' def extdiff(ui, repo, *pats, **opts):'
173 that revision is compared to the working directory, and, when no
216 that revision is compared to the working directory, and, when no
174 revisions are specified, the working directory files are compared
217 revisions are specified, the working directory files are compared
175 to its parent.'''
218 to its parent.'''
176 program = opts['program'] or 'diff'
219 program = opts.get('program')
177 if opts['program']:
220 option = opts.get('option')
178 option = opts['option']
221 if not program:
179 else:
222 program = 'diff'
180 option = opts['option'] or ['-Npru']
223 option = option or ['-Npru']
181 return dodiff(ui, repo, program, option, pats, opts)
224 return dodiff(ui, repo, program, option, pats, opts)
182
225
183 cmdtable = {
226 cmdtable = {
@@ -229,10 +229,10 b' def hook(ui, repo, hooktype, node=None, '
229 n = bin(node)
229 n = bin(node)
230 cia = hgcia(ui, repo)
230 cia = hgcia(ui, repo)
231 if not cia.user:
231 if not cia.user:
232 ui.debug(_('cia: no user specified'))
232 ui.debug('cia: no user specified')
233 return
233 return
234 if not cia.project:
234 if not cia.project:
235 ui.debug(_('cia: no project specified'))
235 ui.debug('cia: no project specified')
236 return
236 return
237 if hooktype == 'changegroup':
237 if hooktype == 'changegroup':
238 start = repo.changelog.rev(n)
238 start = repo.changelog.rev(n)
@@ -308,7 +308,7 b' def view(ui, repo, *etc, **opts):'
308 os.chdir(repo.root)
308 os.chdir(repo.root)
309 optstr = ' '.join(['--%s %s' % (k, v) for k, v in opts.iteritems() if v])
309 optstr = ' '.join(['--%s %s' % (k, v) for k, v in opts.iteritems() if v])
310 cmd = ui.config("hgk", "path", "hgk") + " %s %s" % (optstr, " ".join(etc))
310 cmd = ui.config("hgk", "path", "hgk") + " %s %s" % (optstr, " ".join(etc))
311 ui.debug(_("running %s\n") % cmd)
311 ui.debug("running %s\n" % cmd)
312 util.system(cmd)
312 util.system(cmd)
313
313
314 cmdtable = {
314 cmdtable = {
@@ -17,28 +17,7 b' from client import client, QueryFailed'
17
17
18 def serve(ui, repo, **opts):
18 def serve(ui, repo, **opts):
19 '''start an inotify server for this repository'''
19 '''start an inotify server for this repository'''
20 timeout = opts.get('timeout')
20 server.start(ui, repo.dirstate, repo.root, opts)
21 if timeout:
22 timeout = float(timeout) * 1e3
23
24 class service(object):
25 def init(self):
26 try:
27 self.master = server.master(ui, repo.dirstate,
28 repo.root, timeout)
29 except server.AlreadyStartedException, inst:
30 raise util.Abort(str(inst))
31
32 def run(self):
33 try:
34 self.master.run()
35 finally:
36 self.master.shutdown()
37
38 service = service()
39 logfile = ui.config('inotify', 'log')
40 cmdutil.service(opts, initfn=service.init, runfn=service.run,
41 logfile=logfile)
42
21
43 def debuginotify(ui, repo, **opts):
22 def debuginotify(ui, repo, **opts):
44 '''debugging information for inotify extension
23 '''debugging information for inotify extension
@@ -31,10 +31,11 b' def start_server(function):'
31 'removing it)\n'))
31 'removing it)\n'))
32 os.unlink(os.path.join(self.root, '.hg', 'inotify.sock'))
32 os.unlink(os.path.join(self.root, '.hg', 'inotify.sock'))
33 if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart:
33 if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart:
34 self.ui.debug(_('(starting inotify server)\n'))
34 self.ui.debug('(starting inotify server)\n')
35 try:
35 try:
36 try:
36 try:
37 server.start(self.ui, self.dirstate, self.root)
37 server.start(self.ui, self.dirstate, self.root,
38 dict(daemon=True, daemon_pipefds=''))
38 except server.AlreadyStartedException, inst:
39 except server.AlreadyStartedException, inst:
39 # another process may have started its own
40 # another process may have started its own
40 # inotify server while this one was starting.
41 # inotify server while this one was starting.
@@ -50,7 +51,7 b' def start_server(function):'
50 'server: %s\n') % err[-1])
51 'server: %s\n') % err[-1])
51 elif err[0] in (errno.ECONNREFUSED, errno.ENOENT):
52 elif err[0] in (errno.ECONNREFUSED, errno.ENOENT):
52 # silently ignore normal errors if autostart is False
53 # silently ignore normal errors if autostart is False
53 self.ui.debug(_('(inotify server not running)\n'))
54 self.ui.debug('(inotify server not running)\n')
54 else:
55 else:
55 self.ui.warn(_('failed to contact inotify server: %s\n')
56 self.ui.warn(_('failed to contact inotify server: %s\n')
56 % err[-1])
57 % err[-1])
@@ -7,7 +7,7 b''
7 # GNU General Public License version 2, incorporated herein by reference.
7 # GNU General Public License version 2, incorporated herein by reference.
8
8
9 from mercurial.i18n import _
9 from mercurial.i18n import _
10 from mercurial import osutil, util
10 from mercurial import cmdutil, osutil, util
11 import common
11 import common
12 import errno, os, select, socket, stat, struct, sys, tempfile, time
12 import errno, os, select, socket, stat, struct, sys, tempfile, time
13
13
@@ -823,52 +823,29 b' class master(object):'
823 sys.exit(0)
823 sys.exit(0)
824 pollable.run()
824 pollable.run()
825
825
826 def start(ui, dirstate, root):
826 def start(ui, dirstate, root, opts):
827 def closefds(ignore):
827 timeout = opts.get('timeout')
828 # (from python bug #1177468)
828 if timeout:
829 # close all inherited file descriptors
829 timeout = float(timeout) * 1e3
830 # Python 2.4.1 and later use /dev/urandom to seed the random module's RNG
830
831 # a file descriptor is kept internally as os._urandomfd (created on demand
831 class service(object):
832 # the first time os.urandom() is called), and should not be closed
832 def init(self):
833 try:
834 os.urandom(4)
835 urandom_fd = getattr(os, '_urandomfd', None)
836 except AttributeError:
837 urandom_fd = None
838 ignore.append(urandom_fd)
839 for fd in range(3, 256):
840 if fd in ignore:
841 continue
842 try:
833 try:
843 os.close(fd)
834 self.master = master(ui, dirstate, root, timeout)
844 except OSError:
835 except AlreadyStartedException, inst:
845 pass
836 raise util.Abort(str(inst))
846
847 m = master(ui, dirstate, root)
848 sys.stdout.flush()
849 sys.stderr.flush()
850
837
851 pid = os.fork()
838 def run(self):
852 if pid:
839 try:
853 return pid
840 self.master.run()
854
841 finally:
855 closefds(pollable.instances.keys())
842 self.master.shutdown()
856 os.setsid()
857
858 fd = os.open('/dev/null', os.O_RDONLY)
859 os.dup2(fd, 0)
860 if fd > 0:
861 os.close(fd)
862
843
863 fd = os.open(ui.config('inotify', 'log', '/dev/null'),
844 runargs = None
864 os.O_RDWR | os.O_CREAT | os.O_TRUNC)
845 if 'inserve' not in sys.argv:
865 os.dup2(fd, 1)
846 runargs = [sys.argv[0], 'inserve', '-R', root]
866 os.dup2(fd, 2)
867 if fd > 2:
868 os.close(fd)
869
847
870 try:
848 service = service()
871 m.run()
849 logfile = ui.config('inotify', 'log')
872 finally:
850 cmdutil.service(opts, initfn=service.init, runfn=service.run,
873 m.shutdown()
851 logfile=logfile, runargs=runargs)
874 os._exit(0)
@@ -244,12 +244,14 b' class kwfilelog(filelog.filelog):'
244 return t2 != text
244 return t2 != text
245 return revlog.revlog.cmp(self, node, text)
245 return revlog.revlog.cmp(self, node, text)
246
246
247 def _status(ui, repo, kwt, unknown, *pats, **opts):
247 def _status(ui, repo, kwt, *pats, **opts):
248 '''Bails out if [keyword] configuration is not active.
248 '''Bails out if [keyword] configuration is not active.
249 Returns status of working directory.'''
249 Returns status of working directory.'''
250 if kwt:
250 if kwt:
251 match = cmdutil.match(repo, pats, opts)
251 unknown = (opts.get('unknown') or opts.get('all')
252 return repo.status(match=match, unknown=unknown, clean=True)
252 or opts.get('untracked'))
253 return repo.status(match=cmdutil.match(repo, pats, opts), clean=True,
254 unknown=unknown)
253 if ui.configitems('keyword'):
255 if ui.configitems('keyword'):
254 raise util.Abort(_('[keyword] patterns cannot match'))
256 raise util.Abort(_('[keyword] patterns cannot match'))
255 raise util.Abort(_('no [keyword] patterns configured'))
257 raise util.Abort(_('no [keyword] patterns configured'))
@@ -259,7 +261,7 b' def _kwfwrite(ui, repo, expand, *pats, *'
259 if repo.dirstate.parents()[1] != nullid:
261 if repo.dirstate.parents()[1] != nullid:
260 raise util.Abort(_('outstanding uncommitted merge'))
262 raise util.Abort(_('outstanding uncommitted merge'))
261 kwt = kwtools['templater']
263 kwt = kwtools['templater']
262 status = _status(ui, repo, kwt, False, *pats, **opts)
264 status = _status(ui, repo, kwt, *pats, **opts)
263 modified, added, removed, deleted = status[:4]
265 modified, added, removed, deleted = status[:4]
264 if modified or added or removed or deleted:
266 if modified or added or removed or deleted:
265 raise util.Abort(_('outstanding uncommitted changes'))
267 raise util.Abort(_('outstanding uncommitted changes'))
@@ -354,7 +356,7 b' def demo(ui, repo, *args, **opts):'
354 repo.commit(text=msg)
356 repo.commit(text=msg)
355 ui.status(_('\n\tkeywords expanded\n'))
357 ui.status(_('\n\tkeywords expanded\n'))
356 ui.write(repo.wread(fn))
358 ui.write(repo.wread(fn))
357 ui.debug(_('\nremoving temporary repository %s\n') % tmpdir)
359 ui.debug('\nremoving temporary repository %s\n' % tmpdir)
358 shutil.rmtree(tmpdir, ignore_errors=True)
360 shutil.rmtree(tmpdir, ignore_errors=True)
359
361
360 def expand(ui, repo, *pats, **opts):
362 def expand(ui, repo, *pats, **opts):
@@ -380,30 +382,32 b' def files(ui, repo, *pats, **opts):'
380 See "hg help keyword" on how to construct patterns both for
382 See "hg help keyword" on how to construct patterns both for
381 inclusion and exclusion of files.
383 inclusion and exclusion of files.
382
384
383 Use -u/--untracked to list untracked files as well.
385 With -A/--all and -v/--verbose the codes used to show the status
384
385 With -a/--all and -v/--verbose the codes used to show the status
386 of files are::
386 of files are::
387
387
388 K = keyword expansion candidate
388 K = keyword expansion candidate
389 k = keyword expansion candidate (untracked)
389 k = keyword expansion candidate (not tracked)
390 I = ignored
390 I = ignored
391 i = ignored (untracked)
391 i = ignored (not tracked)
392 '''
392 '''
393 kwt = kwtools['templater']
393 kwt = kwtools['templater']
394 status = _status(ui, repo, kwt, opts.get('untracked'), *pats, **opts)
394 status = _status(ui, repo, kwt, *pats, **opts)
395 cwd = pats and repo.getcwd() or ''
395 modified, added, removed, deleted, unknown, ignored, clean = status
396 modified, added, removed, deleted, unknown, ignored, clean = status
396 files = sorted(modified + added + clean)
397 files = []
398 if not (opts.get('unknown') or opts.get('untracked')) or opts.get('all'):
399 files = sorted(modified + added + clean)
397 wctx = repo[None]
400 wctx = repo[None]
398 kwfiles = [f for f in files if kwt.iskwfile(f, wctx.flags)]
401 kwfiles = [f for f in files if kwt.iskwfile(f, wctx.flags)]
399 kwuntracked = [f for f in unknown if kwt.iskwfile(f, wctx.flags)]
402 kwunknown = [f for f in unknown if kwt.iskwfile(f, wctx.flags)]
400 cwd = pats and repo.getcwd() or ''
403 if not opts.get('ignore') or opts.get('all'):
401 kwfstats = (not opts.get('ignore') and
404 showfiles = kwfiles, kwunknown
402 (('K', kwfiles), ('k', kwuntracked),) or ())
405 else:
406 showfiles = [], []
403 if opts.get('all') or opts.get('ignore'):
407 if opts.get('all') or opts.get('ignore'):
404 kwfstats += (('I', [f for f in files if f not in kwfiles]),
408 showfiles += ([f for f in files if f not in kwfiles],
405 ('i', [f for f in unknown if f not in kwuntracked]),)
409 [f for f in unknown if f not in kwunknown])
406 for char, filenames in kwfstats:
410 for char, filenames in zip('KkIi', showfiles):
407 fmt = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n'
411 fmt = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n'
408 for f in filenames:
412 for f in filenames:
409 ui.write(fmt % repo.pathto(f, cwd))
413 ui.write(fmt % repo.pathto(f, cwd))
@@ -545,9 +549,12 b' cmdtable = {'
545 _('hg kwexpand [OPTION]... [FILE]...')),
549 _('hg kwexpand [OPTION]... [FILE]...')),
546 'kwfiles':
550 'kwfiles':
547 (files,
551 (files,
548 [('a', 'all', None, _('show keyword status flags of all files')),
552 [('A', 'all', None, _('show keyword status flags of all files')),
549 ('i', 'ignore', None, _('show files excluded from expansion')),
553 ('i', 'ignore', None, _('show files excluded from expansion')),
550 ('u', 'untracked', None, _('additionally show untracked files')),
554 ('u', 'unknown', None, _('only show unknown (not tracked) files')),
555 ('a', 'all', None,
556 _('show keyword status flags of all files (DEPRECATED)')),
557 ('u', 'untracked', None, _('only show untracked files (DEPRECATED)')),
551 ] + commands.walkopts,
558 ] + commands.walkopts,
552 _('hg kwfiles [OPTION]... [FILE]...')),
559 _('hg kwfiles [OPTION]... [FILE]...')),
553 'kwshrink': (shrink, commands.walkopts,
560 'kwshrink': (shrink, commands.walkopts,
@@ -321,7 +321,7 b' class queue(object):'
321 if bad:
321 if bad:
322 raise util.Abort(bad)
322 raise util.Abort(bad)
323 guards = sorted(set(guards))
323 guards = sorted(set(guards))
324 self.ui.debug(_('active guards: %s\n') % ' '.join(guards))
324 self.ui.debug('active guards: %s\n' % ' '.join(guards))
325 self.active_guards = guards
325 self.active_guards = guards
326 self.guards_dirty = True
326 self.guards_dirty = True
327
327
@@ -997,6 +997,8 b' class queue(object):'
997 self.ui.warn(_('done\n'))
997 self.ui.warn(_('done\n'))
998 raise
998 raise
999
999
1000 if not self.applied:
1001 return ret[0]
1000 top = self.applied[-1].name
1002 top = self.applied[-1].name
1001 if ret[0] and ret[0] > 1:
1003 if ret[0] and ret[0] > 1:
1002 msg = _("errors during apply, please fix and refresh %s\n")
1004 msg = _("errors during apply, please fix and refresh %s\n")
@@ -2618,7 +2620,7 b' cmdtable = {'
2618 (pop,
2620 (pop,
2619 [('a', 'all', None, _('pop all patches')),
2621 [('a', 'all', None, _('pop all patches')),
2620 ('n', 'name', '', _('queue name to pop')),
2622 ('n', 'name', '', _('queue name to pop')),
2621 ('f', 'force', None, _('forget any local changes'))],
2623 ('f', 'force', None, _('forget any local changes to patched files'))],
2622 _('hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]')),
2624 _('hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]')),
2623 "^qpush":
2625 "^qpush":
2624 (push,
2626 (push,
@@ -43,6 +43,7 b' Optional configuration items::'
43 diffstat = True # add a diffstat before the diff content
43 diffstat = True # add a diffstat before the diff content
44 sources = serve # notify if source of incoming changes in this list
44 sources = serve # notify if source of incoming changes in this list
45 # (serve == ssh or http, push, pull, bundle)
45 # (serve == ssh or http, push, pull, bundle)
46 merge = False # send notification for merges (default True)
46 [email]
47 [email]
47 from = user@host.com # email address to send as if none given
48 from = user@host.com # email address to send as if none given
48 [web]
49 [web]
@@ -111,6 +112,7 b' class notifier(object):'
111 self.test = self.ui.configbool('notify', 'test', True)
112 self.test = self.ui.configbool('notify', 'test', True)
112 self.charsets = mail._charsets(self.ui)
113 self.charsets = mail._charsets(self.ui)
113 self.subs = self.subscribers()
114 self.subs = self.subscribers()
115 self.merge = self.ui.configbool('notify', 'merge', True)
114
116
115 mapfile = self.ui.config('notify', 'style')
117 mapfile = self.ui.config('notify', 'style')
116 template = (self.ui.config('notify', hooktype) or
118 template = (self.ui.config('notify', hooktype) or
@@ -165,11 +167,14 b' class notifier(object):'
165 def url(self, path=None):
167 def url(self, path=None):
166 return self.ui.config('web', 'baseurl') + (path or self.root)
168 return self.ui.config('web', 'baseurl') + (path or self.root)
167
169
168 def node(self, ctx):
170 def node(self, ctx, **props):
169 '''format one changeset.'''
171 '''format one changeset, unless it is a suppressed merge.'''
172 if not self.merge and len(ctx.parents()) > 1:
173 return False
170 self.t.show(ctx, changes=ctx.changeset(),
174 self.t.show(ctx, changes=ctx.changeset(),
171 baseurl=self.ui.config('web', 'baseurl'),
175 baseurl=self.ui.config('web', 'baseurl'),
172 root=self.repo.root, webroot=self.root)
176 root=self.repo.root, webroot=self.root, **props)
177 return True
173
178
174 def skipsource(self, source):
179 def skipsource(self, source):
175 '''true if incoming changes from this source should be skipped.'''
180 '''true if incoming changes from this source should be skipped.'''
@@ -276,23 +281,36 b' def hook(ui, repo, hooktype, node=None, '
276 ctx = repo[node]
281 ctx = repo[node]
277
282
278 if not n.subs:
283 if not n.subs:
279 ui.debug(_('notify: no subscribers to repository %s\n') % n.root)
284 ui.debug('notify: no subscribers to repository %s\n' % n.root)
280 return
285 return
281 if n.skipsource(source):
286 if n.skipsource(source):
282 ui.debug(_('notify: changes have source "%s" - skipping\n') % source)
287 ui.debug('notify: changes have source "%s" - skipping\n' % source)
283 return
288 return
284
289
285 ui.pushbuffer()
290 ui.pushbuffer()
291 data = ''
292 count = 0
286 if hooktype == 'changegroup':
293 if hooktype == 'changegroup':
287 start, end = ctx.rev(), len(repo)
294 start, end = ctx.rev(), len(repo)
288 count = end - start
289 for rev in xrange(start, end):
295 for rev in xrange(start, end):
290 n.node(repo[rev])
296 if n.node(repo[rev]):
291 n.diff(ctx, repo['tip'])
297 count += 1
298 else:
299 data += ui.popbuffer()
300 ui.note(_('notify: suppressing notification for merge %d:%s\n') %
301 (rev, repo[rev].hex()[:12]))
302 ui.pushbuffer()
303 if count:
304 n.diff(ctx, repo['tip'])
292 else:
305 else:
293 count = 1
306 if not n.node(ctx):
294 n.node(ctx)
307 ui.popbuffer()
308 ui.note(_('notify: suppressing notification for merge %d:%s\n') %
309 (ctx.rev(), ctx.hex()[:12]))
310 return
311 count += 1
295 n.diff(ctx)
312 n.diff(ctx)
296
313
297 data = ui.popbuffer()
314 data += ui.popbuffer()
298 n.send(ctx, count, data)
315 if count:
316 n.send(ctx, count, data)
@@ -35,7 +35,7 b' def rebasemerge(repo, rev, first=False):'
35 if not first:
35 if not first:
36 ancestor.ancestor = newancestor
36 ancestor.ancestor = newancestor
37 else:
37 else:
38 repo.ui.debug(_("first revision, do not change ancestor\n"))
38 repo.ui.debug("first revision, do not change ancestor\n")
39 stats = merge.update(repo, rev, True, True, False)
39 stats = merge.update(repo, rev, True, True, False)
40 return stats
40 return stats
41
41
@@ -149,7 +149,7 b' def concludenode(repo, rev, p1, p2, stat'
149 """Skip commit if collapsing has been required and rev is not the last
149 """Skip commit if collapsing has been required and rev is not the last
150 revision, commit otherwise
150 revision, commit otherwise
151 """
151 """
152 repo.ui.debug(_(" set parents\n"))
152 repo.ui.debug(" set parents\n")
153 if collapse and not last:
153 if collapse and not last:
154 repo.dirstate.setparents(repo[p1].node())
154 repo.dirstate.setparents(repo[p1].node())
155 return None
155 return None
@@ -187,23 +187,23 b' def concludenode(repo, rev, p1, p2, stat'
187 def rebasenode(repo, rev, target, state, skipped, targetancestors, collapse,
187 def rebasenode(repo, rev, target, state, skipped, targetancestors, collapse,
188 extrafn):
188 extrafn):
189 'Rebase a single revision'
189 'Rebase a single revision'
190 repo.ui.debug(_("rebasing %d:%s\n") % (rev, repo[rev]))
190 repo.ui.debug("rebasing %d:%s\n" % (rev, repo[rev]))
191
191
192 p1, p2 = defineparents(repo, rev, target, state, targetancestors)
192 p1, p2 = defineparents(repo, rev, target, state, targetancestors)
193
193
194 repo.ui.debug(_(" future parents are %d and %d\n") % (repo[p1].rev(),
194 repo.ui.debug(" future parents are %d and %d\n" % (repo[p1].rev(),
195 repo[p2].rev()))
195 repo[p2].rev()))
196
196
197 # Merge phase
197 # Merge phase
198 if len(repo.parents()) != 2:
198 if len(repo.parents()) != 2:
199 # Update to target and merge it with local
199 # Update to target and merge it with local
200 if repo['.'].rev() != repo[p1].rev():
200 if repo['.'].rev() != repo[p1].rev():
201 repo.ui.debug(_(" update to %d:%s\n") % (repo[p1].rev(), repo[p1]))
201 repo.ui.debug(" update to %d:%s\n" % (repo[p1].rev(), repo[p1]))
202 merge.update(repo, p1, False, True, False)
202 merge.update(repo, p1, False, True, False)
203 else:
203 else:
204 repo.ui.debug(_(" already in target\n"))
204 repo.ui.debug(" already in target\n")
205 repo.dirstate.write()
205 repo.dirstate.write()
206 repo.ui.debug(_(" merge against %d:%s\n") % (repo[rev].rev(), repo[rev]))
206 repo.ui.debug(" merge against %d:%s\n" % (repo[rev].rev(), repo[rev]))
207 first = repo[rev].rev() == repo[min(state)].rev()
207 first = repo[rev].rev() == repo[min(state)].rev()
208 stats = rebasemerge(repo, rev, first)
208 stats = rebasemerge(repo, rev, first)
209
209
@@ -211,7 +211,7 b' def rebasenode(repo, rev, target, state,'
211 raise util.Abort(_('fix unresolved conflicts with hg resolve then '
211 raise util.Abort(_('fix unresolved conflicts with hg resolve then '
212 'run hg rebase --continue'))
212 'run hg rebase --continue'))
213 else: # we have an interrupted rebase
213 else: # we have an interrupted rebase
214 repo.ui.debug(_('resuming interrupted rebase\n'))
214 repo.ui.debug('resuming interrupted rebase\n')
215
215
216 # Keep track of renamed files in the revision that is going to be rebased
216 # Keep track of renamed files in the revision that is going to be rebased
217 # Here we simulate the copies and renames in the source changeset
217 # Here we simulate the copies and renames in the source changeset
@@ -234,7 +234,7 b' def rebasenode(repo, rev, target, state,'
234 else:
234 else:
235 if not collapse:
235 if not collapse:
236 repo.ui.note(_('no changes, revision %d skipped\n') % rev)
236 repo.ui.note(_('no changes, revision %d skipped\n') % rev)
237 repo.ui.debug(_('next revision set to %s\n') % p1)
237 repo.ui.debug('next revision set to %s\n' % p1)
238 skipped.add(rev)
238 skipped.add(rev)
239 state[rev] = p1
239 state[rev] = p1
240
240
@@ -280,7 +280,7 b' def updatemq(repo, state, skipped, **opt'
280 mqrebase = {}
280 mqrebase = {}
281 for p in repo.mq.applied:
281 for p in repo.mq.applied:
282 if repo[p.rev].rev() in state:
282 if repo[p.rev].rev() in state:
283 repo.ui.debug(_('revision %d is an mq patch (%s), finalize it.\n') %
283 repo.ui.debug('revision %d is an mq patch (%s), finalize it.\n' %
284 (repo[p.rev].rev(), p.name))
284 (repo[p.rev].rev(), p.name))
285 mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name))
285 mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name))
286
286
@@ -290,7 +290,7 b' def updatemq(repo, state, skipped, **opt'
290 # We must start import from the newest revision
290 # We must start import from the newest revision
291 for rev in sorted(mqrebase, reverse=True):
291 for rev in sorted(mqrebase, reverse=True):
292 if rev not in skipped:
292 if rev not in skipped:
293 repo.ui.debug(_('import mq patch %d (%s)\n')
293 repo.ui.debug('import mq patch %d (%s)\n'
294 % (state[rev], mqrebase[rev][0]))
294 % (state[rev], mqrebase[rev][0]))
295 repo.mq.qimport(repo, (), patchname=mqrebase[rev][0],
295 repo.mq.qimport(repo, (), patchname=mqrebase[rev][0],
296 git=mqrebase[rev][1],rev=[str(state[rev])])
296 git=mqrebase[rev][1],rev=[str(state[rev])])
@@ -311,7 +311,7 b' def storestatus(repo, originalwd, target'
311 newrev = repo[v].hex()
311 newrev = repo[v].hex()
312 f.write("%s:%s\n" % (oldrev, newrev))
312 f.write("%s:%s\n" % (oldrev, newrev))
313 f.close()
313 f.close()
314 repo.ui.debug(_('rebase status stored\n'))
314 repo.ui.debug('rebase status stored\n')
315
315
316 def clearstatus(repo):
316 def clearstatus(repo):
317 'Remove the status files'
317 'Remove the status files'
@@ -342,7 +342,7 b' def restorestatus(repo):'
342 else:
342 else:
343 oldrev, newrev = l.split(':')
343 oldrev, newrev = l.split(':')
344 state[repo[oldrev].rev()] = repo[newrev].rev()
344 state[repo[oldrev].rev()] = repo[newrev].rev()
345 repo.ui.debug(_('rebase status resumed\n'))
345 repo.ui.debug('rebase status resumed\n')
346 return originalwd, target, state, collapse, keep, keepbranches, external
346 return originalwd, target, state, collapse, keep, keepbranches, external
347 except IOError, err:
347 except IOError, err:
348 if err.errno != errno.ENOENT:
348 if err.errno != errno.ENOENT:
@@ -381,9 +381,9 b' def buildstate(repo, dest, src, base, co'
381 if src:
381 if src:
382 commonbase = repo[src].ancestor(repo[dest])
382 commonbase = repo[src].ancestor(repo[dest])
383 if commonbase == repo[src]:
383 if commonbase == repo[src]:
384 raise util.Abort(_('cannot rebase an ancestor'))
384 raise util.Abort(_('source is ancestor of destination'))
385 if commonbase == repo[dest]:
385 if commonbase == repo[dest]:
386 raise util.Abort(_('cannot rebase a descendant'))
386 raise util.Abort(_('source is descendant of destination'))
387 source = repo[src].rev()
387 source = repo[src].rev()
388 else:
388 else:
389 if base:
389 if base:
@@ -392,20 +392,24 b' def buildstate(repo, dest, src, base, co'
392 cwd = repo['.'].rev()
392 cwd = repo['.'].rev()
393
393
394 if cwd == dest:
394 if cwd == dest:
395 repo.ui.debug(_('already working on current\n'))
395 repo.ui.debug('source and destination are the same\n')
396 return None
396 return None
397
397
398 targetancestors = set(repo.changelog.ancestors(dest))
398 targetancestors = set(repo.changelog.ancestors(dest))
399 if cwd in targetancestors:
399 if cwd in targetancestors:
400 repo.ui.debug(_('already working on the current branch\n'))
400 repo.ui.debug('source is ancestor of destination\n')
401 return None
401 return None
402
402
403 cwdancestors = set(repo.changelog.ancestors(cwd))
403 cwdancestors = set(repo.changelog.ancestors(cwd))
404 if dest in cwdancestors:
405 repo.ui.debug('source is descendant of destination\n')
406 return None
407
404 cwdancestors.add(cwd)
408 cwdancestors.add(cwd)
405 rebasingbranch = cwdancestors - targetancestors
409 rebasingbranch = cwdancestors - targetancestors
406 source = min(rebasingbranch)
410 source = min(rebasingbranch)
407
411
408 repo.ui.debug(_('rebase onto %d starting from %d\n') % (dest, source))
412 repo.ui.debug('rebase onto %d starting from %d\n' % (dest, source))
409 state = dict.fromkeys(repo.changelog.descendants(source), nullrev)
413 state = dict.fromkeys(repo.changelog.descendants(source), nullrev)
410 external = nullrev
414 external = nullrev
411 if collapse:
415 if collapse:
@@ -429,8 +433,8 b' def pullrebase(orig, ui, repo, *args, **'
429 if opts.get('rebase'):
433 if opts.get('rebase'):
430 if opts.get('update'):
434 if opts.get('update'):
431 del opts['update']
435 del opts['update']
432 ui.debug(_('--update and --rebase are not compatible, ignoring '
436 ui.debug('--update and --rebase are not compatible, ignoring '
433 'the update flag\n'))
437 'the update flag\n')
434
438
435 cmdutil.bail_if_changed(repo)
439 cmdutil.bail_if_changed(repo)
436 revsprepull = len(repo)
440 revsprepull = len(repo)
@@ -460,9 +464,9 b' cmdtable = {'
460 ('s', 'source', '', _('rebase from a given revision')),
464 ('s', 'source', '', _('rebase from a given revision')),
461 ('b', 'base', '', _('rebase from the base of a given revision')),
465 ('b', 'base', '', _('rebase from the base of a given revision')),
462 ('d', 'dest', '', _('rebase onto a given revision')),
466 ('d', 'dest', '', _('rebase onto a given revision')),
463 ('', 'collapse', False, _('collapse the rebased revisions')),
467 ('', 'collapse', False, _('collapse the rebased changesets')),
464 ('', 'keep', False, _('keep original revisions')),
468 ('', 'keep', False, _('keep original changesets')),
465 ('', 'keepbranches', False, _('keep original branches')),
469 ('', 'keepbranches', False, _('keep original branch names')),
466 ('c', 'continue', False, _('continue an interrupted rebase')),
470 ('c', 'continue', False, _('continue an interrupted rebase')),
467 ('a', 'abort', False, _('abort an interrupted rebase')),] +
471 ('a', 'abort', False, _('abort an interrupted rebase')),] +
468 templateopts,
472 templateopts,
@@ -463,7 +463,7 b' def dorecord(ui, repo, committer, *pats,'
463 fd, tmpname = tempfile.mkstemp(prefix=f.replace('/', '_')+'.',
463 fd, tmpname = tempfile.mkstemp(prefix=f.replace('/', '_')+'.',
464 dir=backupdir)
464 dir=backupdir)
465 os.close(fd)
465 os.close(fd)
466 ui.debug(_('backup %r as %r\n') % (f, tmpname))
466 ui.debug('backup %r as %r\n' % (f, tmpname))
467 util.copyfile(repo.wjoin(f), tmpname)
467 util.copyfile(repo.wjoin(f), tmpname)
468 backups[f] = tmpname
468 backups[f] = tmpname
469
469
@@ -481,7 +481,7 b' def dorecord(ui, repo, committer, *pats,'
481 # 3b. (apply)
481 # 3b. (apply)
482 if dopatch:
482 if dopatch:
483 try:
483 try:
484 ui.debug(_('applying patch\n'))
484 ui.debug('applying patch\n')
485 ui.debug(fp.getvalue())
485 ui.debug(fp.getvalue())
486 pfiles = {}
486 pfiles = {}
487 patch.internalpatch(fp, ui, 1, repo.root, files=pfiles,
487 patch.internalpatch(fp, ui, 1, repo.root, files=pfiles,
@@ -512,7 +512,7 b' def dorecord(ui, repo, committer, *pats,'
512 # 5. finally restore backed-up files
512 # 5. finally restore backed-up files
513 try:
513 try:
514 for realname, tmpname in backups.iteritems():
514 for realname, tmpname in backups.iteritems():
515 ui.debug(_('restoring %r to %r\n') % (tmpname, realname))
515 ui.debug('restoring %r to %r\n' % (tmpname, realname))
516 util.copyfile(tmpname, repo.wjoin(realname))
516 util.copyfile(tmpname, repo.wjoin(realname))
517 os.unlink(tmpname)
517 os.unlink(tmpname)
518 os.rmdir(backupdir)
518 os.rmdir(backupdir)
@@ -142,6 +142,6 b' def reposetup(ui, repo):'
142 for f in funcs.split():
142 for f in funcs.split():
143 wrapname(f, wrapper)
143 wrapname(f, wrapper)
144 wrapname("mercurial.osutil.listdir", wrapperforlistdir)
144 wrapname("mercurial.osutil.listdir", wrapperforlistdir)
145 ui.debug(_("[win32mbcs] activated with encoding: %s\n")
145 ui.debug("[win32mbcs] activated with encoding: %s\n"
146 % encoding.encoding)
146 % encoding.encoding)
147
147
@@ -109,12 +109,13 b' class hgwebdirzc(hgwebdir_mod.hgwebdir):'
109 def __init__(self, conf, baseui=None):
109 def __init__(self, conf, baseui=None):
110 super(hgwebdirzc, self).__init__(conf, baseui)
110 super(hgwebdirzc, self).__init__(conf, baseui)
111 prefix = self.ui.config("web", "prefix", "").strip('/') + '/'
111 prefix = self.ui.config("web", "prefix", "").strip('/') + '/'
112 for r, p in self.repos:
112 for repo, path in self.repos:
113 u = self.ui.copy()
113 u = self.ui.copy()
114 u.readconfig(os.path.join(p, '.hg', 'hgrc'))
114 u.readconfig(os.path.join(path, '.hg', 'hgrc'))
115 n = os.path.basename(r)
115 name = os.path.basename(repo)
116 path = (prefix + r).strip('/')
116 path = (prefix + repo).strip('/')
117 publish(n, "hgweb", path, int(u.config("web", "port", 8000)))
117 desc = u.config('web', 'description', name)
118 publish(name, desc, path, int(u.config("web", "port", 8000)))
118
119
119 # listen
120 # listen
120
121
@@ -136,25 +137,24 b' def getzcpaths():'
136 Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l)
137 Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l)
137 time.sleep(1)
138 time.sleep(1)
138 server.close()
139 server.close()
139 for v in l.found.values():
140 for value in l.found.values():
140 n = v.name[:v.name.index('.')]
141 name = value.name[:value.name.index('.')]
141 n.replace(" ", "-")
142 url = "http://%s:%s%s" % (socket.inet_ntoa(value.address), value.port,
142 u = "http://%s:%s%s" % (socket.inet_ntoa(v.address), v.port,
143 value.properties.get("path", "/"))
143 v.properties.get("path", "/"))
144 yield "zc-" + name, url
144 yield "zc-" + n, u
145
145
146 def config(orig, self, section, key, default=None, untrusted=False):
146 def config(orig, self, section, key, default=None, untrusted=False):
147 if section == "paths" and key.startswith("zc-"):
147 if section == "paths" and key.startswith("zc-"):
148 for n, p in getzcpaths():
148 for name, path in getzcpaths():
149 if n == key:
149 if name == key:
150 return p
150 return path
151 return orig(self, section, key, default, untrusted)
151 return orig(self, section, key, default, untrusted)
152
152
153 def configitems(orig, self, section, untrusted=False):
153 def configitems(orig, self, section, untrusted=False):
154 r = orig(self, section, untrusted)
154 repos = orig(self, section, untrusted)
155 if section == "paths":
155 if section == "paths":
156 r += getzcpaths()
156 repos += getzcpaths()
157 return r
157 return repos
158
158
159 extensions.wrapfunction(ui.ui, 'config', config)
159 extensions.wrapfunction(ui.ui, 'config', config)
160 extensions.wrapfunction(ui.ui, 'configitems', configitems)
160 extensions.wrapfunction(ui.ui, 'configitems', configitems)
This diff has been collapsed as it changes many lines, (1862 lines changed) Show them Hide them
@@ -17,8 +17,8 b' msgid ""'
17 msgstr ""
17 msgstr ""
18 "Project-Id-Version: Mercurial\n"
18 "Project-Id-Version: Mercurial\n"
19 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
19 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
20 "POT-Creation-Date: 2009-07-20 23:05+0200\n"
20 "POT-Creation-Date: 2009-09-29 00:26+0200\n"
21 "PO-Revision-Date: 2009-07-21 00:18+0200\n"
21 "PO-Revision-Date: 2009-09-29 00:41+0200\n"
22 "Last-Translator: <mg@lazybytes.net>\n"
22 "Last-Translator: <mg@lazybytes.net>\n"
23 "Language-Team: Danish\n"
23 "Language-Team: Danish\n"
24 "MIME-Version: 1.0\n"
24 "MIME-Version: 1.0\n"
@@ -36,8 +36,12 b' msgstr "TILVALG"'
36 msgid "COMMANDS"
36 msgid "COMMANDS"
37 msgstr "KOMMANDOER"
37 msgstr "KOMMANDOER"
38
38
39 msgid " options:\n"
39 msgid ""
40 msgstr " tilvalg:\n"
40 " options:\n"
41 "\n"
42 msgstr ""
43 " tilvalg:\n"
44 "\n"
41
45
42 #, python-format
46 #, python-format
43 msgid ""
47 msgid ""
@@ -64,7 +68,7 b' msgid ""'
64 "Nor is it safe if remote users share an account, because then there\n"
68 "Nor is it safe if remote users share an account, because then there\n"
65 "is no way to distinguish them.\n"
69 "is no way to distinguish them.\n"
66 "\n"
70 "\n"
67 "To use this hook, configure the acl extension in your hgrc like this:\n"
71 "To use this hook, configure the acl extension in your hgrc like this::\n"
68 "\n"
72 "\n"
69 " [extensions]\n"
73 " [extensions]\n"
70 " hgext.acl =\n"
74 " hgext.acl =\n"
@@ -77,10 +81,10 b' msgid ""'
77 " # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
81 " # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
78 " sources = serve\n"
82 " sources = serve\n"
79 "\n"
83 "\n"
80 "The allow and deny sections take a subtree pattern as key (with a\n"
84 "The allow and deny sections take a subtree pattern as key (with a glob\n"
81 "glob syntax by default), and a comma separated list of users as\n"
85 "syntax by default), and a comma separated list of users as the\n"
82 "the corresponding value. The deny list is checked before the allow\n"
86 "corresponding value. The deny list is checked before the allow list\n"
83 "list is.\n"
87 "is. ::\n"
84 "\n"
88 "\n"
85 " [acl.allow]\n"
89 " [acl.allow]\n"
86 " # If acl.allow is not present, all users are allowed by default.\n"
90 " # If acl.allow is not present, all users are allowed by default.\n"
@@ -133,16 +137,16 b' msgid ""'
133 "\n"
137 "\n"
134 "Bookmarks are local movable markers to changesets. Every bookmark\n"
138 "Bookmarks are local movable markers to changesets. Every bookmark\n"
135 "points to a changeset identified by its hash. If you commit a\n"
139 "points to a changeset identified by its hash. If you commit a\n"
136 "changeset that is based on a changeset that has a bookmark on it,\n"
140 "changeset that is based on a changeset that has a bookmark on it, the\n"
137 "the bookmark shifts to the new changeset.\n"
141 "bookmark shifts to the new changeset.\n"
138 "\n"
142 "\n"
139 "It is possible to use bookmark names in every revision lookup\n"
143 "It is possible to use bookmark names in every revision lookup (e.g. hg\n"
140 "(e.g. hg merge, hg update).\n"
144 "merge, hg update).\n"
141 "\n"
145 "\n"
142 "By default, when several bookmarks point to the same changeset, they\n"
146 "By default, when several bookmarks point to the same changeset, they\n"
143 "will all move forward together. It is possible to obtain a more\n"
147 "will all move forward together. It is possible to obtain a more\n"
144 "git-like experience by adding the following configuration option to\n"
148 "git-like experience by adding the following configuration option to\n"
145 "your .hgrc:\n"
149 "your .hgrc::\n"
146 "\n"
150 "\n"
147 " [bookmarks]\n"
151 " [bookmarks]\n"
148 " track.current = True\n"
152 " track.current = True\n"
@@ -217,65 +221,86 b' msgid ""'
217 "be run by Mercurial as the user pushing the change; you will need to\n"
221 "be run by Mercurial as the user pushing the change; you will need to\n"
218 "ensure the Bugzilla install file permissions are set appropriately.\n"
222 "ensure the Bugzilla install file permissions are set appropriately.\n"
219 "\n"
223 "\n"
220 "Configuring the extension:\n"
224 "The extension is configured through three different configuration\n"
221 "\n"
225 "sections. These keys are recognized in the [bugzilla] section:\n"
222 " [bugzilla]\n"
226 "\n"
223 "\n"
227 "host\n"
224 " host Hostname of the MySQL server holding the Bugzilla\n"
228 " Hostname of the MySQL server holding the Bugzilla database.\n"
225 " database.\n"
229 "\n"
226 " db Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
230 "db\n"
227 " user Username to use to access MySQL server. Default 'bugs'.\n"
231 " Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
228 " password Password to use to access MySQL server.\n"
232 "\n"
229 " timeout Database connection timeout (seconds). Default 5.\n"
233 "user\n"
230 " version Bugzilla version. Specify '3.0' for Bugzilla versions\n"
234 " Username to use to access MySQL server. Default 'bugs'.\n"
231 " 3.0 and later, '2.18' for Bugzilla versions from 2.18\n"
235 "\n"
232 " and '2.16' for versions prior to 2.18.\n"
236 "password\n"
233 " bzuser Fallback Bugzilla user name to record comments with, if\n"
237 " Password to use to access MySQL server.\n"
234 " changeset committer cannot be found as a Bugzilla user.\n"
238 "\n"
235 " bzdir Bugzilla install directory. Used by default notify.\n"
239 "timeout\n"
236 " Default '/var/www/html/bugzilla'.\n"
240 " Database connection timeout (seconds). Default 5.\n"
237 " notify The command to run to get Bugzilla to send bug change\n"
241 "\n"
238 " notification emails. Substitutes from a map with 3\n"
242 "version\n"
239 " keys, 'bzdir', 'id' (bug id) and 'user' (committer\n"
243 " Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 and later,\n"
240 " bugzilla email). Default depends on version; from 2.18\n"
244 " '2.18' for Bugzilla versions from 2.18 and '2.16' for versions prior\n"
241 " it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
245 " to 2.18.\n"
242 " %(id)s %(user)s\".\n"
246 "\n"
243 " regexp Regular expression to match bug IDs in changeset commit\n"
247 "bzuser\n"
244 " message. Must contain one \"()\" group. The default\n"
248 " Fallback Bugzilla user name to record comments with, if changeset\n"
245 " expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n"
249 " committer cannot be found as a Bugzilla user.\n"
246 " number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n"
250 "\n"
247 " variations thereof. Matching is case insensitive.\n"
251 "bzdir\n"
248 " style The style file to use when formatting comments.\n"
252 " Bugzilla install directory. Used by default notify. Default\n"
249 " template Template to use when formatting comments. Overrides\n"
253 " '/var/www/html/bugzilla'.\n"
250 " style if specified. In addition to the usual Mercurial\n"
254 "\n"
251 " keywords, the extension specifies:\n"
255 "notify\n"
252 " {bug} The Bugzilla bug ID.\n"
256 " The command to run to get Bugzilla to send bug change notification\n"
253 " {root} The full pathname of the Mercurial\n"
257 " emails. Substitutes from a map with 3 keys, 'bzdir', 'id' (bug id)\n"
254 " repository.\n"
258 " and 'user' (committer bugzilla email). Default depends on version;\n"
255 " {webroot} Stripped pathname of the Mercurial\n"
259 " from 2.18 it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
256 " repository.\n"
260 " %(id)s %(user)s\".\n"
257 " {hgweb} Base URL for browsing Mercurial\n"
261 "\n"
258 " repositories.\n"
262 "regexp\n"
259 " Default 'changeset {node|short} in repo {root} refers '\n"
263 " Regular expression to match bug IDs in changeset commit message.\n"
260 " 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
264 " Must contain one \"()\" group. The default expression matches 'Bug\n"
261 " strip The number of slashes to strip from the front of {root}\n"
265 " 1234', 'Bug no. 1234', 'Bug number 1234', 'Bugs 1234,5678', 'Bug\n"
262 " to produce {webroot}. Default 0.\n"
266 " 1234 and 5678' and variations thereof. Matching is case insensitive.\n"
263 " usermap Path of file containing Mercurial committer ID to\n"
267 "\n"
264 " Bugzilla user ID mappings. If specified, the file\n"
268 "style\n"
265 " should contain one mapping per line,\n"
269 " The style file to use when formatting comments.\n"
266 " \"committer\"=\"Bugzilla user\". See also the [usermap]\n"
270 "\n"
267 " section.\n"
271 "template\n"
268 "\n"
272 " Template to use when formatting comments. Overrides style if\n"
269 " [usermap]\n"
273 " specified. In addition to the usual Mercurial keywords, the\n"
270 " Any entries in this section specify mappings of Mercurial\n"
274 " extension specifies::\n"
271 " committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
275 "\n"
272 " \"committer\"=\"Bugzilla user\"\n"
276 " {bug} The Bugzilla bug ID.\n"
273 "\n"
277 " {root} The full pathname of the Mercurial repository.\n"
274 " [web]\n"
278 " {webroot} Stripped pathname of the Mercurial repository.\n"
275 " baseurl Base URL for browsing Mercurial repositories. Reference\n"
279 " {hgweb} Base URL for browsing Mercurial repositories.\n"
276 " from templates as {hgweb}.\n"
280 "\n"
277 "\n"
281 " Default 'changeset {node|short} in repo {root} refers '\n"
278 "Activating the extension:\n"
282 " 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
283 "\n"
284 "strip\n"
285 " The number of slashes to strip from the front of {root} to produce\n"
286 " {webroot}. Default 0.\n"
287 "\n"
288 "usermap\n"
289 " Path of file containing Mercurial committer ID to Bugzilla user ID\n"
290 " mappings. If specified, the file should contain one mapping per\n"
291 " line, \"committer\"=\"Bugzilla user\". See also the [usermap] section.\n"
292 "\n"
293 "The [usermap] section is used to specify mappings of Mercurial\n"
294 "committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
295 "\"committer\"=\"Bugzilla user\"\n"
296 "\n"
297 "Finally, the [web] section supports one entry:\n"
298 "\n"
299 "baseurl\n"
300 " Base URL for browsing Mercurial repositories. Reference from\n"
301 " templates as {hgweb}.\n"
302 "\n"
303 "Activating the extension::\n"
279 "\n"
304 "\n"
280 " [extensions]\n"
305 " [extensions]\n"
281 " hgext.bugzilla =\n"
306 " hgext.bugzilla =\n"
@@ -288,7 +313,7 b' msgid ""'
288 "\n"
313 "\n"
289 "This example configuration is for a collection of Mercurial\n"
314 "This example configuration is for a collection of Mercurial\n"
290 "repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
315 "repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
291 "installation in /opt/bugzilla-3.2.\n"
316 "installation in /opt/bugzilla-3.2. ::\n"
292 "\n"
317 "\n"
293 " [bugzilla]\n"
318 " [bugzilla]\n"
294 " host=localhost\n"
319 " host=localhost\n"
@@ -296,8 +321,9 b' msgid ""'
296 " version=3.0\n"
321 " version=3.0\n"
297 " bzuser=unknown@domain.com\n"
322 " bzuser=unknown@domain.com\n"
298 " bzdir=/opt/bugzilla-3.2\n"
323 " bzdir=/opt/bugzilla-3.2\n"
299 " template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/"
324 " template=Changeset {node|short} in {root|basename}.\n"
300 "rev/{node|short}\\n\\n{desc}\\n\n"
325 " {hgweb}/{webroot}/rev/{node|short}\\n\n"
326 " {desc}\\n\n"
301 " strip=5\n"
327 " strip=5\n"
302 "\n"
328 "\n"
303 " [web]\n"
329 " [web]\n"
@@ -306,7 +332,7 b' msgid ""'
306 " [usermap]\n"
332 " [usermap]\n"
307 " user@emaildomain.com=user.name@bugzilladomain.com\n"
333 " user@emaildomain.com=user.name@bugzilladomain.com\n"
308 "\n"
334 "\n"
309 "Commits add a comment to the Bugzilla bug record of the form:\n"
335 "Commits add a comment to the Bugzilla bug record of the form::\n"
310 "\n"
336 "\n"
311 " Changeset 3b16791d6642 in repository-name.\n"
337 " Changeset 3b16791d6642 in repository-name.\n"
312 " http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
338 " http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
@@ -437,7 +463,7 b' msgid ""'
437 " alternatively the number of matching revisions if the\n"
463 " alternatively the number of matching revisions if the\n"
438 " --changesets option is specified.\n"
464 " --changesets option is specified.\n"
439 "\n"
465 "\n"
440 " Examples:\n"
466 " Examples::\n"
441 "\n"
467 "\n"
442 " # display count of changed lines for every committer\n"
468 " # display count of changed lines for every committer\n"
443 " hg churn -t '{author|email}'\n"
469 " hg churn -t '{author|email}'\n"
@@ -452,12 +478,12 b' msgid ""'
452 " hg churn -f '%Y' -s\n"
478 " hg churn -f '%Y' -s\n"
453 "\n"
479 "\n"
454 " It is possible to map alternate email addresses to a main address\n"
480 " It is possible to map alternate email addresses to a main address\n"
455 " by providing a file using the following format:\n"
481 " by providing a file using the following format::\n"
456 "\n"
482 "\n"
457 " <alias email> <actual email>\n"
483 " <alias email> <actual email>\n"
458 "\n"
484 "\n"
459 " Such a file may be specified with the --aliases option, otherwise a\n"
485 " Such a file may be specified with the --aliases option, otherwise\n"
460 " .hgchurn file will be looked for in the working directory root.\n"
486 " a .hgchurn file will be looked for in the working directory root.\n"
461 " "
487 " "
462 msgstr ""
488 msgstr ""
463 "histogram over ændringer i depotet\n"
489 "histogram over ændringer i depotet\n"
@@ -472,7 +498,7 b' msgstr ""'
472 " alternativt på antallet af matchende revisioner, hvis --changesets\n"
498 " alternativt på antallet af matchende revisioner, hvis --changesets\n"
473 " tilvalget er specificeret.\n"
499 " tilvalget er specificeret.\n"
474 "\n"
500 "\n"
475 " Eksempler:\n"
501 " Eksempler::\n"
476 "\n"
502 "\n"
477 " # viser antaller af ændrede linier for hver bruger\n"
503 " # viser antaller af ændrede linier for hver bruger\n"
478 " hg churn -t '{author|email}'\n"
504 " hg churn -t '{author|email}'\n"
@@ -487,9 +513,9 b' msgstr ""'
487 " hg churn -f '%Y' -s\n"
513 " hg churn -f '%Y' -s\n"
488 "\n"
514 "\n"
489 " Det er muligt at afbilde alternative e-mail-adresser til\n"
515 " Det er muligt at afbilde alternative e-mail-adresser til\n"
490 " hoved-adresser ved at bruge en fil med følgende format:\n"
516 " hoved-adresser ved at bruge en fil med følgende format::\n"
491 "\n"
517 "\n"
492 " <alias email> <faktisk email>\n"
518 " <alias email> <faktisk email>\n"
493 "\n"
519 "\n"
494 " En sådan fil kan angivet med --aliases tilvalget. Som standard\n"
520 " En sådan fil kan angivet med --aliases tilvalget. Som standard\n"
495 " bruges .hgchurn i arbejdskatalogets rod, hvis denne findes.\n"
521 " bruges .hgchurn i arbejdskatalogets rod, hvis denne findes.\n"
@@ -540,33 +566,33 b' msgid ""'
540 "function (aka ANSI escape codes). This module also provides the\n"
566 "function (aka ANSI escape codes). This module also provides the\n"
541 "render_text function, which can be used to add effects to any text.\n"
567 "render_text function, which can be used to add effects to any text.\n"
542 "\n"
568 "\n"
543 "Default effects may be overridden from the .hgrc file:\n"
569 "Default effects may be overridden from the .hgrc file::\n"
544 "\n"
570 "\n"
545 "[color]\n"
571 " [color]\n"
546 "status.modified = blue bold underline red_background\n"
572 " status.modified = blue bold underline red_background\n"
547 "status.added = green bold\n"
573 " status.added = green bold\n"
548 "status.removed = red bold blue_background\n"
574 " status.removed = red bold blue_background\n"
549 "status.deleted = cyan bold underline\n"
575 " status.deleted = cyan bold underline\n"
550 "status.unknown = magenta bold underline\n"
576 " status.unknown = magenta bold underline\n"
551 "status.ignored = black bold\n"
577 " status.ignored = black bold\n"
552 "\n"
578 "\n"
553 "# 'none' turns off all effects\n"
579 " # 'none' turns off all effects\n"
554 "status.clean = none\n"
580 " status.clean = none\n"
555 "status.copied = none\n"
581 " status.copied = none\n"
556 "\n"
582 "\n"
557 "qseries.applied = blue bold underline\n"
583 " qseries.applied = blue bold underline\n"
558 "qseries.unapplied = black bold\n"
584 " qseries.unapplied = black bold\n"
559 "qseries.missing = red bold\n"
585 " qseries.missing = red bold\n"
560 "\n"
586 "\n"
561 "diff.diffline = bold\n"
587 " diff.diffline = bold\n"
562 "diff.extended = cyan bold\n"
588 " diff.extended = cyan bold\n"
563 "diff.file_a = red bold\n"
589 " diff.file_a = red bold\n"
564 "diff.file_b = green bold\n"
590 " diff.file_b = green bold\n"
565 "diff.hunk = magenta\n"
591 " diff.hunk = magenta\n"
566 "diff.deleted = red\n"
592 " diff.deleted = red\n"
567 "diff.inserted = green\n"
593 " diff.inserted = green\n"
568 "diff.changed = white\n"
594 " diff.changed = white\n"
569 "diff.trailingwhitespace = bold red_background\n"
595 " diff.trailingwhitespace = bold red_background\n"
570 msgstr ""
596 msgstr ""
571
597
572 msgid "when to colorize (always, auto, or never)"
598 msgid "when to colorize (always, auto, or never)"
@@ -586,6 +612,7 b' msgid ""'
586 "convert a foreign SCM repository to a Mercurial one.\n"
612 "convert a foreign SCM repository to a Mercurial one.\n"
587 "\n"
613 "\n"
588 " Accepted source formats [identifiers]:\n"
614 " Accepted source formats [identifiers]:\n"
615 "\n"
589 " - Mercurial [hg]\n"
616 " - Mercurial [hg]\n"
590 " - CVS [cvs]\n"
617 " - CVS [cvs]\n"
591 " - Darcs [darcs]\n"
618 " - Darcs [darcs]\n"
@@ -597,6 +624,7 b' msgid ""'
597 " - Perforce [p4]\n"
624 " - Perforce [p4]\n"
598 "\n"
625 "\n"
599 " Accepted destination formats [identifiers]:\n"
626 " Accepted destination formats [identifiers]:\n"
627 "\n"
600 " - Mercurial [hg]\n"
628 " - Mercurial [hg]\n"
601 " - Subversion [svn] (history on branches is not preserved)\n"
629 " - Subversion [svn] (history on branches is not preserved)\n"
602 "\n"
630 "\n"
@@ -608,23 +636,28 b' msgid ""'
608 " basename of the source with '-hg' appended. If the destination\n"
636 " basename of the source with '-hg' appended. If the destination\n"
609 " repository doesn't exist, it will be created.\n"
637 " repository doesn't exist, it will be created.\n"
610 "\n"
638 "\n"
611 " By default, all sources except Mercurial will use\n"
639 " By default, all sources except Mercurial will use --branchsort.\n"
612 " --branchsort. Mercurial uses --sourcesort to preserve original\n"
640 " Mercurial uses --sourcesort to preserve original revision numbers\n"
613 " revision numbers order. Sort modes have the following effects:\n"
641 " order. Sort modes have the following effects:\n"
614 " --branchsort: convert from parent to child revision when\n"
642 "\n"
615 " possible, which means branches are usually converted one after\n"
643 " --branchsort convert from parent to child revision when possible,\n"
616 " the other. It generates more compact repositories.\n"
644 " which means branches are usually converted one after\n"
617 " --datesort: sort revisions by date. Converted repositories have\n"
645 " the other. It generates more compact repositories.\n"
618 " good-looking changelogs but are often an order of magnitude\n"
646 "\n"
619 " larger than the same ones generated by --branchsort.\n"
647 " --datesort sort revisions by date. Converted repositories have\n"
620 " --sourcesort: try to preserve source revisions order, only\n"
648 " good-looking changelogs but are often an order of\n"
621 " supported by Mercurial sources.\n"
649 " magnitude larger than the same ones generated by\n"
650 " --branchsort.\n"
651 "\n"
652 " --sourcesort try to preserve source revisions order, only\n"
653 " supported by Mercurial sources.\n"
622 "\n"
654 "\n"
623 " If <REVMAP> isn't given, it will be put in a default location\n"
655 " If <REVMAP> isn't given, it will be put in a default location\n"
624 " (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
656 " (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
625 " that maps each source commit ID to the destination ID for that\n"
657 " that maps each source commit ID to the destination ID for that\n"
626 " revision, like so:\n"
658 " revision, like so::\n"
627 " <source ID> <destination ID>\n"
659 "\n"
660 " <source ID> <destination ID>\n"
628 "\n"
661 "\n"
629 " If the file doesn't exist, it's automatically created. It's\n"
662 " If the file doesn't exist, it's automatically created. It's\n"
630 " updated on each commit copied, so convert-repo can be interrupted\n"
663 " updated on each commit copied, so convert-repo can be interrupted\n"
@@ -638,7 +671,7 b' msgid ""'
638 "\n"
671 "\n"
639 " The filemap is a file that allows filtering and remapping of files\n"
672 " The filemap is a file that allows filtering and remapping of files\n"
640 " and directories. Comment lines start with '#'. Each line can\n"
673 " and directories. Comment lines start with '#'. Each line can\n"
641 " contain one of the following directives:\n"
674 " contain one of the following directives::\n"
642 "\n"
675 "\n"
643 " include path/to/file\n"
676 " include path/to/file\n"
644 "\n"
677 "\n"
@@ -648,11 +681,11 b' msgid ""'
648 "\n"
681 "\n"
649 " The 'include' directive causes a file, or all files under a\n"
682 " The 'include' directive causes a file, or all files under a\n"
650 " directory, to be included in the destination repository, and the\n"
683 " directory, to be included in the destination repository, and the\n"
651 " exclusion of all other files and directories not explicitly included.\n"
684 " exclusion of all other files and directories not explicitly\n"
652 " The 'exclude' directive causes files or directories to be omitted.\n"
685 " included. The 'exclude' directive causes files or directories to\n"
653 " The 'rename' directive renames a file or directory. To rename from\n"
686 " be omitted. The 'rename' directive renames a file or directory. To\n"
654 " a subdirectory into the root of the repository, use '.' as the\n"
687 " rename from a subdirectory into the root of the repository, use\n"
655 " path to rename to.\n"
688 " '.' as the path to rename to.\n"
656 "\n"
689 "\n"
657 " The splicemap is a file that allows insertion of synthetic\n"
690 " The splicemap is a file that allows insertion of synthetic\n"
658 " history, letting you specify the parents of a revision. This is\n"
691 " history, letting you specify the parents of a revision. This is\n"
@@ -677,7 +710,7 b' msgid ""'
677 " in one repository from \"default\" to a named branch.\n"
710 " in one repository from \"default\" to a named branch.\n"
678 "\n"
711 "\n"
679 " Mercurial Source\n"
712 " Mercurial Source\n"
680 " -----------------\n"
713 " ----------------\n"
681 "\n"
714 "\n"
682 " --config convert.hg.ignoreerrors=False (boolean)\n"
715 " --config convert.hg.ignoreerrors=False (boolean)\n"
683 " ignore integrity errors when reading. Use it to fix Mercurial\n"
716 " ignore integrity errors when reading. Use it to fix Mercurial\n"
@@ -705,36 +738,38 b' msgid ""'
705 " Because CVS does not have changesets, it is necessary to collect\n"
738 " Because CVS does not have changesets, it is necessary to collect\n"
706 " individual commits to CVS and merge them into changesets. CVS\n"
739 " individual commits to CVS and merge them into changesets. CVS\n"
707 " source uses its internal changeset merging code by default but can\n"
740 " source uses its internal changeset merging code by default but can\n"
708 " be configured to call the external 'cvsps' program by setting:\n"
741 " be configured to call the external 'cvsps' program by setting::\n"
709 " --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
742 "\n"
743 " --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
744 "\n"
710 " This option is deprecated and will be removed in Mercurial 1.4.\n"
745 " This option is deprecated and will be removed in Mercurial 1.4.\n"
711 "\n"
746 "\n"
712 " The options shown are the defaults.\n"
747 " The options shown are the defaults.\n"
713 "\n"
748 "\n"
714 " Internal cvsps is selected by setting\n"
749 " Internal cvsps is selected by setting ::\n"
715 " --config convert.cvsps=builtin\n"
750 "\n"
751 " --config convert.cvsps=builtin\n"
752 "\n"
716 " and has a few more configurable options:\n"
753 " and has a few more configurable options:\n"
717 " --config convert.cvsps.cache=True (boolean)\n"
754 "\n"
718 " Set to False to disable remote log caching, for testing and\n"
755 " --config convert.cvsps.cache=True (boolean)\n"
719 " debugging purposes.\n"
756 " Set to False to disable remote log caching, for testing and\n"
720 " --config convert.cvsps.fuzz=60 (integer)\n"
757 " debugging purposes.\n"
721 " Specify the maximum time (in seconds) that is allowed\n"
758 " --config convert.cvsps.fuzz=60 (integer)\n"
722 " between commits with identical user and log message in a\n"
759 " Specify the maximum time (in seconds) that is allowed between\n"
723 " single changeset. When very large files were checked in as\n"
760 " commits with identical user and log message in a single\n"
724 " part of a changeset then the default may not be long\n"
761 " changeset. When very large files were checked in as part of a\n"
725 " enough.\n"
762 " changeset then the default may not be long enough.\n"
726 " --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
763 " --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
727 " Specify a regular expression to which commit log messages\n"
764 " Specify a regular expression to which commit log messages are\n"
728 " are matched. If a match occurs, then the conversion\n"
765 " matched. If a match occurs, then the conversion process will\n"
729 " process will insert a dummy revision merging the branch on\n"
766 " insert a dummy revision merging the branch on which this log\n"
730 " which this log message occurs to the branch indicated in\n"
767 " message occurs to the branch indicated in the regex.\n"
731 " the regex.\n"
768 " --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
732 " --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
769 " Specify a regular expression to which commit log messages are\n"
733 " Specify a regular expression to which commit log messages\n"
770 " matched. If a match occurs, then the conversion process will\n"
734 " are matched. If a match occurs, then the conversion\n"
771 " add the most recent revision on the branch indicated in the\n"
735 " process will add the most recent revision on the branch\n"
772 " regex as the second parent of the changeset.\n"
736 " indicated in the regex as the second parent of the\n"
737 " changeset.\n"
738 "\n"
773 "\n"
739 " The hgext/convert/cvsps wrapper script allows the builtin\n"
774 " The hgext/convert/cvsps wrapper script allows the builtin\n"
740 " changeset merging code to be run without doing a conversion. Its\n"
775 " changeset merging code to be run without doing a conversion. Its\n"
@@ -784,7 +819,6 b' msgid ""'
784 " --config convert.p4.startrev=0 (perforce changelist number)\n"
819 " --config convert.p4.startrev=0 (perforce changelist number)\n"
785 " specify initial Perforce revision.\n"
820 " specify initial Perforce revision.\n"
786 "\n"
821 "\n"
787 "\n"
788 " Mercurial Destination\n"
822 " Mercurial Destination\n"
789 " ---------------------\n"
823 " ---------------------\n"
790 "\n"
824 "\n"
@@ -1007,7 +1041,8 b' msgstr "CVS pserver godkendelse fejlede"'
1007 #, python-format
1041 #, python-format
1008 msgid ""
1042 msgid ""
1009 "unexpected response from CVS server (expected \"Valid-requests\", but got %r)"
1043 "unexpected response from CVS server (expected \"Valid-requests\", but got %r)"
1010 msgstr "uventet svar fra CVS serveren (forventede \"Valid-requests\", men fik %r)"
1044 msgstr ""
1045 "uventet svar fra CVS serveren (forventede \"Valid-requests\", men fik %r)"
1011
1046
1012 #, python-format
1047 #, python-format
1013 msgid "%d bytes missing from remote file"
1048 msgid "%d bytes missing from remote file"
@@ -1086,6 +1121,10 b' msgstr ""'
1086 msgid "%d changeset entries\n"
1121 msgid "%d changeset entries\n"
1087 msgstr "%d ændringer\n"
1122 msgstr "%d ændringer\n"
1088
1123
1124 #, python-format
1125 msgid "darcs version 2.1 or newer needed (found %r)"
1126 msgstr ""
1127
1089 msgid "Python ElementTree module is not available"
1128 msgid "Python ElementTree module is not available"
1090 msgstr "Python ElementTree modulet er ikke tilstede"
1129 msgstr "Python ElementTree modulet er ikke tilstede"
1091
1130
@@ -1330,14 +1369,14 b' msgstr ""'
1330 msgid ""
1369 msgid ""
1331 "command to allow external programs to compare revisions\n"
1370 "command to allow external programs to compare revisions\n"
1332 "\n"
1371 "\n"
1333 "The `extdiff' Mercurial extension allows you to use external programs\n"
1372 "The extdiff Mercurial extension allows you to use external programs\n"
1334 "to compare revisions, or revision with working directory. The external diff\n"
1373 "to compare revisions, or revision with working directory. The external\n"
1335 "programs are called with a configurable set of options and two\n"
1374 "diff programs are called with a configurable set of options and two\n"
1336 "non-option arguments: paths to directories containing snapshots of\n"
1375 "non-option arguments: paths to directories containing snapshots of\n"
1337 "files to compare.\n"
1376 "files to compare.\n"
1338 "\n"
1377 "\n"
1339 "The `extdiff' extension also allows to configure new diff commands, so\n"
1378 "The extdiff extension also allows to configure new diff commands, so\n"
1340 "you do not need to type \"hg extdiff -p kdiff3\" always.\n"
1379 "you do not need to type \"hg extdiff -p kdiff3\" always. ::\n"
1341 "\n"
1380 "\n"
1342 " [extdiff]\n"
1381 " [extdiff]\n"
1343 " # add new command that runs GNU diff(1) in 'context diff' mode\n"
1382 " # add new command that runs GNU diff(1) in 'context diff' mode\n"
@@ -1353,14 +1392,13 b' msgid ""'
1353 " meld =\n"
1392 " meld =\n"
1354 "\n"
1393 "\n"
1355 " # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
1394 " # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
1356 " # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
1395 " # (see http://www.vim.org/scripts/script.php?script_id=102) Non\n"
1357 " # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
1396 " # English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n"
1358 "in\n"
1359 " # your .vimrc\n"
1397 " # your .vimrc\n"
1360 " vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
1398 " vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
1361 "\n"
1399 "\n"
1362 "You can use -I/-X and list of file or directory names like normal \"hg\n"
1400 "You can use -I/-X and list of file or directory names like normal \"hg\n"
1363 "diff\" command. The `extdiff' extension makes snapshots of only needed\n"
1401 "diff\" command. The extdiff extension makes snapshots of only needed\n"
1364 "files, so running the external diff program will actually be pretty\n"
1402 "files, so running the external diff program will actually be pretty\n"
1365 "fast (at least faster than having to compare the entire tree).\n"
1403 "fast (at least faster than having to compare the entire tree).\n"
1366 msgstr ""
1404 msgstr ""
@@ -1419,6 +1457,21 b' msgid "hg extdiff [OPT]... [FILE]..."'
1419 msgstr "hg extdiff [TILVALG]... [FIL]..."
1457 msgstr "hg extdiff [TILVALG]... [FIL]..."
1420
1458
1421 #, python-format
1459 #, python-format
1460 msgid ""
1461 "use %(path)s to diff repository (or selected files)\n"
1462 "\n"
1463 " Show differences between revisions for the specified files, using the\n"
1464 " %(path)s program.\n"
1465 "\n"
1466 " When two revision arguments are given, then changes are shown between\n"
1467 " those revisions. If only one revision is specified then that revision "
1468 "is\n"
1469 " compared to the working directory, and, when no revisions are "
1470 "specified,\n"
1471 " the working directory files are compared to its parent."
1472 msgstr ""
1473
1474 #, python-format
1422 msgid "hg %s [OPTION]... [FILE]..."
1475 msgid "hg %s [OPTION]... [FILE]..."
1423 msgstr "hg %s [TILVALG]... [FIL]..."
1476 msgstr "hg %s [TILVALG]... [FIL]..."
1424
1477
@@ -1492,10 +1545,6 b' msgid "merging with %d:%s\\n"'
1492 msgstr "sammenføjer med %d:%s\n"
1545 msgstr "sammenføjer med %d:%s\n"
1493
1546
1494 #, python-format
1547 #, python-format
1495 msgid "Automated merge with %s"
1496 msgstr "Automatisk sammenføjning med %s"
1497
1498 #, python-format
1499 msgid "new changeset %d:%s merges remote changes with local\n"
1548 msgid "new changeset %d:%s merges remote changes with local\n"
1500 msgstr "ny ændring %d:%s fletter fjernændringer sammen med lokale\n"
1549 msgstr "ny ændring %d:%s fletter fjernændringer sammen med lokale\n"
1501
1550
@@ -1576,10 +1625,6 b' msgstr ""'
1576 "arbejdskopien af .hgsigs er ændret (deponer venligst .hgsigs manuelt eller "
1625 "arbejdskopien af .hgsigs er ændret (deponer venligst .hgsigs manuelt eller "
1577 "brug --force)"
1626 "brug --force)"
1578
1627
1579 #, python-format
1580 msgid "Added signature for changeset %s"
1581 msgstr "Tilføjede underskrift af ændring %s"
1582
1583 msgid "unknown signature version"
1628 msgid "unknown signature version"
1584 msgstr "ukendt underskrift-version"
1629 msgstr "ukendt underskrift-version"
1585
1630
@@ -1655,38 +1700,38 b' msgstr "hg glog [TILVALG]... [FIL]"'
1655 msgid ""
1700 msgid ""
1656 "hooks for integrating with the CIA.vc notification service\n"
1701 "hooks for integrating with the CIA.vc notification service\n"
1657 "\n"
1702 "\n"
1658 "This is meant to be run as a changegroup or incoming hook.\n"
1703 "This is meant to be run as a changegroup or incoming hook. To\n"
1659 "To configure it, set the following options in your hgrc:\n"
1704 "configure it, set the following options in your hgrc::\n"
1660 "\n"
1705 "\n"
1661 "[cia]\n"
1706 " [cia]\n"
1662 "# your registered CIA user name\n"
1707 " # your registered CIA user name\n"
1663 "user = foo\n"
1708 " user = foo\n"
1664 "# the name of the project in CIA\n"
1709 " # the name of the project in CIA\n"
1665 "project = foo\n"
1710 " project = foo\n"
1666 "# the module (subproject) (optional)\n"
1711 " # the module (subproject) (optional)\n"
1667 "#module = foo\n"
1712 " #module = foo\n"
1668 "# Append a diffstat to the log message (optional)\n"
1713 " # Append a diffstat to the log message (optional)\n"
1669 "#diffstat = False\n"
1714 " #diffstat = False\n"
1670 "# Template to use for log messages (optional)\n"
1715 " # Template to use for log messages (optional)\n"
1671 "#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
1716 " #template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
1672 "# Style to use (optional)\n"
1717 " # Style to use (optional)\n"
1673 "#style = foo\n"
1718 " #style = foo\n"
1674 "# The URL of the CIA notification service (optional)\n"
1719 " # The URL of the CIA notification service (optional)\n"
1675 "# You can use mailto: URLs to send by email, eg\n"
1720 " # You can use mailto: URLs to send by email, eg\n"
1676 "# mailto:cia@cia.vc\n"
1721 " # mailto:cia@cia.vc\n"
1677 "# Make sure to set email.from if you do this.\n"
1722 " # Make sure to set email.from if you do this.\n"
1678 "#url = http://cia.vc/\n"
1723 " #url = http://cia.vc/\n"
1679 "# print message instead of sending it (optional)\n"
1724 " # print message instead of sending it (optional)\n"
1680 "#test = False\n"
1725 " #test = False\n"
1681 "\n"
1726 "\n"
1682 "[hooks]\n"
1727 " [hooks]\n"
1683 "# one of these:\n"
1728 " # one of these:\n"
1684 "changegroup.cia = python:hgcia.hook\n"
1729 " changegroup.cia = python:hgcia.hook\n"
1685 "#incoming.cia = python:hgcia.hook\n"
1730 " #incoming.cia = python:hgcia.hook\n"
1686 "\n"
1731 "\n"
1687 "[web]\n"
1732 " [web]\n"
1688 "# If you want hyperlinks (optional)\n"
1733 " # If you want hyperlinks (optional)\n"
1689 "baseurl = http://server/path/to/repo\n"
1734 " baseurl = http://server/path/to/repo\n"
1690 msgstr ""
1735 msgstr ""
1691
1736
1692 #, python-format
1737 #, python-format
@@ -1717,19 +1762,19 b' msgid ""'
1717 "\n"
1762 "\n"
1718 "The hg view command will launch the hgk Tcl script. For this command\n"
1763 "The hg view command will launch the hgk Tcl script. For this command\n"
1719 "to work, hgk must be in your search path. Alternately, you can specify\n"
1764 "to work, hgk must be in your search path. Alternately, you can specify\n"
1720 "the path to hgk in your .hgrc file:\n"
1765 "the path to hgk in your .hgrc file::\n"
1721 "\n"
1766 "\n"
1722 " [hgk]\n"
1767 " [hgk]\n"
1723 " path=/location/of/hgk\n"
1768 " path=/location/of/hgk\n"
1724 "\n"
1769 "\n"
1725 "hgk can make use of the extdiff extension to visualize revisions.\n"
1770 "hgk can make use of the extdiff extension to visualize revisions.\n"
1726 "Assuming you had already configured extdiff vdiff command, just add:\n"
1771 "Assuming you had already configured extdiff vdiff command, just add::\n"
1727 "\n"
1772 "\n"
1728 " [hgk]\n"
1773 " [hgk]\n"
1729 " vdiff=vdiff\n"
1774 " vdiff=vdiff\n"
1730 "\n"
1775 "\n"
1731 "Revisions context menu will now display additional entries to fire\n"
1776 "Revisions context menu will now display additional entries to fire\n"
1732 "vdiff on hovered and selected revisions."
1777 "vdiff on hovered and selected revisions.\n"
1733 msgstr ""
1778 msgstr ""
1734
1779
1735 msgid "diff trees from two commits"
1780 msgid "diff trees from two commits"
@@ -1819,10 +1864,10 b' msgid ""'
1819 "It depends on the Pygments syntax highlighting library:\n"
1864 "It depends on the Pygments syntax highlighting library:\n"
1820 "http://pygments.org/\n"
1865 "http://pygments.org/\n"
1821 "\n"
1866 "\n"
1822 "There is a single configuration option:\n"
1867 "There is a single configuration option::\n"
1823 "\n"
1868 "\n"
1824 "[web]\n"
1869 " [web]\n"
1825 "pygments_style = <style>\n"
1870 " pygments_style = <style>\n"
1826 "\n"
1871 "\n"
1827 "The default is 'colorful'.\n"
1872 "The default is 'colorful'.\n"
1828 msgstr ""
1873 msgstr ""
@@ -1831,10 +1876,10 b' msgstr ""'
1831 "Det afhænger af Pygments biblioteket til syntaksfarvelægning:\n"
1876 "Det afhænger af Pygments biblioteket til syntaksfarvelægning:\n"
1832 "http://pygments.org/\n"
1877 "http://pygments.org/\n"
1833 "\n"
1878 "\n"
1834 "Der er en enkelt konfigurationsmulighed:\n"
1879 "Der er en enkelt konfigurationsmulighed::\n"
1835 "\n"
1880 "\n"
1836 "[web]\n"
1881 " [web]\n"
1837 "pygments_style = <stil>\n"
1882 " pygments_style = <stil>\n"
1838 "\n"
1883 "\n"
1839 "Standardstilen er 'colorful'.\n"
1884 "Standardstilen er 'colorful'.\n"
1840 "\n"
1885 "\n"
@@ -1949,10 +1994,6 b' msgid "watching directories under %r\\n"'
1949 msgstr "overvåger kataloger under %r\n"
1994 msgstr "overvåger kataloger under %r\n"
1950
1995
1951 #, python-format
1996 #, python-format
1952 msgid "status: %r dir(%d) -> %s\n"
1953 msgstr ""
1954
1955 #, python-format
1956 msgid "status: %r %s -> %s\n"
1997 msgid "status: %r %s -> %s\n"
1957 msgstr ""
1998 msgstr ""
1958
1999
@@ -2021,12 +2062,12 b' msgstr "afsluttede ops\xc3\xa6tning\\n"'
2021 msgid ""
2062 msgid ""
2022 "expand expressions into changelog and summaries\n"
2063 "expand expressions into changelog and summaries\n"
2023 "\n"
2064 "\n"
2024 "This extension allows the use of a special syntax in summaries,\n"
2065 "This extension allows the use of a special syntax in summaries, which\n"
2025 "which will be automatically expanded into links or any other\n"
2066 "will be automatically expanded into links or any other arbitrary\n"
2026 "arbitrary expression, much like InterWiki does.\n"
2067 "expression, much like InterWiki does.\n"
2027 "\n"
2068 "\n"
2028 "A few example patterns (link to bug tracking, etc.) that may\n"
2069 "A few example patterns (link to bug tracking, etc.) that may be used\n"
2029 "be used in your hgrc:\n"
2070 "in your hgrc::\n"
2030 "\n"
2071 "\n"
2031 " [interhg]\n"
2072 " [interhg]\n"
2032 " issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
2073 " issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
@@ -2056,20 +2097,22 b' msgid ""'
2056 "Configuration is done in the [keyword] and [keywordmaps] sections of\n"
2097 "Configuration is done in the [keyword] and [keywordmaps] sections of\n"
2057 "hgrc files.\n"
2098 "hgrc files.\n"
2058 "\n"
2099 "\n"
2059 "Example:\n"
2100 "Example::\n"
2060 "\n"
2101 "\n"
2061 " [keyword]\n"
2102 " [keyword]\n"
2062 " # expand keywords in every python file except those matching \"x*\"\n"
2103 " # expand keywords in every python file except those matching \"x*\"\n"
2063 " **.py =\n"
2104 " **.py =\n"
2064 " x* = ignore\n"
2105 " x* = ignore\n"
2065 "\n"
2106 "\n"
2066 "Note: the more specific you are in your filename patterns\n"
2107 "NOTE: the more specific you are in your filename patterns the less you\n"
2067 " the less you lose speed in huge repositories.\n"
2108 "lose speed in huge repositories.\n"
2068 "\n"
2109 "\n"
2069 "For [keywordmaps] template mapping and expansion demonstration and\n"
2110 "For [keywordmaps] template mapping and expansion demonstration and\n"
2070 "control run \"hg kwdemo\".\n"
2111 "control run \"hg kwdemo\". See \"hg help templates\" for a list of\n"
2071 "\n"
2112 "available templates and filters.\n"
2072 "An additional date template filter {date|utcdate} is provided.\n"
2113 "\n"
2114 "An additional date template filter {date|utcdate} is provided. It\n"
2115 "returns a date like \"2006/09/18 15:13:13\".\n"
2073 "\n"
2116 "\n"
2074 "The default template mappings (view with \"hg kwdemo -d\") can be\n"
2117 "The default template mappings (view with \"hg kwdemo -d\") can be\n"
2075 "replaced with customized keywords and templates. Again, run \"hg\n"
2118 "replaced with customized keywords and templates. Again, run \"hg\n"
@@ -2088,8 +2131,8 b' msgid ""'
2088 "have been checked in.\n"
2131 "have been checked in.\n"
2089 "\n"
2132 "\n"
2090 "Expansions spanning more than one line and incremental expansions,\n"
2133 "Expansions spanning more than one line and incremental expansions,\n"
2091 "like CVS' $Log$, are not supported. A keyword template map\n"
2134 "like CVS' $Log$, are not supported. A keyword template map \"Log =\n"
2092 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
2135 "{desc}\" expands to the first line of the changeset description.\n"
2093 msgstr ""
2136 msgstr ""
2094
2137
2095 #, python-format
2138 #, python-format
@@ -2112,10 +2155,12 b' msgid ""'
2112 " Show current, custom, or default keyword template maps and their\n"
2155 " Show current, custom, or default keyword template maps and their\n"
2113 " expansions.\n"
2156 " expansions.\n"
2114 "\n"
2157 "\n"
2115 " Extend current configuration by specifying maps as arguments and\n"
2158 " Extend the current configuration by specifying maps as arguments\n"
2116 " optionally by reading from an additional hgrc file.\n"
2159 " and using -f/--rcfile to source an external hgrc file.\n"
2117 "\n"
2160 "\n"
2118 " Override current keyword template maps with \"default\" option.\n"
2161 " Use -d/--default to disable current configuration.\n"
2162 "\n"
2163 " See \"hg help templates\" for information on templates and filters.\n"
2119 " "
2164 " "
2120 msgstr ""
2165 msgstr ""
2121
2166
@@ -2123,25 +2168,50 b' msgstr ""'
2123 msgid "creating temporary repository at %s\n"
2168 msgid "creating temporary repository at %s\n"
2124 msgstr "opretter midlertidigt depot ved %s\n"
2169 msgstr "opretter midlertidigt depot ved %s\n"
2125
2170
2126 #, python-format
2171 msgid ""
2127 msgid ""
2172 "\n"
2128 "\n"
2173 "\tconfiguration using custom keyword template maps\n"
2129 "\tconfig using %s keyword template maps\n"
2174 msgstr ""
2130 msgstr ""
2175 "\n"
2131
2176 "\tkonfiguration med tilpaset nøgleordskabelon\n"
2132 #, python-format
2177
2133 msgid ""
2178 msgid "\textending current template maps\n"
2134 "\n"
2179 msgstr ""
2135 "%s keywords written to %s:\n"
2180
2136 msgstr "\n%s nøgleord skrevet til %s:\n"
2181 msgid "\toverriding default template maps\n"
2182 msgstr "\toverskriver standard skabelon\n"
2183
2184 msgid ""
2185 "\n"
2186 "\tconfiguration using default keyword template maps\n"
2187 msgstr ""
2188 "\n"
2189 "\tkonfiguration med standard nøgleordskabelon\n"
2190
2191 msgid "\tdisabling current template maps\n"
2192 msgstr "deaktiverer nuævrende skabelon\n"
2193
2194 msgid ""
2195 "\n"
2196 "\tconfiguration using current keyword template maps\n"
2197 msgstr ""
2198 "\n"
2199 "\tkonfiguration med nuværende nøgleordskabelon\n"
2200
2201 #, python-format
2202 msgid ""
2203 "\n"
2204 "keywords written to %s:\n"
2205 msgstr ""
2206 "\n"
2207 "nøgleord skrevet til %s:\n"
2137
2208
2138 msgid "unhooked all commit hooks\n"
2209 msgid "unhooked all commit hooks\n"
2139 msgstr ""
2210 msgstr ""
2140
2211
2141 #, python-format
2212 msgid ""
2142 msgid ""
2213 "\n"
2143 "\n"
2214 "\tkeywords expanded\n"
2144 "\t%s keywords expanded%s\n"
2145 msgstr ""
2215 msgstr ""
2146
2216
2147 #, python-format
2217 #, python-format
@@ -2168,8 +2238,8 b' msgid ""'
2168 " [keyword] configuration patterns.\n"
2238 " [keyword] configuration patterns.\n"
2169 "\n"
2239 "\n"
2170 " Useful to prevent inadvertent keyword expansion and to speed up\n"
2240 " Useful to prevent inadvertent keyword expansion and to speed up\n"
2171 " execution by including only files that are actual candidates\n"
2241 " execution by including only files that are actual candidates for\n"
2172 " for expansion.\n"
2242 " expansion.\n"
2173 "\n"
2243 "\n"
2174 " See \"hg help keyword\" on how to construct patterns both for\n"
2244 " See \"hg help keyword\" on how to construct patterns both for\n"
2175 " inclusion and exclusion of files.\n"
2245 " inclusion and exclusion of files.\n"
@@ -2177,11 +2247,12 b' msgid ""'
2177 " Use -u/--untracked to list untracked files as well.\n"
2247 " Use -u/--untracked to list untracked files as well.\n"
2178 "\n"
2248 "\n"
2179 " With -a/--all and -v/--verbose the codes used to show the status\n"
2249 " With -a/--all and -v/--verbose the codes used to show the status\n"
2180 " of files are:\n"
2250 " of files are::\n"
2181 " K = keyword expansion candidate\n"
2251 "\n"
2182 " k = keyword expansion candidate (untracked)\n"
2252 " K = keyword expansion candidate\n"
2183 " I = ignored\n"
2253 " k = keyword expansion candidate (untracked)\n"
2184 " i = ignored (untracked)\n"
2254 " I = ignored\n"
2255 " i = ignored (untracked)\n"
2185 " "
2256 " "
2186 msgstr ""
2257 msgstr ""
2187
2258
@@ -2232,19 +2303,18 b' msgid ""'
2232 "Known patches are represented as patch files in the .hg/patches\n"
2303 "Known patches are represented as patch files in the .hg/patches\n"
2233 "directory. Applied patches are both patch files and changesets.\n"
2304 "directory. Applied patches are both patch files and changesets.\n"
2234 "\n"
2305 "\n"
2235 "Common tasks (use \"hg help command\" for more details):\n"
2306 "Common tasks (use \"hg help command\" for more details)::\n"
2236 "\n"
2307 "\n"
2237 "prepare repository to work with patches qinit\n"
2308 " prepare repository to work with patches qinit\n"
2238 "create new patch qnew\n"
2309 " create new patch qnew\n"
2239 "import existing patch qimport\n"
2310 " import existing patch qimport\n"
2240 "\n"
2311 "\n"
2241 "print patch series qseries\n"
2312 " print patch series qseries\n"
2242 "print applied patches qapplied\n"
2313 " print applied patches qapplied\n"
2243 "print name of top applied patch qtop\n"
2314 "\n"
2244 "\n"
2315 " add known patch to applied stack qpush\n"
2245 "add known patch to applied stack qpush\n"
2316 " remove patch from applied stack qpop\n"
2246 "remove patch from applied stack qpop\n"
2317 " refresh contents of top applied patch qrefresh\n"
2247 "refresh contents of top applied patch qrefresh\n"
2248 msgstr ""
2318 msgstr ""
2249 "håndter en stak af rettelser\n"
2319 "håndter en stak af rettelser\n"
2250 "\n"
2320 "\n"
@@ -2257,19 +2327,18 b' msgstr ""'
2257 "biblioteket. Anvendte rettelser er både rettelse-filer og Mercurial\n"
2327 "biblioteket. Anvendte rettelser er både rettelse-filer og Mercurial\n"
2258 "ændringer.\n"
2328 "ændringer.\n"
2259 "\n"
2329 "\n"
2260 "Almindelige opgaver (brug \"hg help kommado\" for flere detaljer):\n"
2330 "Almindelige opgaver (brug \"hg help kommado\" for flere detaljer)::\n"
2261 "\n"
2331 "\n"
2262 "forbered repository til at arbejde med rettelser qinit\n"
2332 " forbered repository til at arbejde med rettelser qinit\n"
2263 "opret ny rettelse qnew\n"
2333 " opret ny rettelse qnew\n"
2264 "importer eksisterende rettelse qimport\n"
2334 " importer eksisterende rettelse qimport\n"
2265 "\n"
2335 "\n"
2266 "list rettelse-serien qseries\n"
2336 " list rettelse-serien qseries\n"
2267 "list anvendte rettelser qapplied\n"
2337 " list anvendte rettelser qapplied\n"
2268 "list navnet på den øverste rettelse qtop\n"
2338 "\n"
2269 "\n"
2339 " anvend og put rettelse på stakken qpush\n"
2270 "anvend og put rettelse på stakken qpush\n"
2340 " fjern rettelse fra stakken qpop\n"
2271 "fjern rettelse fra stakken qpop\n"
2341 " genopfrisk indholdet af den øverste rettelse qrefresh\n"
2272 "genopfrisk indholdet af den øverste rettelse qrefresh\n"
2273
2342
2274 #, python-format
2343 #, python-format
2275 msgid "%s appears more than once in %s"
2344 msgid "%s appears more than once in %s"
@@ -2503,6 +2572,10 b' msgstr ""'
2503 msgid "deletions found between repo revs"
2572 msgid "deletions found between repo revs"
2504 msgstr ""
2573 msgstr ""
2505
2574
2575 #, python-format
2576 msgid "popping %s\n"
2577 msgstr "fjerner %s\n"
2578
2506 msgid "patch queue now empty\n"
2579 msgid "patch queue now empty\n"
2507 msgstr "køen af rettelser er nu tom\n"
2580 msgstr "køen af rettelser er nu tom\n"
2508
2581
@@ -2619,9 +2692,15 b' msgstr ""'
2619 msgid "print the patches already applied"
2692 msgid "print the patches already applied"
2620 msgstr "udskriver rettelserne som allerede er anvendt"
2693 msgstr "udskriver rettelserne som allerede er anvendt"
2621
2694
2695 msgid "only one patch applied\n"
2696 msgstr "kun én rettelse er anvendt\n"
2697
2622 msgid "print the patches not yet applied"
2698 msgid "print the patches not yet applied"
2623 msgstr "udskriver rettelserne som ikke er anvendt endnu"
2699 msgstr "udskriver rettelserne som ikke er anvendt endnu"
2624
2700
2701 msgid "all patches applied\n"
2702 msgstr "alle rettelser er anvendt\n"
2703
2625 msgid ""
2704 msgid ""
2626 "import a patch\n"
2705 "import a patch\n"
2627 "\n"
2706 "\n"
@@ -2738,15 +2817,9 b' msgstr "udskriver navnet p\xc3\xa5 den nuv\xc3\xa6rende rettelse"'
2738 msgid "print the name of the next patch"
2817 msgid "print the name of the next patch"
2739 msgstr "udskriver navnet på den næste rettelse"
2818 msgstr "udskriver navnet på den næste rettelse"
2740
2819
2741 msgid "all patches applied\n"
2742 msgstr "alle rettelser er anvendt\n"
2743
2744 msgid "print the name of the previous patch"
2820 msgid "print the name of the previous patch"
2745 msgstr "udskriver navnet på den forgående rettelse"
2821 msgstr "udskriver navnet på den forgående rettelse"
2746
2822
2747 msgid "only one patch applied\n"
2748 msgstr "kun én rettelse er anvendt\n"
2749
2750 msgid ""
2823 msgid ""
2751 "create a new patch\n"
2824 "create a new patch\n"
2752 "\n"
2825 "\n"
@@ -3095,8 +3168,11 b' msgstr "kan ikke importere henover en an'
3095 msgid "print first line of patch header"
3168 msgid "print first line of patch header"
3096 msgstr ""
3169 msgstr ""
3097
3170
3098 msgid "hg qapplied [-s] [PATCH]"
3171 msgid "show only the last patch"
3099 msgstr "hg qapplied [-s] [RETTELSE]"
3172 msgstr "vis kun den sidste rettelse"
3173
3174 msgid "hg qapplied [-1] [-s] [PATCH]"
3175 msgstr "hg qapplied [-1] [-s] [RETTELSE]"
3100
3176
3101 msgid "use pull protocol to copy metadata"
3177 msgid "use pull protocol to copy metadata"
3102 msgstr "brug træk-protokol til at kopiere metadata"
3178 msgstr "brug træk-protokol til at kopiere metadata"
@@ -3239,17 +3315,17 b' msgstr "hg qpush [-f] [-l] [-a] [-m] [-n'
3239 msgid "refresh only files already in the patch and specified files"
3315 msgid "refresh only files already in the patch and specified files"
3240 msgstr ""
3316 msgstr ""
3241
3317
3242 msgid "add/update \"From: <current user>\" in patch"
3318 msgid "add/update author field in patch with current user"
3243 msgstr "tilføj/opdater \"From: <aktuel bruger>\" i rettelsen"
3319 msgstr ""
3244
3320
3245 msgid "add/update \"From: <given user>\" in patch"
3321 msgid "add/update author field in patch with given user"
3246 msgstr "tilføj/opdater \"From: <given bruger>\" i rettelsen"
3322 msgstr ""
3247
3323
3248 msgid "update \"Date: <current date>\" in patch (if present)"
3324 msgid "add/update date field in patch with current date"
3249 msgstr "opdater \"Date: <aktuel dato>\" i rettelsen (hvis tilstede)"
3325 msgstr "tilføj/opdater datofeltet i rettelsen med den aktuelle dato"
3250
3326
3251 msgid "update \"Date: <given date>\" in patch (if present)"
3327 msgid "add/update date field in patch with given date"
3252 msgstr "opdater \"Date: <given dato>\" i rettelsen (hvis tilstede)"
3328 msgstr "tilføj/opdater datofeltet i rettelsen med den angivne dato"
3253
3329
3254 msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
3330 msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
3255 msgstr "hg qrefresh [-I] [-X] [-e] [-m TEKST] [-l FIL] [-s] [FIL]..."
3331 msgstr "hg qrefresh [-I] [-X] [-e] [-m TEKST] [-l FIL] [-s] [FIL]..."
@@ -3317,8 +3393,11 b' msgstr "hg strip [-f] [-b] [-n] REV"'
3317 msgid "hg qtop [-s]"
3393 msgid "hg qtop [-s]"
3318 msgstr "hg qtop [-s]"
3394 msgstr "hg qtop [-s]"
3319
3395
3320 msgid "hg qunapplied [-s] [PATCH]"
3396 msgid "show only the first patch"
3321 msgstr "hg qunapplied [-s] [RETTELSE]"
3397 msgstr "vis kun den første rettelse"
3398
3399 msgid "hg qunapplied [-1] [-s] [PATCH]"
3400 msgstr "hg qunapplied [-1] [-s] [RETTELSE]"
3322
3401
3323 msgid "finish all applied changesets"
3402 msgid "finish all applied changesets"
3324 msgstr "afslut alle anvendte ændringer"
3403 msgstr "afslut alle anvendte ændringer"
@@ -3329,65 +3408,66 b' msgstr "hg qfinish [-a] [REV]..."'
3329 msgid ""
3408 msgid ""
3330 "hooks for sending email notifications at commit/push time\n"
3409 "hooks for sending email notifications at commit/push time\n"
3331 "\n"
3410 "\n"
3332 "Subscriptions can be managed through hgrc. Default mode is to print\n"
3411 "Subscriptions can be managed through a hgrc file. Default mode is to\n"
3333 "messages to stdout, for testing and configuring.\n"
3412 "print messages to stdout, for testing and configuring.\n"
3334 "\n"
3413 "\n"
3335 "To use, configure notify extension and enable in hgrc like this:\n"
3414 "To use, configure the notify extension and enable it in hgrc like\n"
3336 "\n"
3415 "this::\n"
3337 " [extensions]\n"
3416 "\n"
3338 " hgext.notify =\n"
3417 " [extensions]\n"
3339 "\n"
3418 " hgext.notify =\n"
3340 " [hooks]\n"
3419 "\n"
3341 " # one email for each incoming changeset\n"
3420 " [hooks]\n"
3342 " incoming.notify = python:hgext.notify.hook\n"
3421 " # one email for each incoming changeset\n"
3343 " # batch emails when many changesets incoming at one time\n"
3422 " incoming.notify = python:hgext.notify.hook\n"
3344 " changegroup.notify = python:hgext.notify.hook\n"
3423 " # batch emails when many changesets incoming at one time\n"
3345 "\n"
3424 " changegroup.notify = python:hgext.notify.hook\n"
3346 " [notify]\n"
3425 "\n"
3347 " # config items go in here\n"
3426 " [notify]\n"
3348 "\n"
3427 " # config items go here\n"
3349 " config items:\n"
3428 "\n"
3350 "\n"
3429 "Required configuration items::\n"
3351 " REQUIRED:\n"
3430 "\n"
3352 " config = /path/to/file # file containing subscriptions\n"
3431 " config = /path/to/file # file containing subscriptions\n"
3353 "\n"
3432 "\n"
3354 " OPTIONAL:\n"
3433 "Optional configuration items::\n"
3355 " test = True # print messages to stdout for testing\n"
3434 "\n"
3356 " strip = 3 # number of slashes to strip for url paths\n"
3435 " test = True # print messages to stdout for testing\n"
3357 " domain = example.com # domain to use if committer missing domain\n"
3436 " strip = 3 # number of slashes to strip for url paths\n"
3358 " style = ... # style file to use when formatting email\n"
3437 " domain = example.com # domain to use if committer missing domain\n"
3359 " template = ... # template to use when formatting email\n"
3438 " style = ... # style file to use when formatting email\n"
3360 " incoming = ... # template to use when run as incoming hook\n"
3439 " template = ... # template to use when formatting email\n"
3361 " changegroup = ... # template when run as changegroup hook\n"
3440 " incoming = ... # template to use when run as incoming hook\n"
3362 " maxdiff = 300 # max lines of diffs to include (0=none, -1=all)\n"
3441 " changegroup = ... # template when run as changegroup hook\n"
3363 " maxsubject = 67 # truncate subject line longer than this\n"
3442 " maxdiff = 300 # max lines of diffs to include (0=none, -1=all)\n"
3364 " diffstat = True # add a diffstat before the diff content\n"
3443 " maxsubject = 67 # truncate subject line longer than this\n"
3365 " sources = serve # notify if source of incoming changes in this "
3444 " diffstat = True # add a diffstat before the diff content\n"
3445 " sources = serve # notify if source of incoming changes in this "
3366 "list\n"
3446 "list\n"
3367 " # (serve == ssh or http, push, pull, bundle)\n"
3447 " # (serve == ssh or http, push, pull, bundle)\n"
3368 " [email]\n"
3448 " [email]\n"
3369 " from = user@host.com # email address to send as if none given\n"
3449 " from = user@host.com # email address to send as if none given\n"
3370 " [web]\n"
3450 " [web]\n"
3371 " baseurl = http://hgserver/... # root of hg web site for browsing commits\n"
3451 " baseurl = http://hgserver/... # root of hg web site for browsing commits\n"
3372 "\n"
3452 "\n"
3373 " notify config file has same format as regular hgrc. it has two\n"
3453 "The notify config file has same format as a regular hgrc file. It has\n"
3374 " sections so you can express subscriptions in whatever way is handier\n"
3454 "two sections so you can express subscriptions in whatever way is\n"
3375 " for you.\n"
3455 "handier for you.\n"
3376 "\n"
3456 "\n"
3377 " [usersubs]\n"
3457 "::\n"
3378 " # key is subscriber email, value is \",\"-separated list of glob "
3458 "\n"
3379 "patterns\n"
3459 " [usersubs]\n"
3380 " user@host = pattern\n"
3460 " # key is subscriber email, value is \",\"-separated list of glob patterns\n"
3381 "\n"
3461 " user@host = pattern\n"
3382 " [reposubs]\n"
3462 "\n"
3383 " # key is glob pattern, value is \",\"-separated list of subscriber "
3463 " [reposubs]\n"
3384 "emails\n"
3464 " # key is glob pattern, value is \",\"-separated list of subscriber emails\n"
3385 " pattern = user@host\n"
3465 " pattern = user@host\n"
3386 "\n"
3466 "\n"
3387 " glob patterns are matched against path to repository root.\n"
3467 "Glob patterns are matched against path to repository root.\n"
3388 "\n"
3468 "\n"
3389 " if you like, you can put notify config file in repository that users\n"
3469 "If you like, you can put notify config file in repository that users\n"
3390 " can push changes to, they can manage their own subscriptions."
3470 "can push changes to, they can manage their own subscriptions.\n"
3391 msgstr ""
3471 msgstr ""
3392
3472
3393 #, python-format
3473 #, python-format
@@ -3423,7 +3503,7 b' msgstr "notify: \xc3\xa6ndringer har kilde \\"%s\\" - springer over\\n"'
3423 msgid ""
3503 msgid ""
3424 "browse command output with an external pager\n"
3504 "browse command output with an external pager\n"
3425 "\n"
3505 "\n"
3426 "To set the pager that should be used, set the application variable:\n"
3506 "To set the pager that should be used, set the application variable::\n"
3427 "\n"
3507 "\n"
3428 " [pager]\n"
3508 " [pager]\n"
3429 " pager = LESS='FSRX' less\n"
3509 " pager = LESS='FSRX' less\n"
@@ -3432,19 +3512,19 b' msgid ""'
3432 "$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
3512 "$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
3433 "\n"
3513 "\n"
3434 "If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
3514 "If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
3435 "setting:\n"
3515 "setting::\n"
3436 "\n"
3516 "\n"
3437 " [pager]\n"
3517 " [pager]\n"
3438 " quiet = True\n"
3518 " quiet = True\n"
3439 "\n"
3519 "\n"
3440 "You can disable the pager for certain commands by adding them to the\n"
3520 "You can disable the pager for certain commands by adding them to the\n"
3441 "pager.ignore list:\n"
3521 "pager.ignore list::\n"
3442 "\n"
3522 "\n"
3443 " [pager]\n"
3523 " [pager]\n"
3444 " ignore = version, help, update\n"
3524 " ignore = version, help, update\n"
3445 "\n"
3525 "\n"
3446 "You can also enable the pager only for certain commands using\n"
3526 "You can also enable the pager only for certain commands using\n"
3447 "pager.attend:\n"
3527 "pager.attend::\n"
3448 "\n"
3528 "\n"
3449 " [pager]\n"
3529 " [pager]\n"
3450 " attend = log\n"
3530 " attend = log\n"
@@ -3461,15 +3541,15 b' msgid ""'
3461 "This extension allows you to use git-style suffixes to refer to the\n"
3541 "This extension allows you to use git-style suffixes to refer to the\n"
3462 "ancestors of a specific revision.\n"
3542 "ancestors of a specific revision.\n"
3463 "\n"
3543 "\n"
3464 "For example, if you can refer to a revision as \"foo\", then:\n"
3544 "For example, if you can refer to a revision as \"foo\", then::\n"
3465 "\n"
3545 "\n"
3466 "- foo^N = Nth parent of foo\n"
3546 " foo^N = Nth parent of foo\n"
3467 " foo^0 = foo\n"
3547 " foo^0 = foo\n"
3468 " foo^1 = first parent of foo\n"
3548 " foo^1 = first parent of foo\n"
3469 " foo^2 = second parent of foo\n"
3549 " foo^2 = second parent of foo\n"
3470 " foo^ = foo^1\n"
3550 " foo^ = foo^1\n"
3471 "\n"
3551 "\n"
3472 "- foo~N = Nth first grandparent of foo\n"
3552 " foo~N = Nth first grandparent of foo\n"
3473 " foo~0 = foo\n"
3553 " foo~0 = foo\n"
3474 " foo~1 = foo^1 = foo^ = first parent of foo\n"
3554 " foo~1 = foo^1 = foo^ = first parent of foo\n"
3475 " foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
3555 " foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
@@ -3485,11 +3565,9 b' msgid ""'
3485 "first line of the changeset description as the subject text. The\n"
3565 "first line of the changeset description as the subject text. The\n"
3486 "message contains two or three body parts:\n"
3566 "message contains two or three body parts:\n"
3487 "\n"
3567 "\n"
3488 " The changeset description.\n"
3568 "- The changeset description.\n"
3489 "\n"
3569 "- [Optional] The result of running diffstat on the patch.\n"
3490 " [Optional] The result of running diffstat on the patch.\n"
3570 "- The patch itself, as generated by \"hg export\".\n"
3491 "\n"
3492 " The patch itself, as generated by \"hg export\".\n"
3493 "\n"
3571 "\n"
3494 "Each message refers to the first in the series using the In-Reply-To\n"
3572 "Each message refers to the first in the series using the In-Reply-To\n"
3495 "and References headers, so they will show up as a sequence in threaded\n"
3573 "and References headers, so they will show up as a sequence in threaded\n"
@@ -3500,7 +3578,7 b' msgid ""'
3500 "you are sending the right changes.\n"
3578 "you are sending the right changes.\n"
3501 "\n"
3579 "\n"
3502 "To configure other defaults, add a section like this to your hgrc\n"
3580 "To configure other defaults, add a section like this to your hgrc\n"
3503 "file:\n"
3581 "file::\n"
3504 "\n"
3582 "\n"
3505 " [email]\n"
3583 " [email]\n"
3506 " from = My Name <my@email>\n"
3584 " from = My Name <my@email>\n"
@@ -3523,13 +3601,13 b' msgid ""'
3523 "patchbomb message in a pager or sending the messages directly, it will\n"
3601 "patchbomb message in a pager or sending the messages directly, it will\n"
3524 "create a UNIX mailbox file with the patch emails. This mailbox file\n"
3602 "create a UNIX mailbox file with the patch emails. This mailbox file\n"
3525 "can be previewed with any mail user agent which supports UNIX mbox\n"
3603 "can be previewed with any mail user agent which supports UNIX mbox\n"
3526 "files, e.g. with mutt:\n"
3604 "files, e.g. with mutt::\n"
3527 "\n"
3605 "\n"
3528 " % mutt -R -f mbox\n"
3606 " % mutt -R -f mbox\n"
3529 "\n"
3607 "\n"
3530 "When you are previewing the patchbomb messages, you can use `formail'\n"
3608 "When you are previewing the patchbomb messages, you can use ``formail``\n"
3531 "(a utility that is commonly installed as part of the procmail\n"
3609 "(a utility that is commonly installed as part of the procmail\n"
3532 "package), to send each message out:\n"
3610 "package), to send each message out::\n"
3533 "\n"
3611 "\n"
3534 " % formail -s sendmail -bm -t < mbox\n"
3612 " % formail -s sendmail -bm -t < mbox\n"
3535 "\n"
3613 "\n"
@@ -3539,7 +3617,7 b' msgid ""'
3539 "to be a sendmail compatible mailer or fill out the [smtp] section so\n"
3617 "to be a sendmail compatible mailer or fill out the [smtp] section so\n"
3540 "that the patchbomb extension can automatically send patchbombs\n"
3618 "that the patchbomb extension can automatically send patchbombs\n"
3541 "directly from the commandline. See the [email] and [smtp] sections in\n"
3619 "directly from the commandline. See the [email] and [smtp] sections in\n"
3542 "hgrc(5) for details."
3620 "hgrc(5) for details.\n"
3543 msgstr ""
3621 msgstr ""
3544
3622
3545 msgid "Please enter a valid value.\n"
3623 msgid "Please enter a valid value.\n"
@@ -3579,23 +3657,24 b' msgid ""'
3579 " single email containing a binary Mercurial bundle as an attachment\n"
3657 " single email containing a binary Mercurial bundle as an attachment\n"
3580 " will be sent.\n"
3658 " will be sent.\n"
3581 "\n"
3659 "\n"
3582 " Examples:\n"
3660 " Examples::\n"
3583 "\n"
3661 "\n"
3584 " hg email -r 3000 # send patch 3000 only\n"
3662 " hg email -r 3000 # send patch 3000 only\n"
3585 " hg email -r 3000 -r 3001 # send patches 3000 and 3001\n"
3663 " hg email -r 3000 -r 3001 # send patches 3000 and 3001\n"
3586 " hg email -r 3000:3005 # send patches 3000 through 3005\n"
3664 " hg email -r 3000:3005 # send patches 3000 through 3005\n"
3587 " hg email 3000 # send patch 3000 (deprecated)\n"
3665 " hg email 3000 # send patch 3000 (deprecated)\n"
3588 "\n"
3666 "\n"
3589 " hg email -o # send all patches not in default\n"
3667 " hg email -o # send all patches not in default\n"
3590 " hg email -o DEST # send all patches not in DEST\n"
3668 " hg email -o DEST # send all patches not in DEST\n"
3591 " hg email -o -r 3000 # send all ancestors of 3000 not in default\n"
3669 " hg email -o -r 3000 # send all ancestors of 3000 not in default\n"
3592 " hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST\n"
3670 " hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST\n"
3593 "\n"
3671 "\n"
3594 " hg email -b # send bundle of all patches not in default\n"
3672 " hg email -b # send bundle of all patches not in default\n"
3595 " hg email -b DEST # send bundle of all patches not in DEST\n"
3673 " hg email -b DEST # send bundle of all patches not in DEST\n"
3596 " hg email -b -r 3000 # bundle of all ancestors of 3000 not in "
3674 " hg email -b -r 3000 # bundle of all ancestors of 3000 not in "
3597 "default\n"
3675 "default\n"
3598 " hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST\n"
3676 " hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in "
3677 "DEST\n"
3599 "\n"
3678 "\n"
3600 " Before using this command, you will need to enable email in your\n"
3679 " Before using this command, you will need to enable email in your\n"
3601 " hgrc. See the [email] section in hgrc(5) for details.\n"
3680 " hgrc. See the [email] section in hgrc(5) for details.\n"
@@ -3674,6 +3753,9 b' msgstr ""'
3674 msgid "message identifier to reply to"
3753 msgid "message identifier to reply to"
3675 msgstr ""
3754 msgstr ""
3676
3755
3756 msgid "flags to add in subject prefixes"
3757 msgstr ""
3758
3677 msgid "email addresses of recipients"
3759 msgid "email addresses of recipients"
3678 msgstr ""
3760 msgstr ""
3679
3761
@@ -3714,13 +3796,16 b' msgid ""'
3714 " and uncommitted changes in an otherwise-clean source tree.\n"
3796 " and uncommitted changes in an otherwise-clean source tree.\n"
3715 "\n"
3797 "\n"
3716 " This means that purge will delete:\n"
3798 " This means that purge will delete:\n"
3717 " - Unknown files: files marked with \"?\" by \"hg status\"\n"
3799 "\n"
3718 " - Empty directories: in fact Mercurial ignores directories unless\n"
3800 " - Unknown files: files marked with \"?\" by \"hg status\"\n"
3719 " they contain files under source control management\n"
3801 " - Empty directories: in fact Mercurial ignores directories unless\n"
3802 " they contain files under source control management\n"
3803 "\n"
3720 " But it will leave untouched:\n"
3804 " But it will leave untouched:\n"
3721 " - Modified and unmodified tracked files\n"
3805 "\n"
3722 " - Ignored files (unless --all is specified)\n"
3806 " - Modified and unmodified tracked files\n"
3723 " - New files added to the repository (with \"hg add\")\n"
3807 " - Ignored files (unless --all is specified)\n"
3808 " - New files added to the repository (with \"hg add\")\n"
3724 "\n"
3809 "\n"
3725 " If directories are given on the command line, only files in these\n"
3810 " If directories are given on the command line, only files in these\n"
3726 " directories are considered.\n"
3811 " directories are considered.\n"
@@ -3770,7 +3855,7 b' msgid ""'
3770 "repository.\n"
3855 "repository.\n"
3771 "\n"
3856 "\n"
3772 "For more information:\n"
3857 "For more information:\n"
3773 "http://mercurial.selenic.com/wiki/RebaseProject\n"
3858 "http://mercurial.selenic.com/wiki/RebaseExtension\n"
3774 msgstr ""
3859 msgstr ""
3775
3860
3776 msgid "first revision, do not change ancestor\n"
3861 msgid "first revision, do not change ancestor\n"
@@ -3789,22 +3874,22 b' msgid ""'
3789 msgstr ""
3874 msgstr ""
3790
3875
3791 msgid "cannot use both abort and continue"
3876 msgid "cannot use both abort and continue"
3792 msgstr ""
3877 msgstr "abort og continue kan ikke angives samtidig"
3793
3878
3794 msgid "cannot use collapse with continue or abort"
3879 msgid "cannot use collapse with continue or abort"
3795 msgstr ""
3880 msgstr "continue eller abort kan ikke angives samtidig med collapse"
3796
3881
3797 msgid "abort and continue do not allow specifying revisions"
3882 msgid "abort and continue do not allow specifying revisions"
3798 msgstr ""
3883 msgstr "abort og continue tillader ikke at der angives revisioner"
3799
3884
3800 msgid "cannot specify both a revision and a base"
3885 msgid "cannot specify both a revision and a base"
3801 msgstr ""
3886 msgstr "man kan ikke angive både en revision og en basis"
3802
3887
3803 msgid "nothing to rebase\n"
3888 msgid "nothing to rebase\n"
3804 msgstr ""
3889 msgstr ""
3805
3890
3806 msgid "cannot use both keepbranches and extrafn"
3891 msgid "cannot use both keepbranches and extrafn"
3807 msgstr ""
3892 msgstr "man kan ikke bruge både keepbranches og extrafn"
3808
3893
3809 msgid "rebase merging completed\n"
3894 msgid "rebase merging completed\n"
3810 msgstr ""
3895 msgstr ""
@@ -3817,7 +3902,7 b' msgstr ""'
3817
3902
3818 #, python-format
3903 #, python-format
3819 msgid "%d revisions have been skipped\n"
3904 msgid "%d revisions have been skipped\n"
3820 msgstr ""
3905 msgstr "sprang %d revisioner over\n"
3821
3906
3822 msgid " set parents\n"
3907 msgid " set parents\n"
3823 msgstr ""
3908 msgstr ""
@@ -3981,30 +4066,9 b' msgstr ""'
3981 msgid "&?"
4066 msgid "&?"
3982 msgstr ""
4067 msgstr ""
3983
4068
3984 msgid "y"
3985 msgstr ""
3986
3987 msgid "?"
3988 msgstr ""
3989
3990 msgid "y - record this change"
4069 msgid "y - record this change"
3991 msgstr ""
4070 msgstr ""
3992
4071
3993 msgid "s"
3994 msgstr ""
3995
3996 msgid "f"
3997 msgstr ""
3998
3999 msgid "d"
4000 msgstr ""
4001
4002 msgid "a"
4003 msgstr ""
4004
4005 msgid "q"
4006 msgstr ""
4007
4008 msgid "user quit"
4072 msgid "user quit"
4009 msgstr "user quit"
4073 msgstr "user quit"
4010
4074
@@ -4015,6 +4079,9 b' msgstr "unders\xc3\xb8g \xc3\xa6ndringer i %s?"'
4015 msgid " and "
4079 msgid " and "
4016 msgstr " og "
4080 msgstr " og "
4017
4081
4082 msgid "y"
4083 msgstr ""
4084
4018 #, python-format
4085 #, python-format
4019 msgid "record this change to %r?"
4086 msgid "record this change to %r?"
4020 msgstr "optag denne ændring i %r?"
4087 msgstr "optag denne ændring i %r?"
@@ -4034,19 +4101,19 b' msgid ""'
4034 " You will be prompted for whether to record changes to each\n"
4101 " You will be prompted for whether to record changes to each\n"
4035 " modified file, and for files with multiple changes, for each\n"
4102 " modified file, and for files with multiple changes, for each\n"
4036 " change to use. For each query, the following responses are\n"
4103 " change to use. For each query, the following responses are\n"
4037 " possible:\n"
4104 " possible::\n"
4038 "\n"
4105 "\n"
4039 " y - record this change\n"
4106 " y - record this change\n"
4040 " n - skip this change\n"
4107 " n - skip this change\n"
4041 "\n"
4108 "\n"
4042 " s - skip remaining changes to this file\n"
4109 " s - skip remaining changes to this file\n"
4043 " f - record remaining changes to this file\n"
4110 " f - record remaining changes to this file\n"
4044 "\n"
4111 "\n"
4045 " d - done, skip remaining changes and files\n"
4112 " d - done, skip remaining changes and files\n"
4046 " a - record all changes to all remaining files\n"
4113 " a - record all changes to all remaining files\n"
4047 " q - quit, recording no changes\n"
4114 " q - quit, recording no changes\n"
4048 "\n"
4115 "\n"
4049 " ? - display help"
4116 " ? - display help"
4050 msgstr ""
4117 msgstr ""
4051
4118
4052 msgid "'mq' extension not loaded"
4119 msgid "'mq' extension not loaded"
@@ -4162,9 +4229,9 b' msgid ""'
4162 "\n"
4229 "\n"
4163 " Selected changesets will be applied on top of the current working\n"
4230 " Selected changesets will be applied on top of the current working\n"
4164 " directory with the log of the original changeset. If --log is\n"
4231 " directory with the log of the original changeset. If --log is\n"
4165 " specified, log messages will have a comment appended of the form:\n"
4232 " specified, log messages will have a comment appended of the form::\n"
4166 "\n"
4233 "\n"
4167 " (transplanted from CHANGESETHASH)\n"
4234 " (transplanted from CHANGESETHASH)\n"
4168 "\n"
4235 "\n"
4169 " You can rewrite the changelog message with the --filter option.\n"
4236 " You can rewrite the changelog message with the --filter option.\n"
4170 " Its argument will be invoked with the current changelog message as\n"
4237 " Its argument will be invoked with the current changelog message as\n"
@@ -4255,19 +4322,22 b' msgid ""'
4255 "operation.\n"
4322 "operation.\n"
4256 "\n"
4323 "\n"
4257 "This extension is useful for:\n"
4324 "This extension is useful for:\n"
4258 " * Japanese Windows users using shift_jis encoding.\n"
4325 "\n"
4259 " * Chinese Windows users using big5 encoding.\n"
4326 "- Japanese Windows users using shift_jis encoding.\n"
4260 " * All users who use a repository with one of problematic encodings on\n"
4327 "- Chinese Windows users using big5 encoding.\n"
4261 " case-insensitive file system.\n"
4328 "- All users who use a repository with one of problematic encodings on\n"
4329 " case-insensitive file system.\n"
4262 "\n"
4330 "\n"
4263 "This extension is not needed for:\n"
4331 "This extension is not needed for:\n"
4264 " * Any user who use only ASCII chars in path.\n"
4332 "\n"
4265 " * Any user who do not use any of problematic encodings.\n"
4333 "- Any user who use only ASCII chars in path.\n"
4334 "- Any user who do not use any of problematic encodings.\n"
4266 "\n"
4335 "\n"
4267 "Note that there are some limitations on using this extension:\n"
4336 "Note that there are some limitations on using this extension:\n"
4268 " * You should use single encoding in one repository.\n"
4337 "\n"
4269 " * You should set same encoding for the repository by locale or\n"
4338 "- You should use single encoding in one repository.\n"
4270 " HGENCODING.\n"
4339 "- You should set same encoding for the repository by locale or\n"
4340 " HGENCODING.\n"
4271 "\n"
4341 "\n"
4272 "Path encoding conversion are done between Unicode and\n"
4342 "Path encoding conversion are done between Unicode and\n"
4273 "encoding.encoding which is decided by Mercurial from current locale\n"
4343 "encoding.encoding which is decided by Mercurial from current locale\n"
@@ -4275,7 +4345,7 b' msgid ""'
4275 msgstr ""
4345 msgstr ""
4276
4346
4277 #, python-format
4347 #, python-format
4278 msgid "[win32mbcs] filename conversion fail with %s encoding\n"
4348 msgid "[win32mbcs] filename conversion failed with %s encoding\n"
4279 msgstr ""
4349 msgstr ""
4280
4350
4281 msgid "[win32mbcs] cannot activate on this platform.\n"
4351 msgid "[win32mbcs] cannot activate on this platform.\n"
@@ -4288,31 +4358,31 b' msgstr ""'
4288 msgid ""
4358 msgid ""
4289 "perform automatic newline conversion\n"
4359 "perform automatic newline conversion\n"
4290 "\n"
4360 "\n"
4291 "To perform automatic newline conversion, use:\n"
4361 "To perform automatic newline conversion, use::\n"
4292 "\n"
4362 "\n"
4293 "[extensions]\n"
4363 " [extensions]\n"
4294 "hgext.win32text =\n"
4364 " hgext.win32text =\n"
4295 "[encode]\n"
4365 " [encode]\n"
4296 "** = cleverencode:\n"
4366 " ** = cleverencode:\n"
4297 "# or ** = macencode:\n"
4367 " # or ** = macencode:\n"
4298 "\n"
4368 "\n"
4299 "[decode]\n"
4369 " [decode]\n"
4300 "** = cleverdecode:\n"
4370 " ** = cleverdecode:\n"
4301 "# or ** = macdecode:\n"
4371 " # or ** = macdecode:\n"
4302 "\n"
4372 "\n"
4303 "If not doing conversion, to make sure you do not commit CRLF/CR by "
4373 "If not doing conversion, to make sure you do not commit CRLF/CR by "
4304 "accident:\n"
4374 "accident::\n"
4305 "\n"
4375 "\n"
4306 "[hooks]\n"
4376 " [hooks]\n"
4307 "pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
4377 " pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
4308 "# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
4378 " # or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
4309 "\n"
4379 "\n"
4310 "To do the same check on a server to prevent CRLF/CR from being\n"
4380 "To do the same check on a server to prevent CRLF/CR from being\n"
4311 "pushed or pulled:\n"
4381 "pushed or pulled::\n"
4312 "\n"
4382 "\n"
4313 "[hooks]\n"
4383 " [hooks]\n"
4314 "pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
4384 " pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
4315 "# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
4385 " # or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
4316 msgstr ""
4386 msgstr ""
4317
4387
4318 #, python-format
4388 #, python-format
@@ -4358,15 +4428,15 b' msgid ""'
4358 "without knowing their actual IP address.\n"
4428 "without knowing their actual IP address.\n"
4359 "\n"
4429 "\n"
4360 "To allow other people to discover your repository using run \"hg serve\"\n"
4430 "To allow other people to discover your repository using run \"hg serve\"\n"
4361 "in your repository.\n"
4431 "in your repository::\n"
4362 "\n"
4432 "\n"
4363 " $ cd test\n"
4433 " $ cd test\n"
4364 " $ hg serve\n"
4434 " $ hg serve\n"
4365 "\n"
4435 "\n"
4366 "You can discover zeroconf enabled repositories by running \"hg paths\".\n"
4436 "You can discover zeroconf enabled repositories by running \"hg paths\"::\n"
4367 "\n"
4437 "\n"
4368 " $ hg paths\n"
4438 " $ hg paths\n"
4369 " zc-test = http://example.com:8000/test\n"
4439 " zc-test = http://example.com:8000/test\n"
4370 msgstr ""
4440 msgstr ""
4371
4441
4372 msgid "archive prefix contains illegal components"
4442 msgid "archive prefix contains illegal components"
@@ -4661,19 +4731,34 b' msgid ""'
4661 " commit.\n"
4731 " commit.\n"
4662 "\n"
4732 "\n"
4663 " Use the -s/--similarity option to detect renamed files. With a\n"
4733 " Use the -s/--similarity option to detect renamed files. With a\n"
4664 " parameter > 0, this compares every removed file with every added\n"
4734 " parameter greater than 0, this compares every removed file with\n"
4665 " file and records those similar enough as renames. This option\n"
4735 " every added file and records those similar enough as renames. This\n"
4666 " takes a percentage between 0 (disabled) and 100 (files must be\n"
4736 " option takes a percentage between 0 (disabled) and 100 (files must\n"
4667 " identical) as its parameter. Detecting renamed files this way can\n"
4737 " be identical) as its parameter. Detecting renamed files this way\n"
4668 " be expensive.\n"
4738 " can be expensive.\n"
4669 " "
4739 " "
4670 msgstr ""
4740 msgstr ""
4741 "tilføj alle nye filer, fjern alle manglende filer\n"
4742 "\n"
4743 " Tilføj alle nye filer og fjern alle manglende filer fra depotet.\n"
4744 "\n"
4745 " Nye filer bliver ignoreret hvis de matcher et af mønstrene i\n"
4746 " .hgignore. Som ved add, så træder disse ændringer først i kræft\n"
4747 " ved næste commit.\n"
4748 "\n"
4749 " Brug -s/--similarity tilvalget for at opdage omdøbte filer. Med en\n"
4750 " parameter større end 0 bliver hver fjernet fil sammenlignet med\n"
4751 " enhver tilføjet fil og filer der er tilstrækkelig ens bliver\n"
4752 " opført som omdøbte. Dette tilvalg tager et procenttal mellem 0\n"
4753 " (slået fra) og 100 (filer skal være identiske) som parameter. At\n"
4754 " opdage omdøbninger på denne måde kan være dyrt.\n"
4755 " "
4671
4756
4672 msgid "similarity must be a number"
4757 msgid "similarity must be a number"
4673 msgstr ""
4758 msgstr "lighedsgrad skal være et tal"
4674
4759
4675 msgid "similarity must be between 0 and 100"
4760 msgid "similarity must be between 0 and 100"
4676 msgstr ""
4761 msgstr "lighedsgrad skal være mellem 0 og 100"
4677
4762
4678 msgid ""
4763 msgid ""
4679 "show changeset information by line for each file\n"
4764 "show changeset information by line for each file\n"
@@ -4705,10 +4790,10 b' msgstr ""'
4705 " "
4790 " "
4706
4791
4707 msgid "at least one filename or pattern is required"
4792 msgid "at least one filename or pattern is required"
4708 msgstr ""
4793 msgstr "kræver mindst et filnavn eller mønster"
4709
4794
4710 msgid "at least one of -n/-c is required for -l"
4795 msgid "at least one of -n/-c is required for -l"
4711 msgstr ""
4796 msgstr "brug af -l kræver mindst en af -n/-c"
4712
4797
4713 #, python-format
4798 #, python-format
4714 msgid "%s: binary file\n"
4799 msgid "%s: binary file\n"
@@ -4721,14 +4806,14 b' msgid ""'
4721 " directory; use -r/--rev to specify a different revision.\n"
4806 " directory; use -r/--rev to specify a different revision.\n"
4722 "\n"
4807 "\n"
4723 " To specify the type of archive to create, use -t/--type. Valid\n"
4808 " To specify the type of archive to create, use -t/--type. Valid\n"
4724 " types are:\n"
4809 " types are::\n"
4725 "\n"
4810 "\n"
4726 " \"files\" (default): a directory full of files\n"
4811 " \"files\" (default): a directory full of files\n"
4727 " \"tar\": tar archive, uncompressed\n"
4812 " \"tar\": tar archive, uncompressed\n"
4728 " \"tbz2\": tar archive, compressed using bzip2\n"
4813 " \"tbz2\": tar archive, compressed using bzip2\n"
4729 " \"tgz\": tar archive, compressed using gzip\n"
4814 " \"tgz\": tar archive, compressed using gzip\n"
4730 " \"uzip\": zip archive, uncompressed\n"
4815 " \"uzip\": zip archive, uncompressed\n"
4731 " \"zip\": zip archive, compressed using deflate\n"
4816 " \"zip\": zip archive, compressed using deflate\n"
4732 "\n"
4817 "\n"
4733 " The exact name of the destination archive or directory is given\n"
4818 " The exact name of the destination archive or directory is given\n"
4734 " using a format string; see 'hg help export' for details.\n"
4819 " using a format string; see 'hg help export' for details.\n"
@@ -4744,10 +4829,10 b' msgid "no working directory: please spec'
4744 msgstr "intet arbejdskatalog: angive venligst en revision"
4829 msgstr "intet arbejdskatalog: angive venligst en revision"
4745
4830
4746 msgid "repository root cannot be destination"
4831 msgid "repository root cannot be destination"
4747 msgstr ""
4832 msgstr "depotets rod kan ikke bruges som destination"
4748
4833
4749 msgid "cannot archive plain files to stdout"
4834 msgid "cannot archive plain files to stdout"
4750 msgstr ""
4835 msgstr "flade filer kan ikke arkiveres til standarduddata"
4751
4836
4752 msgid ""
4837 msgid ""
4753 "reverse effect of earlier changeset\n"
4838 "reverse effect of earlier changeset\n"
@@ -4806,11 +4891,7 b' msgid "%s is not a parent of %s"'
4806 msgstr "%s er ikke forælder til %s"
4891 msgstr "%s er ikke forælder til %s"
4807
4892
4808 msgid "cannot use --parent on non-merge changeset"
4893 msgid "cannot use --parent on non-merge changeset"
4809 msgstr ""
4894 msgstr "kan ikke bruge --parent på en ændringer som ikke er en sammenføjning"
4810
4811 #, python-format
4812 msgid "Backed out changeset %s"
4813 msgstr ""
4814
4895
4815 #, python-format
4896 #, python-format
4816 msgid "changeset %s backs out changeset %s\n"
4897 msgid "changeset %s backs out changeset %s\n"
@@ -4824,7 +4905,7 b' msgid "the backout changeset is a new he'
4824 msgstr ""
4905 msgstr ""
4825
4906
4826 msgid "(use \"backout --merge\" if you want to auto-merge)\n"
4907 msgid "(use \"backout --merge\" if you want to auto-merge)\n"
4827 msgstr ""
4908 msgstr "(brug \"backout --merge\" hvis du vil sammenføje automatisk)\n"
4828
4909
4829 msgid ""
4910 msgid ""
4830 "subdivision search of changesets\n"
4911 "subdivision search of changesets\n"
@@ -4872,7 +4953,7 b' msgid "cannot bisect (no known bad revis'
4872 msgstr ""
4953 msgstr ""
4873
4954
4874 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
4955 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
4875 msgstr ""
4956 msgstr "(formen 'hg bisect <kommando>' er forældet)\n"
4876
4957
4877 msgid "incompatible arguments"
4958 msgid "incompatible arguments"
4878 msgstr "inkompatible argumenter"
4959 msgstr "inkompatible argumenter"
@@ -4883,7 +4964,7 b' msgstr "kan ikke finde program: %s"'
4883
4964
4884 #, python-format
4965 #, python-format
4885 msgid "failed to execute %s"
4966 msgid "failed to execute %s"
4886 msgstr ""
4967 msgstr "kunne ikke køre %s"
4887
4968
4888 #, python-format
4969 #, python-format
4889 msgid "%s killed"
4970 msgid "%s killed"
@@ -4894,8 +4975,8 b' msgid "Changeset %d:%s: %s\\n"'
4894 msgstr "Ændring %d:%s: %s\n"
4975 msgstr "Ændring %d:%s: %s\n"
4895
4976
4896 #, python-format
4977 #, python-format
4897 msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
4978 msgid "Testing changeset %d:%s (%d changesets remaining, ~%d tests)\n"
4898 msgstr "Tester ændring %s:%s (%s ændringer tilbage, ~%s test)\n"
4979 msgstr "Tester ændring %d:%s (%d ændringer tilbage, ~%d test)\n"
4899
4980
4900 msgid ""
4981 msgid ""
4901 "set or show the current branch name\n"
4982 "set or show the current branch name\n"
@@ -4917,10 +4998,27 b' msgid ""'
4917 " 'hg commit --close-branch' to mark this branch as closed.\n"
4998 " 'hg commit --close-branch' to mark this branch as closed.\n"
4918 " "
4999 " "
4919 msgstr ""
5000 msgstr ""
5001 "angiv eller vis navnet på den aktuelle gren\n"
5002 "\n"
5003 " Uden noget argument vises navnet på den nuværende gren. Med et\n"
5004 " argument angives arbejdskatalogets grennavn (grenen eksisterer\n"
5005 " ikke i depotet før næste deponering). Det anbefales at den primære\n"
5006 " udvikling foretages på 'default' grenen.\n"
5007 "\n"
5008 " Med mindre -f/--force bruges, så vil branch ikke lade dig bruge et\n"
5009 " grennavn som allerede eksisterer, selv hvis det er inaktivt.\n"
5010 "\n"
5011 " Brug -C/--clean for at nulstille arbejdskatalogs gren til samme\n"
5012 " gren dets forældre-ændring og derved negere end tidligere ændring.\n"
5013 "\n"
5014 " Brug kommandoen 'hg update' for at skifte til en eksisterende\n"
5015 " gren. Brug 'hg commit --close-branch' for at markere denne gren\n"
5016 " som lukket.\n"
5017 " "
4920
5018
4921 #, python-format
5019 #, python-format
4922 msgid "reset working directory to branch %s\n"
5020 msgid "reset working directory to branch %s\n"
4923 msgstr ""
5021 msgstr "nulstil arbejdskataloget til gren %s\n"
4924
5022
4925 msgid "a branch of the same name already exists (use --force to override)"
5023 msgid "a branch of the same name already exists (use --force to override)"
4926 msgstr ""
5024 msgstr ""
@@ -4996,13 +5094,29 b' msgid ""'
4996 "\n"
5094 "\n"
4997 " Output may be to a file, in which case the name of the file is\n"
5095 " Output may be to a file, in which case the name of the file is\n"
4998 " given using a format string. The formatting rules are the same as\n"
5096 " given using a format string. The formatting rules are the same as\n"
4999 " for the export command, with the following additions:\n"
5097 " for the export command, with the following additions::\n"
5000 "\n"
5098 "\n"
5001 " %s basename of file being printed\n"
5099 " %s basename of file being printed\n"
5002 " %d dirname of file being printed, or '.' if in repository root\n"
5100 " %d dirname of file being printed, or '.' if in repository root\n"
5003 " %p root-relative path name of file being printed\n"
5101 " %p root-relative path name of file being printed\n"
5004 " "
5102 " "
5005 msgstr ""
5103 msgstr ""
5104 "udskriv den aktuelle eller en given revision af filer\n"
5105 "\n"
5106 " Udskriver de angivne filer som de så ud ved den givne revision.\n"
5107 " Hvis der ikke angves en revision, så bruges forældre-revisionen\n"
5108 " til arbejdskataloget, eller spidsen hvis der ikke er hentet noget\n"
5109 " arbejdskatalog.\n"
5110 "\n"
5111 " Output kan gemmes i en fil hvis navn angives med et formatstreng.\n"
5112 " Reglerne for formatteringen er de samme som for export-kommandoen\n"
5113 " med følgende tilføjelser::\n"
5114 "\n"
5115 " %s grundnavn for filen som udskrives\n"
5116 " %d katalognavn for filen som blvier udskrevet\n"
5117 " eller '.' hvis filen er i katalogets rod\n"
5118 " %p rod-relativ sti for filen som bliver udkrevet\n"
5119 " "
5006
5120
5007 msgid ""
5121 msgid ""
5008 "make a copy of an existing repository\n"
5122 "make a copy of an existing repository\n"
@@ -5039,7 +5153,7 b' msgid ""'
5039 " avoid hardlinking.\n"
5153 " avoid hardlinking.\n"
5040 "\n"
5154 "\n"
5041 " In some cases, you can clone repositories and checked out files\n"
5155 " In some cases, you can clone repositories and checked out files\n"
5042 " using full hardlinks with\n"
5156 " using full hardlinks with ::\n"
5043 "\n"
5157 "\n"
5044 " $ cp -al REPO REPOCLONE\n"
5158 " $ cp -al REPO REPOCLONE\n"
5045 "\n"
5159 "\n"
@@ -5049,7 +5163,6 b' msgid ""'
5049 " breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
5163 " breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
5050 " this is not compatible with certain extensions that place their\n"
5164 " this is not compatible with certain extensions that place their\n"
5051 " metadata under the .hg directory, such as mq.\n"
5165 " metadata under the .hg directory, such as mq.\n"
5052 "\n"
5053 " "
5166 " "
5054 msgstr ""
5167 msgstr ""
5055 "lav en kopi af et eksisterende depot\n"
5168 "lav en kopi af et eksisterende depot\n"
@@ -5086,7 +5199,7 b' msgstr ""'
5086 " men rapporterer ingen fejl. I disse tilfælde skal --pull bruges\n"
5199 " men rapporterer ingen fejl. I disse tilfælde skal --pull bruges\n"
5087 " for at undgå hårde lænker.\n"
5200 " for at undgå hårde lænker.\n"
5088 "\n"
5201 "\n"
5089 " I nogle tilfælde kan man klone depoter og udhentede filer med\n"
5202 " I nogle tilfælde kan man klone depoter og udhentede filer med ::\n"
5090 "\n"
5203 "\n"
5091 " $ cp -al DEPOT DEPOTKLON\n"
5204 " $ cp -al DEPOT DEPOTKLON\n"
5092 "\n"
5205 "\n"
@@ -5097,7 +5210,6 b' msgstr ""'
5097 " Linux Kernel værktøjer gør det). Dette er desuden ikke kompatibelt\n"
5210 " Linux Kernel værktøjer gør det). Dette er desuden ikke kompatibelt\n"
5098 " med visse udvidelser som placerer deres metadata under .hg mappen,\n"
5211 " med visse udvidelser som placerer deres metadata under .hg mappen,\n"
5099 " såsom mq.\n"
5212 " såsom mq.\n"
5100 "\n"
5101 " "
5213 " "
5102
5214
5103 msgid ""
5215 msgid ""
@@ -5399,16 +5511,16 b' msgid ""'
5399 " first parent only.\n"
5511 " first parent only.\n"
5400 "\n"
5512 "\n"
5401 " Output may be to a file, in which case the name of the file is\n"
5513 " Output may be to a file, in which case the name of the file is\n"
5402 " given using a format string. The formatting rules are as follows:\n"
5514 " given using a format string. The formatting rules are as follows::\n"
5403 "\n"
5515 "\n"
5404 " %% literal \"%\" character\n"
5516 " %% literal \"%\" character\n"
5405 " %H changeset hash (40 bytes of hexadecimal)\n"
5517 " %H changeset hash (40 bytes of hexadecimal)\n"
5406 " %N number of patches being generated\n"
5518 " %N number of patches being generated\n"
5407 " %R changeset revision number\n"
5519 " %R changeset revision number\n"
5408 " %b basename of the exporting repository\n"
5520 " %b basename of the exporting repository\n"
5409 " %h short-form changeset hash (12 bytes of hexadecimal)\n"
5521 " %h short-form changeset hash (12 bytes of hexadecimal)\n"
5410 " %n zero-padded sequence number, starting at 1\n"
5522 " %n zero-padded sequence number, starting at 1\n"
5411 " %r zero-padded changeset revision number\n"
5523 " %r zero-padded changeset revision number\n"
5412 "\n"
5524 "\n"
5413 " Without the -a/--text option, export will avoid generating diffs\n"
5525 " Without the -a/--text option, export will avoid generating diffs\n"
5414 " of files it detects as binary. With -a, export will generate a\n"
5526 " of files it detects as binary. With -a, export will generate a\n"
@@ -5434,16 +5546,16 b' msgstr ""'
5434 " sammenføjningsændringen med dennes første forælder.\n"
5546 " sammenføjningsændringen med dennes første forælder.\n"
5435 "\n"
5547 "\n"
5436 " Uddata kan gemmes i en fil, og filnavnet er givet ved en\n"
5548 " Uddata kan gemmes i en fil, og filnavnet er givet ved en\n"
5437 " format-streng. Formatteringsreglerne er som følger:\n"
5549 " format-streng. Formatteringsreglerne er som følger::\n"
5438 "\n"
5550 "\n"
5439 " %% litteral % tegn\n"
5551 " %% litteral % tegn\n"
5440 " %H ændringshash (40 byte heksadecimal)\n"
5552 " %H ændringshash (40 byte heksadecimal)\n"
5441 " %N antallet af rettelser som bliver genereret\n"
5553 " %N antallet af rettelser som bliver genereret\n"
5442 " %R revisionnummer for ændringen\n"
5554 " %R revisionnummer for ændringen\n"
5443 " %b grundnavn for det eksporterede depot\n"
5555 " %b grundnavn for det eksporterede depot\n"
5444 " %h kortform ændringshash (12 byte heksadecimal)\n"
5556 " %h kortform ændringshash (12 byte heksadecimal)\n"
5445 " %n nul-fyldt sekvensnummer, startende ved 1\n"
5557 " %n nul-fyldt sekvensnummer, startende ved 1\n"
5446 " %r nul-fyldt revisionsnummer for ændringen\n"
5558 " %r nul-fyldt revisionsnummer for ændringen\n"
5447 "\n"
5559 "\n"
5448 " Uden -a/--text tilvalget vil annotate undgå at behandle filer som\n"
5560 " Uden -a/--text tilvalget vil annotate undgå at behandle filer som\n"
5449 " den detekterer som binære. Med -a vil annotate generere en\n"
5561 " den detekterer som binære. Med -a vil annotate generere en\n"
@@ -5525,24 +5637,29 b' msgid ""'
5525 "\n"
5637 "\n"
5526 " With no arguments, show all repository head changesets.\n"
5638 " With no arguments, show all repository head changesets.\n"
5527 "\n"
5639 "\n"
5528 " Repository \"heads\" are changesets that don't have child\n"
5640 " Repository \"heads\" are changesets with no child changesets. They are\n"
5529 " changesets. They are where development generally takes place and\n"
5641 " where development generally takes place and are the usual targets\n"
5530 " are the usual targets for update and merge operations.\n"
5642 " for update and merge operations.\n"
5531 "\n"
5643 "\n"
5532 " If one or more REV is given, the \"branch heads\" will be shown for\n"
5644 " If one or more REV is given, the \"branch heads\" will be shown for\n"
5533 " the named branch associated with that revision. The name of the\n"
5645 " the named branch associated with the specified changeset(s).\n"
5534 " branch is called the revision's branch tag.\n"
5646 "\n"
5535 "\n"
5647 " Branch heads are changesets on a named branch with no descendants on\n"
5536 " Branch heads are revisions on a given named branch that do not have\n"
5648 " the same branch. A branch head could be a \"true\" (repository) head,\n"
5537 " any descendants on the same branch. A branch head could be a true head\n"
5649 " or it could be the last changeset on that branch before it was\n"
5538 " or it could be the last changeset on a branch before a new branch\n"
5650 " merged into another branch, or it could be the last changeset on the\n"
5539 " was created. If none of the branch heads are true heads, the branch\n"
5651 " branch before a new branch was created. If none of the branch heads\n"
5540 " is considered inactive. If -c/--closed is specified, also show branch\n"
5652 " are true heads, the branch is considered inactive.\n"
5541 " heads marked closed (see hg commit --close-branch).\n"
5653 "\n"
5542 "\n"
5654 " If -c/--closed is specified, also show branch heads marked closed\n"
5543 " If STARTREV is specified only those heads (or branch heads) that\n"
5655 " (see hg commit --close-branch).\n"
5544 " are descendants of STARTREV will be displayed.\n"
5656 "\n"
5545 " "
5657 " If STARTREV is specified, only those heads that are descendants of\n"
5658 " STARTREV will be displayed.\n"
5659 " "
5660 msgstr ""
5661
5662 msgid "you must specify a branch to use --closed"
5546 msgstr ""
5663 msgstr ""
5547
5664
5548 #, python-format
5665 #, python-format
@@ -5616,8 +5733,12 b' msgid "no help text available"'
5616 msgstr "ingen hjælpetekst tilgængelig"
5733 msgstr "ingen hjælpetekst tilgængelig"
5617
5734
5618 #, python-format
5735 #, python-format
5619 msgid "%s extension - %s\n"
5736 msgid ""
5620 msgstr "%s udvidelse - %s\n"
5737 "%s extension - %s\n"
5738 "\n"
5739 msgstr ""
5740 "%s udvidelse - %s\n"
5741 "\n"
5621
5742
5622 msgid "Mercurial Distributed SCM\n"
5743 msgid "Mercurial Distributed SCM\n"
5623 msgstr "Mercurial Distribueret SCM\n"
5744 msgstr "Mercurial Distribueret SCM\n"
@@ -6061,15 +6182,15 b' msgid ""'
6061 "\n"
6182 "\n"
6062 " The following table details the behavior of remove for different\n"
6183 " The following table details the behavior of remove for different\n"
6063 " file states (columns) and option combinations (rows). The file\n"
6184 " file states (columns) and option combinations (rows). The file\n"
6064 " states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
6185 " states are Added [A], Clean [C], Modified [M] and Missing [!] (as\n"
6065 " (as reported by hg status). The actions are Warn, Remove (from\n"
6186 " reported by hg status). The actions are Warn, Remove (from branch)\n"
6066 " branch) and Delete (from disk).\n"
6187 " and Delete (from disk)::\n"
6067 "\n"
6188 "\n"
6068 " A C M !\n"
6189 " A C M !\n"
6069 " none W RD W R\n"
6190 " none W RD W R\n"
6070 " -f R RD RD R\n"
6191 " -f R RD RD R\n"
6071 " -A W W W R\n"
6192 " -A W W W R\n"
6072 " -Af R R R R\n"
6193 " -Af R R R R\n"
6073 "\n"
6194 "\n"
6074 " This command schedules the files to be removed at the next commit.\n"
6195 " This command schedules the files to be removed at the next commit.\n"
6075 " To undo a remove before that, see hg revert.\n"
6196 " To undo a remove before that, see hg revert.\n"
@@ -6089,13 +6210,13 b' msgstr ""'
6089 " filtilstande (søjler) og kombinationer af tilvalg (rækker). Mulige\n"
6210 " filtilstande (søjler) og kombinationer af tilvalg (rækker). Mulige\n"
6090 " filtilstande er tilføjet [A], ren [C], ændret [M] og manglende [!]\n"
6211 " filtilstande er tilføjet [A], ren [C], ændret [M] og manglende [!]\n"
6091 " (som rapporteret af hg status). Handlingerne er Warn, Remove (fra\n"
6212 " (som rapporteret af hg status). Handlingerne er Warn, Remove (fra\n"
6092 " gren) og Delete (fra disk).\n"
6213 " gren) og Delete (fra disk)::\n"
6093 "\n"
6214 "\n"
6094 " A C M !\n"
6215 " A C M !\n"
6095 " none W RD W R\n"
6216 " none W RD W R\n"
6096 " -f R RD RD R\n"
6217 " -f R RD RD R\n"
6097 " -A W W W R\n"
6218 " -A W W W R\n"
6098 " -Af R R R R\n"
6219 " -Af R R R R\n"
6099 "\n"
6220 "\n"
6100 " Denne kommando planlægger filerne til at blive fjernet ved næste\n"
6221 " Denne kommando planlægger filerne til at blive fjernet ved næste\n"
6101 " deponering. For at omgøre en fjernelse før det, se hg revert.\n"
6222 " deponering. For at omgøre en fjernelse før det, se hg revert.\n"
@@ -6149,9 +6270,10 b' msgid ""'
6149 " indicating whether or not files are resolved. All files must be\n"
6270 " indicating whether or not files are resolved. All files must be\n"
6150 " marked as resolved before a commit is permitted.\n"
6271 " marked as resolved before a commit is permitted.\n"
6151 "\n"
6272 "\n"
6152 " The codes used to show the status of files are:\n"
6273 " The codes used to show the status of files are::\n"
6153 " U = unresolved\n"
6274 "\n"
6154 " R = resolved\n"
6275 " U = unresolved\n"
6276 " R = resolved\n"
6155 " "
6277 " "
6156 msgstr ""
6278 msgstr ""
6157
6279
@@ -6245,7 +6367,7 b' msgid ""'
6245 " Transactions are used to encapsulate the effects of all commands\n"
6367 " Transactions are used to encapsulate the effects of all commands\n"
6246 " that create new changesets or propagate existing changesets into a\n"
6368 " that create new changesets or propagate existing changesets into a\n"
6247 " repository. For example, the following commands are transactional,\n"
6369 " repository. For example, the following commands are transactional,\n"
6248 " and their effects can be rolled back:\n"
6370 " and their effects can be rolled back::\n"
6249 "\n"
6371 "\n"
6250 " commit\n"
6372 " commit\n"
6251 " import\n"
6373 " import\n"
@@ -6314,15 +6436,16 b' msgid ""'
6314 " If two revisions are given, the differences between them are\n"
6436 " If two revisions are given, the differences between them are\n"
6315 " shown.\n"
6437 " shown.\n"
6316 "\n"
6438 "\n"
6317 " The codes used to show the status of files are:\n"
6439 " The codes used to show the status of files are::\n"
6318 " M = modified\n"
6440 "\n"
6319 " A = added\n"
6441 " M = modified\n"
6320 " R = removed\n"
6442 " A = added\n"
6321 " C = clean\n"
6443 " R = removed\n"
6322 " ! = missing (deleted by non-hg command, but still tracked)\n"
6444 " C = clean\n"
6323 " ? = not tracked\n"
6445 " ! = missing (deleted by non-hg command, but still tracked)\n"
6324 " I = ignored\n"
6446 " ? = not tracked\n"
6325 " = origin of the previous file listed as A (added)\n"
6447 " I = ignored\n"
6448 " = origin of the previous file listed as A (added)\n"
6326 " "
6449 " "
6327 msgstr ""
6450 msgstr ""
6328 "vis ændrede filer i arbejdskataloget\n"
6451 "vis ændrede filer i arbejdskataloget\n"
@@ -6347,15 +6470,16 b' msgstr ""'
6347 " Hvis der angivet en revision bruges denne som en basisrevision.\n"
6470 " Hvis der angivet en revision bruges denne som en basisrevision.\n"
6348 " Hvis der angives to revisioner, da vises forskellene mellem dem.\n"
6471 " Hvis der angives to revisioner, da vises forskellene mellem dem.\n"
6349 "\n"
6472 "\n"
6350 " Koderne som bruges til at vise status for filerne er:\n"
6473 " Koderne som bruges til at vise status for filerne er::\n"
6351 " M = ændret\n"
6474 "\n"
6352 " A = tilføjet\n"
6475 " M = ændret\n"
6353 " R = fjernet\n"
6476 " A = tilføjet\n"
6354 " C = ren\n"
6477 " R = fjernet\n"
6355 " ! = mangler (slettet af en ikke-hg kommando, men følges stadig)\n"
6478 " C = ren\n"
6356 " ? = følges ikke\n"
6479 " ! = mangler (slettet af en ikke-hg kommando, men følges stadig)\n"
6357 " I = ignoreret\n"
6480 " ? = følges ikke\n"
6358 " = den foregående fil markeret som A (tilføjet) stammer herfra\n"
6481 " I = ignoreret\n"
6482 " = den foregående fil markeret som A (tilføjet) stammer herfra\n"
6359 " "
6483 " "
6360
6484
6361 msgid ""
6485 msgid ""
@@ -6403,17 +6527,9 b' msgid "tag \'%s\' is not a local tag"'
6403 msgstr "mærkaten '%s' er ikke en lokal mærkat"
6527 msgstr "mærkaten '%s' er ikke en lokal mærkat"
6404
6528
6405 #, python-format
6529 #, python-format
6406 msgid "Removed tag %s"
6407 msgstr "Mærke %s er fjernet"
6408
6409 #, python-format
6410 msgid "tag '%s' already exists (use -f to force)"
6530 msgid "tag '%s' already exists (use -f to force)"
6411 msgstr "mærkaten '%s' eksisterer allerede (brug -f for at gennemtvinge)"
6531 msgstr "mærkaten '%s' eksisterer allerede (brug -f for at gennemtvinge)"
6412
6532
6413 #, python-format
6414 msgid "Added tag %s for changeset %s"
6415 msgstr "Tilføjede mærkat %s til ændring %s"
6416
6417 msgid ""
6533 msgid ""
6418 "list repository tags\n"
6534 "list repository tags\n"
6419 "\n"
6535 "\n"
@@ -6511,6 +6627,9 b' msgstr ""'
6511 " Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
6627 " Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
6512 " "
6628 " "
6513
6629
6630 msgid "cannot specify both -c/--check and -C/--clean"
6631 msgstr "man kan ikke angive både -c/--check og -C/--clean"
6632
6514 msgid "uncommitted local changes"
6633 msgid "uncommitted local changes"
6515 msgstr "udeponerede lokale ændringer"
6634 msgstr "udeponerede lokale ændringer"
6516
6635
@@ -6525,6 +6644,14 b' msgid ""'
6525 " integrity of their crosslinks and indices.\n"
6644 " integrity of their crosslinks and indices.\n"
6526 " "
6645 " "
6527 msgstr ""
6646 msgstr ""
6647 "verificer depotets integritet\n"
6648 "\n"
6649 " Verificer integreteten af det aktuelle depot.\n"
6650 "\n"
6651 " Dette vil lave en udførlig kontrol af depotets integritet.\n"
6652 " Hashværdier og tjeksummer valideres for hver indgang i\n"
6653 " historikfilen, manifæstet og fulgte filer. Desuden valideres\n"
6654 " integriteten af deres krydslinks og indekser."
6528
6655
6529 msgid "output version and copyright information"
6656 msgid "output version and copyright information"
6530 msgstr "udskriv version- og copyrightinformation"
6657 msgstr "udskriv version- og copyrightinformation"
@@ -6539,6 +6666,11 b' msgid ""'
6539 "This is free software; see the source for copying conditions. There is NO\n"
6666 "This is free software; see the source for copying conditions. There is NO\n"
6540 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
6667 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
6541 msgstr ""
6668 msgstr ""
6669 "\n"
6670 "Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> og andre\n"
6671 "Dette er frit programmel; se kildekoden for kopieringsbetingelser. Der\n"
6672 "gives INGEN GARANTI; ikke engang for SALGBARHED eller EGNETHED FOR\n"
6673 "NOGET BESTEMT FORMÅL.\n"
6542
6674
6543 msgid "repository root directory or symbolic path name"
6675 msgid "repository root directory or symbolic path name"
6544 msgstr "depotrodfolder eller symbolsk stinavn"
6676 msgstr "depotrodfolder eller symbolsk stinavn"
@@ -6721,10 +6853,10 b' msgid "[-gbsr] [-c CMD] [REV]"'
6721 msgstr "[-gbsr] [-c KOMMANDO] [REV]"
6853 msgstr "[-gbsr] [-c KOMMANDO] [REV]"
6722
6854
6723 msgid "set branch name even if it shadows an existing branch"
6855 msgid "set branch name even if it shadows an existing branch"
6724 msgstr ""
6856 msgstr "sæt grennavnet selv hvis det overskygger en eksisterende gren"
6725
6857
6726 msgid "reset branch name to parent branch name"
6858 msgid "reset branch name to parent branch name"
6727 msgstr ""
6859 msgstr "nulstil grennavnet til forældre-grennavnet"
6728
6860
6729 msgid "[-fC] [NAME]"
6861 msgid "[-fC] [NAME]"
6730 msgstr "[-fC] [NAVN]"
6862 msgstr "[-fC] [NAVN]"
@@ -6732,8 +6864,8 b' msgstr "[-fC] [NAVN]"'
6732 msgid "show only branches that have unmerged heads"
6864 msgid "show only branches that have unmerged heads"
6733 msgstr "vil kun grene som har usammenføjne hoveder"
6865 msgstr "vil kun grene som har usammenføjne hoveder"
6734
6866
6735 msgid "show normal and closed heads"
6867 msgid "show normal and closed branches"
6736 msgstr "vis normale og lukkede hoveder"
6868 msgstr "vis normale og lukkede grene"
6737
6869
6738 msgid "[-a]"
6870 msgid "[-a]"
6739 msgstr "[-a]"
6871 msgstr "[-a]"
@@ -6847,7 +6979,7 b' msgid "[OPTION]... [-r REV1 [-r REV2]] ['
6847 msgstr "[TILVALG]... [-r REV1 [-r REV2]] [FIL]..."
6979 msgstr "[TILVALG]... [-r REV1 [-r REV2]] [FIL]..."
6848
6980
6849 msgid "diff against the second parent"
6981 msgid "diff against the second parent"
6850 msgstr ""
6982 msgstr "find forskelle i forhold til den anden forældre"
6851
6983
6852 msgid "[OPTION]... [-o OUTFILESPEC] REV..."
6984 msgid "[OPTION]... [-o OUTFILESPEC] REV..."
6853 msgstr "[TILVALG]... [-o UDFILSPECIFIKATION] REV..."
6985 msgstr "[TILVALG]... [-o UDFILSPECIFIKATION] REV..."
@@ -6879,8 +7011,11 b' msgstr "[TILVALG]... M\xc3\x98NSTER [FIL]..."'
6879 msgid "show only heads which are descendants of REV"
7011 msgid "show only heads which are descendants of REV"
6880 msgstr "vis kun hoveder som er efterkommere af REV"
7012 msgstr "vis kun hoveder som er efterkommere af REV"
6881
7013
6882 msgid "show only the active heads from open branches"
7014 msgid "show only the active branch heads from open branches"
6883 msgstr "vis kun aktive hoveder fra åbne grene"
7015 msgstr "vis kun de aktive grenhoveder fra åbne grene"
7016
7017 msgid "show normal and closed branch heads"
7018 msgstr "vis normale og lukkede grenhoveder"
6884
7019
6885 msgid "[-r STARTREV] [REV]..."
7020 msgid "[-r STARTREV] [REV]..."
6886 msgstr "[-r STARTREV] [REV]..."
7021 msgstr "[-r STARTREV] [REV]..."
@@ -7459,9 +7594,6 b' msgstr ""'
7459 msgid "&Other"
7594 msgid "&Other"
7460 msgstr ""
7595 msgstr ""
7461
7596
7462 msgid "l"
7463 msgstr "l"
7464
7465 #, python-format
7597 #, python-format
7466 msgid "merging %s and %s to %s\n"
7598 msgid "merging %s and %s to %s\n"
7467 msgstr "føjer %s og %s sammen til %s\n"
7599 msgstr "føjer %s og %s sammen til %s\n"
@@ -7489,9 +7621,6 b' msgstr ""'
7489 msgid "&Yes"
7621 msgid "&Yes"
7490 msgstr ""
7622 msgstr ""
7491
7623
7492 msgid "n"
7493 msgstr ""
7494
7495 #, python-format
7624 #, python-format
7496 msgid "merging %s failed!\n"
7625 msgid "merging %s failed!\n"
7497 msgstr "sammenføjning af %s fejlede!\n"
7626 msgstr "sammenføjning af %s fejlede!\n"
@@ -7512,27 +7641,27 b' msgid ""'
7512 " implement hooks.\n"
7641 " implement hooks.\n"
7513 "\n"
7642 "\n"
7514 " Extensions are not loaded by default for a variety of reasons:\n"
7643 " Extensions are not loaded by default for a variety of reasons:\n"
7515 " they can increase startup overhead; they may be meant for\n"
7644 " they can increase startup overhead; they may be meant for advanced\n"
7516 " advanced usage only; they may provide potentially dangerous\n"
7645 " usage only; they may provide potentially dangerous abilities (such\n"
7517 " abilities (such as letting you destroy or modify history); they\n"
7646 " as letting you destroy or modify history); they might not be ready\n"
7518 " might not be ready for prime time; or they may alter some\n"
7647 " for prime time; or they may alter some usual behaviors of stock\n"
7519 " usual behaviors of stock Mercurial. It is thus up to the user to\n"
7648 " Mercurial. It is thus up to the user to activate extensions as\n"
7520 " activate extensions as needed.\n"
7649 " needed.\n"
7521 "\n"
7650 "\n"
7522 " To enable the \"foo\" extension, either shipped with Mercurial\n"
7651 " To enable the \"foo\" extension, either shipped with Mercurial or in\n"
7523 " or in the Python search path, create an entry for it in your\n"
7652 " the Python search path, create an entry for it in your hgrc, like\n"
7524 " hgrc, like this:\n"
7653 " this::\n"
7525 "\n"
7654 "\n"
7526 " [extensions]\n"
7655 " [extensions]\n"
7527 " foo =\n"
7656 " foo =\n"
7528 "\n"
7657 "\n"
7529 " You may also specify the full path to an extension:\n"
7658 " You may also specify the full path to an extension::\n"
7530 "\n"
7659 "\n"
7531 " [extensions]\n"
7660 " [extensions]\n"
7532 " myfeature = ~/.hgext/myfeature.py\n"
7661 " myfeature = ~/.hgext/myfeature.py\n"
7533 "\n"
7662 "\n"
7534 " To explicitly disable an extension enabled in an hgrc of broader\n"
7663 " To explicitly disable an extension enabled in an hgrc of broader\n"
7535 " scope, prepend its path with !:\n"
7664 " scope, prepend its path with !::\n"
7536 "\n"
7665 "\n"
7537 " [extensions]\n"
7666 " [extensions]\n"
7538 " # disabling extension bar residing in /path/to/extension/bar.py\n"
7667 " # disabling extension bar residing in /path/to/extension/bar.py\n"
@@ -7551,78 +7680,80 b' msgstr "Datoformater"'
7551 msgid ""
7680 msgid ""
7552 "\n"
7681 "\n"
7553 " Some commands allow the user to specify a date, e.g.:\n"
7682 " Some commands allow the user to specify a date, e.g.:\n"
7554 " * backout, commit, import, tag: Specify the commit date.\n"
7683 "\n"
7555 " * log, revert, update: Select revision(s) by date.\n"
7684 " - backout, commit, import, tag: Specify the commit date.\n"
7556 "\n"
7685 " - log, revert, update: Select revision(s) by date.\n"
7557 " Many date formats are valid. Here are some examples:\n"
7686 "\n"
7558 "\n"
7687 " Many date formats are valid. Here are some examples::\n"
7559 " \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n"
7688 "\n"
7560 " \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n"
7689 " \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n"
7561 " \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n"
7690 " \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n"
7562 " \"Dec 6\" (midnight)\n"
7691 " \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n"
7563 " \"13:18\" (today assumed)\n"
7692 " \"Dec 6\" (midnight)\n"
7564 " \"3:39\" (3:39AM assumed)\n"
7693 " \"13:18\" (today assumed)\n"
7565 " \"3:39pm\" (15:39)\n"
7694 " \"3:39\" (3:39AM assumed)\n"
7566 " \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
7695 " \"3:39pm\" (15:39)\n"
7567 " \"2006-12-6 13:18\"\n"
7696 " \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
7568 " \"2006-12-6\"\n"
7697 " \"2006-12-6 13:18\"\n"
7569 " \"12-6\"\n"
7698 " \"2006-12-6\"\n"
7570 " \"12/6\"\n"
7699 " \"12-6\"\n"
7571 " \"12/6/6\" (Dec 6 2006)\n"
7700 " \"12/6\"\n"
7572 "\n"
7701 " \"12/6/6\" (Dec 6 2006)\n"
7573 " Lastly, there is Mercurial's internal format:\n"
7702 "\n"
7574 "\n"
7703 " Lastly, there is Mercurial's internal format::\n"
7575 " \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
7704 "\n"
7705 " \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
7576 "\n"
7706 "\n"
7577 " This is the internal representation format for dates. unixtime is\n"
7707 " This is the internal representation format for dates. unixtime is\n"
7578 " the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
7708 " the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
7579 " offset is the offset of the local timezone, in seconds west of UTC\n"
7709 " offset is the offset of the local timezone, in seconds west of UTC\n"
7580 " (negative if the timezone is east of UTC).\n"
7710 " (negative if the timezone is east of UTC).\n"
7581 "\n"
7711 "\n"
7582 " The log command also accepts date ranges:\n"
7712 " The log command also accepts date ranges::\n"
7583 "\n"
7713 "\n"
7584 " \"<{datetime}\" - at or before a given date/time\n"
7714 " \"<{datetime}\" - at or before a given date/time\n"
7585 " \">{datetime}\" - on or after a given date/time\n"
7715 " \">{datetime}\" - on or after a given date/time\n"
7586 " \"{datetime} to {datetime}\" - a date range, inclusive\n"
7716 " \"{datetime} to {datetime}\" - a date range, inclusive\n"
7587 " \"-{days}\" - within a given number of days of today\n"
7717 " \"-{days}\" - within a given number of days of today\n"
7588 " "
7718 " "
7589 msgstr ""
7719 msgstr ""
7590 "\n"
7720 "\n"
7591 " Nogle kommandoer tillader brugeren at specificere en dato, f.eks.:\n"
7721 " Nogle kommandoer tillader brugeren at specificere en dato, f.eks.:\n"
7592 " * backout, commit, import, tag: specificer commit-datoen.\n"
7722 "\n"
7593 " * log, revert, update: vælg revisioner efter dato.\n"
7723 " - backout, commit, import, tag: specificer commit-datoen.\n"
7594 "\n"
7724 " - log, revert, update: vælg revisioner efter dato.\n"
7595 " Der er mange gyldige datoformater. Her er nogle eksempler:\n"
7725 "\n"
7596 "\n"
7726 " Der er mange gyldige datoformater. Her er nogle eksempler::\n"
7597 " \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n"
7727 "\n"
7598 " \"Dec 6 13:18 -0600\" (antager år, tidszone er angivet)\n"
7728 " \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n"
7599 " \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n"
7729 " \"Dec 6 13:18 -0600\" (antager år, tidszone er angivet)\n"
7600 " \"Dec 6\" (midnat)\n"
7730 " \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n"
7601 " \"13:18\" (antager dags dato)\n"
7731 " \"Dec 6\" (midnat)\n"
7602 " \"3:39\"\n"
7732 " \"13:18\" (antager dags dato)\n"
7603 " \"3:39pm\" (15:39)\n"
7733 " \"3:39\"\n"
7604 " \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
7734 " \"3:39pm\" (15:39)\n"
7605 " \"2006-12-6 13:18\"\n"
7735 " \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
7606 " \"2006-12-6\"\n"
7736 " \"2006-12-6 13:18\"\n"
7607 " \"12-6\"\n"
7737 " \"2006-12-6\"\n"
7608 " \"12/6\"\n"
7738 " \"12-6\"\n"
7609 " \"12/6/6\" (6. dec. 2006)\n"
7739 " \"12/6\"\n"
7610 "\n"
7740 " \"12/6/6\" (6. dec. 2006)\n"
7611 " Endelig er der Mercurials interne format:\n"
7741 "\n"
7612 "\n"
7742 " Endelig er der Mercurials interne format::\n"
7613 " \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n"
7743 "\n"
7744 " \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n"
7614 "\n"
7745 "\n"
7615 " Dette er den interne repræsentation af datoer. unixtime er\n"
7746 " Dette er den interne repræsentation af datoer. unixtime er\n"
7616 " antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n"
7747 " antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n"
7617 " UTC). offset er den lokale tidszone, angivet i antal sekunder vest\n"
7748 " UTC). offset er den lokale tidszone, angivet i antal sekunder vest\n"
7618 " for UTC (negativ hvis tidszonen er øst for UTC).\n"
7749 " for UTC (negativ hvis tidszonen er øst for UTC).\n"
7619 "\n"
7750 "\n"
7620 " Kommandoen log accepterer også datointervaller:\n"
7751 " Kommandoen log accepterer også datointervaller::\n"
7621 "\n"
7752 "\n"
7622 " \"<{date}\" - på eller før den angivne dato/tidspunkt\n"
7753 " \"<{date}\" - på eller før den angivne dato/tidspunkt\n"
7623 " \">{date}\" - på eller efter den angivne dato/tidspunkt\n"
7754 " \">{date}\" - på eller efter den angivne dato/tidspunkt\n"
7624 " \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n"
7755 " \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n"
7625 " \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n"
7756 " \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n"
7626 " "
7757 " "
7627
7758
7628 msgid "File Name Patterns"
7759 msgid "File Name Patterns"
@@ -7643,34 +7774,34 b' msgid ""'
7643 " the current repository root.\n"
7774 " the current repository root.\n"
7644 "\n"
7775 "\n"
7645 " To use an extended glob, start a name with \"glob:\". Globs are\n"
7776 " To use an extended glob, start a name with \"glob:\". Globs are\n"
7646 " rooted at the current directory; a glob such as \"*.c\" will only\n"
7777 " rooted at the current directory; a glob such as \"``*.c``\" will\n"
7647 " match files in the current directory ending with \".c\".\n"
7778 " only match files in the current directory ending with \".c\".\n"
7648 "\n"
7779 "\n"
7649 " The supported glob syntax extensions are \"**\" to match any string\n"
7780 " The supported glob syntax extensions are \"``**``\" to match any\n"
7650 " across path separators and \"{a,b}\" to mean \"a or b\".\n"
7781 " string across path separators and \"{a,b}\" to mean \"a or b\".\n"
7651 "\n"
7782 "\n"
7652 " To use a Perl/Python regular expression, start a name with \"re:\".\n"
7783 " To use a Perl/Python regular expression, start a name with \"re:\".\n"
7653 " Regexp pattern matching is anchored at the root of the repository.\n"
7784 " Regexp pattern matching is anchored at the root of the repository.\n"
7654 "\n"
7785 "\n"
7655 " Plain examples:\n"
7786 " Plain examples::\n"
7656 "\n"
7787 "\n"
7657 " path:foo/bar a name bar in a directory named foo in the root of\n"
7788 " path:foo/bar a name bar in a directory named foo in the root\n"
7658 " the repository\n"
7789 " of the repository\n"
7659 " path:path:name a file or directory named \"path:name\"\n"
7790 " path:path:name a file or directory named \"path:name\"\n"
7660 "\n"
7791 "\n"
7661 " Glob examples:\n"
7792 " Glob examples::\n"
7662 "\n"
7793 "\n"
7663 " glob:*.c any name ending in \".c\" in the current directory\n"
7794 " glob:*.c any name ending in \".c\" in the current directory\n"
7664 " *.c any name ending in \".c\" in the current directory\n"
7795 " *.c any name ending in \".c\" in the current directory\n"
7665 " **.c any name ending in \".c\" in any subdirectory of the\n"
7796 " **.c any name ending in \".c\" in any subdirectory of the\n"
7666 " current directory including itself.\n"
7797 " current directory including itself.\n"
7667 " foo/*.c any name ending in \".c\" in the directory foo\n"
7798 " foo/*.c any name ending in \".c\" in the directory foo\n"
7668 " foo/**.c any name ending in \".c\" in any subdirectory of foo\n"
7799 " foo/**.c any name ending in \".c\" in any subdirectory of foo\n"
7669 " including itself.\n"
7800 " including itself.\n"
7670 "\n"
7801 "\n"
7671 " Regexp examples:\n"
7802 " Regexp examples::\n"
7672 "\n"
7803 "\n"
7673 " re:.*\\.c$ any name ending in \".c\", anywhere in the repository\n"
7804 " re:.*\\.c$ any name ending in \".c\", anywhere in the repository\n"
7674 "\n"
7805 "\n"
7675 " "
7806 " "
7676 msgstr ""
7807 msgstr ""
@@ -7680,25 +7811,25 b' msgstr "Milj\xc3\xb8variable"'
7680
7811
7681 msgid ""
7812 msgid ""
7682 "\n"
7813 "\n"
7683 "HG::\n"
7814 "HG\n"
7684 " Path to the 'hg' executable, automatically passed when running\n"
7815 " Path to the 'hg' executable, automatically passed when running\n"
7685 " hooks, extensions or external tools. If unset or empty, this is\n"
7816 " hooks, extensions or external tools. If unset or empty, this is\n"
7686 " the hg executable's name if it's frozen, or an executable named\n"
7817 " the hg executable's name if it's frozen, or an executable named\n"
7687 " 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
7818 " 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
7688 " Windows) is searched.\n"
7819 " Windows) is searched.\n"
7689 "\n"
7820 "\n"
7690 "HGEDITOR::\n"
7821 "HGEDITOR\n"
7691 " This is the name of the editor to run when committing. See EDITOR.\n"
7822 " This is the name of the editor to run when committing. See EDITOR.\n"
7692 "\n"
7823 "\n"
7693 " (deprecated, use .hgrc)\n"
7824 " (deprecated, use .hgrc)\n"
7694 "\n"
7825 "\n"
7695 "HGENCODING::\n"
7826 "HGENCODING\n"
7696 " This overrides the default locale setting detected by Mercurial.\n"
7827 " This overrides the default locale setting detected by Mercurial.\n"
7697 " This setting is used to convert data including usernames,\n"
7828 " This setting is used to convert data including usernames,\n"
7698 " changeset descriptions, tag names, and branches. This setting can\n"
7829 " changeset descriptions, tag names, and branches. This setting can\n"
7699 " be overridden with the --encoding command-line option.\n"
7830 " be overridden with the --encoding command-line option.\n"
7700 "\n"
7831 "\n"
7701 "HGENCODINGMODE::\n"
7832 "HGENCODINGMODE\n"
7702 " This sets Mercurial's behavior for handling unknown characters\n"
7833 " This sets Mercurial's behavior for handling unknown characters\n"
7703 " while transcoding user input. The default is \"strict\", which\n"
7834 " while transcoding user input. The default is \"strict\", which\n"
7704 " causes Mercurial to abort if it can't map a character. Other\n"
7835 " causes Mercurial to abort if it can't map a character. Other\n"
@@ -7706,45 +7837,46 b' msgid ""'
7706 " \"ignore\", which drops them. This setting can be overridden with\n"
7837 " \"ignore\", which drops them. This setting can be overridden with\n"
7707 " the --encodingmode command-line option.\n"
7838 " the --encodingmode command-line option.\n"
7708 "\n"
7839 "\n"
7709 "HGMERGE::\n"
7840 "HGMERGE\n"
7710 " An executable to use for resolving merge conflicts. The program\n"
7841 " An executable to use for resolving merge conflicts. The program\n"
7711 " will be executed with three arguments: local file, remote file,\n"
7842 " will be executed with three arguments: local file, remote file,\n"
7712 " ancestor file.\n"
7843 " ancestor file.\n"
7713 "\n"
7844 "\n"
7714 " (deprecated, use .hgrc)\n"
7845 " (deprecated, use .hgrc)\n"
7715 "\n"
7846 "\n"
7716 "HGRCPATH::\n"
7847 "HGRCPATH\n"
7717 " A list of files or directories to search for hgrc files. Item\n"
7848 " A list of files or directories to search for hgrc files. Item\n"
7718 " separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n"
7849 " separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n"
7719 " platform default search path is used. If empty, only the .hg/hgrc\n"
7850 " platform default search path is used. If empty, only the .hg/hgrc\n"
7720 " from the current repository is read.\n"
7851 " from the current repository is read.\n"
7721 "\n"
7852 "\n"
7722 " For each element in HGRCPATH:\n"
7853 " For each element in HGRCPATH:\n"
7723 " * if it's a directory, all files ending with .rc are added\n"
7854 "\n"
7724 " * otherwise, the file itself will be added\n"
7855 " - if it's a directory, all files ending with .rc are added\n"
7725 "\n"
7856 " - otherwise, the file itself will be added\n"
7726 "HGUSER::\n"
7857 "\n"
7858 "HGUSER\n"
7727 " This is the string used as the author of a commit. If not set,\n"
7859 " This is the string used as the author of a commit. If not set,\n"
7728 " available values will be considered in this order:\n"
7860 " available values will be considered in this order:\n"
7729 "\n"
7861 "\n"
7730 " * HGUSER (deprecated)\n"
7862 " - HGUSER (deprecated)\n"
7731 " * hgrc files from the HGRCPATH\n"
7863 " - hgrc files from the HGRCPATH\n"
7732 " * EMAIL\n"
7864 " - EMAIL\n"
7733 " * interactive prompt\n"
7865 " - interactive prompt\n"
7734 " * LOGNAME (with '@hostname' appended)\n"
7866 " - LOGNAME (with '@hostname' appended)\n"
7735 "\n"
7867 "\n"
7736 " (deprecated, use .hgrc)\n"
7868 " (deprecated, use .hgrc)\n"
7737 "\n"
7869 "\n"
7738 "EMAIL::\n"
7870 "EMAIL\n"
7739 " May be used as the author of a commit; see HGUSER.\n"
7871 " May be used as the author of a commit; see HGUSER.\n"
7740 "\n"
7872 "\n"
7741 "LOGNAME::\n"
7873 "LOGNAME\n"
7742 " May be used as the author of a commit; see HGUSER.\n"
7874 " May be used as the author of a commit; see HGUSER.\n"
7743 "\n"
7875 "\n"
7744 "VISUAL::\n"
7876 "VISUAL\n"
7745 " This is the name of the editor to use when committing. See EDITOR.\n"
7877 " This is the name of the editor to use when committing. See EDITOR.\n"
7746 "\n"
7878 "\n"
7747 "EDITOR::\n"
7879 "EDITOR\n"
7748 " Sometimes Mercurial needs to open a text file in an editor for a\n"
7880 " Sometimes Mercurial needs to open a text file in an editor for a\n"
7749 " user to modify, for example when writing commit messages. The\n"
7881 " user to modify, for example when writing commit messages. The\n"
7750 " editor it uses is determined by looking at the environment\n"
7882 " editor it uses is determined by looking at the environment\n"
@@ -7752,7 +7884,7 b' msgid ""'
7752 " non-empty one is chosen. If all of them are empty, the editor\n"
7884 " non-empty one is chosen. If all of them are empty, the editor\n"
7753 " defaults to 'vi'.\n"
7885 " defaults to 'vi'.\n"
7754 "\n"
7886 "\n"
7755 "PYTHONPATH::\n"
7887 "PYTHONPATH\n"
7756 " This is used by Python to find imported modules and may need to be\n"
7888 " This is used by Python to find imported modules and may need to be\n"
7757 " set appropriately if this Mercurial is not installed system-wide.\n"
7889 " set appropriately if this Mercurial is not installed system-wide.\n"
7758 " "
7890 " "
@@ -7766,22 +7898,21 b' msgid ""'
7766 " Mercurial supports several ways to specify individual revisions.\n"
7898 " Mercurial supports several ways to specify individual revisions.\n"
7767 "\n"
7899 "\n"
7768 " A plain integer is treated as a revision number. Negative integers\n"
7900 " A plain integer is treated as a revision number. Negative integers\n"
7769 " are treated as topological offsets from the tip, with -1 denoting\n"
7901 " are treated as sequential offsets from the tip, with -1 denoting\n"
7770 " the tip. As such, negative numbers are only useful if you've\n"
7902 " the tip, -2 denoting the revision prior to the tip, and so forth.\n"
7771 " memorized your local tree numbers and want to save typing a single\n"
7772 " digit. This editor suggests copy and paste.\n"
7773 "\n"
7903 "\n"
7774 " A 40-digit hexadecimal string is treated as a unique revision\n"
7904 " A 40-digit hexadecimal string is treated as a unique revision\n"
7775 " identifier.\n"
7905 " identifier.\n"
7776 "\n"
7906 "\n"
7777 " A hexadecimal string less than 40 characters long is treated as a\n"
7907 " A hexadecimal string less than 40 characters long is treated as a\n"
7778 " unique revision identifier, and referred to as a short-form\n"
7908 " unique revision identifier and is referred to as a short-form\n"
7779 " identifier. A short-form identifier is only valid if it is the\n"
7909 " identifier. A short-form identifier is only valid if it is the\n"
7780 " prefix of exactly one full-length identifier.\n"
7910 " prefix of exactly one full-length identifier.\n"
7781 "\n"
7911 "\n"
7782 " Any other string is treated as a tag name, which is a symbolic\n"
7912 " Any other string is treated as a tag or branch name. A tag name is\n"
7783 " name associated with a revision identifier. Tag names may not\n"
7913 " a symbolic name associated with a revision identifier. A branch\n"
7784 " contain the \":\" character.\n"
7914 " name denotes the tipmost revision of that branch. Tag and branch\n"
7915 " names must not contain the \":\" character.\n"
7785 "\n"
7916 "\n"
7786 " The reserved name \"tip\" is a special tag that always identifies\n"
7917 " The reserved name \"tip\" is a special tag that always identifies\n"
7787 " the most recent revision.\n"
7918 " the most recent revision.\n"
@@ -7832,10 +7963,10 b' msgid ""'
7832 " While this standard format is often enough, it does not encode the\n"
7963 " While this standard format is often enough, it does not encode the\n"
7833 " following information:\n"
7964 " following information:\n"
7834 "\n"
7965 "\n"
7835 " - executable status and other permission bits\n"
7966 " - executable status and other permission bits\n"
7836 " - copy or rename information\n"
7967 " - copy or rename information\n"
7837 " - changes in binary files\n"
7968 " - changes in binary files\n"
7838 " - creation or deletion of empty files\n"
7969 " - creation or deletion of empty files\n"
7839 "\n"
7970 "\n"
7840 " Mercurial also supports the extended diff format from the git VCS\n"
7971 " Mercurial also supports the extended diff format from the git VCS\n"
7841 " which addresses these limitations. The git diff format is not\n"
7972 " which addresses these limitations. The git diff format is not\n"
@@ -7873,12 +8004,12 b' msgid ""'
7873 "\n"
8004 "\n"
7874 " Three styles are packaged with Mercurial: default (the style used\n"
8005 " Three styles are packaged with Mercurial: default (the style used\n"
7875 " when no explicit preference is passed), compact and changelog.\n"
8006 " when no explicit preference is passed), compact and changelog.\n"
7876 " Usage:\n"
8007 " Usage::\n"
7877 "\n"
8008 "\n"
7878 " $ hg log -r1 --style changelog\n"
8009 " $ hg log -r1 --style changelog\n"
7879 "\n"
8010 "\n"
7880 " A template is a piece of text, with markup to invoke variable\n"
8011 " A template is a piece of text, with markup to invoke variable\n"
7881 " expansion:\n"
8012 " expansion::\n"
7882 "\n"
8013 "\n"
7883 " $ hg log -r1 --template \"{node}\\n\"\n"
8014 " $ hg log -r1 --template \"{node}\\n\"\n"
7884 " b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
8015 " b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
@@ -7887,78 +8018,93 b' msgid ""'
7887 " keywords depends on the exact context of the templater. These\n"
8018 " keywords depends on the exact context of the templater. These\n"
7888 " keywords are usually available for templating a log-like command:\n"
8019 " keywords are usually available for templating a log-like command:\n"
7889 "\n"
8020 "\n"
7890 " - author: String. The unmodified author of the changeset.\n"
8021 " :author: String. The unmodified author of the changeset.\n"
7891 " - branches: String. The name of the branch on which the changeset\n"
8022 " :branches: String. The name of the branch on which the changeset\n"
7892 " was committed. Will be empty if the branch name was default.\n"
8023 " was committed. Will be empty if the branch name was\n"
7893 " - date: Date information. The date when the changeset was committed.\n"
8024 " default.\n"
7894 " - desc: String. The text of the changeset description.\n"
8025 " :date: Date information. The date when the changeset was\n"
7895 " - diffstat: String. Statistics of changes with the following\n"
8026 " committed.\n"
7896 " format: \"modified files: +added/-removed lines\"\n"
8027 " :desc: String. The text of the changeset description.\n"
7897 " - files: List of strings. All files modified, added, or removed by\n"
8028 " :diffstat: String. Statistics of changes with the following\n"
7898 " this changeset.\n"
8029 " format: \"modified files: +added/-removed lines\"\n"
7899 " - file_adds: List of strings. Files added by this changeset.\n"
8030 " :files: List of strings. All files modified, added, or removed\n"
7900 " - file_mods: List of strings. Files modified by this changeset.\n"
8031 " by this changeset.\n"
7901 " - file_dels: List of strings. Files removed by this changeset.\n"
8032 " :file_adds: List of strings. Files added by this changeset.\n"
7902 " - node: String. The changeset identification hash, as a\n"
8033 " :file_mods: List of strings. Files modified by this changeset.\n"
7903 " 40-character hexadecimal string.\n"
8034 " :file_dels: List of strings. Files removed by this changeset.\n"
7904 " - parents: List of strings. The parents of the changeset.\n"
8035 " :node: String. The changeset identification hash, as a\n"
7905 " - rev: Integer. The repository-local changeset revision number.\n"
8036 " 40-character hexadecimal string.\n"
7906 " - tags: List of strings. Any tags associated with the changeset.\n"
8037 " :parents: List of strings. The parents of the changeset.\n"
8038 " :rev: Integer. The repository-local changeset revision\n"
8039 " number.\n"
8040 " :tags: List of strings. Any tags associated with the\n"
8041 " changeset.\n"
7907 "\n"
8042 "\n"
7908 " The \"date\" keyword does not produce human-readable output. If you\n"
8043 " The \"date\" keyword does not produce human-readable output. If you\n"
7909 " want to use a date in your output, you can use a filter to process\n"
8044 " want to use a date in your output, you can use a filter to process\n"
7910 " it. Filters are functions which return a string based on the input\n"
8045 " it. Filters are functions which return a string based on the input\n"
7911 " variable. You can also use a chain of filters to get the desired\n"
8046 " variable. You can also use a chain of filters to get the desired\n"
7912 " output:\n"
8047 " output::\n"
7913 "\n"
8048 "\n"
7914 " $ hg tip --template \"{date|isodate}\\n\"\n"
8049 " $ hg tip --template \"{date|isodate}\\n\"\n"
7915 " 2008-08-21 18:22 +0000\n"
8050 " 2008-08-21 18:22 +0000\n"
7916 "\n"
8051 "\n"
7917 " List of filters:\n"
8052 " List of filters:\n"
7918 "\n"
8053 "\n"
7919 " - addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
8054 " :addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
7920 " every line except the last.\n"
8055 " every line except the last.\n"
7921 " - age: Date. Returns a human-readable date/time difference between\n"
8056 " :age: Date. Returns a human-readable date/time difference\n"
7922 " the given date/time and the current date/time.\n"
8057 " between the given date/time and the current\n"
7923 " - basename: Any text. Treats the text as a path, and returns the\n"
8058 " date/time.\n"
7924 " last component of the path after splitting by the path\n"
8059 " :basename: Any text. Treats the text as a path, and returns the\n"
7925 " separator (ignoring trailing separators). For example,\n"
8060 " last component of the path after splitting by the\n"
7926 " \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
8061 " path separator (ignoring trailing separators). For\n"
7927 "\".\n"
8062 " example, \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//"
7928 " - stripdir: Treat the text as path and strip a directory level, if\n"
8063 "\"\n"
7929 " possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
8064 " becomes \"bar\".\n"
7930 " - date: Date. Returns a date in a Unix date format, including\n"
8065 " :stripdir: Treat the text as path and strip a directory level,\n"
7931 " the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
8066 " if possible. For example, \"foo\" and \"foo/bar\" becomes\n"
7932 " - domain: Any text. Finds the first string that looks like an\n"
8067 " \"foo\".\n"
7933 " email address, and extracts just the domain component.\n"
8068 " :date: Date. Returns a date in a Unix date format, including\n"
7934 " Example: 'User <user@example.com>' becomes 'example.com'.\n"
8069 " the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
7935 " - email: Any text. Extracts the first string that looks like an\n"
8070 " :domain: Any text. Finds the first string that looks like an\n"
7936 " email address. Example: 'User <user@example.com>' becomes\n"
8071 " email address, and extracts just the domain\n"
7937 " 'user@example.com'.\n"
8072 " component. Example: 'User <user@example.com>' becomes\n"
7938 " - escape: Any text. Replaces the special XML/XHTML characters \"&\",\n"
8073 " 'example.com'.\n"
7939 " \"<\" and \">\" with XML entities.\n"
8074 " :email: Any text. Extracts the first string that looks like\n"
7940 " - fill68: Any text. Wraps the text to fit in 68 columns.\n"
8075 " an email address. Example: 'User <user@example.com>'\n"
7941 " - fill76: Any text. Wraps the text to fit in 76 columns.\n"
8076 " becomes 'user@example.com'.\n"
7942 " - firstline: Any text. Returns the first line of text.\n"
8077 " :escape: Any text. Replaces the special XML/XHTML characters\n"
7943 " - nonempty: Any text. Returns '(none)' if the string is empty.\n"
8078 " \"&\", \"<\" and \">\" with XML entities.\n"
7944 " - hgdate: Date. Returns the date as a pair of numbers:\n"
8079 " :fill68: Any text. Wraps the text to fit in 68 columns.\n"
7945 " \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
8080 " :fill76: Any text. Wraps the text to fit in 76 columns.\n"
7946 " - isodate: Date. Returns the date in ISO 8601 format.\n"
8081 " :firstline: Any text. Returns the first line of text.\n"
7947 " - localdate: Date. Converts a date to local date.\n"
8082 " :nonempty: Any text. Returns '(none)' if the string is empty.\n"
7948 " - obfuscate: Any text. Returns the input text rendered as a\n"
8083 " :hgdate: Date. Returns the date as a pair of numbers:\n"
7949 " sequence of XML entities.\n"
8084 " \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
7950 " - person: Any text. Returns the text before an email address.\n"
8085 " :isodate: Date. Returns the date in ISO 8601 format:\n"
7951 " - rfc822date: Date. Returns a date using the same format used\n"
8086 " \"2009-08-18 13:00 +0200\".\n"
7952 " in email headers.\n"
8087 " :isodatesec: Date. Returns the date in ISO 8601 format, including\n"
7953 " - short: Changeset hash. Returns the short form of a changeset\n"
8088 " seconds: \"2009-08-18 13:00:13 +0200\". See also the\n"
7954 " hash, i.e. a 12-byte hexadecimal string.\n"
8089 " rfc3339date filter.\n"
7955 " - shortdate: Date. Returns a date like \"2006-09-18\".\n"
8090 " :localdate: Date. Converts a date to local date.\n"
7956 " - strip: Any text. Strips all leading and trailing whitespace.\n"
8091 " :obfuscate: Any text. Returns the input text rendered as a\n"
7957 " - tabindent: Any text. Returns the text, with every line except\n"
8092 " sequence of XML entities.\n"
7958 " the first starting with a tab character.\n"
8093 " :person: Any text. Returns the text before an email address.\n"
7959 " - urlescape: Any text. Escapes all \"special\" characters. For\n"
8094 " :rfc822date: Date. Returns a date using the same format used in\n"
7960 " example, \"foo bar\" becomes \"foo%20bar\".\n"
8095 " email headers: \"Tue, 18 Aug 2009 13:00:13 +0200\".\n"
7961 " - user: Any text. Returns the user portion of an email address.\n"
8096 " :rfc3339date: Date. Returns a date using the Internet date format\n"
8097 " specified in RFC 3339: \"2009-08-18T13:00:13+02:00\".\n"
8098 " :short: Changeset hash. Returns the short form of a changeset\n"
8099 " hash, i.e. a 12-byte hexadecimal string.\n"
8100 " :shortdate: Date. Returns a date like \"2006-09-18\".\n"
8101 " :strip: Any text. Strips all leading and trailing whitespace.\n"
8102 " :tabindent: Any text. Returns the text, with every line except\n"
8103 " the first starting with a tab character.\n"
8104 " :urlescape: Any text. Escapes all \"special\" characters. For\n"
8105 " example, \"foo bar\" becomes \"foo%20bar\".\n"
8106 " :user: Any text. Returns the user portion of an email\n"
8107 " address.\n"
7962 " "
8108 " "
7963 msgstr ""
8109 msgstr ""
7964
8110
@@ -7967,7 +8113,7 b' msgstr "URL-stier"'
7967
8113
7968 msgid ""
8114 msgid ""
7969 "\n"
8115 "\n"
7970 " Valid URLs are of the form:\n"
8116 " Valid URLs are of the form::\n"
7971 "\n"
8117 "\n"
7972 " local/filesystem/path[#revision]\n"
8118 " local/filesystem/path[#revision]\n"
7973 " file://local/filesystem/path[#revision]\n"
8119 " file://local/filesystem/path[#revision]\n"
@@ -7976,8 +8122,8 b' msgid ""'
7976 " ssh://[user[:pass]@]host[:port]/[path][#revision]\n"
8122 " ssh://[user[:pass]@]host[:port]/[path][#revision]\n"
7977 "\n"
8123 "\n"
7978 " Paths in the local filesystem can either point to Mercurial\n"
8124 " Paths in the local filesystem can either point to Mercurial\n"
7979 " repositories or to bundle files (as created by 'hg bundle' or\n"
8125 " repositories or to bundle files (as created by 'hg bundle' or 'hg\n"
7980 " 'hg incoming --bundle').\n"
8126 " incoming --bundle').\n"
7981 "\n"
8127 "\n"
7982 " An optional identifier after # indicates a particular branch, tag,\n"
8128 " An optional identifier after # indicates a particular branch, tag,\n"
7983 " or changeset to use from the remote repository. See also 'hg help\n"
8129 " or changeset to use from the remote repository. See also 'hg help\n"
@@ -7988,28 +8134,34 b' msgid ""'
7988 " Mercurial server.\n"
8134 " Mercurial server.\n"
7989 "\n"
8135 "\n"
7990 " Some notes about using SSH with Mercurial:\n"
8136 " Some notes about using SSH with Mercurial:\n"
8137 "\n"
7991 " - SSH requires an accessible shell account on the destination\n"
8138 " - SSH requires an accessible shell account on the destination\n"
7992 " machine and a copy of hg in the remote path or specified with as\n"
8139 " machine and a copy of hg in the remote path or specified with as\n"
7993 " remotecmd.\n"
8140 " remotecmd.\n"
7994 " - path is relative to the remote user's home directory by default.\n"
8141 " - path is relative to the remote user's home directory by default.\n"
7995 " Use an extra slash at the start of a path to specify an absolute "
8142 " Use an extra slash at the start of a path to specify an absolute\n"
7996 "path:\n"
8143 " path::\n"
8144 "\n"
7997 " ssh://example.com//tmp/repository\n"
8145 " ssh://example.com//tmp/repository\n"
8146 "\n"
7998 " - Mercurial doesn't use its own compression via SSH; the right\n"
8147 " - Mercurial doesn't use its own compression via SSH; the right\n"
7999 " thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
8148 " thing to do is to configure it in your ~/.ssh/config, e.g.::\n"
8149 "\n"
8000 " Host *.mylocalnetwork.example.com\n"
8150 " Host *.mylocalnetwork.example.com\n"
8001 " Compression no\n"
8151 " Compression no\n"
8002 " Host *\n"
8152 " Host *\n"
8003 " Compression yes\n"
8153 " Compression yes\n"
8154 "\n"
8004 " Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
8155 " Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
8005 " or with the --ssh command line option.\n"
8156 " or with the --ssh command line option.\n"
8006 "\n"
8157 "\n"
8007 " These URLs can all be stored in your hgrc with path aliases under\n"
8158 " These URLs can all be stored in your hgrc with path aliases under\n"
8008 " the [paths] section like so:\n"
8159 " the [paths] section like so::\n"
8009 " [paths]\n"
8160 "\n"
8010 " alias1 = URL1\n"
8161 " [paths]\n"
8011 " alias2 = URL2\n"
8162 " alias1 = URL1\n"
8012 " ...\n"
8163 " alias2 = URL2\n"
8164 " ...\n"
8013 "\n"
8165 "\n"
8014 " You can then use the alias for any command that uses a URL (for\n"
8166 " You can then use the alias for any command that uses a URL (for\n"
8015 " example 'hg pull alias1' would pull from the 'alias1' path).\n"
8167 " example 'hg pull alias1' would pull from the 'alias1' path).\n"
@@ -8232,8 +8384,8 b' msgid "cannot create new http repository'
8232 msgstr "kan ikke lave nyt http depot"
8384 msgstr "kan ikke lave nyt http depot"
8233
8385
8234 #, python-format
8386 #, python-format
8235 msgid "%s: ignoring invalid syntax '%s'\n"
8387 msgid "ignoring invalid syntax '%s'"
8236 msgstr "%s: ignorerer ugyldig syntaks '%s'\n"
8388 msgstr "ignorerer ugyldig syntaks '%s'"
8237
8389
8238 #, python-format
8390 #, python-format
8239 msgid "skipping unreadable ignore file '%s': %s\n"
8391 msgid "skipping unreadable ignore file '%s': %s\n"
@@ -8263,17 +8415,6 b' msgid "working copy of .hgtags is change'
8263 msgstr "arbejdskopien af .hgtags er ændret (deponer venligst .hgtags manuelt)"
8415 msgstr "arbejdskopien af .hgtags er ændret (deponer venligst .hgtags manuelt)"
8264
8416
8265 #, python-format
8417 #, python-format
8266 msgid "%s, line %s: %s\n"
8267 msgstr "%s, linie %s: %s\n"
8268
8269 msgid "cannot parse entry"
8270 msgstr ""
8271
8272 #, python-format
8273 msgid "node '%s' is not well formed"
8274 msgstr "knude '%s' er ikke korrekt formet"
8275
8276 #, python-format
8277 msgid "working directory has unknown parent '%s'!"
8418 msgid "working directory has unknown parent '%s'!"
8278 msgstr "arbejdsbiblioteket har ukendt forældre '%s'!"
8419 msgstr "arbejdsbiblioteket har ukendt forældre '%s'!"
8279
8420
@@ -8633,9 +8774,6 b' msgstr ""'
8633 msgid "&Delete"
8774 msgid "&Delete"
8634 msgstr ""
8775 msgstr ""
8635
8776
8636 msgid "c"
8637 msgstr ""
8638
8639 #, python-format
8777 #, python-format
8640 msgid ""
8778 msgid ""
8641 "remote changed %s which local deleted\n"
8779 "remote changed %s which local deleted\n"
@@ -8781,6 +8919,10 b' msgid "no valid hunks found; trying with'
8781 msgstr ""
8919 msgstr ""
8782
8920
8783 #, python-format
8921 #, python-format
8922 msgid " %d files changed, %d insertions(+), %d deletions(-)\n"
8923 msgstr "%d filer ændret, %d indsættelser(+), %d sletninger(-)\n"
8924
8925 #, python-format
8784 msgid "exited with status %d"
8926 msgid "exited with status %d"
8785 msgstr "afsluttede med status %d"
8927 msgstr "afsluttede med status %d"
8786
8928
@@ -8909,9 +9051,6 b' msgstr ""'
8909 msgid "&Remote"
9051 msgid "&Remote"
8910 msgstr ""
9052 msgstr ""
8911
9053
8912 msgid "r"
8913 msgstr ""
8914
8915 #, python-format
9054 #, python-format
8916 msgid ""
9055 msgid ""
8917 " local changed subrepository %s which remote removed\n"
9056 " local changed subrepository %s which remote removed\n"
@@ -8936,6 +9075,17 b' msgstr "hiver fra underdepot %s\\n"'
8936 msgid "pushing subrepo %s\n"
9075 msgid "pushing subrepo %s\n"
8937 msgstr "skubber til underdepot %s\n"
9076 msgstr "skubber til underdepot %s\n"
8938
9077
9078 #, python-format
9079 msgid "%s, line %s: %s\n"
9080 msgstr "%s, linie %s: %s\n"
9081
9082 msgid "cannot parse entry"
9083 msgstr ""
9084
9085 #, python-format
9086 msgid "node '%s' is not well formed"
9087 msgstr "knude '%s' er ikke korrekt formet"
9088
8939 msgid "unmatched quotes"
9089 msgid "unmatched quotes"
8940 msgstr ""
9090 msgstr ""
8941
9091
@@ -9001,12 +9151,12 b' msgstr "Angiv venligst et brugernavn."'
9001 msgid "username %s contains a newline\n"
9151 msgid "username %s contains a newline\n"
9002 msgstr "brugernavn %s indeholder et linieskift\n"
9152 msgstr "brugernavn %s indeholder et linieskift\n"
9003
9153
9154 msgid "response expected"
9155 msgstr "svar forventet"
9156
9004 msgid "unrecognized response\n"
9157 msgid "unrecognized response\n"
9005 msgstr "svar ikke genkendt\n"
9158 msgstr "svar ikke genkendt\n"
9006
9159
9007 msgid "response expected"
9008 msgstr "svar forventet"
9009
9010 msgid "password: "
9160 msgid "password: "
9011 msgstr "kodeord: "
9161 msgstr "kodeord: "
9012
9162
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -112,6 +112,11 b' def docstrings(path):'
112 print poentry(path, lineno, func.__doc__)
112 print poentry(path, lineno, func.__doc__)
113
113
114
114
115 def rawtext(path):
116 src = open(path).read()
117 print poentry(path, 1, src)
118
119
115 if __name__ == "__main__":
120 if __name__ == "__main__":
116 # It is very important that we import the Mercurial modules from
121 # It is very important that we import the Mercurial modules from
117 # the source tree where hggettext is executed. Otherwise we might
122 # the source tree where hggettext is executed. Otherwise we might
@@ -120,4 +125,7 b' if __name__ == "__main__":'
120 sys.path.insert(0, os.getcwd())
125 sys.path.insert(0, os.getcwd())
121 from mercurial import demandimport; demandimport.enable()
126 from mercurial import demandimport; demandimport.enable()
122 for path in sys.argv[1:]:
127 for path in sys.argv[1:]:
123 docstrings(path)
128 if path.endswith('.txt'):
129 rawtext(path)
130 else:
131 docstrings(path)
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: 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