# HG changeset patch # User Patrick Mezard # Date 1285280224 -7200 # Node ID 9d45f78c465b18dbe829a3e3764fb42359dec324 # Parent aff4afdcfd2ba82b7c3ad1066336e1b0494b4b89# Parent 84ceedcfeb6a5982f604d6ba57dc4650c8f0b13b Merge with stable diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/bash_completion --- a/contrib/bash_completion Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/bash_completion Fri Sep 24 00:17:04 2010 +0200 @@ -462,6 +462,17 @@ return 1 } +_hg_cmd_qqueue() +{ + local q + local queues + local opts="--list --create --rename --delete --purge" + + queues=$( _hg_cmd qqueue --quiet ) + + COMPREPLY=( $( compgen -W "${opts} ${queues}" "${cur}" ) ) +} + # hbisect _hg_cmd_bisect() diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/check-code.py --- a/contrib/check-code.py Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/check-code.py Fri Sep 24 00:17:04 2010 +0200 @@ -7,7 +7,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import re, glob +import re, glob, os, sys import optparse def repquote(m): @@ -63,6 +63,7 @@ (r'export.*=', "don't export and assign at once"), ('^([^"\']|("[^"]*")|(\'[^\']*\'))*\\^', "^ must be quoted"), (r'^source\b', "don't use 'source', use '.'"), + (r'touch -d', "don't use 'touch -d', use 'touch -t' instead"), ] testfilters = [ @@ -70,13 +71,42 @@ (r"<<(\S+)((.|\n)*?\n\1)", rephere), ] +uprefix = r"^ \$ " +utestpats = [ + (uprefix + r'.*\|\s*sed', "use regex test output patterns instead of sed"), + (uprefix + r'(true|exit 0)', "explicit zero exit unnecessary"), + (uprefix + r'.*\$\?', "explicit exit code checks unnecessary"), + (uprefix + r'.*\|\| echo.*(fail|error)', + "explicit exit code checks unnecessary"), + (uprefix + r'set -e', "don't use set -e"), +] + +for p, m in testpats: + if p.startswith('^'): + p = uprefix + p[1:] + else: + p = uprefix + p + utestpats.append((p, m)) + +utestfilters = [ + (r"( *)(#([^\n]*\S)?)", repcomment), +] + pypats = [ + (r'^\s*def\s*\w+\s*\(.*,\s*\(', + "tuple parameter unpacking not available in Python 3+"), + (r'lambda\s*\(.*,.*\)', + "tuple parameter unpacking not available in Python 3+"), + (r'(?]\w', "missing whitespace in expression"), (r'^\s+\w+=\w+[^,)]$', "missing whitespace in assignment"), (r'.{85}', "line too long"), + (r'.{81}', "warning: line over 80 characters"), (r'[^\n]\Z', "no trailing newline"), # (r'^\s+[^_ ][^_. ]+_[^_]+\s*=', "don't use underbars in identifiers"), # (r'\w*[a-z][A-Z]\w*\s*=', "don't use camelcase in identifiers"), @@ -149,13 +179,14 @@ ('python', r'.*\.(py|cgi)$', pyfilters, pypats), ('test script', r'(.*/)?test-[^.~]*$', testfilters, testpats), ('c', r'.*\.c$', cfilters, cpats), + ('unified test', r'.*\.t$', utestfilters, utestpats), ] class norepeatlogger(object): def __init__(self): self._lastseen = None - def log(self, fname, lineno, line, msg): + def log(self, fname, lineno, line, msg, blame): """print error related a to given line of a given file. The faulty line will also be printed but only once in the case @@ -168,14 +199,26 @@ """ msgid = fname, lineno, line if msgid != self._lastseen: - print "%s:%d:" % (fname, lineno) + if blame: + print "%s:%d (%s):" % (fname, lineno, blame) + else: + print "%s:%d:" % (fname, lineno) print " > %s" % line self._lastseen = msgid print " " + msg _defaultlogger = norepeatlogger() -def checkfile(f, logfunc=_defaultlogger.log, maxerr=None, warnings=False): +def getblame(f): + lines = [] + for l in os.popen('hg annotate -un %s' % f): + start, line = l.split(':', 1) + user, rev = start.split() + lines.append((line[1:-1], user, rev)) + return lines + +def checkfile(f, logfunc=_defaultlogger.log, maxerr=None, warnings=False, + blame=False): """checks style and portability of a given file :f: filepath @@ -186,6 +229,7 @@ return True if no error is found, False otherwise. """ + blamecache = None result = True for name, match, filters, pats in checks: fc = 0 @@ -205,7 +249,16 @@ if not warnings and msg.startswith("warning"): continue if re.search(p, l[1]): - logfunc(f, n + 1, l[0], msg) + bd = "" + if blame: + bd = 'working directory' + if not blamecache: + blamecache = getblame(f) + if n < len(blamecache): + bl, bu, br = blamecache[n] + if bl == l[0]: + bd = '%s@%s' % (bu, br) + logfunc(f, n + 1, l[0], msg, bd) fc += 1 result = False if maxerr is not None and fc >= maxerr: @@ -214,15 +267,16 @@ break return result - if __name__ == "__main__": parser = optparse.OptionParser("%prog [options] [files]") parser.add_option("-w", "--warnings", action="store_true", help="include warning-level checks") parser.add_option("-p", "--per-file", type="int", help="max warnings per file") + parser.add_option("-b", "--blame", action="store_true", + help="use annotate to generate blame info") - parser.set_defaults(per_file=15, warnings=False) + parser.set_defaults(per_file=15, warnings=False, blame=False) (options, args) = parser.parse_args() if len(args) == 0: @@ -231,4 +285,8 @@ check = args for f in check: - checkfile(f, maxerr=options.per_file, warnings=options.warnings) + ret = 0 + if not checkfile(f, maxerr=options.per_file, warnings=options.warnings, + blame=options.blame): + ret = 1 + sys.exit(ret) diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/compress.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/compress.py Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,62 @@ +# Copyright 2010 Pradeepkumar Gayam +# +# Author(s): +# Pradeepkumar Gayam +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + + +from mercurial import hg, localrepo +from mercurial.lock import release +import weakref + +def _copyrevlog(ui, src, dst, tr, progress=None): + if progress: + desc = 'adding %s' % progress + total = len(src) + def progress(count): + ui.progress(desc, count, unit=('revisions'), total=total) + else: + progress = lambda x: None + for r in src: + p = [src.node(i) for i in src.parentrevs(r)] + dst.addrevision(src.revision(src.node(r)), tr, src.linkrev(r), + p[0], p[1]) + progress(r) + +def compress(ui, repo, dest): + # activate parentdelta + ui.setconfig('format', 'parentdelta', 'on') + dest = hg.localpath(ui.expandpath(dest)) + target = localrepo.instance(ui, dest, create=True) + + tr = lock = tlock = None + try: + lock = repo.lock() + tlock = target.lock() + tr = target.transaction("compress") + trp = weakref.proxy(tr) + + _copyrevlog(ui, repo.manifest, target.manifest, trp, 'manifest') + + # only keep indexes and filter "data/" prefix and ".i" suffix + datafiles = [fn[5:-2] for fn, f2, size in repo.store.datafiles() + if size and fn.endswith('.i')] + total = len(datafiles) + for cnt, f in enumerate(datafiles): + _copyrevlog(ui, repo.file(f), target.file(f), trp) + ui.progress(('adding files'), cnt, item=f, unit=('file'), + total=total) + + _copyrevlog(ui, repo.changelog, target.changelog, trp, 'changesets') + + tr.close() + finally: + if tr: + tr.release() + release(tlock, lock) + +cmdtable = { + "compress" : (compress, [], "DEST") + } diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/debugshell.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/debugshell.py Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,21 @@ +# debugshell extension +"""a python shell with repo, changelog & manifest objects""" + +import mercurial +import code + +def debugshell(ui, repo, **opts): + objects = { + 'mercurial': mercurial, + 'repo': repo, + 'cl': repo.changelog, + 'mf': repo.manifest, + } + bannermsg = "loaded repo : %s\n" \ + "using source: %s" % (repo.root, + mercurial.__path__[0]) + code.interact(bannermsg, local=objects) + +cmdtable = { + "debugshell|dbsh": (debugshell, []) +} diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/hgfixes/__init__.py diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/hgfixes/fix_bytes.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/hgfixes/fix_bytes.py Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,97 @@ +"""Fixer that changes plain strings to bytes strings.""" + +import re + +from lib2to3 import fixer_base +from lib2to3.pgen2 import token +from lib2to3.fixer_util import Name +from lib2to3.pygram import python_symbols as syms + +_re = re.compile(r'[rR]?[\'\"]') + +# XXX: Implementing a blacklist in 2to3 turned out to be more troublesome than +# blacklisting some modules inside the fixers. So, this is what I came with. + +blacklist = ['mercurial/demandimport.py', + 'mercurial/py3kcompat.py', # valid python 3 already + 'mercurial/i18n.py', + ] + +def isdocstring(node): + def isclassorfunction(ancestor): + symbols = (syms.funcdef, syms.classdef) + # if the current node is a child of a function definition, a class + # definition or a file, then it is a docstring + if ancestor.type == syms.simple_stmt: + try: + while True: + if ancestor.type in symbols: + return True + ancestor = ancestor.parent + except AttributeError: + return False + return False + + def ismodule(ancestor): + # Our child is a docstring if we are a simple statement, and our + # ancestor is file_input. In other words, our child is a lone string in + # the source file. + try: + if (ancestor.type == syms.simple_stmt and + ancestor.parent.type == syms.file_input): + return True + except AttributeError: + return False + + def isdocassignment(ancestor): + # Assigning to __doc__, definitely a string + try: + while True: + if (ancestor.type == syms.expr_stmt and + Name('__doc__') in ancestor.children): + return True + ancestor = ancestor.parent + except AttributeError: + return False + + if ismodule(node.parent) or \ + isdocassignment(node.parent) or \ + isclassorfunction(node.parent): + return True + return False + +def shouldtransform(node): + specialnames = ['__main__'] + + if node.value in specialnames: + return False + + ggparent = node.parent.parent.parent + sggparent = str(ggparent) + + if 'getattr' in sggparent or \ + 'hasattr' in sggparent or \ + 'setattr' in sggparent or \ + 'encode' in sggparent or \ + 'decode' in sggparent: + return False + + return True + +class FixBytes(fixer_base.BaseFix): + + PATTERN = 'STRING' + + def transform(self, node, results): + if self.filename in blacklist: + return + if node.type == token.STRING: + if _re.match(node.value): + if isdocstring(node): + return + if not shouldtransform(node): + return + new = node.clone() + new.value = 'b' + new.value + return new + diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/hgfixes/fix_bytesmod.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/hgfixes/fix_bytesmod.py Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,63 @@ +"""Fixer that changes bytes % whatever to a function that actually formats +it.""" + +from lib2to3 import fixer_base +from lib2to3.fixer_util import is_tuple, Call, Comma, Name, touch_import + +# XXX: Implementing a blacklist in 2to3 turned out to be more troublesome than +# blacklisting some modules inside the fixers. So, this is what I came with. + +blacklist = ['mercurial/demandimport.py', + 'mercurial/py3kcompat.py', + 'mercurial/i18n.py', + ] + +def isnumberremainder(formatstr, data): + try: + if data.value.isdigit(): + return True + except AttributeError: + return False + +class FixBytesmod(fixer_base.BaseFix): + # XXX: There's one case (I suppose) I can't handle: when a remainder + # operation like foo % bar is performed, I can't really know what the + # contents of foo and bar are. I believe the best approach is to "correct" + # the to-be-converted code and let bytesformatter handle that case in + # runtime. + PATTERN = ''' + term< formatstr=STRING '%' data=STRING > | + term< formatstr=STRING '%' data=atom > | + term< formatstr=NAME '%' data=any > | + term< formatstr=any '%' data=any > + ''' + + def transform(self, node, results): + if self.filename in blacklist: + return + elif self.filename == 'mercurial/util.py': + touch_import('.', 'py3kcompat', node=node) + + formatstr = results['formatstr'].clone() + data = results['data'].clone() + formatstr.prefix = '' # remove spaces from start + + if isnumberremainder(formatstr, data): + return + + # We have two possibilities: + # 1- An identifier or name is passed, it is going to be a leaf, thus, we + # just need to copy its value as an argument to the formatter; + # 2- A tuple is explicitly passed. In this case, we're gonna explode it + # to pass to the formatter + # TODO: Check for normal strings. They don't need to be translated + + if is_tuple(data): + args = [formatstr, Comma().clone()] + \ + [c.clone() for c in data.children[:]] + else: + args = [formatstr, Comma().clone(), data] + + call = Call(Name('bytesformatter', prefix = ' '), args) + return call + diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/hgfixes/fix_leftover_imports.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/hgfixes/fix_leftover_imports.py Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,108 @@ +"Fixer that translates some APIs ignored by the default 2to3 fixers." + +# FIXME: This fixer has some ugly hacks. Its main design is based on that of +# fix_imports, from lib2to3. Unfortunately, the fix_imports framework only +# changes module names "without dots", meaning it won't work for some changes +# in the email module/package. Thus this fixer was born. I believe that with a +# bit more thinking, a more generic fixer can be implemented, but I'll leave +# that as future work. + +from lib2to3.fixer_util import Name +from lib2to3.fixes import fix_imports + +# This maps the old names to the new names. Note that a drawback of the current +# design is that the dictionary keys MUST have EXACTLY one dot (.) in them, +# otherwise things will break. (If you don't need a module hierarchy, you're +# better of just inherit from fix_imports and overriding the MAPPING dict.) + +MAPPING = {'email.Utils': 'email.utils', + 'email.Errors': 'email.errors', + 'email.Header': 'email.header', + 'email.Parser': 'email.parser', + 'email.Encoders': 'email.encoders', + 'email.MIMEText': 'email.mime.text', + 'email.MIMEBase': 'email.mime.base', + 'email.Generator': 'email.generator', + 'email.MIMEMultipart': 'email.mime.multipart', +} + +def alternates(members): + return "(" + "|".join(map(repr, members)) + ")" + +def build_pattern(mapping=MAPPING): + packages = {} + for key in mapping: + # What we are doing here is the following: with dotted names, we'll + # have something like package_name . Then, we are + # making a dictionary to copy this structure. For example, if + # mapping={'A.B': 'a.b', 'A.C': 'a.c'}, it will generate the dictionary + # {'A': ['b', 'c']} to, then, generate something like "A > + """ % mod_list + + yield """name_import=import_name< 'import' + multiple_imports=dotted_as_names< any* + module_name=dotted_name< %s > + any* > + >""" % mod_list + + packs = ' | '.join(["'%s' trailer<'.' ('%s')>" % (key, + "' | '".join(packages[key])) for key in packages]) + + yield "power< package=(%s) trailer<'.' any > any* >" % packs + +class FixLeftoverImports(fix_imports.FixImports): + # We want to run this fixer after fix_import has run (this shouldn't matter + # for hg, though, as setup3k prefers to run the default fixers first) + mapping = MAPPING + + def build_pattern(self): + return "|".join(build_pattern(self.mapping)) + + def transform(self, node, results): + # Mostly copied from fix_imports.py + import_mod = results.get("module_name") + if import_mod: + try: + mod_name = import_mod.value + except AttributeError: + # XXX: A hack to remove whitespace prefixes and suffixes + mod_name = str(import_mod).strip() + new_name = self.mapping[mod_name] + import_mod.replace(Name(new_name, prefix=import_mod.prefix)) + if "name_import" in results: + # If it's not a "from x import x, y" or "import x as y" import, + # marked its usage to be replaced. + self.replace[mod_name] = new_name + if "multiple_imports" in results: + # This is a nasty hack to fix multiple imports on a line (e.g., + # "import StringIO, urlparse"). The problem is that I can't + # figure out an easy way to make a pattern recognize the keys of + # MAPPING randomly sprinkled in an import statement. + results = self.match(node) + if results: + self.transform(node, results) + else: + # Replace usage of the module. + # Now this is, mostly, a hack + bare_name = results["package"][0] + bare_name_text = ''.join(map(str, results['package'])).strip() + new_name = self.replace.get(bare_name_text) + prefix = results['package'][0].prefix + if new_name: + bare_name.replace(Name(new_name, prefix=prefix)) + results["package"][1].replace(Name('')) + diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/mergetools.hgrc --- a/contrib/mergetools.hgrc Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/mergetools.hgrc Fri Sep 24 00:17:04 2010 +0200 @@ -13,6 +13,9 @@ gvimdiff.regname=path gvimdiff.priority=-9 +vimdiff.args=$local $other $base +vimdiff.priority=-10 + merge.checkconflicts=True merge.priority=-100 diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/perf.py --- a/contrib/perf.py Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/perf.py Fri Sep 24 00:17:04 2010 +0200 @@ -133,6 +133,16 @@ title = 'diffopts: %s' % (diffopt and ('-' + diffopt) or 'none') timer(d, title) +def perfrevlog(ui, repo, file_, **opts): + from mercurial import revlog + dist = opts['dist'] + def d(): + r = revlog.revlog(lambda fn: open(fn, 'rb'), file_) + for x in xrange(0, len(r), dist): + r.revision(r.node(x)) + + timer(d) + cmdtable = { 'perflookup': (perflookup, []), 'perfparents': (perfparents, []), @@ -149,4 +159,7 @@ [('', 'rename', False, 'ask log to follow renames')]), 'perftemplating': (perftemplating, []), 'perfdiffwd': (perfdiffwd, []), + 'perfrevlog': (perfrevlog, + [('d', 'dist', 100, 'distance between the revisions')], + "[INDEXFILE]"), } diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/setup3k.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/setup3k.py Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,374 @@ +#!/usr/bin/env python +# +# This is an experimental py3k-enabled mercurial setup script. +# +# 'python setup.py install', or +# 'python setup.py --help' for more options + +from distutils.command.build_py import build_py_2to3 +from lib2to3.refactor import get_fixers_from_package as getfixers + +import sys +if not hasattr(sys, 'version_info') or sys.version_info < (2, 4, 0, 'final'): + raise SystemExit("Mercurial requires Python 2.4 or later.") + +if sys.version_info[0] >= 3: + def b(s): + '''A helper function to emulate 2.6+ bytes literals using string + literals.''' + return s.encode('latin1') +else: + def b(s): + '''A helper function to emulate 2.6+ bytes literals using string + literals.''' + return s + +# Solaris Python packaging brain damage +try: + import hashlib + sha = hashlib.sha1() +except: + try: + import sha + except: + raise SystemExit( + "Couldn't import standard hashlib (incomplete Python install).") + +try: + import zlib +except: + raise SystemExit( + "Couldn't import standard zlib (incomplete Python install).") + +try: + import bz2 +except: + raise SystemExit( + "Couldn't import standard bz2 (incomplete Python install).") + +import os, subprocess, time +import shutil +import tempfile +from distutils import log +from distutils.core import setup, Extension +from distutils.dist import Distribution +from distutils.command.build import build +from distutils.command.build_ext import build_ext +from distutils.command.build_py import build_py +from distutils.spawn import spawn, find_executable +from distutils.ccompiler import new_compiler +from distutils.errors import CCompilerError + +scripts = ['hg'] +if os.name == 'nt': + scripts.append('contrib/win32/hg.bat') + +# simplified version of distutils.ccompiler.CCompiler.has_function +# that actually removes its temporary files. +def hasfunction(cc, funcname): + tmpdir = tempfile.mkdtemp(prefix='hg-install-') + devnull = oldstderr = None + try: + try: + fname = os.path.join(tmpdir, 'funcname.c') + f = open(fname, 'w') + f.write('int main(void) {\n') + f.write(' %s();\n' % funcname) + f.write('}\n') + f.close() + # Redirect stderr to /dev/null to hide any error messages + # from the compiler. + # This will have to be changed if we ever have to check + # for a function on Windows. + devnull = open('/dev/null', 'w') + oldstderr = os.dup(sys.stderr.fileno()) + os.dup2(devnull.fileno(), sys.stderr.fileno()) + objects = cc.compile([fname], output_dir=tmpdir) + cc.link_executable(objects, os.path.join(tmpdir, "a.out")) + except: + return False + return True + finally: + if oldstderr is not None: + os.dup2(oldstderr, sys.stderr.fileno()) + if devnull is not None: + devnull.close() + shutil.rmtree(tmpdir) + +# py2exe needs to be installed to work +try: + import py2exe + py2exeloaded = True + + # Help py2exe to find win32com.shell + try: + import modulefinder + import win32com + for p in win32com.__path__[1:]: # Take the path to win32comext + modulefinder.AddPackagePath("win32com", p) + pn = "win32com.shell" + __import__(pn) + m = sys.modules[pn] + for p in m.__path__[1:]: + modulefinder.AddPackagePath(pn, p) + except ImportError: + pass + +except ImportError: + py2exeloaded = False + pass + +def runcmd(cmd, env): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, env=env) + out, err = p.communicate() + # If root is executing setup.py, but the repository is owned by + # another user (as in "sudo python setup.py install") we will get + # trust warnings since the .hg/hgrc file is untrusted. That is + # fine, we don't want to load it anyway. Python may warn about + # a missing __init__.py in mercurial/locale, we also ignore that. + err = [e for e in err.splitlines() + if not e.startswith(b('Not trusting file')) \ + and not e.startswith(b('warning: Not importing'))] + if err: + return '' + return out + +version = '' + +if os.path.isdir('.hg'): + # Execute hg out of this directory with a custom environment which + # includes the pure Python modules in mercurial/pure. We also take + # care to not use any hgrc files and do no localization. + pypath = ['mercurial', os.path.join('mercurial', 'pure')] + env = {'PYTHONPATH': os.pathsep.join(pypath), + 'HGRCPATH': '', + 'LANGUAGE': 'C'} + if 'LD_LIBRARY_PATH' in os.environ: + env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH'] + if 'SystemRoot' in os.environ: + # Copy SystemRoot into the custom environment for Python 2.6 + # under Windows. Otherwise, the subprocess will fail with + # error 0xc0150004. See: http://bugs.python.org/issue3440 + env['SystemRoot'] = os.environ['SystemRoot'] + cmd = [sys.executable, 'hg', 'id', '-i', '-t'] + l = runcmd(cmd, env).split() + while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags + l.pop() + if len(l) > 1: # tag found + version = l[-1] + if l[0].endswith('+'): # propagate the dirty status to the tag + version += '+' + elif len(l) == 1: # no tag found + cmd = [sys.executable, 'hg', 'parents', '--template', + '{latesttag}+{latesttagdistance}-'] + version = runcmd(cmd, env) + l[0] + if version.endswith('+'): + version += time.strftime('%Y%m%d') +elif os.path.exists('.hg_archival.txt'): + kw = dict([[t.strip() for t in l.split(':', 1)] + for l in open('.hg_archival.txt')]) + if 'tag' in kw: + version = kw['tag'] + elif 'latesttag' in kw: + version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw + else: + version = kw.get('node', '')[:12] + +if version: + f = open("mercurial/__version__.py", "w") + f.write('# this file is autogenerated by setup.py\n') + f.write('version = "%s"\n' % version) + f.close() + + +try: + from mercurial import __version__ + version = __version__.version +except ImportError: + version = 'unknown' + +class hgbuildmo(build): + + description = "build translations (.mo files)" + + def run(self): + if not find_executable('msgfmt'): + self.warn("could not find msgfmt executable, no translations " + "will be built") + return + + podir = 'i18n' + if not os.path.isdir(podir): + self.warn("could not find %s/ directory" % podir) + return + + join = os.path.join + for po in os.listdir(podir): + if not po.endswith('.po'): + continue + pofile = join(podir, po) + modir = join('locale', po[:-3], 'LC_MESSAGES') + mofile = join(modir, 'hg.mo') + mobuildfile = join('mercurial', mofile) + cmd = ['msgfmt', '-v', '-o', mobuildfile, pofile] + if sys.platform != 'sunos5': + # msgfmt on Solaris does not know about -c + cmd.append('-c') + self.mkpath(join('mercurial', modir)) + self.make_file([pofile], mobuildfile, spawn, (cmd,)) + +# Insert hgbuildmo first so that files in mercurial/locale/ are found +# when build_py is run next. +build.sub_commands.insert(0, ('build_mo', None)) +# We also need build_ext before build_py. Otherwise, when 2to3 is called (in +# build_py), it will not find osutil & friends, thinking that those modules are +# global and, consequently, making a mess, now that all module imports are +# global. +build.sub_commands.insert(1, ('build_ext', None)) + +Distribution.pure = 0 +Distribution.global_options.append(('pure', None, "use pure (slow) Python " + "code instead of C extensions")) + +class hgbuildext(build_ext): + + def build_extension(self, ext): + try: + build_ext.build_extension(self, ext) + except CCompilerError: + if not hasattr(ext, 'optional') or not ext.optional: + raise + log.warn("Failed to build optional extension '%s' (skipping)", + ext.name) + +class hgbuildpy(build_py_2to3): + fixer_names = sorted(set(getfixers("lib2to3.fixes") + + getfixers("hgfixes"))) + + def finalize_options(self): + build_py.finalize_options(self) + + if self.distribution.pure: + if self.py_modules is None: + self.py_modules = [] + for ext in self.distribution.ext_modules: + if ext.name.startswith("mercurial."): + self.py_modules.append("mercurial.pure.%s" % ext.name[10:]) + self.distribution.ext_modules = [] + + def find_modules(self): + modules = build_py.find_modules(self) + for module in modules: + if module[0] == "mercurial.pure": + if module[1] != "__init__": + yield ("mercurial", module[1], module[2]) + else: + yield module + + def run(self): + # In the build_py_2to3 class, self.updated_files = [], but I couldn't + # see when that variable was updated to point to the updated files, as + # its names suggests. Thus, I decided to just find_all_modules and feed + # them to 2to3. Unfortunately, subsequent calls to setup3k.py will + # incur in 2to3 analysis overhead. + self.updated_files = [i[2] for i in self.find_all_modules()] + + # Base class code + if self.py_modules: + self.build_modules() + if self.packages: + self.build_packages() + self.build_package_data() + + # 2to3 + self.run_2to3(self.updated_files) + + # Remaining base class code + self.byte_compile(self.get_outputs(include_bytecode=0)) + +cmdclass = {'build_mo': hgbuildmo, + 'build_ext': hgbuildext, + 'build_py': hgbuildpy} + +packages = ['mercurial', 'mercurial.hgweb', 'hgext', 'hgext.convert', + 'hgext.highlight', 'hgext.zeroconf'] + +pymodules = [] + +extmodules = [ + Extension('mercurial.base85', ['mercurial/base85.c']), + Extension('mercurial.bdiff', ['mercurial/bdiff.c']), + Extension('mercurial.diffhelpers', ['mercurial/diffhelpers.c']), + Extension('mercurial.mpatch', ['mercurial/mpatch.c']), + Extension('mercurial.parsers', ['mercurial/parsers.c']), + ] + +# disable osutil.c under windows + python 2.4 (issue1364) +if sys.platform == 'win32' and sys.version_info < (2, 5, 0, 'final'): + pymodules.append('mercurial.pure.osutil') +else: + extmodules.append(Extension('mercurial.osutil', ['mercurial/osutil.c'])) + +if sys.platform == 'linux2' and os.uname()[2] > '2.6': + # The inotify extension is only usable with Linux 2.6 kernels. + # You also need a reasonably recent C library. + # In any case, if it fails to build the error will be skipped ('optional'). + cc = new_compiler() + if hasfunction(cc, 'inotify_add_watch'): + inotify = Extension('hgext.inotify.linux._inotify', + ['hgext/inotify/linux/_inotify.c'], + ['mercurial']) + inotify.optional = True + extmodules.append(inotify) + packages.extend(['hgext.inotify', 'hgext.inotify.linux']) + +packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo', + 'help/*.txt']} + +def ordinarypath(p): + return p and p[0] != '.' and p[-1] != '~' + +for root in ('templates',): + for curdir, dirs, files in os.walk(os.path.join('mercurial', root)): + curdir = curdir.split(os.sep, 1)[1] + dirs[:] = filter(ordinarypath, dirs) + for f in filter(ordinarypath, files): + f = os.path.join(curdir, f) + packagedata['mercurial'].append(f) + +datafiles = [] +setupversion = version +extra = {} + +if py2exeloaded: + extra['console'] = [ + {'script':'hg', + 'copyright':'Copyright (C) 2005-2010 Matt Mackall and others', + 'product_version':version}] + +if os.name == 'nt': + # Windows binary file versions for exe/dll files must have the + # form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535 + setupversion = version.split('+', 1)[0] + +setup(name='mercurial', + version=setupversion, + author='Matt Mackall', + author_email='mpm@selenic.com', + url='http://mercurial.selenic.com/', + description='Scalable distributed SCM', + license='GNU GPLv2+', + scripts=scripts, + packages=packages, + py_modules=pymodules, + ext_modules=extmodules, + data_files=datafiles, + package_data=packagedata, + cmdclass=cmdclass, + options=dict(py2exe=dict(packages=['hgext', 'email']), + bdist_mpkg=dict(zipdist=True, + license='COPYING', + readme='contrib/macosx/Readme.html', + welcome='contrib/macosx/Welcome.html')), + **extra) diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/shrink-revlog.py --- a/contrib/shrink-revlog.py Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/shrink-revlog.py Fri Sep 24 00:17:04 2010 +0200 @@ -117,8 +117,8 @@ try: group = util.chunkbuffer(r1.group(order, lookup, progress)) - chunkiter = changegroup.chunkiter(group) - r2.addgroup(chunkiter, unlookup, tr) + group = changegroup.unbundle10(group, "UN") + r2.addgroup(group, unlookup, tr) finally: ui.progress(_('writing'), None) diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/win32/mercurial.iss --- a/contrib/win32/mercurial.iss Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/win32/mercurial.iss Fri Sep 24 00:17:04 2010 +0200 @@ -16,10 +16,22 @@ #pragma message "Detected Version: " + VERSION #endif +#ifndef ARCH +#define ARCH = "x86" +#endif + [Setup] AppCopyright=Copyright 2005-2010 Matt Mackall and others AppName=Mercurial +#if ARCH == "x64" +AppVerName=Mercurial {#VERSION} (64-bit) +OutputBaseFilename=Mercurial-{#VERSION}-x64 +ArchitecturesAllowed=x64 +ArchitecturesInstallIn64BitMode=x64 +#else AppVerName=Mercurial {#VERSION} +OutputBaseFilename=Mercurial-{#VERSION} +#endif InfoAfterFile=contrib/win32/postinstall.txt LicenseFile=COPYING ShowLanguageDialog=yes @@ -29,7 +41,6 @@ AppUpdatesURL=http://mercurial.selenic.com/ AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3} AppContact=mercurial@selenic.com -OutputBaseFilename=Mercurial-{#VERSION} DefaultDirName={pf}\Mercurial SourceDir=..\.. VersionInfoDescription=Mercurial distributed SCM (version {#VERSION}) @@ -61,18 +72,21 @@ Source: contrib\win32\mercurial.ini; DestDir: {app}; DestName: Mercurial.ini; Check: CheckFile; AfterInstall: ConcatenateFiles; Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local') +#if ARCH == "x64" +Source: dist\*.dll; Destdir: {app} +Source: dist\*.pyd; Destdir: {app} +#else Source: dist\python*.dll; Destdir: {app}; Flags: skipifsourcedoesntexist -Source: dist\library.zip; DestDir: {app} -Source: dist\mfc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist Source: dist\msvc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist +Source: dist\w9xpopen.exe; DestDir: {app} +#endif Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist -Source: dist\Microsoft.VC*.MFC.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist -Source: dist\w9xpopen.exe; DestDir: {app} +Source: dist\library.zip; DestDir: {app} Source: dist\add_path.exe; DestDir: {app} Source: doc\*.html; DestDir: {app}\Docs Source: doc\style.css; DestDir: {app}\Docs Source: mercurial\help\*.txt; DestDir: {app}\help -Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs +Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs skipifsourcedoesntexist Source: mercurial\templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs Source: CONTRIBUTORS; DestDir: {app}; DestName: Contributors.txt Source: COPYING; DestDir: {app}; DestName: Copying.txt @@ -99,6 +113,7 @@ [UninstallDelete] Type: files; Name: "{app}\hg.exe.local" + [Code] var WriteFile: Boolean; diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/win32/win32-build.txt --- a/contrib/win32/win32-build.txt Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/win32/win32-build.txt Fri Sep 24 00:17:04 2010 +0200 @@ -1,13 +1,17 @@ The standalone Windows installer for Mercurial is built in a somewhat jury-rigged fashion. -It has the following prerequisites, at least as I build it: +It has the following prerequisites. Ensure to take the packages +matching the mercurial version you want to build (32-bit or 64-bit). + + Python 2.6 for Windows + http://www.python.org/download/releases/ - Python for Windows - http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi - - MinGW + A compiler: + either MinGW http://www.mingw.org/ + or Microsoft Visual C++ 2008 SP1 Express Edition + http://www.microsoft.com/express/Downloads/Download-2008.aspx Python for Windows Extensions http://sourceforge.net/projects/pywin32/ @@ -15,19 +19,22 @@ mfc71.dll (just download, don't install; not needed for Python 2.6) http://starship.python.net/crew/mhammond/win32/ - Visual C++ 2008 redistributable package (needed for Python 2.6) - http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en + Visual C++ 2008 redistributable package (needed for >= Python 2.6 or if you compile with MSVC) + for 32-bit: + http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf + for 64-bit: + http://www.microsoft.com/downloads/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6 The py2exe distutils extension http://sourceforge.net/projects/py2exe/ - GnuWin32 gettext utility + GnuWin32 gettext utility (if you want to build translations) http://gnuwin32.sourceforge.net/packages/gettext.htm Inno Setup http://www.jrsoftware.org/isdl.php#qsp - Get and install ispack-5.3.4.exe which includes Inno Setup Processor, + Get and install ispack-5.3.10.exe which includes Inno Setup Processor, which is necessary to package Mercurial. ISTool - optional @@ -45,41 +52,44 @@ Mercurial repository you want to package, and name the repo C:\hg\hg-release. -In a shell, build a standalone copy of the hg.exe program: +In a shell, build a standalone copy of the hg.exe program. +Building instructions for MinGW: python setup.py build -c mingw32 - python setup.py py2exe -b 1 - + python setup.py py2exe -b 2 Note: the previously suggested combined command of "python setup.py build -c -mingw32 py2exe -b 1" doesn't work correctly anymore as it doesn't include the +mingw32 py2exe -b 2" doesn't work correctly anymore as it doesn't include the extensions in the mercurial subdirectory. - If you want to create a file named setup.cfg with the contents: - [build] compiler=mingw32 +you can skip the first build step. -you can skip the first build step. +Building instructions with MSVC 2008 Express Edition: + for 32-bit: + "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86 + python setup.py py2exe -b 2 + for 64-bit: + "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86_amd64 + python setup.py py2exe -b 3 Copy add_path.exe into the dist directory that just got created. If you are using Python up to version 2.5.4, copy mfc71.dll into the dist directory that just got created. -If you are using Python 2.6 or later, after installing the Visual C++ 2008 -redistributable package copy into the dist directory that just got created the -following files: - - from the directory starting with - Windows/WinSxS/x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8 - the files named: msvcm90.dll, msvcp90.dll and msvcr90.dll - - from the directory starting with - Windows/WinSxS/x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.21022.8 - the files named: mfc90.dll, mfc90u.dll, mfcm90.dll and mfcm90u.dll - - from the directory named Windows/WinSxS/Manifests, the manifest file - starting with x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8 - (rename it to Microsoft.VC90.CRT.manifest) and the manifest file starting - with x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.21022.8 (rename it to - Microsoft.VC90.MFC.manifest) +If you are using Python 2.6 or later, or if you are using MSVC 2008 to compile +mercurial, you must include the C runtime libraries in the installer. To do so, +install the Visual C++ 2008 redistributable package. Then in your windows\winsxs +folder, locate the folder containing the dlls version 9.0.21022.8. +For x86, it should be named like x86_Microsoft.VC90.CRT_(...)_9.0.21022.8(...). +For x64, it should be named like amd64_Microsoft.VC90.CRT_(...)_9.0.21022.8(...). +Copy the files named msvcm90.dll, msvcp90.dll and msvcr90.dll into the dist +directory. +Then in the windows\winsxs\manifests folder, locate the corresponding manifest +file (x86_Microsoft.VC90.CRT_(...)_9.0.21022.8(...).manifest for x86, +amd64_Microsoft.VC90.CRT_(...)_9.0.21022.8(...).manifest for x64), copy it in the +dist directory and rename it to Microsoft.VC90.CRT.manifest. Before building the installer, you have to build Mercurial HTML documentation (or fix mercurial.iss to not reference the doc directory): @@ -94,21 +104,27 @@ Otherwise you run the Inno Setup compiler. Assuming it's in the path you should execute: - iscc contrib\win32\mercurial.iss /DVERSION=foo + iscc contrib\win32\mercurial.iss /dVERSION=foo Where 'foo' is the version number you would like to see in the 'Add/Remove Applications' tool. The installer will be placed into a directory named Output/ at the root of your repository. +If the /dVERSION=foo parameter is not given in the command line, the +installer will retrieve the version information from the __version__.py file. + +If you want to build an installer for a 64-bit mercurial, add /dARCH=x64 to +your command line: + iscc contrib\win32\mercurial.iss /dARCH=x64 To automate the steps above you may want to create a batchfile based on the -following: +following (MinGW build chain): echo [build] > setup.cfg echo compiler=mingw32 >> setup.cfg - python setup.py py2exe -b 1 + python setup.py py2exe -b 2 cd doc mingw32-make html cd .. - iscc contrib\win32\mercurial.iss /DVERSION=snapshot + iscc contrib\win32\mercurial.iss /dVERSION=snapshot and run it from the root of the hg repository (c:\hg\hg-release). diff -r 84ceedcfeb6a -r 9d45f78c465b contrib/zsh_completion --- a/contrib/zsh_completion Fri Sep 24 00:04:07 2010 +0200 +++ b/contrib/zsh_completion Fri Sep 24 00:17:04 2010 +0200 @@ -14,7 +14,7 @@ # compinit # # Copyright (C) 2005, 2006 Steve Borho -# Copyright (C) 2006-9 Brendan Cully +# Copyright (C) 2006-10 Brendan Cully # # Permission is hereby granted, without written agreement and without # licence or royalty fees, to use, copy, modify, and distribute this @@ -766,6 +766,31 @@ ':revision:_hg_tags' } +## extensions ## + +# bookmarks +_hg_bookmarks() { + typeset -a bookmark bookmarks + + _hg_cmd bookmarks | while read -A bookmark + do + if test -z ${bookmark[-1]:#[0-9]*} + then + bookmarks+=($bookmark[-2]) + fi + done + (( $#bookmarks )) && _describe -t bookmarks 'bookmarks' bookmarks +} + +_hg_cmd_bookmarks() { + _arguments -s -w : $_hg_global_opts \ + '(--force -f)'{-f,--force}'[force]' \ + '(--rev -r --delete -d --rename -m)'{-r+,--rev}'[revision]:revision:_hg_tags' \ + '(--rev -r --delete -d --rename -m)'{-d,--delete}'[delete a given bookmark]' \ + '(--rev -r --delete -d --rename -m)'{-m+,--rename}'[rename a given bookmark]:bookmark:_hg_bookmarks' \ + ':bookmark:_hg_bookmarks' +} + # HGK _hg_cmd_view() { _arguments -s -w : $_hg_global_opts \ @@ -901,6 +926,7 @@ '(--merge -m)'{-m+,--merge}'[merge from another queue]:' \ '(--name -n)'{-n+,--name}'[merge queue name]:' \ '(--force -f)'{-f,--force}'[apply if the patch has rejects]' \ + '--move[reorder patch series and apply only the patch]' \ ':patch:_hg_qunapplied' } @@ -947,4 +973,34 @@ ':revision:_hg_tags' } +# Patchbomb +_hg_cmd_email() { + _arguments -s -w : $_hg_global_opts $_hg_remote_opts \ + '(--git -g)'{-g,--git}'[use git extended diff format]' \ + '--plain[omit hg patch header]' \ + '(--outgoing -o)'{-o,--outgoing}'[send changes not found in the target repository]' \ + '(--bundle -b)'{-b,--bundle}'[send changes not in target as a binary bundle]' \ + '--bundlename[name of the bundle attachment file (default: bundle)]:' \ + '*'{-r+,--rev}'[search in given revision range]:revision:_hg_revrange' \ + '--force[run even when remote repository is unrelated (with -b/--bundle)]' \ + '*--base[a base changeset to specify instead of a destination (with -b/--bundle)]:revision:_hg_tags' \ + '--intro[send an introduction email for a single patch]' \ + '(--inline -i --attach -a)'{-a,--attach}'[send patches as attachments]' \ + '(--attach -a --inline -i)'{-i,--inline}'[send patches as inline attachments]' \ + '*--bcc[email addresses of blind carbon copy recipients]:email:' \ + '*'{-c+,--cc}'[email addresses of copy recipients]:email:' \ + '(--diffstat -d)'{-d,--diffstat}'[add diffstat output to messages]' \ + '--date[use the given date as the sending date]:date:' \ + '--desc[use the given file as the series description]:files:_files' \ + '(--from -f)'{-f,--from}'[email address of sender]:email:' \ + '(--test -n)'{-n,--test}'[print messages that would be sent]' \ + '(--mbox -m)'{-m,--mbox}'[write messages to mbox file instead of sending them]:file:' \ + '*--reply-to[email addresses replies should be sent to]:email:' \ + '(--subject -s)'{-s,--subject}'[subject of first message (intro or single patch)]:subject:' \ + '--in-reply-to[message identifier to reply to]:msgid:' \ + '*--flag[flags to add in subject prefixes]:flag:' \ + '*'{-t,--to}'[email addresses of recipients]:email:' \ + ':revision:_hg_revrange' +} + _hg "$@" diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/bookmarks.py --- a/hgext/bookmarks.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/bookmarks.py Fri Sep 24 00:17:04 2010 +0200 @@ -302,7 +302,7 @@ self.ui.debug("checking for updated bookmarks\n") rb = remote.listkeys('bookmarks') - changes = 0 + changed = False for k in rb.keys(): if k in self._bookmarks: nr, nl = rb[k], self._bookmarks[k] @@ -313,12 +313,12 @@ continue if cr in cl.descendants(): self._bookmarks[k] = cr.node() - changes += 1 + changed = True self.ui.status(_("updating bookmark %s\n") % k) else: self.ui.warn(_("not updating divergent" " bookmark %s\n") % k) - if changes: + if changed: write(repo) return result @@ -473,7 +473,7 @@ lmarks = repo.listkeys('bookmarks') rmarks = remote.listkeys('bookmarks') - diff = set(rmarks) - set(lmarks) + diff = sorted(set(rmarks) - set(lmarks)) for k in diff: ui.write(" %-25s %s\n" % (k, rmarks[k][:12])) @@ -508,10 +508,12 @@ entry = extensions.wrapcommand(commands.table, 'pull', pull) entry[1].append(('B', 'bookmark', [], - _("bookmark to import"))) + _("bookmark to import"), + _('BOOKMARK'))) entry = extensions.wrapcommand(commands.table, 'push', push) entry[1].append(('B', 'bookmark', [], - _("bookmark to export"))) + _("bookmark to export"), + _('BOOKMARK'))) entry = extensions.wrapcommand(commands.table, 'incoming', incoming) entry[1].append(('B', 'bookmarks', False, _("compare bookmark"))) diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/bugzilla.py --- a/hgext/bugzilla.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/bugzilla.py Fri Sep 24 00:17:04 2010 +0200 @@ -437,5 +437,5 @@ bz.update(id, ctx) bz.notify(ids, util.email(ctx.user())) except MySQLdb.MySQLError, err: - raise util.Abort(_('database error: %s') % err[1]) + raise util.Abort(_('database error: %s') % err.args[1]) diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/churn.py --- a/hgext/churn.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/churn.py Fri Sep 24 00:17:04 2010 +0200 @@ -155,7 +155,8 @@ if opts.get('diffstat'): width -= 15 - def format(name, (added, removed)): + def format(name, diffstat): + added, removed = diffstat return "%s %15s %s%s\n" % (pad(name, maxname), '+%d/-%d' % (added, removed), ui.label('+' * charnum(added), diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/color.py --- a/hgext/color.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/color.py Fri Sep 24 00:17:04 2010 +0200 @@ -62,6 +62,11 @@ bookmarks.current = green + branches.active = none + branches.closed = black bold + branches.current = green + branches.inactive = none + The color extension will try to detect whether to use ANSI codes or Win32 console APIs, unless it is made explicit:: @@ -72,9 +77,9 @@ ''' -import os, sys +import os -from mercurial import commands, dispatch, extensions, ui as uimod +from mercurial import commands, dispatch, extensions, ui as uimod, util from mercurial.i18n import _ # start and stop parameters for effects @@ -87,6 +92,10 @@ 'cyan_background': 46, 'white_background': 47} _styles = {'grep.match': 'red bold', + 'branches.active': 'none', + 'branches.closed': 'black bold', + 'branches.current': 'green', + 'branches.inactive': 'none', 'diff.changed': 'white', 'diff.deleted': 'red', 'diff.diffline': 'bold', @@ -200,9 +209,12 @@ elif mode != 'ansi': return def colorcmd(orig, ui_, opts, cmd, cmdfunc): - if (opts['color'] == 'always' or - (opts['color'] == 'auto' and (os.environ.get('TERM') != 'dumb' - and ui_.formatted()))): + coloropt = opts['color'] + auto = coloropt == 'auto' + always = util.parsebool(coloropt) + if (always or + (always is None and + (auto and (os.environ.get('TERM') != 'dumb' and ui_.formatted())))): colorui._colormode = mode colorui.__bases__ = (ui_.__class__,) ui_.__class__ = colorui @@ -211,44 +223,50 @@ return orig(ui_, opts, cmd, cmdfunc) extensions.wrapfunction(dispatch, '_runcommand', colorcmd) -commands.globalopts.append(('', 'color', 'auto', - _("when to colorize (always, auto, or never)"), - _('TYPE'))) +commands.globalopts.append( + ('', 'color', 'auto', + _("when to colorize (boolean, always, auto, or never)"), + _('TYPE'))) try: - import re, pywintypes - from win32console import * + import re, pywintypes, win32console as win32c # http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx w32effects = { 'none': -1, 'black': 0, - 'red': FOREGROUND_RED, - 'green': FOREGROUND_GREEN, - 'yellow': FOREGROUND_RED | FOREGROUND_GREEN, - 'blue': FOREGROUND_BLUE, - 'magenta': FOREGROUND_BLUE | FOREGROUND_RED, - 'cyan': FOREGROUND_BLUE | FOREGROUND_GREEN, - 'white': FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, - 'bold': FOREGROUND_INTENSITY, - 'black_background': 0x100, # unused value > 0x0f - 'red_background': BACKGROUND_RED, - 'green_background': BACKGROUND_GREEN, - 'yellow_background': BACKGROUND_RED | BACKGROUND_GREEN, - 'blue_background': BACKGROUND_BLUE, - 'purple_background': BACKGROUND_BLUE | BACKGROUND_RED, - 'cyan_background': BACKGROUND_BLUE | BACKGROUND_GREEN, - 'white_background': BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE, - 'bold_background': BACKGROUND_INTENSITY, - 'underline': COMMON_LVB_UNDERSCORE, # double-byte charsets only - 'inverse': COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only + 'red': win32c.FOREGROUND_RED, + 'green': win32c.FOREGROUND_GREEN, + 'yellow': win32c.FOREGROUND_RED | win32c.FOREGROUND_GREEN, + 'blue': win32c.FOREGROUND_BLUE, + 'magenta': win32c.FOREGROUND_BLUE | win32c.FOREGROUND_RED, + 'cyan': win32c.FOREGROUND_BLUE | win32c.FOREGROUND_GREEN, + 'white': (win32c.FOREGROUND_RED | win32c.FOREGROUND_GREEN | + win32c.FOREGROUND_BLUE), + 'bold': win32c.FOREGROUND_INTENSITY, + 'black_background': 0x100, # unused value > 0x0f + 'red_background': win32c.BACKGROUND_RED, + 'green_background': win32c.BACKGROUND_GREEN, + 'yellow_background': win32c.BACKGROUND_RED | win32c.BACKGROUND_GREEN, + 'blue_background': win32c.BACKGROUND_BLUE, + 'purple_background': win32c.BACKGROUND_BLUE | win32c.BACKGROUND_RED, + 'cyan_background': win32c.BACKGROUND_BLUE | win32c.BACKGROUND_GREEN, + 'white_background': (win32c.BACKGROUND_RED | win32c.BACKGROUND_GREEN | + win32c.BACKGROUND_BLUE), + 'bold_background': win32c.BACKGROUND_INTENSITY, + 'underline': win32c.COMMON_LVB_UNDERSCORE, # double-byte charsets only + 'inverse': win32c.COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only } - passthrough = set([FOREGROUND_INTENSITY, BACKGROUND_INTENSITY, - COMMON_LVB_UNDERSCORE, COMMON_LVB_REVERSE_VIDEO]) + passthrough = set([win32c.FOREGROUND_INTENSITY, + win32c.BACKGROUND_INTENSITY, + win32c.COMMON_LVB_UNDERSCORE, + win32c.COMMON_LVB_REVERSE_VIDEO]) - stdout = GetStdHandle(STD_OUTPUT_HANDLE) try: + stdout = win32c.GetStdHandle(win32c.STD_OUTPUT_HANDLE) + if stdout is None: + raise ImportError() origattr = stdout.GetConsoleScreenBufferInfo()['Attributes'] except pywintypes.error: # stdout may be defined but not support diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/__init__.py --- a/hgext/convert/__init__.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/__init__.py Fri Sep 24 00:17:04 2010 +0200 @@ -70,10 +70,10 @@ updated on each commit copied, so :hg:`convert` can be interrupted and can be run repeatedly to copy new commits. - The username mapping file is a simple text file that maps each - source commit author to a destination commit author. It is handy - for source SCMs that use unix logins to identify authors (eg: - CVS). One line per author mapping and the line format is:: + The authormap is a simple text file that maps each source commit + author to a destination commit author. It is handy for source SCMs + that use unix logins to identify authors (eg: CVS). One line per + author mapping and the line format is:: source author = destination author @@ -89,7 +89,7 @@ rename path/to/source path/to/destination - Comment lines start with ``#``. A specificed path matches if it + Comment lines start with ``#``. A specified path matches if it equals the full relative name of a file or one of its parent directories. The ``include`` or ``exclude`` directive with the longest matching path applies, so line order does not matter. @@ -99,8 +99,8 @@ exclusion of all other files and directories not explicitly included. The ``exclude`` directive causes files or directories to be omitted. The ``rename`` directive renames a file or directory if - is converted. To rename from a subdirectory into the root of the - repository, use ``.`` as the path to rename to. + it is converted. To rename from a subdirectory into the root of + the repository, use ``.`` as the path to rename to. The splicemap is a file that allows insertion of synthetic history, letting you specify the parents of a revision. This is @@ -274,16 +274,19 @@ cmdtable = { "convert": (convert, - [('A', 'authors', '', - _('username mapping filename'), _('FILE')), + [('', 'authors', '', + _('username mapping filename (DEPRECATED, use --authormap instead)'), + _('FILE')), + ('s', 'source-type', '', + _('source repository type'), _('TYPE')), ('d', 'dest-type', '', _('destination repository type'), _('TYPE')), + ('r', 'rev', '', + _('import up to target revision REV'), _('REV')), + ('A', 'authormap', '', + _('remap usernames using this file'), _('FILE')), ('', 'filemap', '', _('remap file names using contents of file'), _('FILE')), - ('r', 'rev', '', - _('import up to target revision REV'), _('REV')), - ('s', 'source-type', '', - _('source repository type'), _('TYPE')), ('', 'splicemap', '', _('splice synthesized history into place'), _('FILE')), ('', 'branchmap', '', diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/bzr.py --- a/hgext/convert/bzr.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/bzr.py Fri Sep 24 00:17:04 2010 +0200 @@ -61,7 +61,7 @@ try: tree = dir.open_workingtree(recommend_upgrade=False) branch = tree.branch - except (errors.NoWorkingTree, errors.NotLocalUrl), e: + except (errors.NoWorkingTree, errors.NotLocalUrl): tree = None branch = dir.open_branch() if (tree is not None and tree.bzrdir.root_transport.base != diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/convcmd.py Fri Sep 24 00:17:04 2010 +0200 @@ -112,8 +112,8 @@ if authorfile and os.path.exists(authorfile): self.readauthormap(authorfile) # Extend/Override with new author map if necessary - if opts.get('authors'): - self.readauthormap(opts.get('authors')) + if opts.get('authormap'): + self.readauthormap(opts.get('authormap')) self.authorfile = self.dest.authorfile() self.splicemap = mapfile(ui, opts.get('splicemap')) @@ -392,6 +392,10 @@ orig_encoding = encoding.encoding encoding.encoding = 'UTF-8' + # support --authors as an alias for --authormap + if not opts.get('authormap'): + opts['authormap'] = opts.get('authors') + if not dest: dest = hg.defaultdest(src) + "-hg" ui.status(_("assuming destination %s\n") % dest) diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/cvs.py --- a/hgext/convert/cvs.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/cvs.py Fri Sep 24 00:17:04 2010 +0200 @@ -53,8 +53,6 @@ try: os.chdir(self.path) id = None - state = 0 - filerevids = {} cache = 'update' if not self.ui.configbool('convert', 'cvsps.cache', True): diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/filemap.py --- a/hgext/convert/filemap.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/filemap.py Fri Sep 24 00:17:04 2010 +0200 @@ -33,10 +33,20 @@ def parse(self, path): errs = 0 def check(name, mapping, listname): + if not name: + self.ui.warn(_('%s:%d: path to %s is missing\n') % + (lex.infile, lex.lineno, listname)) + return 1 if name in mapping: self.ui.warn(_('%s:%d: %r already in %s list\n') % (lex.infile, lex.lineno, name, listname)) return 1 + if (name.startswith('/') or + name.endswith('/') or + '//' in name): + self.ui.warn(_('%s:%d: superfluous / in %s %r\n') % + (lex.infile, lex.lineno, listname, name)) + return 1 return 0 lex = shlex.shlex(open(path), path, True) lex.wordchars += '!@#$%^&*()-=+[]{}|;:,./<>?' @@ -298,7 +308,9 @@ self.origparents[rev] = parents - if len(mparents) < 2 and not self.wanted(rev, wp): + closed = 'close' in self.commits[rev].extra + + if len(mparents) < 2 and not closed and not self.wanted(rev, wp): # We don't want this revision. # Update our state and tell the convert process to map this # revision to the same revision its parent as mapped to. diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/git.py --- a/hgext/convert/git.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/git.py Fri Sep 24 00:17:04 2010 +0200 @@ -7,6 +7,7 @@ import os from mercurial import util +from mercurial.node import hex, nullid from mercurial.i18n import _ from common import NoRepo, commit, converter_source, checktool @@ -59,7 +60,7 @@ return heads def catfile(self, rev, type): - if rev == "0" * 40: + if rev == hex(nullid): raise IOError() data, ret = self.gitread("git cat-file %s %s" % (type, rev)) if ret: diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/hg.py --- a/hgext/convert/hg.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/hg.py Fri Sep 24 00:17:04 2010 +0200 @@ -175,7 +175,8 @@ if self.filemapmode and nparents == 1: man = self.repo.manifest mnode = self.repo.changelog.read(bin(p2))[0] - if not man.cmp(m1node, man.revision(mnode)): + closed = 'close' in commit.extra + if not closed and not man.cmp(m1node, man.revision(mnode)): self.ui.status(_("filtering out empty revision\n")) self.repo.rollback() return parent diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/p4.py --- a/hgext/convert/p4.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/p4.py Fri Sep 24 00:17:04 2010 +0200 @@ -177,7 +177,7 @@ elif "k" in flags: keywords = self.re_keywords - elif code == "text" or code == "binary": + elif code in ("text", "binary"): contents += data if mode is None: diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/convert/transport.py --- a/hgext/convert/transport.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/convert/transport.py Fri Sep 24 00:17:04 2010 +0200 @@ -98,9 +98,8 @@ svn.ra.reparent(self.ra, self.svn_url.encode('utf8')) class Reporter(object): - def __init__(self, (reporter, report_baton)): - self._reporter = reporter - self._baton = report_baton + def __init__(self, reporter_data): + self._reporter, self._baton = reporter_data def set_path(self, path, revnum, start_empty, lock_token, pool=None): svn.ra.reporter2_invoke_set_path(self._reporter, self._baton, diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/eol.py --- a/hgext/eol.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/eol.py Fri Sep 24 00:17:04 2010 +0200 @@ -66,7 +66,7 @@ """ from mercurial.i18n import _ -from mercurial import util, config, extensions, commands, match, cmdutil +from mercurial import util, config, extensions, match import re, os # Matches a lone LF, i.e., one that is not part of CRLF. diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/hgcia.py --- a/hgext/hgcia.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/hgcia.py Fri Sep 24 00:17:04 2010 +0200 @@ -40,7 +40,7 @@ """ from mercurial.i18n import _ -from mercurial.node import * +from mercurial.node import bin, short from mercurial import cmdutil, patch, templater, util, mail import email.Parser diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/inotify/client.py --- a/hgext/inotify/client.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/inotify/client.py Fri Sep 24 00:17:04 2010 +0200 @@ -21,18 +21,16 @@ Raise QueryFailed if something went wrong """ def decorated_function(self, *args): - result = None try: return function(self, *args) except (OSError, socket.error), err: autostart = self.ui.configbool('inotify', 'autostart', True) - if err[0] == errno.ECONNREFUSED: + if err.args[0] == errno.ECONNREFUSED: self.ui.warn(_('inotify-client: found dead inotify server ' 'socket; removing it\n')) os.unlink(os.path.join(self.root, '.hg', 'inotify.sock')) - if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart: - self.ui.debug('(starting inotify server)\n') + if err.args[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart: try: try: server.start(self.ui, self.dirstate, self.root, @@ -49,13 +47,13 @@ return function(self, *args) except socket.error, err: self.ui.warn(_('inotify-client: could not talk to new ' - 'inotify server: %s\n') % err[-1]) - elif err[0] in (errno.ECONNREFUSED, errno.ENOENT): + 'inotify server: %s\n') % err.args[-1]) + elif err.args[0] in (errno.ECONNREFUSED, errno.ENOENT): # silently ignore normal errors if autostart is False self.ui.debug('(inotify server not running)\n') else: self.ui.warn(_('inotify-client: failed to contact inotify ' - 'server: %s\n') % err[-1]) + 'server: %s\n') % err.args[-1]) self.ui.traceback() raise QueryFailed('inotify query failed') @@ -75,7 +73,7 @@ try: self.sock.connect(sockpath) except socket.error, err: - if err[0] == "AF_UNIX path too long": + if err.args[0] == "AF_UNIX path too long": sockpath = os.readlink(sockpath) self.sock.connect(sockpath) else: diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/inotify/linux/_inotify.c --- a/hgext/inotify/linux/_inotify.c Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/inotify/linux/_inotify.c Fri Sep 24 00:17:04 2010 +0200 @@ -15,6 +15,15 @@ #include #include +#include + +/* Variables used in the event string representation */ +static PyObject *join; +static PyObject *er_wm; +static PyObject *er_wmc; +static PyObject *er_wmn; +static PyObject *er_wmcn; + static PyObject *init(PyObject *self, PyObject *args) { PyObject *ret = NULL; @@ -312,8 +321,8 @@ }; PyDoc_STRVAR( - event_doc, - "event: Structure describing an inotify event."); + event_doc, + "event: Structure describing an inotify event."); static PyObject *event_new(PyTypeObject *t, PyObject *a, PyObject *k) { @@ -327,20 +336,14 @@ Py_XDECREF(evt->cookie); Py_XDECREF(evt->name); - (*evt->ob_type->tp_free)(evt); + Py_TYPE(evt)->tp_free(evt); } static PyObject *event_repr(struct event *evt) { - int wd = PyInt_AsLong(evt->wd); int cookie = evt->cookie == Py_None ? -1 : PyInt_AsLong(evt->cookie); PyObject *ret = NULL, *pymasks = NULL, *pymask = NULL; - PyObject *join = NULL; - char *maskstr; - - join = PyString_FromString("|"); - if (join == NULL) - goto bail; + PyObject *tuple = NULL, *formatstr = NULL; pymasks = decode_mask(PyInt_AsLong(evt->mask)); if (pymasks == NULL) @@ -350,33 +353,35 @@ if (pymask == NULL) goto bail; - maskstr = PyString_AsString(pymask); - if (evt->name != Py_None) { - PyObject *pyname = PyString_Repr(evt->name, 1); - char *name = pyname ? PyString_AsString(pyname) : "???"; - - if (cookie == -1) - ret = PyString_FromFormat( - "event(wd=%d, mask=%s, name=%s)", - wd, maskstr, name); - else - ret = PyString_FromFormat("event(wd=%d, mask=%s, " - "cookie=0x%x, name=%s)", - wd, maskstr, cookie, name); - - Py_XDECREF(pyname); + if (cookie == -1) { + formatstr = er_wmn; + tuple = PyTuple_Pack(3, evt->wd, pymask, evt->name); + } + else { + formatstr = er_wmcn; + tuple = PyTuple_Pack(4, evt->wd, pymask, + evt->cookie, evt->name); + } } else { - if (cookie == -1) - ret = PyString_FromFormat("event(wd=%d, mask=%s)", - wd, maskstr); + if (cookie == -1) { + formatstr = er_wm; + tuple = PyTuple_Pack(2, evt->wd, pymask); + } else { - ret = PyString_FromFormat( - "event(wd=%d, mask=%s, cookie=0x%x)", - wd, maskstr, cookie); + formatstr = er_wmc; + tuple = PyTuple_Pack(3, evt->wd, pymask, evt->cookie); } } + if (tuple == NULL) + goto bail; + + ret = PyNumber_Remainder(formatstr, tuple); + + if (ret == NULL) + goto bail; + goto done; bail: Py_CLEAR(ret); @@ -384,14 +389,13 @@ done: Py_XDECREF(pymask); Py_XDECREF(pymasks); - Py_XDECREF(join); + Py_XDECREF(tuple); return ret; } static PyTypeObject event_type = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ + PyVarObject_HEAD_INIT(NULL, 0) "_inotify.event", /*tp_name*/ sizeof(struct event), /*tp_basicsize*/ 0, /*tp_itemsize*/ @@ -561,6 +565,17 @@ return ret; } +static int init_globals(void) +{ + join = PyString_FromString("|"); + er_wm = PyString_FromString("event(wd=%d, mask=%s)"); + er_wmn = PyString_FromString("event(wd=%d, mask=%s, name=%s)"); + er_wmc = PyString_FromString("event(wd=%d, mask=%s, cookie=0x%x)"); + er_wmcn = PyString_FromString("event(wd=%d, mask=%s, cookie=0x%x, name=%s)"); + + return join && er_wm && er_wmn && er_wmc && er_wmcn; +} + PyDoc_STRVAR( read_doc, "read(fd, bufsize[=65536]) -> list_of_events\n" @@ -585,6 +600,35 @@ {NULL}, }; +#ifdef IS_PY3K +static struct PyModuleDef _inotify_module = { + PyModuleDef_HEAD_INIT, + "_inotify", + doc, + -1, + methods +}; + +PyMODINIT_FUNC PyInit__inotify(void) +{ + PyObject *mod, *dict; + + mod = PyModule_Create(&_inotify_module); + + if (mod == NULL) + return NULL; + + if (!init_globals()) + return; + + dict = PyModule_GetDict(mod); + + if (dict) + define_consts(dict); + + return mod; +} +#else void init_inotify(void) { PyObject *mod, *dict; @@ -592,6 +636,9 @@ if (PyType_Ready(&event_type) == -1) return; + if (!init_globals()) + return; + mod = Py_InitModule3("_inotify", methods, doc); dict = PyModule_GetDict(mod); @@ -599,3 +646,4 @@ if (dict) define_consts(dict); } +#endif diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/inotify/linuxserver.py --- a/hgext/inotify/linuxserver.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/inotify/linuxserver.py Fri Sep 24 00:17:04 2010 +0200 @@ -117,7 +117,7 @@ try: events = cls.poll.poll(timeout) except select.error, err: - if err[0] == errno.EINTR: + if err.args[0] == errno.EINTR: continue raise if events: diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/inotify/server.py --- a/hgext/inotify/server.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/inotify/server.py Fri Sep 24 00:17:04 2010 +0200 @@ -336,10 +336,10 @@ try: self.sock.bind(self.sockpath) except socket.error, err: - if err[0] == errno.EADDRINUSE: + if err.args[0] == errno.EADDRINUSE: raise AlreadyStartedException(_('cannot start: socket is ' 'already bound')) - if err[0] == "AF_UNIX path too long": + if err.args[0] == "AF_UNIX path too long": if os.path.islink(self.sockpath) and \ not os.path.exists(self.sockpath): raise util.Abort('inotify-server: cannot start: ' @@ -437,7 +437,7 @@ finally: sock.shutdown(socket.SHUT_WR) except socket.error, err: - if err[0] != errno.EPIPE: + if err.args[0] != errno.EPIPE: raise if sys.platform == 'linux2': @@ -484,5 +484,6 @@ appendpid = ui.configbool('inotify', 'appendpid', False) + ui.debug('starting inotify server: %s\n' % ' '.join(runargs)) cmdutil.service(opts, initfn=service.init, runfn=service.run, logfile=logfile, runargs=runargs, appendpid=appendpid) diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/keyword.py --- a/hgext/keyword.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/keyword.py Fri Sep 24 00:17:04 2010 +0200 @@ -52,8 +52,9 @@ # prefer svn- over cvs-like default keywordmaps svn = True -NOTE: the more specific you are in your filename patterns the less you -lose speed in huge repositories. +.. note:: + The more specific you are in your filename patterns the less you + lose speed in huge repositories. For [keywordmaps] template mapping and expansion demonstration and control run :hg:`kwdemo`. See :hg:`help templates` for a list of @@ -161,9 +162,9 @@ kwpat = r'\$(%s)(: [^$\n\r]*? )??\$' % '|'.join(escaped) self.re_kw = re.compile(kwpat) - templatefilters.filters['utcdate'] = utcdate - templatefilters.filters['svnisodate'] = svnisodate - templatefilters.filters['svnutcdate'] = svnutcdate + templatefilters.filters.update({'utcdate': utcdate, + 'svnisodate': svnisodate, + 'svnutcdate': svnutcdate}) def substitute(self, data, path, ctx, subfunc): '''Replaces keywords in data with expanded template.''' @@ -514,14 +515,14 @@ self.lines = kwt.shrinklines(self.fname, self.lines) def kw_diff(orig, repo, node1=None, node2=None, match=None, changes=None, - opts=None): + opts=None, prefix=''): '''Monkeypatch patch.diff to avoid expansion except when comparing against working dir.''' if node2 is not None: kwt.match = util.never elif node1 is not None and node1 != repo['.'].node(): kwt.restrict = True - return orig(repo, node1, node2, match, changes, opts) + return orig(repo, node1, node2, match, changes, opts, prefix) def kwweb_skip(orig, web, req, tmpl): '''Wraps webcommands.x turning off keyword expansion.''' diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/mq.py --- a/hgext/mq.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/mq.py Fri Sep 24 00:17:04 2010 +0200 @@ -47,7 +47,7 @@ from mercurial.lock import release from mercurial import commands, cmdutil, hg, patch, util from mercurial import repair, extensions, url, error -import os, sys, re, errno +import os, sys, re, errno, shutil commands.norepo += " qclone" @@ -513,7 +513,7 @@ # apply failed, strip away that rev and merge. hg.clean(repo, head) - self.strip(repo, n, update=False, backup='strip') + self.strip(repo, [n], update=False, backup='strip') ctx = repo[rev] ret = hg.merge(repo, rev) @@ -685,7 +685,7 @@ p1, p2 = repo.dirstate.parents() repo.dirstate.setparents(p1, merge) - files = patch.updatedir(self.ui, repo, files) + files = cmdutil.updatedir(self.ui, repo, files) match = cmdutil.matchfiles(repo, files or []) n = repo.commit(message, ph.user, ph.date, match=match, force=True) @@ -771,7 +771,7 @@ if opts.get('rev'): if not self.applied: raise util.Abort(_('no patches applied')) - revs = cmdutil.revrange(repo, opts['rev']) + revs = cmdutil.revrange(repo, opts.get('rev')) if len(revs) > 1 and revs[0] > revs[1]: revs.reverse() revpatches = self._revpatches(repo, revs) @@ -895,7 +895,7 @@ finally: release(wlock) - def strip(self, repo, rev, update=True, backup="all", force=None): + def strip(self, repo, revs, update=True, backup="all", force=None): wlock = lock = None try: wlock = repo.wlock() @@ -903,12 +903,13 @@ if update: self.check_localchanges(repo, force=force, refresh=False) - urev = self.qparents(repo, rev) + urev = self.qparents(repo, revs[0]) hg.clean(repo, urev) repo.dirstate.write() self.removeundo(repo) - repair.strip(self.ui, repo, rev, backup) + for rev in revs: + repair.strip(self.ui, repo, rev, backup) # strip may have unbundled a set of backed up revisions after # the actual strip self.removeundo(repo) @@ -1197,7 +1198,7 @@ for patch in reversed(self.applied[start:end]): self.ui.status(_("popping %s\n") % patch.name) del self.applied[start:end] - self.strip(repo, rev, update=False, backup='strip') + self.strip(repo, [rev], update=False, backup='strip') if self.applied: self.ui.write(_("now at: %s\n") % self.applied[-1].name) else: @@ -1377,7 +1378,7 @@ repo.dirstate.setparents(*cparents) self.applied.pop() self.applied_dirty = 1 - self.strip(repo, top, update=False, + self.strip(repo, [top], update=False, backup='strip') except: repo.dirstate.invalidate() @@ -1535,7 +1536,7 @@ update = True else: update = False - self.strip(repo, rev, update=update, backup='strip') + self.strip(repo, [rev], update=update, backup='strip') if qpp: self.ui.warn(_("saved queue repository parents: %s %s\n") % (short(qpp[0]), short(qpp[1]))) @@ -1694,11 +1695,22 @@ if existing: if filename == '-': raise util.Abort(_('-e is incompatible with import from -')) - if not patchname: - patchname = normname(filename) - self.check_reserved_name(patchname) - if not os.path.isfile(self.join(patchname)): - raise util.Abort(_("patch %s does not exist") % patchname) + filename = normname(filename) + self.check_reserved_name(filename) + originpath = self.join(filename) + if not os.path.isfile(originpath): + raise util.Abort(_("patch %s does not exist") % filename) + + if patchname: + self.check_reserved_name(patchname) + checkfile(patchname) + + self.ui.write(_('renaming %s to %s\n') + % (filename, patchname)) + util.rename(originpath, self.join(patchname)) + else: + patchname = filename + else: try: if filename == '-': @@ -1744,7 +1756,6 @@ """print the patches already applied""" q = repo.mq - l = len(q.applied) if patch: if patch not in q.series: @@ -1813,12 +1824,16 @@ To import a patch from standard input, pass - as the patch file. When importing from standard input, a patch name must be specified using the --name flag. + + To import an existing patch while renaming it:: + + hg qimport -e existing-patch -n new-name """ q = repo.mq try: - q.qimport(repo, filename, patchname=opts['name'], - existing=opts['existing'], force=opts['force'], rev=opts['rev'], - git=opts['git']) + q.qimport(repo, filename, patchname=opts.get('name'), + existing=opts.get('existing'), force=opts.get('force'), + rev=opts.get('rev'), git=opts.get('git')) finally: q.save_dirty() @@ -1861,7 +1876,7 @@ This command is deprecated. Without -c, it's implied by other relevant commands. With -c, use :hg:`init --mq` instead.""" - return qinit(ui, repo, create=opts['create_repo']) + return qinit(ui, repo, create=opts.get('create_repo')) def clone(ui, source, dest=None, **opts): '''clone main and patch repository at same time @@ -1886,8 +1901,8 @@ if dest is None: dest = hg.defaultdest(source) sr = hg.repository(hg.remoteui(ui, opts), ui.expandpath(source)) - if opts['patches']: - patchespath = ui.expandpath(opts['patches']) + if opts.get('patches'): + patchespath = ui.expandpath(opts.get('patches')) else: patchespath = patchdir(sr) try: @@ -1910,20 +1925,20 @@ pass ui.note(_('cloning main repository\n')) sr, dr = hg.clone(ui, sr.url(), dest, - pull=opts['pull'], + pull=opts.get('pull'), rev=destrev, update=False, - stream=opts['uncompressed']) + stream=opts.get('uncompressed')) ui.note(_('cloning patch repository\n')) - hg.clone(ui, opts['patches'] or patchdir(sr), patchdir(dr), - pull=opts['pull'], update=not opts['noupdate'], - stream=opts['uncompressed']) + hg.clone(ui, opts.get('patches') or patchdir(sr), patchdir(dr), + pull=opts.get('pull'), update=not opts.get('noupdate'), + stream=opts.get('uncompressed')) if dr.local(): if qbase: ui.note(_('stripping applied patches from destination ' 'repository\n')) - dr.mq.strip(dr, qbase, update=False, backup=None) - if not opts['noupdate']: + dr.mq.strip(dr, [qbase], update=False, backup=None) + if not opts.get('noupdate'): ui.note(_('updating destination repository\n')) hg.update(dr, dr.changelog.tip()) @@ -1939,7 +1954,7 @@ def series(ui, repo, **opts): """print the entire series file""" - repo.mq.qseries(repo, missing=opts['missing'], summary=opts['summary']) + repo.mq.qseries(repo, missing=opts.get('missing'), summary=opts.get('summary')) return 0 def top(ui, repo, **opts): @@ -2006,7 +2021,7 @@ """ msg = cmdutil.logmessage(opts) def getmsg(): - return ui.edit(msg, ui.username()) + return ui.edit(msg, opts.get('user') or ui.username()) q = repo.mq opts['msg'] = msg if opts.get('edit'): @@ -2028,6 +2043,10 @@ If -s/--short is specified, files currently included in the patch will be refreshed just like matched files and remain in the patch. + If -e/--edit is specified, Mercurial will start your configured editor for + you to enter a message. In case qrefresh fails, you will find a backup of + your message in ``.hg/last-message.txt``. + hg add/remove/copy/rename work as usual, though you might want to use git-style patches (-g/--git or [diff] git=1) to track copies and renames. See the diffs help topic for more information on the @@ -2035,7 +2054,7 @@ """ q = repo.mq message = cmdutil.logmessage(opts) - if opts['edit']: + if opts.get('edit'): if not q.applied: ui.write(_("no patches applied\n")) return 1 @@ -2044,6 +2063,10 @@ patch = q.applied[-1].name ph = patchheader(q.join(patch), q.plainmode) message = ui.edit('\n'.join(ph.message), ph.user or ui.username()) + # We don't want to lose the patch message if qrefresh fails (issue2062) + msgfile = repo.opener('last-message.txt', 'wb') + msgfile.write(message) + msgfile.close() setupheaderopts(ui, opts) ret = q.refresh(repo, pats, msg=message, **opts) q.save_dirty() @@ -2087,7 +2110,7 @@ q.check_localchanges(repo) message = cmdutil.logmessage(opts) - if opts['edit']: + if opts.get('edit'): if message: raise util.Abort(_('option "-e" incompatible with "-m" or "-l"')) @@ -2097,7 +2120,7 @@ for f in files: p = q.lookup(f) if p in patches or p == parent: - ui.warn(_('Skipping already folded patch %s') % p) + ui.warn(_('Skipping already folded patch %s\n') % p) if q.isapplied(p): raise util.Abort(_('qfold cannot fold already applied patch %s') % p) patches.append(p) @@ -2111,7 +2134,7 @@ (patchsuccess, files, fuzz) = q.patch(repo, pf) if not patchsuccess: raise util.Abort(_('error folding patch %s') % p) - patch.updatedir(ui, repo, files) + cmdutil.updatedir(ui, repo, files) if not message: ph = patchheader(q.join(parent), q.plainmode) @@ -2121,7 +2144,7 @@ message.extend(msg) message = '\n'.join(message) - if opts['edit']: + if opts.get('edit'): message = ui.edit(message, user or ui.username()) diffopts = q.patchopts(q.diffopts(), *patches) @@ -2134,9 +2157,9 @@ q = repo.mq patch = q.lookup(patch) if q.isapplied(patch): - ret = q.pop(repo, patch, force=opts['force']) + ret = q.pop(repo, patch, force=opts.get('force')) else: - ret = q.push(repo, patch, force=opts['force']) + ret = q.push(repo, patch, force=opts.get('force')) q.save_dirty() return ret @@ -2151,7 +2174,9 @@ With no arguments, print the currently active guards. With arguments, set guards for the named patch. - NOTE: Specifying negative guards now requires '--'. + + .. note:: + Specifying negative guards now requires '--'. To set guards on another patch:: @@ -2159,7 +2184,15 @@ ''' def status(idx): guards = q.series_guards[idx] or ['unguarded'] - ui.write('%s: ' % ui.label(q.series[idx], 'qguard.patch')) + if q.series[idx] in applied: + state = 'applied' + elif q.pushable(idx)[0]: + state = 'unapplied' + else: + state = 'guarded' + label = 'qguard.patch qguard.%s qseries.%s' % (state, state) + ui.write('%s: ' % ui.label(q.series[idx], label)) + for i, guard in enumerate(guards): if guard.startswith('+'): ui.write(guard, label='qguard.positive') @@ -2171,10 +2204,11 @@ ui.write(' ') ui.write('\n') q = repo.mq + applied = set(p.name for p in q.applied) patch = None args = list(args) - if opts['list']: - if args or opts['none']: + if opts.get('list'): + if args or opts.get('none'): raise util.Abort(_('cannot mix -l/--list with options or arguments')) for i in xrange(len(q.series)): status(i) @@ -2187,7 +2221,7 @@ patch = args.pop(0) if patch is None: raise util.Abort(_('no patch to work with')) - if args or opts['none']: + if args or opts.get('none'): idx = q.find_series(patch) if idx is None: raise util.Abort(_('no patch named %s') % patch) @@ -2244,9 +2278,9 @@ q = repo.mq mergeq = None - if opts['merge']: - if opts['name']: - newpath = repo.join(opts['name']) + if opts.get('merge'): + if opts.get('name'): + newpath = repo.join(opts.get('name')) else: newpath, i = lastsavename(q.path) if not newpath: @@ -2254,7 +2288,7 @@ return 1 mergeq = queue(ui, repo.join(""), newpath) ui.warn(_("merging with queue at: %s\n") % mergeq.path) - ret = q.push(repo, patch, force=opts['force'], list=opts['list'], + ret = q.push(repo, patch, force=opts.get('force'), list=opts.get('list'), mergeq=mergeq, all=opts.get('all'), move=opts.get('move')) return ret @@ -2266,14 +2300,14 @@ top of the stack. """ localupdate = True - if opts['name']: - q = queue(ui, repo.join(""), repo.join(opts['name'])) + if opts.get('name'): + q = queue(ui, repo.join(""), repo.join(opts.get('name'))) ui.warn(_('using patch queue: %s\n') % q.path) localupdate = False else: q = repo.mq - ret = q.pop(repo, patch, force=opts['force'], update=localupdate, - all=opts['all']) + ret = q.pop(repo, patch, force=opts.get('force'), update=localupdate, + all=opts.get('all')) q.save_dirty() return ret @@ -2347,8 +2381,8 @@ This command is deprecated, use :hg:`rebase` instead.""" rev = repo.lookup(rev) q = repo.mq - q.restore(repo, rev, delete=opts['delete'], - qupdate=opts['update']) + q.restore(repo, rev, delete=opts.get('delete'), + qupdate=opts.get('update')) q.save_dirty() return 0 @@ -2362,36 +2396,34 @@ if ret: return ret q.save_dirty() - if opts['copy']: + if opts.get('copy'): path = q.path - if opts['name']: - newpath = os.path.join(q.basepath, opts['name']) + if opts.get('name'): + newpath = os.path.join(q.basepath, opts.get('name')) if os.path.exists(newpath): if not os.path.isdir(newpath): raise util.Abort(_('destination %s exists and is not ' 'a directory') % newpath) - if not opts['force']: + if not opts.get('force'): raise util.Abort(_('destination %s exists, ' 'use -f to force') % newpath) else: newpath = savename(path) ui.warn(_("copy %s to %s\n") % (path, newpath)) util.copyfiles(path, newpath) - if opts['empty']: + if opts.get('empty'): try: os.unlink(q.join(q.status_path)) except: pass return 0 -def strip(ui, repo, rev, **opts): - """strip a changeset and all its descendants from the repository - - The strip command removes all changesets whose local revision - number is greater than or equal to REV, and then restores any - changesets that are not descendants of REV. If the working - directory has uncommitted changes, the operation is aborted unless - the --force flag is supplied. +def strip(ui, repo, *revs, **opts): + """strip changesets and all their descendants from the repository + + The strip command removes the specified changesets and all their + descendants. If the working directory has uncommitted changes, + the operation is aborted unless the --force flag is supplied. If a parent of the working directory is stripped, then the working directory will automatically be updated to the most recent @@ -2405,39 +2437,51 @@ the local revision numbers will in general be different after the restore. - Use the --nobackup option to discard the backup bundle once the + Use the --no-backup option to discard the backup bundle once the operation completes. """ backup = 'all' - if opts['backup']: + if opts.get('backup'): backup = 'strip' - elif opts['nobackup']: + elif opts.get('no-backup') or opts.get('nobackup'): backup = 'none' - rev = repo.lookup(rev) - p = repo.dirstate.parents() cl = repo.changelog - update = True - if p[0] == nullid: - update = False - elif p[1] == nullid and rev != cl.ancestor(p[0], rev): - update = False - elif rev not in (cl.ancestor(p[0], rev), cl.ancestor(p[1], rev)): - update = False + revs = set(cl.rev(repo.lookup(r)) for r in revs) + + descendants = set(cl.descendants(*revs)) + strippedrevs = revs.union(descendants) + roots = revs.difference(descendants) + + update = False + # if one of the wdir parent is stripped we'll need + # to update away to an earlier revision + for p in repo.dirstate.parents(): + if p != nullid and cl.rev(p) in strippedrevs: + update = True + break + + rootnodes = set(cl.node(r) for r in roots) q = repo.mq if q.applied: - if rev == cl.ancestor(repo.lookup('qtip'), rev): + # refresh queue state if we're about to strip + # applied patches + if cl.rev(repo.lookup('qtip')) in strippedrevs: q.applied_dirty = True start = 0 end = len(q.applied) - applied_list = [i.node for i in q.applied] - if rev in applied_list: - start = applied_list.index(rev) + for i, statusentry in enumerate(q.applied): + if statusentry.node in rootnodes: + # if one of the stripped roots is an applied + # patch, only part of the queue is stripped + start = i + break del q.applied[start:end] q.save_dirty() - repo.mq.strip(repo, rev, backup=backup, update=update, force=opts['force']) + repo.mq.strip(repo, list(rootnodes), backup=backup, update=update, + force=opts.get('force')) return 0 def select(ui, repo, *args, **opts): @@ -2475,7 +2519,7 @@ q = repo.mq guards = q.active() - if args or opts['none']: + if args or opts.get('none'): old_unapplied = q.unapplied(repo) old_guarded = [i for i in xrange(len(q.applied)) if not q.pushable(i)[0]] @@ -2483,7 +2527,7 @@ q.save_dirty() if not args: ui.status(_('guards deactivated\n')) - if not opts['pop'] and not opts['reapply']: + if not opts.get('pop') and not opts.get('reapply'): unapplied = q.unapplied(repo) guarded = [i for i in xrange(len(q.applied)) if not q.pushable(i)[0]] @@ -2495,7 +2539,7 @@ ui.status(_('number of guarded, applied patches has changed ' 'from %d to %d\n') % (len(old_guarded), len(guarded))) - elif opts['series']: + elif opts.get('series'): guards = {} noguards = 0 for gs in q.series_guards: @@ -2522,9 +2566,9 @@ ui.write(g, '\n') else: ui.write(_('no active guards\n')) - reapply = opts['reapply'] and q.applied and q.appliedname(-1) + reapply = opts.get('reapply') and q.applied and q.appliedname(-1) popped = False - if opts['pop'] or opts['reapply']: + if opts.get('pop') or opts.get('reapply'): for i in xrange(len(q.applied)): pushable, reason = q.pushable(i) if not pushable: @@ -2559,10 +2603,10 @@ an upstream repository, or if you are about to push your changes to upstream. """ - if not opts['applied'] and not revrange: + if not opts.get('applied') and not revrange: raise util.Abort(_('no revisions specified')) - elif opts['applied']: - revrange = ('qbase:qtip',) + revrange + elif opts.get('applied'): + revrange = ('qbase::qtip',) + revrange q = repo.mq if not q.applied: @@ -2630,7 +2674,9 @@ def _setactive(name): if q.applied: raise util.Abort(_('patches applied - cannot set new queue active')) - + _setactivenocheck(name) + + def _setactivenocheck(name): fh = repo.opener(_activequeue, 'w') if name != 'patches': fh.write(name) @@ -2641,17 +2687,40 @@ fh.write('%s\n' % (name,)) fh.close() + def _queuedir(name): + if name == 'patches': + return repo.join('patches') + else: + return repo.join('patches-' + name) + def _validname(name): for n in name: if n in ':\\/.': return False return True + def _delete(name): + if name not in existing: + raise util.Abort(_('cannot delete queue that does not exist')) + + current = _getcurrent() + + if name == current: + raise util.Abort(_('cannot delete currently active queue')) + + fh = repo.opener('patches.queues.new', 'w') + for queue in existing: + if queue == name: + continue + fh.write('%s\n' % (queue,)) + fh.close() + util.rename(repo.join('patches.queues.new'), repo.join(_allqueues)) + if not name or opts.get('list'): current = _getcurrent() for queue in _getqueues(): ui.write('%s' % (queue,)) - if queue == current: + if queue == current and not ui.quiet: ui.write(_(' (active)\n')) else: ui.write('\n') @@ -2670,22 +2739,39 @@ _addqueue(_defaultqueue) _addqueue(name) _setactive(name) - elif opts.get('delete'): - if name not in existing: - raise util.Abort(_('cannot delete queue that does not exist')) - + elif opts.get('rename'): current = _getcurrent() - if name == current: - raise util.Abort(_('cannot delete currently active queue')) + raise util.Abort(_('can\'t rename "%s" to its current name') % name) + if name in existing: + raise util.Abort(_('queue "%s" already exists') % name) + + olddir = _queuedir(current) + newdir = _queuedir(name) + + if os.path.exists(newdir): + raise util.Abort(_('non-queue directory "%s" already exists') % + newdir) fh = repo.opener('patches.queues.new', 'w') for queue in existing: - if queue == name: - continue - fh.write('%s\n' % (queue,)) + if queue == current: + fh.write('%s\n' % (name,)) + if os.path.exists(olddir): + util.rename(olddir, newdir) + else: + fh.write('%s\n' % (queue,)) fh.close() util.rename(repo.join('patches.queues.new'), repo.join(_allqueues)) + _setactivenocheck(name) + elif opts.get('delete'): + _delete(name) + elif opts.get('purge'): + if name in existing: + _delete(name) + qdir = _queuedir(name) + if os.path.exists(qdir): + shutil.rmtree(qdir) else: if name not in existing: raise util.Abort(_('use --create to create a new queue')) @@ -2851,13 +2937,21 @@ entry = extensions.wrapcommand(commands.table, 'init', mqinit) entry[1].extend(mqopt) - norepo = commands.norepo.split(" ") - for cmd in commands.table.keys(): - cmd = cmdutil.parsealiases(cmd)[0] - if cmd in norepo: - continue - entry = extensions.wrapcommand(commands.table, cmd, mqcommand) - entry[1].extend(mqopt) + nowrap = set(commands.norepo.split(" ") + ['qrecord']) + + def dotable(cmdtable): + for cmd in cmdtable.keys(): + cmd = cmdutil.parsealiases(cmd)[0] + if cmd in nowrap: + continue + entry = extensions.wrapcommand(cmdtable, cmd, mqcommand) + entry[1].extend(mqopt) + + dotable(commands.table) + + for extname, extmodule in extensions.extensions(): + if extmodule.__file__ != __file__: + dotable(getattr(extmodule, 'cmdtable', {})) seriesopts = [('s', 'summary', None, _('print first line of patch header'))] @@ -3003,8 +3097,9 @@ ('b', 'backup', None, _('bundle only changesets with local revision' ' number greater than REV which are not' ' descendants of REV (DEPRECATED)')), - ('n', 'nobackup', None, _('no backups'))], - _('hg strip [-f] [-n] REV')), + ('n', 'no-backup', None, _('no backups')), + ('', 'nobackup', None, _('no backups (DEPRECATED)'))], + _('hg strip [-f] [-n] REV...')), "qtop": (top, [] + seriesopts, _('hg qtop [-s]')), "qunapplied": (unapplied, @@ -3019,7 +3114,9 @@ [ ('l', 'list', False, _('list all available queues')), ('c', 'create', False, _('create new queue')), + ('', 'rename', False, _('rename active queue')), ('', 'delete', False, _('delete reference to queue')), + ('', 'purge', False, _('delete queue, and remove patch dir')), ], _('[OPTION] [QUEUE]')), } diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/patchbomb.py --- a/hgext/patchbomb.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/patchbomb.py Fri Sep 24 00:17:04 2010 +0200 @@ -22,9 +22,9 @@ and References headers, so they will show up as a sequence in threaded mail and news readers, and in mail archives. -With the -d/--diffstat option, you will be prompted for each changeset -with a diffstat summary and the changeset summary, so you can be sure -you are sending the right changes. +With the -d/--diffstat or -c/--confirm options, you will be presented +with a final summary of all messages and asked for confirmation before +the messages are sent. To configure other defaults, add a section like this to your hgrc file:: @@ -81,9 +81,7 @@ from mercurial.node import bin def prompt(ui, prompt, default=None, rest=':'): - if not ui.interactive(): - if default is not None: - return default + if not ui.interactive() and default is None: raise util.Abort(_("%s Please enter a valid value" % (prompt + rest))) if default: prompt += ' [%s]' % default @@ -96,27 +94,18 @@ return default ui.warn(_('Please enter a valid value.\n')) -def cdiffstat(ui, summary, patchlines): - s = patch.diffstat(patchlines) - if summary: - ui.write(summary, '\n') - ui.write(s, '\n') - ans = prompt(ui, _('does the diffstat above look okay?'), 'y') - if not ans.lower().startswith('y'): - raise util.Abort(_('diffstat rejected')) - return s - def introneeded(opts, number): '''is an introductory message required?''' return number > 1 or opts.get('intro') or opts.get('desc') -def makepatch(ui, repo, patch, opts, _charsets, idx, total, patchname=None): +def makepatch(ui, repo, patchlines, opts, _charsets, idx, total, + patchname=None): desc = [] node = None body = '' - for line in patch: + for line in patchlines: if line.startswith('#'): if line.startswith('# Node ID'): node = line.split()[-1] @@ -134,21 +123,22 @@ body += '\n\n\n' if opts.get('plain'): - while patch and patch[0].startswith('# '): - patch.pop(0) - if patch: - patch.pop(0) - while patch and not patch[0].strip(): - patch.pop(0) + while patchlines and patchlines[0].startswith('# '): + patchlines.pop(0) + if patchlines: + patchlines.pop(0) + while patchlines and not patchlines[0].strip(): + patchlines.pop(0) + ds = patch.diffstat(patchlines) if opts.get('diffstat'): - body += cdiffstat(ui, '\n'.join(desc), patch) + '\n\n' + body += ds + '\n\n' if opts.get('attach') or opts.get('inline'): msg = email.MIMEMultipart.MIMEMultipart() if body: msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test'))) - p = mail.mimetextpatch('\n'.join(patch), 'x-patch', opts.get('test')) + p = mail.mimetextpatch('\n'.join(patchlines), 'x-patch', opts.get('test')) binnode = bin(node) # if node is mq patch, it will have the patch file's name as a tag if not patchname: @@ -167,7 +157,7 @@ p['Content-Disposition'] = disposition + '; filename=' + patchname msg.attach(p) else: - body += '\n'.join(patch) + body += '\n'.join(patchlines) msg = mail.mimetextpatch(body, display=opts.get('test')) flag = ' '.join(opts.get('flag')) @@ -182,7 +172,7 @@ subj = '[PATCH %0*d of %d%s] %s' % (tlen, idx, total, flag, subj) msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test')) msg['X-Mercurial-Node'] = node - return msg, subj + return msg, subj, ds def patchbomb(ui, repo, *revs, **opts): '''send changesets by email @@ -352,17 +342,16 @@ prompt(ui, 'Subject: ', rest=subj)) body = '' - if opts.get('diffstat'): - d = cdiffstat(ui, _('Final summary:\n'), jumbo) - if d: - body = '\n' + d + ds = patch.diffstat(jumbo) + if ds and opts.get('diffstat'): + body = '\n' + ds body = getdescription(body, sender) msg = mail.mimeencode(ui, body, _charsets, opts.get('test')) msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test')) - msgs.insert(0, (msg, subj)) + msgs.insert(0, (msg, subj, ds)) return msgs def getbundlemsgs(bundle): @@ -381,7 +370,7 @@ email.Encoders.encode_base64(datapart) msg.attach(datapart) msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test')) - return [(msg, subj)] + return [(msg, subj, None)] sender = (opts.get('from') or ui.config('email', 'from') or ui.config('patchbomb', 'from') or @@ -394,17 +383,25 @@ else: msgs = getpatchmsgs(list(getpatches(revs))) + showaddrs = [] + def getaddrs(opt, prpt=None, default=None): addrs = opts.get(opt.replace('-', '_')) + if opt != 'reply-to': + showaddr = '%s:' % opt.capitalize() + else: + showaddr = 'Reply-To:' + if addrs: - return mail.addrlistencode(ui, addrs, _charsets, - opts.get('test')) + showaddrs.append('%s %s' % (showaddr, ', '.join(addrs))) + return mail.addrlistencode(ui, addrs, _charsets, opts.get('test')) - addrs = (ui.config('email', opt) or - ui.config('patchbomb', opt) or '') + addrs = ui.config('email', opt) or ui.config('patchbomb', opt) or '' if not addrs and prpt: addrs = prompt(ui, prpt, default) + if addrs: + showaddrs.append('%s %s' % (showaddr, addrs)) return mail.addrlistencode(ui, [addrs], _charsets, opts.get('test')) to = getaddrs('to', 'To') @@ -412,6 +409,20 @@ bcc = getaddrs('bcc') replyto = getaddrs('reply-to') + if opts.get('diffstat') or opts.get('confirm'): + ui.write(_('\nFinal summary:\n\n')) + ui.write('From: %s\n' % sender) + for addr in showaddrs: + ui.write('%s\n' % addr) + for m, subj, ds in msgs: + ui.write('Subject: %s\n' % subj) + if ds: + ui.write(ds) + ui.write('\n') + if ui.promptchoice(_('are you sure you want to send (yn)?'), + (_('&Yes'), _('&No'))): + raise util.Abort(_('patchbomb canceled')) + ui.write('\n') parent = opts.get('in_reply_to') or None @@ -427,7 +438,7 @@ sender_addr = email.Utils.parseaddr(sender)[1] sender = mail.addressencode(ui, sender, _charsets, opts.get('test')) sendmail = None - for m, subj in msgs: + for i, (m, subj, ds) in enumerate(msgs): try: m['Message-Id'] = genmsgid(m['X-Mercurial-Node']) except TypeError: @@ -469,6 +480,7 @@ fp.close() elif mbox: ui.status(_('Writing '), subj, ' ...\n') + ui.progress(_('writing'), i, item=subj, total=len(msgs)) fp = open(mbox, 'In-Reply-To' in m and 'ab+' or 'wb+') generator = email.Generator.Generator(fp, mangle_from_=True) # Should be time.asctime(), but Windows prints 2-characters day @@ -483,6 +495,7 @@ if not sendmail: sendmail = mail.connect(ui) ui.status(_('Sending '), subj, ' ...\n') + ui.progress(_('sending'), i, item=subj, total=len(msgs)) # Exim does not remove the Bcc field del m['Bcc'] fp = cStringIO.StringIO() @@ -490,11 +503,15 @@ generator.flatten(m, 0) sendmail(sender, to + bcc + cc, fp.getvalue()) + ui.progress(_('writing'), None) + ui.progress(_('sending'), None) + emailopts = [ ('a', 'attach', None, _('send patches as attachments')), ('i', 'inline', None, _('send patches as inline attachments')), ('', 'bcc', [], _('email addresses of blind carbon copy recipients')), ('c', 'cc', [], _('email addresses of copy recipients')), + ('', 'confirm', None, _('ask for confirmation before sending')), ('d', 'diffstat', None, _('add diffstat output to messages')), ('', 'date', '', _('use the given date as the sending date')), ('', 'desc', '', _('use the given file as the series description')), diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/rebase.py --- a/hgext/rebase.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/rebase.py Fri Sep 24 00:17:04 2010 +0200 @@ -14,7 +14,7 @@ http://mercurial.selenic.com/wiki/RebaseExtension ''' -from mercurial import hg, util, repair, merge, cmdutil, commands, error +from mercurial import hg, util, repair, merge, cmdutil, commands from mercurial import extensions, ancestor, copies, patch from mercurial.commands import templateopts from mercurial.node import nullrev @@ -148,9 +148,14 @@ targetancestors = set(repo.changelog.ancestors(target)) targetancestors.add(target) - for rev in sorted(state): + sortedstate = sorted(state) + total = len(sortedstate) + pos = 0 + for rev in sortedstate: + pos += 1 if state[rev] == -1: - ui.debug("rebasing %d:%s\n" % (rev, repo[rev])) + ui.progress(_("rebasing"), pos, ("%d:%s" % (rev, repo[rev])), + _(' changesets'), total) storestatus(repo, originalwd, target, state, collapsef, keepf, keepbranchesf, external) p1, p2 = defineparents(repo, rev, target, state, @@ -179,6 +184,7 @@ skipped.add(rev) state[rev] = p1 + ui.progress(_('rebasing'), None) ui.note(_('rebase merging completed\n')) if collapsef and not keepopen: diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/record.py --- a/hgext/record.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/record.py Fri Sep 24 00:17:04 2010 +0200 @@ -10,7 +10,7 @@ from mercurial.i18n import gettext, _ from mercurial import cmdutil, commands, extensions, hg, mdiff, patch from mercurial import util -import copy, cStringIO, errno, operator, os, re, tempfile +import copy, cStringIO, errno, os, re, tempfile lines_re = re.compile(r'@@ -(\d+),(\d+) \+(\d+),(\d+) @@\s*(.*)') @@ -97,7 +97,7 @@ if h.startswith('---'): fp.write(_('%d hunks, %d lines changed\n') % (len(self.hunks), - sum([h.added + h.removed for h in self.hunks]))) + sum([max(h.added, h.removed) for h in self.hunks]))) break fp.write(h) @@ -186,7 +186,8 @@ self.hunk = [] self.stream = [] - def addrange(self, (fromstart, fromend, tostart, toend, proc)): + def addrange(self, limits): + fromstart, fromend, tostart, toend, proc = limits self.fromline = int(fromstart) self.toline = int(tostart) self.proc = proc @@ -354,8 +355,8 @@ applied[chunk.filename()].append(chunk) else: fixoffset += chunk.removed - chunk.added - return reduce(operator.add, [h for h in applied.itervalues() - if h[0].special() or len(h) > 1], []) + return sum([h for h in applied.itervalues() + if h[0].special() or len(h) > 1], []) def record(ui, repo, *pats, **opts): '''interactively select changes to commit @@ -485,7 +486,8 @@ # 3a. apply filtered patch to clean repo (clean) if backups: - hg.revert(repo, repo.dirstate.parents()[0], backups.has_key) + hg.revert(repo, repo.dirstate.parents()[0], + lambda key: key in backups) # 3b. (apply) if dopatch: @@ -495,7 +497,7 @@ pfiles = {} patch.internalpatch(fp, ui, 1, repo.root, files=pfiles, eolmode=None) - patch.updatedir(ui, repo, pfiles) + cmdutil.updatedir(ui, repo, pfiles) except patch.PatchError, err: s = str(err) if s: diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/relink.py --- a/hgext/relink.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/relink.py Fri Sep 24 00:17:04 2010 +0200 @@ -7,7 +7,7 @@ """recreates hardlinks between repository clones""" -from mercurial import cmdutil, hg, util +from mercurial import hg, util from mercurial.i18n import _ import os, stat diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/share.py --- a/hgext/share.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/share.py Fri Sep 24 00:17:04 2010 +0200 @@ -14,15 +14,16 @@ Initialize a new repository and working directory that shares its history with another repository. - NOTE: using rollback or extensions that destroy/modify history - (mq, rebase, etc.) can cause considerable confusion with shared - clones. In particular, if two shared clones are both updated to - the same changeset, and one of them destroys that changeset with - rollback, the other clone will suddenly stop working: all - operations will fail with "abort: working directory has unknown - parent". The only known workaround is to use debugsetparents on - the broken clone to reset it to a changeset that still exists - (e.g. tip). + .. note:: + using rollback or extensions that destroy/modify history (mq, + rebase, etc.) can cause considerable confusion with shared + clones. In particular, if two shared clones are both updated to + the same changeset, and one of them destroys that changeset + with rollback, the other clone will suddenly stop working: all + operations will fail with "abort: working directory has unknown + parent". The only known workaround is to use debugsetparents on + the broken clone to reset it to a changeset that still exists + (e.g. tip). """ return hg.share(ui, source, dest, not noupdate) diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/transplant.py --- a/hgext/transplant.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/transplant.py Fri Sep 24 00:17:04 2010 +0200 @@ -31,7 +31,7 @@ if not opener: self.opener = util.opener(self.path) - self.transplants = [] + self.transplants = {} self.dirty = False self.read() @@ -40,29 +40,34 @@ if self.transplantfile and os.path.exists(abspath): for line in self.opener(self.transplantfile).read().splitlines(): lnode, rnode = map(revlog.bin, line.split(':')) - self.transplants.append(transplantentry(lnode, rnode)) + list = self.transplants.setdefault(rnode, []) + list.append(transplantentry(lnode, rnode)) def write(self): if self.dirty and self.transplantfile: if not os.path.isdir(self.path): os.mkdir(self.path) fp = self.opener(self.transplantfile, 'w') - for c in self.transplants: - l, r = map(revlog.hex, (c.lnode, c.rnode)) - fp.write(l + ':' + r + '\n') + for list in self.transplants.itervalues(): + for t in list: + l, r = map(revlog.hex, (t.lnode, t.rnode)) + fp.write(l + ':' + r + '\n') fp.close() self.dirty = False def get(self, rnode): - return [t for t in self.transplants if t.rnode == rnode] + return self.transplants.get(rnode) or [] def set(self, lnode, rnode): - self.transplants.append(transplantentry(lnode, rnode)) + list = self.transplants.setdefault(rnode, []) + list.append(transplantentry(lnode, rnode)) self.dirty = True def remove(self, transplant): - del self.transplants[self.transplants.index(transplant)] - self.dirty = True + list = self.transplants.get(transplant.rnode) + if list: + del list[list.index(transplant)] + self.dirty = True class transplanter(object): def __init__(self, ui, repo): @@ -225,7 +230,7 @@ % revlog.hex(node)) return None finally: - files = patch.updatedir(self.ui, repo, files) + files = cmdutil.updatedir(self.ui, repo, files) except Exception, inst: seriespath = os.path.join(self.path, 'series') if os.path.exists(seriespath): diff -r 84ceedcfeb6a -r 9d45f78c465b hgext/zeroconf/__init__.py --- a/hgext/zeroconf/__init__.py Fri Sep 24 00:04:07 2010 +0200 +++ b/hgext/zeroconf/__init__.py Fri Sep 24 00:17:04 2010 +0200 @@ -27,7 +27,7 @@ import socket, time, os import Zeroconf -from mercurial import ui, hg, encoding +from mercurial import ui, hg, encoding, util from mercurial import extensions from mercurial.hgweb import hgweb_mod from mercurial.hgweb import hgwebdir_mod @@ -107,7 +107,7 @@ path = self.repo.ui.config("web", "prefix", "").strip('/') desc = self.repo.ui.config("web", "description", name) publish(name, desc, path, - int(self.repo.ui.config("web", "port", 8000))) + util.getport(self.repo.ui.config("web", "port", 8000))) class hgwebdirzc(hgwebdir_mod.hgwebdir): def __init__(self, conf, baseui=None): @@ -119,7 +119,7 @@ name = os.path.basename(repo) path = (prefix + repo).strip('/') desc = u.config('web', 'description', name) - publish(name, desc, path, int(u.config("web", "port", 8000))) + publish(name, desc, path, util.getport(u.config("web", "port", 8000))) # listen diff -r 84ceedcfeb6a -r 9d45f78c465b i18n/da.po --- a/i18n/da.po Fri Sep 24 00:04:07 2010 +0200 +++ b/i18n/da.po Fri Sep 24 00:17:04 2010 +0200 @@ -17,10 +17,11 @@ msgstr "" "Project-Id-Version: Mercurial\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-07-01 14:56+0200\n" -"PO-Revision-Date: 2010-07-01 15:23+0200\n" +"POT-Creation-Date: 2010-08-15 17:28+0200\n" +"PO-Revision-Date: 2010-08-26 08:58+0200\n" "Last-Translator: \n" "Language-Team: Danish\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -345,6 +346,9 @@ msgid "bookmark name cannot contain newlines" msgstr "bogmærkenavn kan ikke indeholde linieskift" +msgid "bookmark names cannot consist entirely of whitespace" +msgstr "bogmærkenavne kan ikke bestå udelukkende af tomrum" + msgid "a bookmark cannot have the name of an existing branch" msgstr "et bogmærke kan ikke hedde det samme som en eksisterende gren" @@ -1082,17 +1086,24 @@ msgid "" " The filemap is a file that allows filtering and remapping of files\n" -" and directories. Comment lines start with '#'. Each line can\n" -" contain one of the following directives::" -msgstr "" - -msgid " include path/to/file" -msgstr "" - -msgid " exclude path/to/file" -msgstr "" - -msgid " rename from/file to/file" +" and directories. Each line can contain one of the following\n" +" directives::" +msgstr "" + +msgid " include path/to/file-or-dir" +msgstr "" + +msgid " exclude path/to/file-or-dir" +msgstr "" + +msgid " rename path/to/source path/to/destination" +msgstr "" + +msgid "" +" Comment lines start with '#'. A specified path matches if it\n" +" equals the full relative name of a file or one of its parent\n" +" directories. The 'include' or 'exclude' directive with the longest\n" +" matching path applies, so line order does not matter." msgstr "" msgid "" @@ -1100,9 +1111,9 @@ " directory, to be included in the destination repository, and the\n" " exclusion of all other files and directories not explicitly\n" " included. The 'exclude' directive causes files or directories to\n" -" be omitted. The 'rename' directive renames a file or directory. To\n" -" rename from a subdirectory into the root of the repository, use\n" -" '.' as the path to rename to." +" be omitted. The 'rename' directive renames a file or directory if\n" +" it is converted. To rename from a subdirectory into the root of\n" +" the repository, use '.' as the path to rename to." msgstr "" msgid "" @@ -1432,8 +1443,8 @@ msgid "%s: unknown repository type" msgstr "%s: ukendt depottype" -msgid "retrieving file" -msgstr "henter fil" +msgid "getting files" +msgstr "henter filer" msgid "revisions" msgstr "revisioner" @@ -1615,10 +1626,18 @@ msgstr "fejl i filafbildning" #, python-format +msgid "%s:%d: path to %s is missing\n" +msgstr "" + +#, python-format msgid "%s:%d: %r already in %s list\n" msgstr "%s:%d: %r er allerede i %s listen\n" #, python-format +msgid "%s:%d: superfluous / in %s %r\n" +msgstr "" + +#, python-format msgid "%s:%d: unknown directive %r\n" msgstr "%s:%d: ukendt direktiv %r\n" @@ -1802,8 +1821,8 @@ msgid "unable to cope with svn output" msgstr "kan ikke håndtere svn output" -msgid "XXX TAGS NOT IMPLEMENTED YET\n" -msgstr "XXX MÆRKATER ER IKKE IMPLEMENTERET ENDNU\n" +msgid "writing Subversion tags is not yet implemented\n" +msgstr "" msgid "automatically manage newlines in repository files" msgstr "automatisk håndtering af linieskift i depotfiler" @@ -2629,8 +2648,8 @@ #, python-format msgid "*** the current per-user limit on the number of inotify watches is %s\n" msgstr "" -"*** den nuværende grænse pr bruger for antallet af inotify overvågninger er %" -"s\n" +"*** den nuværende grænse pr bruger for antallet af inotify overvågninger er " +"%s\n" msgid "*** this limit is too low to watch every directory in this repository\n" msgstr "" @@ -3298,9 +3317,8 @@ msgid "patch series already fully applied\n" msgstr "serien af rettelser er allerede anvendt fuldt ud\n" -#, python-format -msgid "patch '%s' not found" -msgstr "gren '%s' blev ikke fundet" +msgid "please specify the patch to move" +msgstr "angiv venligst lappen der skal flyttes" msgid "cleaning up working directory..." msgstr "rydder op i arbejdskataloget..." @@ -3436,10 +3454,18 @@ msgid "patch %s does not exist" msgstr "rettelsen %s eksisterer ikke" +#, python-format +msgid "renaming %s to %s\n" +msgstr "omdøber %s til %s\n" + msgid "need --name to import a patch from -" msgstr "har brug for --name for at importere rettelse fra -" #, python-format +msgid "unable to read file %s" +msgstr "kan ikke læse filen %s" + +#, python-format msgid "adding %s to series file\n" msgstr "tilføjer %s til series filen\n" @@ -3520,14 +3546,21 @@ msgid "" " To import a patch from standard input, pass - as the patch file.\n" " When importing from standard input, a patch name must be specified\n" -" using the --name flag.\n" -" " +" using the --name flag." msgstr "" " Brug - som patch filnavn for at importere en patch fra standard\n" " indput. Når der importeres fra standard indput skal der angivet et\n" " patchnavn med --name tilvalget.\n" " " +msgid " To import an existing patch while renaming it::" +msgstr "" + +msgid "" +" hg qimport -e existing-patch -n new-name\n" +" " +msgstr "" + msgid "init a new queue repository (DEPRECATED)" msgstr "opret et nyt kø-depot (FORÆLDET)" @@ -3845,10 +3878,6 @@ msgid "A patch named %s already exists in the series file" msgstr "En rettelse ved navn %s eksisterer allerede i serien" -#, python-format -msgid "renaming %s to %s\n" -msgstr "omdøber %s til %s\n" - msgid "restore the queue state saved by a revision (DEPRECATED)" msgstr "" @@ -3870,15 +3899,13 @@ msgid "copy %s to %s\n" msgstr "kopier %s til %s\n" -msgid "strip a changeset and all its descendants from the repository" -msgstr "strip en ændring og alle dens efterkommere fra depotet" - -msgid "" -" The strip command removes all changesets whose local revision\n" -" number is greater than or equal to REV, and then restores any\n" -" changesets that are not descendants of REV. If the working\n" -" directory has uncommitted changes, the operation is aborted unless\n" -" the --force flag is supplied." +msgid "strip changesets and all their descendants from the repository" +msgstr "strip ændringer og alle deres efterkommere fra depotet" + +msgid "" +" The strip command removes the specified changesets and all their\n" +" descendants. If the working directory has uncommitted changes,\n" +" the operation is aborted unless the --force flag is supplied." msgstr "" msgid "" @@ -4095,7 +4122,7 @@ msgstr "kan ikke deponere henover en anvendt mq rettelse" msgid "source has mq patches applied" -msgstr "målet har mq rettelser anvendt" +msgstr "kilden har mq rettelser anvendt" #, python-format msgid "mq status file refers to unknown node %s\n" @@ -4366,8 +4393,8 @@ msgid "no backups" msgstr "ingen backupper" -msgid "hg strip [-f] [-n] REV" -msgstr "hg strip [-f] [-n] REV" +msgid "hg strip [-f] [-n] REV..." +msgstr "hg strip [-f] [-n] REV..." msgid "hg qtop [-s]" msgstr "hg qtop [-s]" @@ -5115,6 +5142,12 @@ msgid "cannot use both keepbranches and extrafn" msgstr "man kan ikke bruge både keepbranches og extrafn" +msgid "rebasing" +msgstr "" + +msgid " changesets" +msgstr " ændringer" + msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue" msgstr "ret uløste konflikter med hg resolve og kør så hg rebase --continue" @@ -5867,14 +5900,14 @@ msgstr "" msgid "" -"Zeroconf enabled repositories will be announced in a network without\n" +"Zeroconf-enabled repositories will be announced in a network without\n" "the need to configure a server or a service. They can be discovered\n" "without knowing their actual IP address." msgstr "" msgid "" -"To allow other people to discover your repository using run \"hg serve\"\n" -"in your repository::" +"To allow other people to discover your repository using run\n" +":hg:`serve` in your repository::" msgstr "" msgid "" @@ -5885,7 +5918,8 @@ " $ hg serve" msgid "" -"You can discover zeroconf enabled repositories by running \"hg paths\"::" +"You can discover Zeroconf-enabled repositories by running\n" +":hg:`paths`::" msgstr "" msgid "" @@ -6020,8 +6054,8 @@ #, python-format msgid "%s has not been committed yet, so no copy data will be stored for %s.\n" msgstr "" -"%s er endnu ikke comitted, så der vil ikke blive gemt kopieringsdata for %" -"s.\n" +"%s er endnu ikke comitted, så der vil ikke blive gemt kopieringsdata for " +"%s.\n" msgid "no source or destination specified" msgstr "ingen kilde eller destination angivet" @@ -6198,8 +6232,7 @@ " $ hg add\n" " adding foo.c\n" " $ hg status\n" -" A foo.c\n" -" " +" A foo.c" msgstr "" " $ ls\n" " foo.c\n" @@ -6208,8 +6241,12 @@ " $ hg add\n" " adding foo.c\n" " $ hg status\n" -" A foo.c\n" +" A foo.c" + +msgid "" +" Returns 0 if all files are successfully added.\n" " " +msgstr "" msgid "add all new files, delete all missing files" msgstr "tilføj alle nye filer, fjern alle manglende filer" @@ -6234,19 +6271,16 @@ " every added file and records those similar enough as renames. This\n" " option takes a percentage between 0 (disabled) and 100 (files must\n" " be identical) as its parameter. Detecting renamed files this way\n" -" can be expensive." +" can be expensive. After using this option, :hg:`status -C` can be\n" +" used to check which files were identified as moved or renamed." msgstr "" " Brug -s/--similarity tilvalget for at opdage omdøbte filer. Med en\n" " parameter større end 0 bliver hver fjernet fil sammenlignet med\n" " enhver tilføjet fil og filer der er tilstrækkelig ens bliver\n" " opført som omdøbte. Dette tilvalg tager et procenttal mellem 0\n" " (slået fra) og 100 (filer skal være identiske) som parameter. At\n" -" opdage omdøbninger på denne måde kan være dyrt." - -msgid "" -" Returns 0 if all files are successfully added.\n" -" " -msgstr "" +" opdage omdøbninger på denne måde kan være dyrt. Brug :hg:`status\n" +" -C` for at kontrollere hvilke filer der blev markeret som omdøbt." msgid "similarity must be a number" msgstr "lighedsgrad skal være et tal" @@ -7217,20 +7251,20 @@ msgid "" " :``%%``: literal \"%\" character\n" -" :``%H``: changeset hash (40 bytes of hexadecimal)\n" +" :``%H``: changeset hash (40 hexadecimal digits)\n" " :``%N``: number of patches being generated\n" " :``%R``: changeset revision number\n" " :``%b``: basename of the exporting repository\n" -" :``%h``: short-form changeset hash (12 bytes of hexadecimal)\n" +" :``%h``: short-form changeset hash (12 hexadecimal digits)\n" " :``%n``: zero-padded sequence number, starting at 1\n" " :``%r``: zero-padded changeset revision number" msgstr "" " :``%%``: litteral \"%\" tegn\n" -" :``%H``: ændringshash (40 byte heksadecimal)\n" +" :``%H``: ændringshash (40 hexadecimale cifre)\n" " :``%N``: antallet af rettelser som bliver genereret\n" " :``%R``: revisionnummer for ændringen\n" " :``%b``: grundnavn for det eksporterede depot\n" -" :``%h``: kortform ændringshash (12 byte heksadecimal)\n" +" :``%h``: kortform ændringshash (12 hexadecimale cifre)\n" " :``%n``: nul-fyldt sekvensnummer, startende ved 1\n" " :``%r``: nul-fyldt revisionsnummer for ændringen" @@ -7427,6 +7461,14 @@ msgstr "(ingen hjælpetekst tilgængelig)" #, python-format +msgid "shell alias for::" +msgstr "shellalias for::" + +#, python-format +msgid " %s" +msgstr " %s" + +#, python-format msgid "alias for: hg %s" msgstr "alias for: hg %s" @@ -7859,12 +7901,8 @@ " :hg:`bundle`) operations." msgstr "" -msgid "" -" See :hg:`help urls` for more information.\n" -" " -msgstr "" -" Se :hg:`help urls` for mere information.\n" -" " +msgid " See :hg:`help urls` for more information." +msgstr " Se :hg:`help urls` for mere information." msgid "not found!\n" msgstr "ikke fundet!\n" @@ -8517,6 +8555,9 @@ msgid "tag names must be unique" msgstr "mærkatnavne skal være unikke" +msgid "tag names cannot consist entirely of whitespace" +msgstr "mærkater kan ikke bestå udelukkende af tomrum" + msgid "--rev and --remove are incompatible" msgstr "--rev og --remove er inkompatible" @@ -8584,12 +8625,12 @@ msgstr " Opdater depotets arbejdskatalog til den angivne ændring." msgid "" -" If no changeset is specified, attempt to update to the head of the\n" -" current branch. If this head is a descendant of the working\n" +" If no changeset is specified, attempt to update to the tip of the\n" +" current branch. If this changeset is a descendant of the working\n" " directory's parent, update to it, otherwise abort." msgstr "" " Hvis der ikke er angivet nogen ændring, forsøg da at opdatere til\n" -" spidsen af den nuværende gren. Hvis dette hoved nedstammer fra\n" +" spidsen af den nuværende gren. Hvis denne ændring nedstammer fra\n" " arbejdskatalogets forælder, da opdateres der til det, ellers\n" " afbrydes der." @@ -9109,7 +9150,7 @@ msgid "show topological heads only" msgstr "" -msgid "show active branchheads only [DEPRECATED]" +msgid "show active branchheads only (DEPRECATED)" msgstr "vis kun aktive gren-hoveder (FORÆLDET)" msgid "show normal and closed branch heads" @@ -9564,24 +9605,24 @@ msgstr "depotet er urelateret" #, python-format -msgid "abort: push creates new remote heads on branch '%s'!\n" -msgstr "afbrudt: skub laver nye hoveder på grenen '%s'!\n" - -msgid "abort: push creates new remote heads!\n" -msgstr "afbrudt: skub laver nye fjern-hoveder!\n" - -msgid "(you should pull and merge or use push -f to force)\n" -msgstr "(du skal hive og sammenføje eller bruge -f for at gennemtvinge)\n" - -msgid "(did you forget to merge? use push -f to force)\n" -msgstr "(glemte du at sammenføje? brug push -f for at gennemtvinge)\n" - -#, python-format -msgid "abort: push creates new remote branches: %s!\n" -msgstr "afbrudt: skub laver nye grene i fjerndepotet: %s!\n" - -msgid "(use 'hg push --new-branch' to create new remote branches)\n" -msgstr "(brug 'hg push --new-branch' for at lave nye grene i fjerndepotet)\n" +msgid "push creates new remote branches: %s!" +msgstr "skub laver nye grene i fjerndepotet: %s!" + +msgid "use 'hg push --new-branch' to create new remote branches" +msgstr "brug 'hg push --new-branch' for at lave nye grene i fjerndepotet" + +#, python-format +msgid "push creates new remote heads on branch '%s'!" +msgstr "skub laver nye fjern-hoveder på grenen '%s'!" + +msgid "push creates new remote heads!" +msgstr "skub laver nye fjern-hoveder!" + +msgid "you should pull and merge or use push -f to force" +msgstr "du bør hive og sammenføje eller bruge -f for at gennemtvinge" + +msgid "did you forget to merge? use push -f to force" +msgstr "glemte du at sammenføje? brug push -f for at gennemtvinge" msgid "note: unsynced remote changes!\n" msgstr "bemærk: usynkroniserede ændringer i fjernsystemet!\n" @@ -9591,6 +9632,10 @@ msgstr "afbrudt: %s\n" #, python-format +msgid "(%s)\n" +msgstr "" + +#, python-format msgid "hg: parse error at %s: %s\n" msgstr "hg: konfigurationsfejl på %s: %s\n" @@ -9598,6 +9643,9 @@ msgid "hg: parse error: %s\n" msgstr "hg: parse fejl: %s\n" +msgid "entering debugger - type c to continue starting hg or h for help\n" +msgstr "" + #, python-format msgid "" "hg: command '%s' is ambiguous:\n" @@ -9700,6 +9748,12 @@ msgstr "ingen definition for alias '%s'\n" #, python-format +msgid "" +"error in definition for alias '%s': %s may only be given on the command " +"line\n" +msgstr "" + +#, python-format msgid "alias '%s' resolves to unknown command '%s'\n" msgstr "alias '%s' oversætter til ukendt kommando '%s'\n" @@ -9712,6 +9766,10 @@ msgstr "misdannet --config tilvalg: %r (brug --config sektion.navn=værdi)" #, python-format +msgid "error getting current working directory: %s" +msgstr "fejl ved opslag af nuværende arbejdskatalog: %s" + +#, python-format msgid "extension '%s' overrides commands: %s\n" msgstr "udvidelse '%s' overskriver kommandoer: %s\n" @@ -9736,6 +9794,9 @@ msgid "repository '%s' is not local" msgstr "depot '%s' er ikke lokalt" +msgid "warning: --repository ignored\n" +msgstr "advarsel: --repository ignoreret\n" + msgid "invalid arguments" msgstr "ugyldige parametre" @@ -9928,7 +9989,9 @@ msgid "" " not trusting file /.hg/hgrc from untrusted user USER, group GROUP" -msgstr " stoler ikke på filen /.hg/hgrc fra ubetroet bruger BRUGER, gruppe GRUPPE" +msgstr "" +" stoler ikke på filen /.hg/hgrc fra ubetroet bruger BRUGER, gruppe " +"GRUPPE" msgid "" "If this bothers you, the warning can be silenced (the file would still\n" @@ -10304,7 +10367,7 @@ " a remote repository, since new heads may be created by these\n" " operations. Note that the term branch can also be used informally\n" " to describe a development process in which certain development is\n" -" done independently of other development.This is sometimes done\n" +" done independently of other development. This is sometimes done\n" " explicitly with a named branch, but it can also be done locally,\n" " using bookmarks or clones and anonymous branches." msgstr "" @@ -10399,8 +10462,8 @@ msgid "" "Changeset id\n" " A SHA-1 hash that uniquely identifies a changeset. It may be\n" -" represented as either a \"long\" 40-byte hexadecimal string, or a\n" -" \"short\" 12-byte hexadecimal string." +" represented as either a \"long\" 40 hexadecimal digit string, or a\n" +" \"short\" 12 hexadecimal digit string." msgstr "" msgid "" @@ -10547,7 +10610,7 @@ " Mercurial, that will be recorded in the next commit. The working\n" " directory initially corresponds to the snapshot at an existing\n" " changeset, known as the parent of the working directory. See\n" -" 'Parents, working directory'. The state may be modified by changes\n" +" 'Parent, working directory'. The state may be modified by changes\n" " to the files introduced manually or by a merge. The repository\n" " metadata exists in the .hg directory inside the working directory." msgstr "" @@ -11101,8 +11164,7 @@ msgid "" "``branch(set)``\n" -" The branch names are found for changesets in set, and the result is\n" -" all changesets belonging to one those branches." +" All changesets belonging to the branches of changesets in set." msgstr "" msgid "" @@ -11127,12 +11189,12 @@ msgid "" "``descendants(set)``\n" -" Changesets which are decendants of changesets in set." +" Changesets which are descendants of changesets in set." msgstr "" msgid "" "``file(pattern)``\n" -" Changesets which manually affected files matching pattern." +" Changesets affecting files matched by pattern." msgstr "" msgid "" @@ -11172,18 +11234,24 @@ msgstr "" msgid "" +"``min(set)``\n" +" Changeset with lowest revision number in set." +msgstr "" + +msgid "" "``merge()``\n" " Changeset is a merge changeset." msgstr "" msgid "" "``modifies(pattern)``\n" -" Changesets which modify files matching pattern." +" Changesets modifying files matched by pattern." msgstr "" msgid "" "``outgoing([path])``\n" -" Changesets missing in path." +" Changesets not found in the specified destination repository, or the\n" +" default push location." msgstr "" msgid "" @@ -11329,6 +11397,9 @@ " committed. Will be empty if the branch name was default." msgstr "" +msgid ":children: List of strings. The children of the changeset." +msgstr "" + msgid ":date: Date information. The date when the changeset was committed." msgstr "" @@ -11365,8 +11436,8 @@ msgstr "" msgid "" -":node: String. The changeset identification hash, as a 40-character\n" -" hexadecimal string." +":node: String. The changeset identification hash, as a 40 hexadecimal\n" +" digit string." msgstr "" msgid ":parents: List of strings. The parents of the changeset." @@ -11500,7 +11571,7 @@ msgid "" ":short: Changeset hash. Returns the short form of a changeset hash,\n" -" i.e. a 12-byte hexadecimal string." +" i.e. a 12 hexadecimal digit string." msgstr "" msgid ":shortdate: Date. Returns a date like \"2006-09-18\"." @@ -11799,21 +11870,6 @@ msgid "'%s' uses newer protocol %s" msgstr "'%s' bruger nyere protokol %s" -msgid "look up remote revision" -msgstr "" - -msgid "unexpected response:" -msgstr "uventet svar:" - -msgid "look up remote changes" -msgstr "" - -msgid "push failed (unexpected response):" -msgstr "skub fejlede (uventet svar):" - -msgid "remote: " -msgstr "fjernsystem: " - #, python-format msgid "push failed: %s" msgstr "skub fejlede: %s" @@ -11912,6 +11968,9 @@ "kan ikke deponere en sammenføjning partielt (undgå at specificere filer " "eller mønstre)" +msgid "can't commit subrepos without .hgsub" +msgstr "kan ikke deponere underdepoter uden .hgsub" + msgid "file not found!" msgstr "filen blev ikke fundet!" @@ -12117,6 +12176,9 @@ msgid "&Deleted" msgstr "" +msgid "updating" +msgstr "opdaterer" + #, python-format msgid "update failed to remove %s: %s!\n" msgstr "opdatering kunne ikke fjerne %s: %s!\n" @@ -12264,6 +12326,14 @@ msgstr "tilføjer gren\n" #, python-format +msgid "strip failed, full bundle stored in '%s'\n" +msgstr "" + +#, python-format +msgid "strip failed, partial bundle stored in '%s'\n" +msgstr "" + +#, python-format msgid "cannot %s; remote repository does not support the %r capability" msgstr "kan ikke %s: fjerdepotet understøtter ikke %r egenskaben" @@ -12322,9 +12392,6 @@ msgid "missing argument" msgstr "manglende parameter" -msgid "can't negate that" -msgstr "" - #, python-format msgid "can't use %s here" msgstr "" @@ -12409,6 +12476,9 @@ msgid "tagged takes no arguments" msgstr "" +msgid "can't negate that" +msgstr "" + msgid "not a symbol" msgstr "" @@ -12441,13 +12511,16 @@ msgid "no suitable response from remote hg" msgstr "intet brugbart svar fra fjernsystemets hg" +msgid "remote: " +msgstr "fjernsystem: " + +msgid "unexpected response:" +msgstr "uventet svar:" + #, python-format msgid "push refused: %s" msgstr "skub afvist: %s" -msgid "unsynced changes" -msgstr "" - #, python-format msgid "'%s' does not appear to be an hg repository" msgstr "'%s' ser ikke ud til at være et hg depot" @@ -12470,6 +12543,10 @@ msgstr "manglende ] i underdepot kilde" #, python-format +msgid "bad subrepository pattern in %s: %s" +msgstr "" + +#, python-format msgid "" " subrepository sources for %s differ\n" "use (l)ocal source (%s) or (r)emote source (%s)?" @@ -12589,6 +12666,10 @@ msgid "username %s contains a newline\n" msgstr "brugernavn %s indeholder et linieskift\n" +#, python-format +msgid "(deprecated '%%' in path %s=%s from %s)\n" +msgstr "" + msgid "response expected" msgstr "svar forventet" @@ -12881,8 +12962,14 @@ msgid "user name not available - set USERNAME environment variable" msgstr "der er ikke noget brugernavn - sæt USERNAME miljøvariabel" -#~ msgid "failed to update bookmark %s!\n" -#~ msgstr "kunne ikke opdatere bogmærke %s!\n" - -#~ msgid "can't merge with ancestor" -#~ msgstr "kan ikke sammenføje med forfader" +msgid "look up remote revision" +msgstr "" + +msgid "look up remote changes" +msgstr "" + +msgid "push failed:" +msgstr "skub fejlede:" + +msgid "push failed (unexpected response):" +msgstr "skub fejlede (uventet svar):" diff -r 84ceedcfeb6a -r 9d45f78c465b i18n/de.po --- a/i18n/de.po Fri Sep 24 00:04:07 2010 +0200 +++ b/i18n/de.po Fri Sep 24 00:17:04 2010 +0200 @@ -1,31 +1,45 @@ # German translations for Mercurial # Deutsche Übersetzungen für Mercurial # Copyright (C) 2009 Matt Mackall and others -# -# Übersetzungen -# ============= -# branch Zweig/Verzweigung -# bundle Bündel -# change Änderung -# changeset Änderungssatz -# check out auschecken -# commit Version -# commit (v) übernehmen -# deprecated veraltet -# hook Aktion -# merge zusammenführen -# notation Schreibweise -# repository (Projekt)archiv +# +# Übersetzungshilfen +# ================== +# +# Der Benutzer sollte mit formeller Anrede angesprochen werden. Je nach +# Fall kann aber auch eine unpersönliche Anrede ("man") verwendet werden. +# +# Deutsche Begriffe sind fein, man sollte es aber nicht übertreiben. Ein +# Hilfstext à la "Beim Versionieren von Etiketten auf Zweigen" hilft +# niemandem. Erfahrene Benutzer sind kurz irritiert, weil sie bekannte +# Begriffe vermissen, während neue Nutzer sich eh noch nichts unter den +# Begriffen vorstellen können und entweder `hg help` oder Google bemühen +# müssen. +# Gleichzeitig bringt fördert Suche nach "Mercurial Etikett" wenig +# Brauchbares zu Tage. +# Hier sollten diese krassen Eindeutschungen nur in der Erklärung zu "tag" +# verwendet, sonst aber eher vermieden werden. +# +# branch Branch/Zweig/Verzweigung +# bundle Bündel +# change Änderung +# changeset Änderungssatz +# check out auschecken +# commit Commit +# commit (v) übernehmen +# deprecated veraltet +# hook Aktion +# merge zusammenführen +# notation Schreibweise +# repository Projektarchiv # manage/track versionieren -# -# Die Koordination der Übersetzung erfolgt auf https://bitbucket.org/FabianKreutz/hg-i18n-de/ +# msgid "" msgstr "" "Project-Id-Version: Mercurial\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-11-13 10:15+0200\n" -"PO-Revision-Date: 2009-10-20 18:09+0200\n" -"Last-Translator: Fabian Kreutz \n" +"PO-Revision-Date: 2010-09-13 03:38+0100\n" +"Last-Translator: Christoph Mewes \n" "Language-Team: German (Tobias Bell, Fabian Kreutz, Lutz Horn)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -209,11 +223,17 @@ "a file is compatible with the unified format of GNU diff, which can be\n" "used by GNU patch and many other standard tools." msgstr "" +"Das Standardformat von Mercurial für das Anzeigen von Änderungen\n" +"zwischen zwei Versionen einer Datei ist mit dem Unified-Format von GNU\n" +"diff kompatibel und kann mit GNU patch und vielen anderen\n" +"Standard-Werkzeugen genutzt werden." msgid "" "While this standard format is often enough, it does not encode the\n" "following information:" msgstr "" +"Obwohl das Standarformat oft ausreichend ist, kodiert es nicht die\n" +"folgenden Informationen:" msgid "" "- executable status and other permission bits\n" @@ -221,6 +241,10 @@ "- changes in binary files\n" "- creation or deletion of empty files" msgstr "" +"- Ausführbarkeit und andere Berechtigungen\n" +"- Kopier- oder Verschiebeoperationen\n" +"- Änderungen in Binärdateien\n" +"- Erstellen/Löschen leerer Dateien" msgid "" "Mercurial also supports the extended diff format from the git VCS\n" @@ -228,6 +252,10 @@ "by default because a few widespread tools still do not understand this\n" "format." msgstr "" +"Mercurial unterstützt auch das erweiterte diff-Format vom Git VCS,\n" +"das diese Einschränkungen nicht aufweist. Das Git-Format wird nicht\n" +"standardmäßig erzeugt, da einige weit verbreitete Werkzeuge es noch\n" +"nicht unterstützen." msgid "" "This means that when generating diffs from a Mercurial repository\n" @@ -238,6 +266,13 @@ "pull) are not affected by this, because they use an internal binary\n" "format for communicating changes." msgstr "" +"Das bedeutet, dass beim Erzeugen von Diffs für ein Mercurial\n" +"Projektarchiv (z.B. mit \"hg export\") auf Operationen wie Kopieren,\n" +"Verschieben und die anderen oben genannten Dinge achten sollte,\n" +"da beim Anwenden eines Standard-Diffs auf ein anderes Projektarchiv\n" +"diese Zusatzinformationen verlorengehen. Mercurials interne Operationen\n" +"(wie Push und Pull) sind davon nicht betroffen, da sie über ein\n" +"internes, binäres Format zur Kommunikation verwenden." msgid "" "To make Mercurial produce the git extended diff format, use the --git\n" @@ -245,6 +280,11 @@ "section of your hgrc. You do not need to set this option when\n" "importing diffs in this format or using them in the mq extension.\n" msgstr "" +"Um Mercurial dazu zu bringen, das erweiterte Git-Format zu erzeugen,\n" +"kann man entweder den für viele Befehle verfügbaren Schalter --git\n" +"verwenden werden oder 'git = True' in der Sektion [diff] in der\n" +"hgrc angeben. Wenn Diffs in diesem Format importiert oder mit der mq\n" +"Erweiterung genutzt werden, muss diese Option nicht angegeben werden.\n" msgid "" "HG\n" @@ -254,14 +294,23 @@ " 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n" " Windows) is searched." msgstr "" +"HG\n" +" Pfad zur 'hg' Programmdatei, wird automatisch beim Ausführen von\n" +" Hooks, Erweiterungen oder externen Werkzeugen übergeben. Wenn nicht\n" +" gesetzt oder leer, wird der Name der hg Programmdatei genommen,\n" +" wenn dieser eingefroren ist, oder eine Programmdatei namens 'hg'\n" +" (mit $PATHEXT% [standardmäßig auf COM/EXE/BAT/CMD gesetzt] als\n" +" Erweiterung unter Windows) gesucht." msgid "" "HGEDITOR\n" " This is the name of the editor to run when committing. See EDITOR." msgstr "" +"HGEDITOR\n" +" Dies ist der Name des Editors, der zum Bearbeiten der Versions-Meldung verwendet wird. Siehe auch EDITOR." msgid " (deprecated, use .hgrc)" -msgstr "" +msgstr " (veraltet, benutze .hgrc)" msgid "" "HGENCODING\n" @@ -270,6 +319,11 @@ " changeset descriptions, tag names, and branches. This setting can\n" " be overridden with the --encoding command-line option." msgstr "" +"HGENCODING\n" +" Dies überschreibt die von Mercurial ermittelte Standard-\n" +" Lokalisierung. Diese Einstellung wird zum Konvertieren von\n" +" Benutzernamen, Versions-Meldungen, Etiketten und Zweigen. Diese\n" +" Einstellung kann über den Schalter --encoding überschrieben werden." msgid "" "HGENCODINGMODE\n" @@ -280,6 +334,14 @@ " \"ignore\", which drops them. This setting can be overridden with\n" " the --encodingmode command-line option." msgstr "" +"HGENCODINGMODE\n" +" Dieses steuert, wie sich Mercurial beim Auftreten unbekannter Zeichen\n" +" verhält, wenn es Benutzereingaben verarbeitet. Der Standard ist\n" +" \"strict\", das zu einem Abbruch führt, wenn ein Zeichen nicht erkannt\n" +" werden konnte. Andere Einstellungen sind \"replace\", das unbekannte\n" +" Zeichen ersetzt, und \"ignore\", das diese Zeichen verwirft. Diese\n" +" Einstellung kann über den Schalter --encondingmode auf der\n" +" Kommandozeile überschrieben werden." msgid "" "HGMERGE\n" @@ -287,6 +349,10 @@ " will be executed with three arguments: local file, remote file,\n" " ancestor file." msgstr "" +"HGMERGE\n" +" Die Programmdatei, die zum Lösen von Konflikten verwendet werden\n" +" soll. Das Programm wird mit drei Argumenten aufgerufen: die lokale\n" +" Datei, die entfernte Datei und die Vorgängerdatei." msgid "" "HGRCPATH\n" @@ -295,20 +361,34 @@ " platform default search path is used. If empty, only the .hg/hgrc\n" " from the current repository is read." msgstr "" +"HGRCPATH\n" +" Eine Liste von Dateien oder Verzeichnissen, in denen nach hgrc-\n" +" Dateien gesucht werden soll. Als Trenner zwischen zwei Elementen\n" +" dient \":\" unter Unix und \";\" unter Windows. Wenn HGRCPATH nicht\n" +" gesetzt ist, wird der plattformspezifische Standardwert verwendet.\n" +" Wenn die Variable gesetzt, aber leer ist, wird nur .hg/hgrc aus dem\n" +" aktuellen Projektarchiv ausgewertet." msgid " For each element in HGRCPATH:" -msgstr "" +msgstr " Für jedes Element in HGRCPATH gilt:" msgid "" " - if it's a directory, all files ending with .rc are added\n" " - otherwise, the file itself will be added" msgstr "" +" - Wenn es ein Verzeichnis ist, werden alle Dateien, die auf .rc\n" +" enden, hinzugefügt.\n" +" - Ansonsten wird die Datei selbst hinzugefügt." msgid "" "HGUSER\n" " This is the string used as the author of a commit. If not set,\n" " available values will be considered in this order:" msgstr "" +"HGUSER\n" +" Diese Angabe wird als Autor von Commits verwendet. Wenn sie nicht\n" +" gesetzt ist, werden die verfügbaren Werte in der folgenden\n" +" Reihenfolge ausgewertet:" msgid "" " - HGUSER (deprecated)\n" @@ -317,21 +397,33 @@ " - interactive prompt\n" " - LOGNAME (with ``@hostname`` appended)" msgstr "" +" - HGUSER (veraltet)\n" +" - hgrc-Dateien aus dem HGRCPATH\n" +" - EMAIL\n" +" - Wert aus einer ineraktiven Eingabeaufforderung\n" +" - LOGNAME (mit angefügtem ``@hostname``)" msgid "" "EMAIL\n" " May be used as the author of a commit; see HGUSER." msgstr "" +"EMAIL\n" +" Kann als Autor eines Commits verwendet werden; siehe auch HGUSER." msgid "" "LOGNAME\n" " May be used as the author of a commit; see HGUSER." msgstr "" +"LOGNAME\n" +" Kann als Autor eines Commits verwendet werden; siehe auch HGUSER." msgid "" "VISUAL\n" " This is the name of the editor to use when committing. See EDITOR." msgstr "" +"VISUAL\n" +" Dies ist der Name des Editors, der beim Erzeugen eines Commits\n" +" verwendet werden soll. Siehe auch EDITOR." msgid "" "EDITOR\n" @@ -342,12 +434,23 @@ " non-empty one is chosen. If all of them are empty, the editor\n" " defaults to 'vi'." msgstr "" +"EDITOR\n" +" Manchmal muss Mercurial eine Textdatei in einem Editor öffnen, damit\n" +" der Nutzer sie bearbeiten kann, zum Beispiel when eine Commit-\n" +" Nachricht geschrieben wird. Der verwendete Editor wird aus den drei\n" +" Umgebungsvariablen HGEDITOR, VISUAL und EDITOR (in dieser Reihenfolge)\n" +" ermittelt. Der erste nicht-leere wird verwendet. Wenn alle Angaben\n" +" leer sind, wird der Standard 'vi' verwendet." msgid "" "PYTHONPATH\n" " This is used by Python to find imported modules and may need to be\n" " set appropriately if this Mercurial is not installed system-wide.\n" msgstr "" +"PYTHONPATH\n" +" Dies wird von Python genutzt, um importierte Module zu finden, und\n" +" muss entsprechend angepasst werden, wenn Mercurial nicht\n" +" systemweit installiert ist.\n" msgid "" "Mercurial has the ability to add new features through the use of\n" @@ -355,6 +458,10 @@ "existing commands, change the default behavior of commands, or\n" "implement hooks." msgstr "" +"Mercurial hat die Fähigkeit, neue Funktionen über Erweiterungen\n" +"einzubinden. Erweiterungen können neue Befehle oder Schalter für\n" +"bestehende Befehle hinzufügen, das Standardverhalten ändern\n" +"oder Hooks implementieren." msgid "" "Extensions are not loaded by default for a variety of reasons:\n" @@ -365,30 +472,46 @@ "Mercurial. It is thus up to the user to activate extensions as\n" "needed." msgstr "" +"Erweiterungen werden aus einer Vielzahl von Gründen nicht standardmäßig\n" +"geladen: Sie können die Startzeit verlängern; sie können nur für\n" +"erweiterte Nutzung gedacht sein; sie können möglicherweise gefährliche\n" +"Fähigkeiten (wie das Zerstören oder Verändern der Projektgeschichte)\n" +"bereitstellen; sie können noch nicht für den allgemeinen Einsatz bereit\n" +"sein; oder sie verändern das übliche Verhalten des Kerns von Mercurial.\n" +"Daher müssen Erweiterungen erst vom Benutzer bei Bedarf aktiviert werden." msgid "" "To enable the \"foo\" extension, either shipped with Mercurial or in\n" "the Python search path, create an entry for it in your hgrc, like\n" "this::" msgstr "" +"Um die Erweiterung \"foo\", die entweder mit Mercurial ausgeliefert wird\n" +"oder sich im Python-Suchpfad befindet, zu aktivieren, erstellen Sie einen\n" +"Eintrag wie den folgenden in Ihrer hgrc::" msgid "" " [extensions]\n" " foo =" msgstr "" +" [extensions]\n" +" foo =" msgid "You may also specify the full path to an extension::" -msgstr "" +msgstr "Sie können auch den vollen Pfad zu einer Erweiterung angeben::" msgid "" " [extensions]\n" " myfeature = ~/.hgext/myfeature.py" msgstr "" +" [extensions]\n" +" meinefunktion = ~/.hgext/meinefunktion.py" msgid "" "To explicitly disable an extension enabled in an hgrc of broader\n" "scope, prepend its path with !::" msgstr "" +"Um eine Erweiterung explizit zu deaktivieren, die von einer allgemeineren\n" +"hgrc aktiviert wurde, setzen Sie ein ! vor den Pfad::" msgid "" " [extensions]\n" @@ -397,6 +520,11 @@ " # ditto, but no path was supplied for extension baz\n" " baz = !\n" msgstr "" +" [extensions]\n" +" # deaktiviert die Erweiterung bar, die im Verzeichnis\n" +" # /pfad/zur/erweiterung/bar.py liegt bar = !/pfad/zur/erweiterung/bar.py\n" +" # ditto, aber es wurde kein Pfad für die Erweiterung baz angegeben\n" +" baz = !\n" msgid "" "When Mercurial accepts more than one revision, they may be specified\n" @@ -589,36 +717,55 @@ "line, via the --template option, or select an existing\n" "template-style (--style)." msgstr "" +"Mercurial erlaubt es Ihnen, die Ausgabe von Befehlen mit Vorlagen\n" +"anzupassen. Sie können eine Vorlage entweder über die Kommandozeile\n" +"(über den Schalter --template) angeben, oder einen vorhandenen\n" +"Vorlagenstil auswählen (--style)." msgid "" "You can customize output for any \"log-like\" command: log,\n" "outgoing, incoming, tip, parents, heads and glog." msgstr "" +"Sie können die Ausgabe für jeden \"log-ähnlichen\" Befehl anpassen:\n" +"log, outgoing, incoming, tip, parents, heads und glog." msgid "" "Three styles are packaged with Mercurial: default (the style used\n" "when no explicit preference is passed), compact and changelog.\n" "Usage::" msgstr "" +"Drei Stile werden mit Mercurial mitgeliefert: default (der Stil, der\n" +"genutzt wird, wenn kein anderer explizit angegeben wird), compact und\n" +"changelog. Benutzung::" msgid " $ hg log -r1 --style changelog" -msgstr "" +msgstr " $ hg log -r1 --style changelog" msgid "" "A template is a piece of text, with markup to invoke variable\n" "expansion::" msgstr "" - -msgid "" -" $ hg log -r1 --template \"{node}\\n\"\n" +"Ein Template ist ein Stück Text, das Markierungen enthält, die bei der\n" +"Ausgabe mit den eigentlichen Informationen ersetzt werden::" + +msgid "" +" $ hg log -r1 --template \"{node}\\n" +"\"\n" " b56ce7b07c52de7d5fd79fb89701ea538af65746" msgstr "" +" $ hg log -r1 --template \"{node}\\n" +"\"\n" +" b56ce7b07c52de7d5fd79fb89701ea538af65746" msgid "" "Strings in curly braces are called keywords. The availability of\n" "keywords depends on the exact context of the templater. These\n" "keywords are usually available for templating a log-like command:" msgstr "" +"Zeichenketten in geschweiften Klammern werden als Schlüsselwörter\n" +"bezeichnet. Die Verfügbarkeit von Schlüsselwörtern hängt von dem\n" +"ausgeführten Befehl ab. Diese Schlüsselwörter stehen üblicherweise für\n" +"Vorlagen von \"log-ähnlichen\" Befehlen zur Verfügung:" msgid "" ":author: String. The unmodified author of the changeset.\n" @@ -646,6 +793,31 @@ " changeset.\n" ":latesttagdistance: Integer. Longest path to the latest tag." msgstr "" +":author: Zeichenkette. Der unveränderte Autor eines Änderungssatzes.\n" +":branches: Zeichenkette. Der Name des Branches, in dem der Änderungssatz\n" +" versioniert wurde. Ist leer, wenn der Branch-Name default\n" +" ist.\n" +":date: Datumsangabe. Das Datum, wann ein Änderungssatz versioniert\n" +" wurde.\n" +":desc: Zeichenkette. Der Text der Beschreibung eines\n" +" Änderungssatzes.\n" +":diffstat: Zeichenkette. Statistik über die Änderungen in dem folgenden\n" +" Format: \"geänderte Dateien: +hinzugefügt/-entfernte Zeilen\"\n" +":files: Liste von Zeichenketten. Alle geänderten, hinzugefügten oder\n" +" gelöschten Dateien dieses Änderungssatzes.\n" +":file_adds: Liste von Zeichenketten. Alle hinzugefügten Dateien.\n" +":file_mods: Liste von Zeichenketten. Alle geänderten Dateien.\n" +":file_dels: Liste von Zeichenketten. Alle gelöschten Dateien.\n" +":node: Zeichenkette. Die Prüfsumme, die einen Änderungssatz\n" +" identifiziert, als 40 Zeichen lange hexadezimale Zeichenkette.\n" +":parents: Liste von Zeichenketten. Die Eltern des Änderungssatzes.\n" +":rev: Zahl. Die für dieses Projektarchiv geltende Nummer eines\n" +" Änderungssatzes.\n" +":tags: Liste von Zeichenketten. Alle Tags, die diesem Änderungssatz\n" +" zugewiesen wurden.\n" +":latesttag: Zeichenkette. Aktuellstes globales Tag in den Nachfahren\n" +" dieses Änderungssatzes.\n" +":latesttagdistance: Zahl. Längster Pfad zum aktuellsten Tag." msgid "" "The \"date\" keyword does not produce human-readable output. If you\n" @@ -654,14 +826,23 @@ "variable. You can also use a chain of filters to get the desired\n" "output::" msgstr "" - -msgid "" -" $ hg tip --template \"{date|isodate}\\n\"\n" +"Das \"date\" Schlüsselwort erzeugt keine menschenlesbare Ausgabe. Wenn\n" +"Sie ein Datum in Ihrer Ausgabe verwenden wollen, können Sie einen Filter\n" +"einsetzen, um es zu verarbeiten. Filter sind Funktionen, die eine\n" +"Zeichenkette basierend auf der Eingabe-Variablen zurückgeben. Sie können\n" +"auch mehrere Filter verketten, um das gewünschte Ergebnis zu erhalten::" + +msgid "" +" $ hg tip --template \"{date|isodate}\\n" +"\"\n" " 2008-08-21 18:22 +0000" msgstr "" +" $ hg tip --template \"{date|isodate}\\n" +"\"\n" +" 2008-08-21 18:22 +0000" msgid "List of filters:" -msgstr "" +msgstr "Liste aller Filter:" msgid "" ":addbreaks: Any text. Add an XHTML \"
\" tag before the end of\n" @@ -718,6 +899,69 @@ ":user: Any text. Returns the user portion of an email\n" " address.\n" msgstr "" +":addbreaks: Beliebiger Text. Führt ein XHTML \"
\"-Tag vor das\n" +" Ende jeder Zeile bis auf die letzte ein.\n" +":age: Datumsangabe. Gibt eine menschenlesbare Datums- und\n" +" Zeitdifferenz zwischen dem gegebenen Datum und der\n" +" aktuellen Zeit aus.\n" +":basename: Beliebiger Text. Behandelt jeden Text als Pfadangabe und\n" +" gibt den letzten Bestandteil des Pfades nach dem Auftrennen\n" +" mit dem Trennzeichen für Verzeichnisse zurück (überhängende\n" +" Trenner werden ignoriert). Zum Beispiel wird aus\n" +" \"foo/bar/baz\" dann \"baz\" und \"foo/bar//\" wird zu\n" +" \"bar\".\n" +":stripdir: Behandelt den Text als Pfadangabe und entfernt das letzte\n" +" Verzeichnis, wenn möglich. Zum Beispiel wird aus \"foo\"\n" +" und \"foo/bar//\" dann \"bar\".\n" +":date: Datumsangabe. Gibt ein Datum als Unix Datum zurück,\n" +" inklusive der Zeitzone: \"Mon Sep 04 15:13:13 2006 0700\".\n" +":domain: Beliebiger Text. Findet die erste Zeichenkette, die wie\n" +" eine E-Mail-Adresse aussieht, und extrahiert davon die\n" +" Domain-Komponente:\n" +" Beispiel: ``Nutzer `` wird zu\n" +" ``example.com``.\n" +":domain: Beliebiger Text. Extrahiert die erste Zeichenkette, die wie\n" +" eine E-Mail-Adresse aussieht.\n" +" Beispiel: ``Nutzer `` wird zu\n" +" ``user@example.com``.\n" +":escape: Beliebiger Text. Ersetzt die besonderen XML/XHTML-Zeichen\n" +" \"&\", \"<\" und \">\" mit XML-Entitäten.\n" +":fill68: Beliebiger Text. Umbricht den Text bei 68 Zeichen.\n" +":fill76: Beliebiger Text. Umbricht den Text bei 76 Zeichen.\n" +":firstline: Beliebiger Text. Gibt die erste Zeile des Texts zurück.\n" +":nonempty: Beliebiger Text. Gibt '(none)' für eine leere Zeichenkette\n" +" zurück.\n" +":hgdate: Datumsangabe. Gibt das Datum als Zahlpaar zurück:\n" +" \"1157407993 25200\" (Unix Zeitstempel,\n" +" Zeitzonenverschiebung)\n" +":isodate: Datumsangabe. Gibt das Datum im ISO 8601-Format zurück:\n" +" \"2009-08-18 13:00 +0200\".\n" +":isodatesec: Datumsangabe. Gibt das Datum im ISO 8601-Format inklusive\n" +" Sekunden zurück: \"2009-08-18 13:00 +0200\". Siehe auch\n" +" den rfc3339date-Filter.\n" +":localdate: Datumsangabe. Konvertiert ein Datum in das lokale\n" +" Datumsformat.\n" +":obfuscate: Beliebiger Text. Gibt den Text als Folge von XML-Entitäten\n" +" zurück.\n" +":person: Beliebiger Text. Gibt den Text vor einer E-Mail-Adresse\n" +" zurück.\n" +":rfc822date: Datumsangabe. Gibt das Datum im gleichen Format zurück,\n" +" das auch in Kopfzeilen von E-Mails verwendet wird:\n" +" \"Tue, 18 Aug 2009 13:00:13 +0200\".\n" +":rfc3339date: Datumsangabe. Gibt das Datum im Internet-Datumsformat,\n" +" spezifiziert im RFC 3339, zurück:\n" +" \"2009-08-18T13:00:13+02:00\".\n" +":short: Prüfsumme. Gibt die Kurzform der Prüfsumme zurück, d.h.\n" +" als 12 Zeichen lange hexadezimale Zeichenkette.\n" +":shortdate: Datumsangabe. Gibt ein Datum wie \"2006-09-18\" zurück.\n" +":strip: Beliebiger Text. Entfernt jeden führenden und überhängenden\n" +" Leerraum.\n" +":tabindent: Beliebiger Text. Gibt den Text zurück, wobei jede Zeile bis\n" +" auf die erste mit einem Tabulator eingerückt ist.\n" +":urlescape: Beliebiger Text. Maskiert alle \"besonderen\" Zeichen.\n" +" Aus \"foo bar\" wird zum Beispiel \"foo%20bar\".\n" +":users: Beliebiger Text. Gibt den Nutzerteil einer E-Mail-Adresse\n" +" (vor dem @-Zeichen) zurück.\n" msgid "Valid URLs are of the form::" msgstr "Gültige URLs haben folgende Form::" @@ -1066,7 +1310,7 @@ msgstr "Benennt ein gegebenes Lesezeichen um" msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]" -msgstr "" +msgstr "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]" msgid "hooks for integrating with the Bugzilla bug tracker" msgstr "Bugzilla integration" @@ -1227,10 +1471,14 @@ msgid "" " Default 'changeset {node|short} in repo {root} refers '\n" -" 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'" -msgstr "" -" Standard: 'Änderung {node|short} in Archiv {root} erwähnt Bug {bug}.\\n'\n" -" 'Details:\\n\\t{desc|tabindent}'" +" 'to bug {bug}.\\n" +"details:\\n" +"\\t{desc|tabindent}'" +msgstr "" +" Standard: 'Änderung {node|short} in Archiv {root} erwähnt Bug {bug}.\\n" +"'\n" +" 'Details:\\n" +"\\t{desc|tabindent}'" msgid "" "strip\n" @@ -1313,8 +1561,10 @@ " bzuser=unknown@domain.com\n" " bzdir=/opt/bugzilla-3.2\n" " template=Changeset {node|short} in {root|basename}.\n" -" {hgweb}/{webroot}/rev/{node|short}\\n\n" -" {desc}\\n\n" +" {hgweb}/{webroot}/rev/{node|short}\\n" +"\n" +" {desc}\\n" +"\n" " strip=5" msgstr "" " [bugzilla]\n" @@ -1323,8 +1573,12 @@ " version=3.0\n" " bzuser=unknown@domain.com\n" " bzdir=/opt/bugzilla-3.2\n" -" template=Änderung {node|short} in Archiv {root|basename}.\\n\n" -"{hgweb}/{webroot}/rev/{node|short}\\n\\n{desc}\\n\n" +" template=Änderung {node|short} in Archiv {root|basename}.\\n" +"\n" +"{hgweb}/{webroot}/rev/{node|short}\\n" +"\\n" +"{desc}\\n" +"\n" " strip=5" msgid "" @@ -10413,14 +10667,17 @@ "\n" " " +#, fuzzy msgid "create changeset information from CVS" -msgstr "" +msgstr "erstellt Änderungssätze aus CVS" msgid "" " This command is intended as a debugging tool for the CVS to\n" " Mercurial converter, and can be used as a direct replacement for\n" " cvsps." msgstr "" +" Dieser Befehl ist als Debuggingwerkzeug für den Konverter von CVS zu\n" +" Mercurial gedacht und kann als direkte Ersetzung für cvsps dienen." msgid "" " Hg debugcvsps reads the CVS rlog for current directory (or any\n" @@ -10428,6 +10685,10 @@ " series of changesets based on matching commit log entries and\n" " dates." msgstr "" +" Hg debugcvsps liest das CVS-Logbuch für das aktuelle Verzeichnis\n" +" (oder jedes angegebene Verzeichnis) aus dem CVS-Projektarchiv aus\n" +" und konvertiert den Log in eine Serie von Änderungssetzen,\n" +" basierend auf übereinstimmenden Log-Einträgen und Datumsangaben." msgid "username mapping filename" msgstr "Abbildungsdatei für Benutzernamen" @@ -10463,37 +10724,38 @@ msgstr "hg convert [OPTION]... QUELLE [ZIEL [REVMAP]]" msgid "only return changes on specified branches" -msgstr "" +msgstr "nur die Änderungen des angegebenen Branches zurückgeben" msgid "prefix to remove from file names" -msgstr "" +msgstr "Präfix, das von Dateinamen entfernt werden soll" msgid "only return changes after or between specified tags" -msgstr "" +msgstr "nur Änderungen nach oder zwischen angegebenen Tags zurückgeben" msgid "update cvs log cache" -msgstr "" +msgstr "CVS Log-Zwischenspeicher aktualisieren" msgid "create new cvs log cache" -msgstr "" +msgstr "neuen CVS Log-Zwischenspeicher erzeugen" msgid "set commit time fuzz in seconds" -msgstr "" +msgstr "setze erlaubte Abweichung von der Commit-Zeit in Sekunden" msgid "specify cvsroot" -msgstr "" +msgstr "gibt cvsroot an" msgid "show parent changesets" -msgstr "" - +msgstr "zeigt die Eltern-Änderungssätze an" + +#, fuzzy msgid "show current changeset in ancestor branches" -msgstr "" +msgstr "zeigt den aktuellen Änderungssatz in Vorgänger-Branches" msgid "ignored for compatibility" -msgstr "" +msgstr "ignoriert aus Kompatibilitätsgründen" msgid "hg debugcvsps [OPTION]... [PATH]..." -msgstr "" +msgstr "hg debugcvsps [OPTION]... [PATH]..." msgid "warning: lightweight checkouts may cause conversion failures, try with a regular branch instead.\n" msgstr "Warnung: Leichte Arbeitskopien können zu Konversationsfehlern führen; erwäge einen regulären Zweig zu nutzen.\n" @@ -10570,7 +10832,7 @@ #, python-format msgid "spliced in %s as parents of %s\n" -msgstr "" +msgstr "in %s als Eltern von %s verbunden\n" msgid "scanning source...\n" msgstr "Untersuche Quelle...\n" @@ -10718,17 +10980,17 @@ msgid "tree analysis stopped because it points to an unregistered archive %s...\n" msgstr "Baumanalyse gestoppt, da er ein unregistriertes Archiv referenziert %s...\n" -#, python-format +#, fuzzy, python-format msgid "could not parse cat-log of %s" -msgstr "" +msgstr "konnte cat-log von %s nicht verarbeiten" #, python-format msgid "%s is not a local Mercurial repo" -msgstr "" - -#, python-format +msgstr "%s ist kein lokales Mercurial Projektarchiv" + +#, fuzzy, python-format msgid "initializing destination %s repository\n" -msgstr "" +msgstr "Initialisiere Ziel-Projektarchiv %s\n" #, python-format msgid "pulling from %s into %s\n" @@ -10764,9 +11026,13 @@ msgid "Mercurial failed to run itself, check hg executable is in PATH" msgstr "" +"Mercurial konnte sich selbst nicht ausführen, prüfen Sie, ob die\n" +"Programmdatei in PATH enthalten ist." msgid "svn: cannot probe remote repository, assume it could be a subversion repository. Use --source if you know better.\n" msgstr "" +"svn: Kann entferntes Projektarchiv nicht untersuchen, nehme an, es handelt sich um ein Subversion-Projektarchiv.\n" +"Verwenden Sie --source, wenn Sie es besser wissen.\n" msgid "Subversion python bindings could not be loaded" msgstr "Pythons Subversion-Unterstützung konnte nicht geladen werden" @@ -10835,11 +11101,11 @@ #, python-format msgid "initializing svn repo %r\n" -msgstr "" +msgstr "Initialisiere svn-Projektarchiv %r\n" #, python-format msgid "initializing svn wc %r\n" -msgstr "" +msgstr "Initialisiere svn-Arbeitskopie %r\n" msgid "unexpected svn output:\n" msgstr "Unerwartete Ausgabe von Subversion:\n" @@ -10848,7 +11114,7 @@ msgstr "Ausgabe von Subversion nicht verstanden" msgid "XXX TAGS NOT IMPLEMENTED YET\n" -msgstr "" +msgstr "XXX TAGS WURDEN NOCH NICHT IMPLEMENTIERT\n" msgid "command to allow external programs to compare revisions" msgstr "Erlaubt externen Programmen, Revisionen zu vergleichen" @@ -11122,7 +11388,7 @@ msgstr "Nutzt eine Programm um den Fehlerstatus zu bestimmen" msgid "error while verifying signature" -msgstr "" +msgstr "Fehler beim Überprüfen der Signatur" #, python-format msgid "%s Bad signature from \"%s\"\n" @@ -11144,7 +11410,7 @@ msgstr "%s:%d Knoten existiert nicht\n" msgid "verify all the signatures there may be for a particular revision" -msgstr "" +msgstr "überprüfe alle für eine bestimmte Revision vorhandenen Signaturen" #, python-format msgid "No valid signature for %s\n" @@ -11189,13 +11455,13 @@ msgstr "Versionsmeldung" msgid "hg sign [OPTION]... [REVISION]..." -msgstr "" +msgstr "hg sign [OPTION]... [REVISION]..." msgid "hg sigcheck REVISION" -msgstr "" +msgstr "hg sigcheck REVISION" msgid "hg sigs" -msgstr "" +msgstr "hg sigs" #, fuzzy msgid "command to view revision graphs from a shell" @@ -11259,12 +11525,15 @@ msgstr "hg glog [OPTION]... [DATEI]" msgid "hooks for integrating with the CIA.vc notification service" -msgstr "" +msgstr "Hooks zur Integration mit dem CIA.cv-Benachrichtigungsdienst" msgid "" "This is meant to be run as a changegroup or incoming hook. To\n" "configure it, set the following options in your hgrc::" msgstr "" +"Dies ist dafür gedacht, als Hook für changegroup oder incoming\n" +"eingesetzt zu werden. Um es zu konfigurieren, setzen Sie die\n" +"folgenden Optionen in Ihrer hgrc::" msgid "" " [cia]\n" @@ -11277,7 +11546,8 @@ " # Append a diffstat to the log message (optional)\n" " #diffstat = False\n" " # Template to use for log messages (optional)\n" -" #template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n" +" #template = {desc}\\n" +"{baseurl}/rev/{node}-- {diffstat}\n" " # Style to use (optional)\n" " #style = foo\n" " # The URL of the CIA notification service (optional)\n" @@ -11288,6 +11558,29 @@ " # print message instead of sending it (optional)\n" " #test = False" msgstr "" +" [cia]\n" +" # Ihr registrierter CIA-Benutzername\n" +" user = foo\n" +" # der Name des Projekts bei CIA\n" +" project = foo\n" +" # das Modul (Unterprojekt) (optional)\n" +" #module = foo\n" +" # Hänge eine Statistik über die Änderungen an die Commit-Nachricht an\n" +" # (optional)\n" +" #diffstat = False\n" +" # Vorlage für die Commit-Nachrichten (optional)\n" +" #template = {desc}\\n" +"{baseurl}/rev/{node}-- {diffstat}\n" +" # zu verwendender Stil (optional)\n" +" #style = foo\n" +" # Die URL des CIA Benachrichtigungsdienstes (optional)\n" +" # Sie können mailto:-URLs verwenden, um E-Mails zu senden, z.B.\n" +" # mailto:cia@cia.vc\n" +" # Stellen Sie sicher, dass Sie email.from korrekt eingerichtet haben,\n" +" # wenn Sie dies tun.\n" +" #url = http://cia.vc/\n" +" # Nachrichten ausgeben statt sie zu senden (optional)\n" +" #test = False" msgid "" " [hooks]\n" @@ -11295,22 +11588,29 @@ " changegroup.cia = python:hgcia.hook\n" " #incoming.cia = python:hgcia.hook" msgstr "" +" [hooks]\n" +" # einer von diesen:\n" +" changegroup.cia = python:hgcia.hook\n" +" #incoming.cia = python:hgcia.hook" msgid "" " [web]\n" " # If you want hyperlinks (optional)\n" " baseurl = http://server/path/to/repo\n" msgstr "" +" [web]\n" +" # Wenn Sie Hyperlinks möchten (optional)\n" +" baseurl = http://server/path/to/repo\n" #, python-format msgid "hgcia: sending update to %s\n" -msgstr "" +msgstr "hgcia: Sende Aktualisierung an %s\n" msgid "email.from must be defined when sending by email" -msgstr "" +msgstr "email.from muss definiert werden, wenn E-Mails gesendet werden" msgid "browse the repository in a graphical way" -msgstr "" +msgstr "durchstöbert das Projektarchiv auf grafische Weise" msgid "" "The hgk extension allows browsing the history of a repository in a\n" @@ -11371,7 +11671,7 @@ msgstr "" msgid "print revisions" -msgstr "" +msgstr "Änderungen ausgeben" msgid "print extension options" msgstr "" @@ -11383,13 +11683,14 @@ msgstr "" msgid "generate patch" -msgstr "" +msgstr "Patch erzeugen" msgid "recursive" -msgstr "" - +msgstr "rekursiv" + +#, fuzzy msgid "pretty" -msgstr "" +msgstr "hübsch" msgid "stdin" msgstr "" @@ -11521,23 +11822,23 @@ msgstr "" msgid "*** counting directories: " -msgstr "" +msgstr "*** zähle Verzeichnisse:" #, python-format msgid "found %d\n" -msgstr "" +msgstr "%d gefunden\n" #, python-format msgid "*** to raise the limit from %d to %d (run as root):\n" -msgstr "" +msgstr "*** um das Limit von %d auf %d zu heben (als root ausführen):\n" #, python-format msgid "*** echo %d > %s\n" -msgstr "" +msgstr "*** echo %d > %s\n" #, python-format msgid "cannot watch %s until inotify watch limit is raised" -msgstr "" +msgstr "Kann Verzeichnis %s nicht überwachen, bis das inotify-Limit erhöht wurde." #, python-format msgid "inotify service not available: %s" @@ -14253,7 +14554,7 @@ "\n" "Bitte eine Einführung für die Patch-Serie eingeben." -#, python-format, fuzzy +#, fuzzy, python-format msgid "This patch series consists of %d patches." msgstr "Diese Patch-Serie besteht aus %d Patchen.\n" @@ -16172,7 +16473,7 @@ msgstr " (Aktuelles patch Werkzeug könnte mit patch inkompatibel or fehlkonfiguriert sein. Prüfe die .hgrc Datei!)\n" msgid " Internal patcher failure, please report this error to http://mercurial.selenic.com/bts/\n" -msgstr "Fehlschlag des internen patch Werkzeugs. Bitte melden Sie diesen Fehler bei http://www.selenic.com/mercurial/bts\n" +msgstr " Fehlschlag des internen patch Werkzeugs. Bitte melden Sie diesen Fehler bei http://www.selenic.com/mercurial/bts\n" msgid "Checking commit editor...\n" msgstr "Prüfe Editor für Versionsmeldungen...\n" @@ -18900,16 +19201,16 @@ msgstr "Namen ausschließen, die auf das angegebene Muster passen" msgid "use as commit message" -msgstr "Nutzt als Versionsmeldung" +msgstr "Nutzt als Commit-Nachricht" msgid "read commit message from " -msgstr "Liest Versionsmeldung aus " +msgstr "Liest Commit-Nachricht aus " msgid "record datecode as commit date" -msgstr "Protokolliert Datumscode als Versionsdatum" +msgstr "Protokolliert Datumscode als Commit-Datum" msgid "record the specified user as committer" -msgstr "Protokolliert den angegebenen Nutzer als Versionsersteller" +msgstr "Protokolliert den angegebenen Nutzer als Autor" msgid "display using template map file" msgstr "Anzeige unter Nutzung der Vorlagenzuordnungsdatei" @@ -18918,13 +19219,13 @@ msgstr "Anzeige mit Vorlage" msgid "do not show merges" -msgstr "Zeigt keine Zusammenführungen" +msgstr "Zeigt keine Merges" msgid "treat all files as text" msgstr "Behandelt alle Dateien als Text" msgid "don't include dates in diff headers" -msgstr "Fügt Datum nicht im Kopf des Diff an" +msgstr "Fügt Datum nicht im Kopf des Diff ein" msgid "show which function each change is in" msgstr "Zeigt die Funktion, in der die Änderung passiert ist" @@ -18948,7 +19249,7 @@ msgstr "Zusammenfassung der Änderungen im diffstat-Stil" msgid "guess renamed files by similarity (0<=s<=100)" -msgstr "Bewertet ähnliche Dateien (0<=s<=100) als Umbenennung" +msgstr "rät Umbenennungn anhand der Ähnlichkeit (0<=s<=100)" msgid "[OPTION]... [FILE]..." msgstr "[OPTION]... [DATEI]..." @@ -18981,7 +19282,7 @@ msgstr "Dateien nicht dekodieren" msgid "directory prefix for files in archive" -msgstr "Verzeichnisprefix für Dateien im Archiv" +msgstr "Verzeichnispräfix für Dateien im Archiv" msgid "revision to distribute" msgstr "zu verteilende Revision" @@ -19023,37 +19324,37 @@ msgstr "Führe keine Aktualisierung der Dateien durch" msgid "[-gbsr] [-c CMD] [REV]" -msgstr "[-gbsr] [-c PROGRAMM] [REV]" +msgstr "[-gbsr] [-c BEFEHL] [REV]" msgid "set branch name even if it shadows an existing branch" -msgstr "Setzt Zweignamen, selbst wenn es einen bestehenden Zweig verdeckt" +msgstr "Setzt Branchnamen, selbst wenn es einen bestehenden Branch verdeckt" msgid "reset branch name to parent branch name" -msgstr "Setzt Zweignamen zum Namen des Vorgängers zurück" +msgstr "Setzt Branchnamen zum Namen des Vorgängers zurück" msgid "[-fC] [NAME]" msgstr "" msgid "show only branches that have unmerged heads" -msgstr "Zeigt nur Zweige mit mehreren Köpfen" +msgstr "Zeigt nur Branches mit mehreren Köpfen" msgid "show normal and closed branches" -msgstr "Zeigt normale und geschlossene Zweige" +msgstr "Zeigt normale und geschlossene Branches" msgid "[-a]" msgstr "" msgid "run even when remote repository is unrelated" -msgstr "Auch ausführen wenn das entfernte Archiv keinen Bezug hat" +msgstr "Auch ausführen wenn das entfernte Projektarchiv keinen Bezug hat" msgid "a changeset up to which you would like to bundle" -msgstr "Der Änderungssatz bis zu dem gruppiert werden soll" +msgstr "Der Änderungssatz bis zu dem gebündelt werden soll" msgid "a base changeset to specify instead of a destination" msgstr "Ein Basisänderungssatz anstelle eines Ziels" msgid "bundle all changesets in the repository" -msgstr "Gruppiert alle Änderungssätze des Archivs" +msgstr "Bündelt alle Änderungssätze des Projektarchivs" msgid "bundle compression type to use" msgstr "Kompressionstyp für die Ausgabedatei" @@ -19074,7 +19375,7 @@ msgstr "[OPTION]... DATEI..." msgid "the clone will only contain a repository (no working copy)" -msgstr "Der Klon wird nur das Archiv enthalten (keine Arbeitskopie)" +msgstr "Der Klon wird nur das Projektarchiv enthalten (keine Arbeitskopie)" msgid "revision, tag or branch to check out" msgstr "" @@ -19089,7 +19390,7 @@ msgstr "Markiert neue/fehlende Dateien als hinzugefügt/entfernt" msgid "mark a branch as closed, hiding it from the branch list" -msgstr "Markiert einen Zweig als beendet und blendet ihn in der Zweigliste aus" +msgstr "Markiert einen Branch als geschlossen und blendet ihn in der Branchlist aus" msgid "record a copy that has already occurred" msgstr "Identifiziert eine Kopie, die bereits stattgefunden hat" @@ -19113,10 +19414,10 @@ msgstr "[-o] BEFEHL" msgid "try extended date formats" -msgstr "Erlaubt erweiterte Datumsformate" +msgstr "versuche erweiterte Datumsformate" msgid "[-e] DATE [RANGE]" -msgstr "[-e] DATUM [PRÜFDATUM]" +msgstr "[-e] DATUM [BEREICH]" msgid "FILE REV" msgstr "DATEI REV" @@ -19170,7 +19471,7 @@ msgstr "Folgt der Versionshistorie oder Dateihistorie über Kopien und Umbenennungen hinweg" msgid "ignore case when matching" -msgstr "Ignoriert Groß- und Kleinschreibung" +msgstr "Ignoriert Groß- und Kleinschreibung beim Suchen" msgid "print only filenames and revisions that match" msgstr "Zeigt nur zutreffende Dateinamen und Revisionen" @@ -19179,7 +19480,7 @@ msgstr "Zeigt zutreffende Zeilennummern" msgid "search in given revision range" -msgstr "Sucht in gegebenem Revisionsintervall" +msgstr "Sucht in gegebenem Revisionsbereich" msgid "[OPTION]... PATTERN [FILE]..." msgstr "[OPTION]... MUSTER [DATEI]..." @@ -19188,10 +19489,10 @@ msgstr "Zeigt nur Köpfe, die Nachkommen dieser Revision sind" msgid "show only the active branch heads from open branches" -msgstr "Zeigt nur aktive Köpfe von offenen Zweigen" +msgstr "Zeigt nur aktive Köpfe von offenen Branches" msgid "show normal and closed branch heads" -msgstr "Zeigt normale und geschlossene Kopfversionen" +msgstr "Zeigt normale und geschlossene Branch-Köpfe" msgid "[-r STARTREV] [REV]..." msgstr "" @@ -19209,10 +19510,10 @@ msgstr "Zeigt die globale Revisions-ID" msgid "show branch" -msgstr "Zeigt gegebenen Zweig" +msgstr "Zeigt gegebenen Branch" msgid "show tags" -msgstr "Zeigt Etiketten" +msgstr "Zeigt Tags" msgid "[-nibt] [-r REV] [SOURCE]" msgstr "[-nibt] [-r REV] [QUELLE]" @@ -19224,10 +19525,10 @@ msgstr "Basispfad" msgid "skip check for outstanding uncommitted changes" -msgstr "Erzwingt trotz lokaler Änderungen im Arbeitsverzeichnis" +msgstr "überspringt die Überprüfungen auf ausstehende, unversionierte Änderungen" msgid "don't commit, just update the working directory" -msgstr "Kein Übernehmen, nur Aktualisierung des Arbeitsverzeichnisses" +msgstr "Kein Commit, nur Aktualisierung des Arbeitsverzeichnisses" msgid "apply patch to the nodes from which it was generated" msgstr "Wendet Patch auf die Knoten an, von denen er erstellt wurde" @@ -19239,13 +19540,13 @@ msgstr "" msgid "show newest record first" -msgstr "Zeigt neuste Änderung zuerst" +msgstr "Zeigt neueste Änderung zuerst" msgid "file to store the bundles into" -msgstr "Dateiname zum Zwischenspeichern" +msgstr "Dateiname zum Speichern der Bündel" msgid "a specific remote revision up to which you would like to pull" -msgstr "eine bestimmte enfernte Revision bis zu der geholt werden soll" +msgstr "eine bestimmte enfernte Revision bis zu der gepullt werden soll" msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]" msgstr "[-p] [-n] [-M] [-f] [-r REV]... [--bundle DATEINAME] [QUELLE]" @@ -19266,7 +19567,7 @@ msgstr "[OPTION]... [MUSTER]..." msgid "only follow the first parent of merge changesets" -msgstr "Folgt nur dem ersten Vorgänger einer Zusammenführungsversion" +msgstr "Folgt nur dem ersten Vorgänger von Merges" msgid "show revisions matching date spec" msgstr "Zeigt Revisionen passend zur Datums-Spezifikation" @@ -19278,19 +19579,19 @@ msgstr "Sucht unabhängig von Groß- und Kleinschreibung ein Stichwort" msgid "include revisions where files were removed" -msgstr "Revisionen hinzufügen, in denen Dateien entfernt wurden" +msgstr "Revisionen einschließen, in denen Dateien entfernt wurden" msgid "show only merges" -msgstr "Zeigt nur Zusammenführungen" +msgstr "Zeigt nur Merges" msgid "revisions committed by user" -msgstr "Revisionen erzeugt vom Nutzer" +msgstr "Revisionen vom Nutzer" msgid "show only changesets within the given named branch" -msgstr "Zeigt nur Änderungssätze innerhalb des angegebenen Zweigs" +msgstr "Zeigt nur Änderungssätze innerhalb des angegebenen Branches" msgid "do not display revision or any of its ancestors" -msgstr "Gibt weder diese Revision noch ihre Nachfolger aus" +msgstr "Gibt weder diese Revision noch ihre Vorgänger aus" msgid "[OPTION]... [FILE]" msgstr "[OPTION]... [DATEI]" @@ -19302,10 +19603,10 @@ msgstr "" msgid "force a merge with outstanding changes" -msgstr "Erzwingt eine Zusammenführung mit den ausstehenden Änderungen" +msgstr "Erzwingt einen Merge mit ausstehenden Änderungen" msgid "revision to merge" -msgstr "Zusammenzuführende Revision" +msgstr "zu mergende Revision" msgid "review revisions to merge (no merge is performed)" msgstr "" @@ -19314,7 +19615,7 @@ msgstr "" msgid "a specific revision up to which you would like to push" -msgstr "eine bestimmte Revision bis zu der ausgeliefert werden soll" +msgstr "eine bestimmte Revision bis zu der gepusht werden soll" msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]" msgstr "[-M] [-p] [-n] [-f] [-r REV]... [ZIEL]" @@ -19329,16 +19630,16 @@ msgstr "" msgid "update to new tip if changesets were pulled" -msgstr "Auf die neue Spitze (tip) anheben, falls Änderungssätze geholt wurden" +msgstr "Auf den neuen tip aktualisieren, falls Änderungssätze geholt wurden" msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]" -msgstr "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [QUELLE]" +msgstr "[-u] [-f] [-r REV]... [-e BEFEHL] [--remotecmd BEFEHL] [QUELLE]" msgid "force push" -msgstr "Erzwingt Auslieferung" +msgstr "Erzwingt Push" msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]" -msgstr "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [ZIEL]" +msgstr "[-f] [-r REV]... [-e BEFEHL] [--remotecmd BEFEHL] [ZIEL]" msgid "record delete for missing files" msgstr "Protokolliert die Löschung fehlender Dateien" @@ -19353,10 +19654,10 @@ msgstr "[OPTION]... QUELLE... ZIEL" msgid "select all unresolved files" -msgstr "Wählt alle noch konfliktbehafteten Dateien aus" +msgstr "Wählt alle konfliktbehafteten Dateien aus" msgid "list state of files needing merge" -msgstr "Zeigt Dateien, deren automatische Zusammenführung fehlschlug" +msgstr "Zeigt Dateien, die einen manuellen Merge erfordern" msgid "mark files as resolved" msgstr "Markiert eine Datei als konfliktfrei" @@ -19365,13 +19666,13 @@ msgstr "Markiert eine Datei als konfliktbehaftet" msgid "hide status prefix" -msgstr "Verdeckt den Status-Präfix" +msgstr "Versteckt das Status-Präfix" msgid "revert all changes when no arguments given" -msgstr "Nimmt alle lokalen Änderungen zurück (ohne andere Parameter)" +msgstr "Nimmt alle Änderungen zurück (wenn ohne andere Parameter aufgerufen)" msgid "tipmost revision matching date" -msgstr "der Spitze (tip) nächste Revision mit passendem Datum" +msgstr "dem tip nächste Revision mit passendem Datum" msgid "revision to revert to" msgstr "Revision, bis zu der Änderungen zurückgenommen werden" @@ -19401,10 +19702,10 @@ msgstr "Name der auf der Webseite angezeigt wird (Standard: Arbeitsverzeichnis)" msgid "name of the webdir config file (serve more than one repository)" -msgstr "Name der webdir-Konfigurationsdatei (mehr als ein Archiv ausliefern)" +msgstr "Name der webdir-Konfigurationsdatei (mehr als ein Projektarchiv ausliefern)" msgid "for remote clients" -msgstr "für entfernte Klienten" +msgstr "für entfernte Clients" msgid "web templates to use" msgstr "Zu nutzende Web-Vorlagen" @@ -19416,7 +19717,7 @@ msgstr "Nutzt IPv6 zusätzlich zu IPv4" msgid "SSL certificate file" -msgstr "SSL Zertifikatsdatei" +msgstr "SSL-Zertifikatsdatei" msgid "show untrusted configuration options" msgstr "" @@ -19431,7 +19732,7 @@ msgstr "Zeigt den Status aller Dateien" msgid "show only modified files" -msgstr "Zeigt nur modifizierte Dateien" +msgstr "Zeigt nur geänderte Dateien" msgid "show only added files" msgstr "Zeigt nur hinzugefügte Dateien" @@ -19440,13 +19741,13 @@ msgstr "Zeigt nur entfernte Dateien" msgid "show only deleted (but tracked) files" -msgstr "Zeigt nur gelöschte (aber überwachte) Dateien" +msgstr "Zeigt nur gelöschte (aber versionierte) Dateien" msgid "show only files without changes" msgstr "Zeigt nur Dateien ohne Änderungen" msgid "show only unknown (not tracked) files" -msgstr "Zeigt nur unbekannte (nicht überwachte) Dateien" +msgstr "Zeigt nur unbekannte (nicht versionierte) Dateien" msgid "show only ignored files" msgstr "Zeigt nur ignorierte Dateien" @@ -19455,19 +19756,19 @@ msgstr "Zeigt die Quelle von kopierten Dateien" msgid "show difference from revision" -msgstr "Zeigt die Differenz zu einer Revision" +msgstr "Zeigt die Unterschiede zu einer Revision" msgid "replace existing tag" -msgstr "Ersetzt bereits gesetztes Etikett" +msgstr "Ersetzt bereits existierendes Tag" msgid "make the tag local" -msgstr "Etikett wird nur lokal gesetzt" +msgstr "Tag wird nur lokal gesetzt" msgid "revision to tag" -msgstr "Zu etikettierende Revision" +msgstr "Zu taggende Revision" msgid "remove a tag" -msgstr "Entfernt ein Etikett" +msgstr "Entfernt ein Tag" msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..." msgstr "[-l] [-m TEXT] [-d DATUM] [-u BENUTZER] [-r REV] NAME..." @@ -19476,13 +19777,13 @@ msgstr "" msgid "update to new tip if changesets were unbundled" -msgstr "Aktualisiert das Arbeitsverzeichnis auf die neue Spitze" +msgstr "aktualisiere auf den neuen tip when Änderungssätze entpackt wurden" msgid "[-u] FILE..." msgstr "[-u] DATEI..." msgid "discard uncommitted changes (no backup)" -msgstr "Entferne nicht versionierte Änderungen (kein Backup)" +msgstr "entferne nicht versionierte Änderungen (kein Backup)" msgid "check for uncommitted changes" msgstr "prüft auf nicht versionierte Änderungen" @@ -19498,14 +19799,18 @@ msgstr "nicht im Manifest gefunden" msgid "branch name not in UTF-8!" -msgstr "Name der Verzweigung nicht in UTF-8!" +msgstr "Branchname ist nicht in UTF-8!" msgid "working directory state appears damaged!" msgstr "Status des Arbeitsverzeichnis scheint beschädigt zu sein!" #, python-format -msgid "'\\n' and '\\r' disallowed in filenames: %r" -msgstr "'\\n' und '\\r' sind nicht in Dateinamen erlaubt: %r" +msgid "" +"'\\n" +"' and '\\r' disallowed in filenames: %r" +msgstr "" +"'\\n" +"' und '\\r' sind nicht in Dateinamen erlaubt: %r" #, python-format msgid "directory %r already in dirstate" @@ -19532,7 +19837,7 @@ msgstr "FIFO" msgid "socket" -msgstr "Sockel" +msgstr "Socket" msgid "directory" msgstr "Verzeichnis" @@ -19559,11 +19864,11 @@ #, python-format msgid "timed out waiting for lock held by %s" -msgstr "Zeitüberschreitung beim Warten auf %s" +msgstr "Zeitüberschreitung beim Warten auf Sperre von %s" #, python-format msgid "lock held by %s" -msgstr "Zur Zeit von %s reserviert" +msgstr "Zur Zeit von %s gesperrt" #, python-format msgid "abort: %s: %s\n" @@ -19571,7 +19876,7 @@ #, python-format msgid "abort: could not lock %s: %s\n" -msgstr "Abbruch: Kann %s nicht reservieren: %s\n" +msgstr "Abbruch: Kann %s nicht sperren: %s\n" #, python-format msgid "hg %s: %s\n" @@ -19589,21 +19894,21 @@ msgstr " leere Zeichenkette\n" msgid "killed!\n" -msgstr " getötet!\n" +msgstr "getötet!\n" #, python-format msgid "hg: unknown command '%s'\n" -msgstr "hg: unbekanntes Kommando '%s'\n" +msgstr "hg: unbekannter Befehl '%s'\n" #, python-format msgid "abort: could not import module %s!\n" msgstr "Abbruch: Kann Modul %s nicht importieren!\n" msgid "(did you forget to compile extensions?)\n" -msgstr "(Erweiterungen nicht compiliert?)\n" +msgstr "(Erweiterungen nicht kompiliert?)\n" msgid "(is your Python install correct?)\n" -msgstr "(Python Installation korrekt?)\n" +msgstr "(Python-Installation korrekt?)\n" #, python-format msgid "abort: error: %s\n" @@ -19623,7 +19928,7 @@ "Datenübergabe unterbrochen\n" msgid "abort: out of memory\n" -msgstr "Abbruch: Unzureichender Speicherplatz\n" +msgstr "Abbruch: Unzureichender Arbeitsspeicher\n" msgid "** unknown exception encountered, details follow\n" msgstr "** Unbekannter Fehler, Details folgen\n" @@ -19656,11 +19961,11 @@ #, python-format msgid "malformed --config option: %r (use --config section.name=value)" -msgstr "missgebildete --config Option: %s (nutze --config Sektion.Name=Wert)" +msgstr "fehlerhafte --config Option: %s (nutze --config Sektion.Name=Wert)" #, python-format msgid "extension '%s' overrides commands: %s\n" -msgstr "Erweiterung '%s' überschreibt die Kommandos: %s\n" +msgstr "Erweiterung '%s' überschreibt die Befehle: %s\n" msgid "Option --config may not be abbreviated!" msgstr "Option --config kann nicht abgekürzt werden!" @@ -19773,10 +20078,10 @@ msgstr "Umgebungsvariablen" msgid "Specifying Single Revisions" -msgstr "Angabe Einzelner Revisionen" +msgstr "Angabe einzelner Revisionen" msgid "Specifying Multiple Revisions" -msgstr "Angabe Mehrerer Revisionen" +msgstr "Angabe mehrerer Revisionen" msgid "Diff Formats" msgstr "Diff-Formate" @@ -19815,26 +20120,26 @@ msgstr "Quellarchiv unterstützt keine Revisions-Abfragen und lässt daher das Klonen bis zu einer Revision nicht zu" msgid "clone from remote to remote not supported" -msgstr "Klonen von entferntem Archiv zu entferntem Archiv nicht möglich" +msgstr "Klonen von entferntem zu entferntem Projektarchiv nicht möglich" #, python-format msgid "updating to branch %s\n" -msgstr "Aktualisiere auf Zweig %s\n" +msgstr "Aktualisiere auf Branch %s\n" #, python-format msgid "%d files updated, %d files merged, %d files removed, %d files unresolved\n" msgstr "" msgid "use 'hg resolve' to retry unresolved file merges\n" -msgstr "Verwende 'hg resolve', um die Zusammenführung erneut zu versuchen\n" +msgstr "Nutze 'hg resolve', um ungelöste Merges zu wiederholen\n" msgid "use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon\n" msgstr "" -"Nutze 'hg resolve', um nicht aufgelöste Zusammenführungen zu wiederholen oder\n" -"'hg up --clean' um andere Änderungen aufzugeben\n" +"Nutze 'hg resolve', um ungelöste Merges zu wiederholen\n" +"oder 'hg update -C' um aufzugeben\n" msgid "(branch merge, don't forget to commit)\n" -msgstr "(Zweig-Zusammenführung, vergiss nicht 'hg commit' auszuführen)\n" +msgstr "(Branch-Merge, vergiss nicht 'hg commit' auszuführen)\n" #, python-format msgid "error reading %s/.hg/hgrc: %s\n" @@ -19944,14 +20249,14 @@ msgstr "" msgid "push failed (unexpected response):" -msgstr "push fehlgeschlagen (Unerwartete Antwort)" +msgstr "Push fehlgeschlagen (unerwartete Antwort)" #, python-format msgid "push failed: %s" -msgstr "push fehlgeschlagen: %s" +msgstr "Push fehlgeschlagen: %s" msgid "Python support for SSL and HTTPS is not installed" -msgstr "Python Unterstützung für SSL und HTTPS ist nicht installiert" +msgstr "Python-Unterstützung für SSL und HTTPS ist nicht installiert" msgid "cannot create new http repository" msgstr "Kann neues HTTP-Projektarchiv nicht erzeugen" @@ -19962,7 +20267,7 @@ #, python-format msgid "skipping unreadable ignore file '%s': %s\n" -msgstr "Überspringe nicht lesbare ignore Datei '%s': %s\n" +msgstr "Überspringe nicht lesbare ignore-Datei '%s': %s\n" #, python-format msgid "repository %s not found" @@ -19982,10 +20287,10 @@ #, python-format msgid "%r cannot be used in a tag name" -msgstr "%r kann nicht in einem Namen für Etiketten genutzt werden" +msgstr "%r kann nicht in einem Tagnamen genutzt werden" msgid "working copy of .hgtags is changed (please commit .hgtags manually)" -msgstr "Arbeitskopie von .hgtags wurde geändert (Bitte .hgtags manuell versionieren)" +msgstr "Arbeitskopie von .hgtags wurde geändert (bitte versioniere .hgtags manuell)" #, python-format msgid "working directory has unknown parent '%s'!" @@ -19996,7 +20301,7 @@ msgstr "Unbekannte Revision '%s'" msgid "abandoned transaction found - run hg recover" -msgstr "unfertige Transaktion gefunden - führe hg recover aus" +msgstr "abgebrochene Transaktion gefunden - führe hg recover aus" msgid "rolling back interrupted transaction\n" msgstr "Setze unterbrochene Transaktion zurück\n" @@ -20009,7 +20314,7 @@ #, python-format msgid "Named branch could not be reset, current branch still is: %s\n" -msgstr "Benannter Zweig konnte nicht zurückgesetzt werden, aktueller Zweig ist: %s\n" +msgstr "Benannter Branch konnte nicht zurückgesetzt werden, aktueller Zweig ist weiterhin: %s\n" msgid "no rollback information available\n" msgstr "Keine rollback-Information verfügbar\n" @@ -20027,7 +20332,7 @@ msgstr "Arbeitsverzeichnis von %s" msgid "cannot partially commit a merge (do not specify files or patterns)" -msgstr "Eine Zusammenführung kann nicht teilweise versioniert werden (Gib keine Dateien oder Muster an)" +msgstr "Ein Merge kann nicht teilweise versioniert werden (Gib keine Dateien oder Muster an)" msgid "file not found!" msgstr "Datei nicht gefunden!" @@ -20036,10 +20341,10 @@ msgstr "Kein Treffer unterhalb des Verzeichnisses!" msgid "file not tracked!" -msgstr "Datei wird nicht nachverfolgt!" +msgstr "Datei wird nicht versioniert!" msgid "unresolved merge conflicts (see hg resolve)" -msgstr "Ungelöster Zusammenführungs-Konflikt (siehe hg resolve)" +msgstr "Ungelöster Merge-Konflikt (siehe hg resolve)" #, python-format msgid "committing subrepository %s\n" @@ -20047,7 +20352,7 @@ #, python-format msgid "trouble committing %s!\n" -msgstr "Problem bei Erstellen der neuen Version von %s!\n" +msgstr "Problem beim Versionieren von %s!\n" #, python-format msgid "%s does not exist!\n" @@ -20107,17 +20412,17 @@ msgstr "Fordere alle Änderungen an\n" msgid "Partial pull cannot be done because other repository doesn't support changegroupsubset." -msgstr "Teilweise Holen kann nicht ausgeführt werden, da das andere Projektarchiv keine Teilmengen von Änderungsgruppen unterstützt." +msgstr "Teilweiser Pull kann nicht ausgeführt werden, da das andere Projektarchiv keine Teilmengen von Änderungsgruppen unterstützt." #, python-format msgid "abort: push creates new remote branch '%s'!\n" -msgstr "Abbruch: Ausliefern erzeugt neuen entfernten Zweig '%s'!\n" +msgstr "Abbruch: Push erzeugt neuen entfernten Branch '%s'!\n" msgid "abort: push creates new remote heads!\n" -msgstr "Abbruch: Ausliefern erzeugt neue entfernte Köpfe!\n" +msgstr "Abbruch: Push erzeugt neue entfernte Köpfe!\n" msgid "(did you forget to merge? use push -f to force)\n" -msgstr "(Hast du vergessen zusammenzuführen? Nutze push -f um zu erzwingen)\n" +msgstr "(Hast du vergessen zu mergen? Nutze push -f um zu erzwingen)\n" msgid "note: unsynced remote changes!\n" msgstr "Hinweis: Nicht synchronisierte entfernte Änderungen!\n" @@ -20134,7 +20439,7 @@ msgstr "Füge Änderungssätze hinzu\n" msgid "received changelog group is empty" -msgstr "Erhaltene changelog group ist leer" +msgstr "Erhaltene Changelog-Gruppe ist leer" msgid "adding manifests\n" msgstr "Füge Manifeste hinzu\n" @@ -20143,7 +20448,7 @@ msgstr "Füge Dateiänderungen hinzu\n" msgid "received file revlog group is empty" -msgstr "Erhaltene Datei revlog group ist leer" +msgstr "Revlog-Gruppe der erhaltenen Datei ist leer" #, python-format msgid " (%+d heads)" @@ -20151,7 +20456,7 @@ #, python-format msgid "added %d changesets with %d changes to %d files%s\n" -msgstr "Fügte %d Änderungssätze mit %d Änderungen zu %d Dateien%s hinzu\n" +msgstr "Fügte %d Änderungssätze mit %d Änderungen an %d Dateien%s hinzu\n" msgid "Unexpected response from remote server:" msgstr "" @@ -20382,7 +20687,7 @@ #, python-format msgid "Unsupported line endings type: %s" -msgstr "Nicht unterstützter Typ von Zeilenende: %s" +msgstr "Nicht unterstütztes Zeilenende: %s" #, python-format msgid " %d files changed, %d insertions(+), %d deletions(-)\n" @@ -20401,11 +20706,11 @@ msgstr "Speichere Bündel in %s\n" msgid "adding branch\n" -msgstr "füge Zweig hinzu\n" +msgstr "füge Branch hinzu\n" #, python-format msgid "cannot %s; remote repository does not support the %r capability" -msgstr "Kann nicht %s; entferntes Archiv hat keine %r-Kapabilität" +msgstr "Kann nicht %s; entferntes Projektarchiv unterstützt nicht die %r-Fähigkeiten" #, python-format msgid "unknown compression type %r" @@ -20438,7 +20743,7 @@ #, python-format msgid "incompatible revision flag %x" -msgstr "Inkompatibler Revisions-Schater %x" +msgstr "Inkompatibler Revisions-Schalter %x" #, python-format msgid "%s not found in the transaction" @@ -20452,20 +20757,20 @@ #, python-format msgid "%s looks like a binary file." -msgstr "%s scheint eine Binärdatei zu sein" +msgstr "%s scheint eine Binärdatei zu sein." msgid "can only specify two labels." -msgstr "Kann nur zwei Marken angeben" +msgstr "Kann nur zwei Marken angeben." msgid "warning: conflicts during merge.\n" -msgstr "Warnung: Konflikte bei Zusammenführung.\n" +msgstr "Warnung: Konflikte beim Zusammenführen.\n" #, python-format msgid "couldn't parse location %s" -msgstr "Kann Ort %s nicht entziffern" +msgstr "Kann Ort %s nicht analysieren" msgid "could not create remote repo" -msgstr "Konnte entferntes Archiv nicht erstellen" +msgstr "Konnte entferntes Projektarchiv nicht erstellen" msgid "no suitable response from remote hg" msgstr "Keine passende Antwort des entfernten hg" @@ -20475,20 +20780,20 @@ #, python-format msgid "push refused: %s" -msgstr "Hochladen abgeweisen: %s" +msgstr "Hochladen abgewiesen: %s" msgid "unsynced changes" -msgstr "asynchrone Änderungen" +msgstr "unsynchronisierte Änderungen" #, python-format msgid "'%s' does not appear to be an hg repository" -msgstr "'%s' scheint kein hg-Archiv zu sein" +msgstr "'%s' scheint kein hg-Projektarchiv zu sein" msgid "cannot lock static-http repository" -msgstr "Kann statisches http-Archiv nicht abschliessen" +msgstr "Kann statisches HTTP-Projektarchiv nicht sperren" msgid "cannot create new static-http repository" -msgstr "Kann kein neues, statisches http-Archiv erstellen" +msgstr "Kann kein neues, statisches HTTP-Projektarchiv erstellen" #, python-format msgid "invalid entry in fncache, line %s" @@ -20499,8 +20804,8 @@ " subrepository sources for %s differ\n" "use (l)ocal source (%s) or (r)emote source (%s)?" msgstr "" -" Unterarchivquellen für %s sind verschieden\n" -"nutze (l)okale Quelle (%s) oder entfe(r)nte Quelle (%s)?" +" Unterarchivquellen für %s sind verschieden.\n" +"Nutze (l)okale Quelle (%s) oder entfe(r)nte Quelle (%s)?" msgid "&Remote" msgstr "Entfe&rnt" @@ -20510,16 +20815,16 @@ " local changed subrepository %s which remote removed\n" "use (c)hanged version or (d)elete?" msgstr "" -" lokales Unterarchiv ändert %s, aber entferntes löscht\n" -"nutze (c) geänderte Version oder (d) lösche?" +" Lokales Unterarchiv ändert %s, aber entferntes löscht.\n" +"Nutze (c) geänderte Version oder (d) lösche?" #, python-format msgid "" " remote changed subrepository %s which local removed\n" "use (c)hanged version or (d)elete?" msgstr "" -" Entferntes Unterarchiv ändert %s, aber lokales löscht\n" -"nutze (c) geänderte Version oder (d) lösche?" +" Entferntes Unterarchiv ändert %s, aber lokales löscht.\n" +"Nutze (c) geänderte Version oder (d) lösche?" #, python-format msgid "removing subrepo %s\n" @@ -20542,14 +20847,14 @@ #, python-format msgid "node '%s' is not well formed" -msgstr "Knoten '%s' ist fehlerhaft" +msgstr "Knoten '%s' ist nicht wohlgeformt" msgid "unmatched quotes" msgstr "unpassende Klammern" #, python-format msgid "error expanding '%s%%%s'" -msgstr "Fehler bei Auflösung von '%s%%%s'" +msgstr "Fehler beim Auflösen von '%s%%%s'" #, python-format msgid "unknown filter '%s'" @@ -20561,10 +20866,10 @@ #, python-format msgid "template file %s: %s" -msgstr "Vorlagedatei %s: %s" +msgstr "Vorlagendatei %s: %s" msgid "cannot use transaction when it is already committed/aborted" -msgstr "Kann Transaktion nicht verwenden, wenn sie bereits Übernommen/Abgebrochen ist" +msgstr "Kann Transaktion nicht verwenden, wenn sie bereits übernommen/abgebrochen ist" #, python-format msgid "failed to truncate %s\n" @@ -20574,10 +20879,10 @@ msgstr "Transaktionsabbruch!\n" msgid "rollback completed\n" -msgstr "Rücknahme abgeschlossen\n" +msgstr "Zurückrollen abgeschlossen\n" msgid "rollback failed - please run hg recover\n" -msgstr "Rücksetzen fehlgeschlagen - bitte führe hg recover aus\n" +msgstr "Zurückrollen fehlgeschlagen - bitte führe hg recover aus\n" #, python-format msgid "Not trusting file %s from untrusted user %s, group %s\n" @@ -20585,22 +20890,22 @@ #, python-format msgid "Ignored: %s\n" -msgstr "Ignoriere: %s\n" +msgstr "Ignoriert: %s\n" #, python-format msgid "ignoring untrusted configuration option %s.%s = %s\n" -msgstr "Ignoriere nicht vertrauenswürdigen Konfigurationseintrag %s.%s = %s\n" +msgstr "Ignoriere nicht vertrauenswürdige Einstellung %s.%s = %s\n" #, python-format msgid "%s.%s not a boolean ('%s')" msgstr "%s.%s ist kein bool'scher Wert ('%s')" msgid "enter a commit username:" -msgstr "Gib einen Benutzernamen für die Version ein:" +msgstr "Geben Sie einen Benutzernamen für den Commit ein:" #, python-format msgid "No username found, using '%s' instead\n" -msgstr "Kein Benutzername gefunden, nutze %s stattdessen\n" +msgstr "Kein Benutzername gefunden, nutze '%s' stattdessen\n" msgid "no username supplied (see \"hg help config\")" msgstr "kein Benutzername angegeben (siehe \"hg help config\")" @@ -20622,10 +20927,10 @@ msgstr "Bearbeiten fehlgeschlagen" msgid "http authorization required" -msgstr "HTTP-Autorisation benötigt" +msgstr "HTTP-Authorisierung erforderlich" msgid "http authorization required\n" -msgstr "HTTP-Autorisation benötigt\n" +msgstr "HTTP-Authorisierung erforderlich\n" #, python-format msgid "realm: %s\n" @@ -20640,7 +20945,7 @@ #, python-format msgid "http auth: user %s, password %s\n" -msgstr "HTTP Auth: Benutzer %s, Passwort%s\n" +msgstr "HTTP Auth: Benutzer %s, Passwort %s\n" #, python-format msgid "command '%s' failed: %s" @@ -20648,7 +20953,7 @@ #, python-format msgid "path contains illegal component: %s" -msgstr "Pfad enthält illegalen Teil: %s" +msgstr "Pfad enthält ungültige Komponente: %s" #, python-format msgid "path %r is inside repo %r" @@ -20675,54 +20980,54 @@ #, python-format msgid "impossible time zone offset: %d" -msgstr "Unmögliche Zeitzonen Verschiebung: %d" +msgstr "Unmögliche Zeitzonen-Verschiebung: %d" #, python-format msgid "invalid day spec: %s" -msgstr "Ungültige Angabe des Tages: %s" +msgstr "Ungültige Datumsangabe: %s" #, python-format msgid "%.0f GB" -msgstr "" +msgstr "%.0f GB" #, python-format msgid "%.1f GB" -msgstr "" +msgstr "%.1f GB" #, python-format msgid "%.2f GB" -msgstr "" +msgstr "%.2f GB" #, python-format msgid "%.0f MB" -msgstr "" +msgstr "%.0f MB" #, python-format msgid "%.1f MB" -msgstr "" +msgstr "%.1f MB" #, python-format msgid "%.2f MB" -msgstr "" +msgstr "%.2f MB" #, python-format msgid "%.0f KB" -msgstr "" +msgstr "%.0f KB" #, python-format msgid "%.1f KB" -msgstr "" +msgstr "%.1f KB" #, python-format msgid "%.2f KB" -msgstr "" +msgstr "%.2f KB" #, python-format msgid "%.0f bytes" msgstr "%.0f Bytes" msgid "cannot verify bundle or remote repos" -msgstr "Kann keine Bündel oder entfernte Archive verifizieren" +msgstr "Kann Bündel oder entfernte Projektarchive nicht verifizieren" msgid "interrupted" msgstr "unterbrochen" @@ -20733,11 +21038,11 @@ #, python-format msgid "data length off by %d bytes" -msgstr "Datenlänge um %d bytes daneben" +msgstr "Datenlänge um %d Bytes verschoben" #, python-format msgid "index contains %d extra bytes" -msgstr "Index enthält %d überflüssige Bytes" +msgstr "Index enthält %d zusätzliche Bytes" #, python-format msgid "warning: `%s' uses revlog format 1" @@ -20776,7 +21081,7 @@ msgstr "Doppelte Revision %d (%d)" msgid "abandoned transaction found - run hg recover\n" -msgstr "unfertige Transaktion gefunden - führe hg recover aus\n" +msgstr "abgebroche Transaktion gefunden - führe hg recover aus\n" #, python-format msgid "repository uses revlog format %d\n" @@ -20801,10 +21106,10 @@ #, python-format msgid "reading manifest delta %s" -msgstr "Lese Manifest delta %s" +msgstr "Lese Manifest-Delta %s" msgid "crosschecking files in changesets and manifests\n" -msgstr "Gegenüberstellung der Dateien in Änderungssätzen und Manifesten\n" +msgstr "Überkreuzprüfung der Dateien in Änderungssätzen und Manifesten\n" #, python-format msgid "changeset refers to unknown manifest %s" @@ -20814,7 +21119,7 @@ msgstr "im Änderungssatz aber nicht im Manifest" msgid "in manifest but not in changeset" -msgstr "im Manifest, aber nicht im Änderungssatz" +msgstr "im Manifest aber nicht im Änderungssatz" msgid "checking files\n" msgstr "Prüfe Dateien\n" @@ -20825,7 +21130,7 @@ #, python-format msgid "broken revlog! (%s)" -msgstr "Beschädigtes Revlof! (%s)" +msgstr "Beschädigtes Revlog! (%s)" msgid "missing revlog!" msgstr "Fehlendes Revlog!" @@ -20860,7 +21165,7 @@ #, python-format msgid "%s in manifests not found" -msgstr "%s nicht im Manifest gefunden" +msgstr "%s nicht in den Manifestens gefunden" #, python-format msgid "warning: orphan revlog '%s'" @@ -20918,3 +21223,4 @@ "\n" " Siehe 'hg help dates' für eine Liste gültiger Formate für -d/--date.\n" " " + diff -r 84ceedcfeb6a -r 9d45f78c465b i18n/ro.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i18n/ro.po Fri Sep 24 00:17:04 2010 +0200 @@ -0,0 +1,12576 @@ +# Romanian translation for Mercurial +# Traducerea în limba română pentru Mercurial +# +# Copyright (C) 2010 Matt Mackall and others +# +# +# Glosar de traduceri +# =================== +# abort a abandona +# ancestor strămoș +# branch ramură +# bundle pachet (fascicul), a crea un pachet +# change modificare +# changeset set de modificări +# changegroup grup de modificări +# check out a actualiza, a extrage, checkout +# children fiu +# commit depozitare, predare, încredințare, commit +# commit (v) a depozita, a preda, a încredința, commit +# consistency consistență (termen informatic; sens general: coerență) +# deprecated învechit +# diff diff +# dirstate dirstate +# discard a înlătura, a renunța la +# expand a extinde +# fold a plia +# flag indicator +# given specificat +# guard gardă / a garda +# head capăt +# imply a implica, a sugera +# incoming de primit +# hook hook, acțiune, ancoră +# merge a fuziona (a contopi, a îmbina) +# notation notație +# pattern tipar +# remove a înlătura, a elimina +# repository depozit (magazie) +# resolve a determina (a rezolva) +# manage a gestiona +# manifest manifest (există în română, ca "declarație/listă de mărfuri") +# map corespondență, mapare +# merge a fuziona +# notify a înștiința +# outgoing de trimis +# outstanding în suspensie +# overview rezumat +# patch patch +# patch queue/stack o stivă de patch-uri (mq) +# patch series serie/suită (completă) de patch-uri +# pull (pull), a aduce, a trage, a extrage, +# push (push), a duce, a împinge, a difuza, a distribui +# rebase a repoziționa, a disloca, a deplasa +# remote la distanță +# rejects respingeri, rejectări +# retrieve a recupera, a regăsi +# revert a reveni +# revlog revlog +# rollback ??? +# shelf ? raft +# shelve ? a pune pe raft +# switch a comuta +# tag etichetă / a eticheta +# template tipar +# tip vârf +# topmost patch ultimul patch aplicat +# track a urmări +# traceback ? +# undo a anula, a reface, a desface +# unrelated/unversioned/unmanaged/untracked repository depozit neînrudit/neversionat/negestionat/neurmărit +# update a actualiza +# (un)trusted ? +# working directory directorul de lucru +# +# NOTĂ: - Terminologia de mai sus este departe de a fi completă sau perfectă. +# De completat și ameliorat +# - Primul termen este cel considerat momentan cel mai potrivit. +# - Măcar pentru primele versiuni, se recomandă păstrarea în paranteze +# a termenului englezesc, mai ales în cazul comenzilor. +# +# Câteva reguli: +# - în ajutorul pentru o comandă, primul rând începe cu un verb +# la prezent fără majusculă +# - în ajutorul pentru o comandă, descrierea opțiunilor se face +# printr-un verb la prezent, pers. a 3-a singular +# +# Dicționar de termeni curenți: +# - a patch queue/stack o stivă de patch-uri (mq) +# - the patch series seria/suita (completă) de patch-uri +# - rejects respingeri, rejectări +# - to revert a reveni +# - the topmost patch ultimul patch aplicat +# - an unrelated repository un depozit neînrudit +# - unversioned neversionat +# unmanaged negestionat +# untracked neurmărit +# - the working directory directorul de lucru +# +# Termeni de păstrat din engleză: +# - a diff un diff +# - a hook un hook +# - a patch un patch +# +# Daniel Dumitriu , 2010. +msgid "" +msgstr "" +"Project-Id-Version: Mercurial\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-08-25 11:46+0200\n" +"PO-Revision-Date: 2010-08-26 16:19+0200\n" +"Last-Translator: Daniel Dumitriu \n" +"Language-Team: Romanian <>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > " +"0 && n%100 < 20)) ? 1 : 2;\n" +"X-Generator: Lokalize 1.0\n" + +#, python-format +msgid " (default: %s)" +msgstr " (implicit: %s)" + +msgid "Options" +msgstr "Opțiuni" + +msgid "Commands" +msgstr "Comenzi" + +msgid " options:" +msgstr " opțiuni:" + +#, python-format +msgid " aliases: %s" +msgstr " alias: %s" + +msgid "hooks for controlling repository access" +msgstr "hook-uri pentru controlul accesului la depozit" + +msgid "" +"This hook makes it possible to allow or deny write access to given\n" +"branches and paths of a repository when receiving incoming changesets\n" +"via pretxnchangegroup and pretxncommit." +msgstr "" +"Acest hook realizează permiterea sau interzicerea accesului\n" +"în scriere la anumite ramuri și căi ale unui depozit, atunci când \n" +"se primesc seturi de modificări prin pretxnchangegroup și pretxncommit." + +msgid "" +"The authorization is matched based on the local user name on the\n" +"system where the hook runs, and not the committer of the original\n" +"changeset (since the latter is merely informative)." +msgstr "" +"Autorizația este căutată pe baza numelui de utilizator local\n" +"de pe sistemul unde rulează hook-ul, nu pe baza numelui celui care a\n" +"publicat setul de modificări original (pentru că acesta e pur informativ)." + +msgid "" +"The acl hook is best used along with a restricted shell like hgsh,\n" +"preventing authenticating users from doing anything other than pushing\n" +"or pulling. The hook is not safe to use if users have interactive\n" +"shell access, as they can then disable the hook. Nor is it safe if\n" +"remote users share an account, because then there is no way to\n" +"distinguish them." +msgstr "" +"Hook-ul acl e folosit optim împreună cu un shell restrictiv precum\n" +"hgsh, care împiedică utilizatorii care doresc să se autentifice să aibă\n" +"alte acțiuni în afară de push și pull. Hook-ul nu prezintă siguranță\n" +"dacă utilizatorii au acces la shell interactiv, deoarece astfel ei pot\n" +"dezactiva hook-ul. De asemenea, nu prezintă siguranță situația în\n" +"care utilizatorii la distanță partajează un cont, deoarece nu există\n" +"posibilitatea de a-i distinge." + +msgid "The order in which access checks are performed is:" +msgstr "Ordinea în care se fac verificările de acces este:" + +msgid "" +"1) Deny list for branches (section ``acl.deny.branches``)\n" +"2) Allow list for branches (section ``acl.allow.branches``)\n" +"3) Deny list for paths (section ``acl.deny``)\n" +"4) Allow list for paths (section ``acl.allow``)" +msgstr "" +"1) Lista cu interdicții pentru ramuri (secțiunea ``acl.deny.branches``)\n" +"2) Lista cu permisiuni pentru ramuri (secțiunea ``acl.allow.branches``)\n" +"3) Lista cu interdicții pentru căi (secțiunea ``acl.deny``)\n" +"4) Lista cu permisiuni pentru căi (secțiunea ``acl.allow``)" + +msgid "The allow and deny sections take key-value pairs." +msgstr "Secțiunile cu permisiuni și interdicții conțin perechi cheie-valoare." + +msgid "" +"Branch-based Access Control\n" +"---------------------------" +msgstr "" +"Controlul accesului pe bază de ramură\n" +"-------------------------------------" + +msgid "" +"Use the ``acl.deny.branches`` and ``acl.allow.branches`` sections to\n" +"have branch-based access control. Keys in these sections can be\n" +"either:" +msgstr "" +"Utilizați secțiunile ``acl.deny.branches`` și ``acl.allow.branches``\n" +"pentru a avea controlul accesului pe baza ramurii. În aceste secțiuni,\n" +"cheile pot fi:" + +msgid "" +"- a branch name, or\n" +"- an asterisk, to match any branch;" +msgstr "" +"- un nume de ramură, sau\n" +"- un asterisc, însemnând orice ramură;" + +msgid "The corresponding values can be either:" +msgstr "Valorile corespunzatoare pot fi:" + +msgid "" +"- a comma-separated list containing users and groups, or\n" +"- an asterisk, to match anyone;" +msgstr "" +"- o listă separată prin virgule conținând utilizatori și grupuri, sau\n" +"- un asterisc, însemnând oricine;" + +msgid "" +"Path-based Access Control\n" +"-------------------------" +msgstr "" + +msgid "" +"Use the ``acl.deny`` and ``acl.allow`` sections to have path-based\n" +"access control. Keys in these sections accept a subtree pattern (with\n" +"a glob syntax by default). The corresponding values follow the same\n" +"syntax as the other sections above." +msgstr "" + +msgid "" +"Groups\n" +"------" +msgstr "" + +msgid "" +"Group names must be prefixed with an ``@`` symbol. Specifying a group\n" +"name has the same effect as specifying all the users in that group." +msgstr "" + +msgid "" +"You can define group members in the ``acl.groups`` section.\n" +"If a group name is not defined there, and Mercurial is running under\n" +"a Unix-like system, the list of users will be taken from the OS.\n" +"Otherwise, an exception will be raised." +msgstr "" + +msgid "" +"Example Configuration\n" +"---------------------" +msgstr "" + +msgid "::" +msgstr "" + +msgid " [hooks]" +msgstr "" + +msgid "" +" # Use this if you want to check access restrictions at commit time\n" +" pretxncommit.acl = python:hgext.acl.hook" +msgstr "" + +msgid "" +" # Use this if you want to check access restrictions for pull, push,\n" +" # bundle and serve.\n" +" pretxnchangegroup.acl = python:hgext.acl.hook" +msgstr "" + +msgid "" +" [acl]\n" +" # Allow or deny access for incoming changes only if their source is\n" +" # listed here, let them pass otherwise. Source is \"serve\" for all\n" +" # remote access (http or ssh), \"push\", \"pull\" or \"bundle\" when the\n" +" # related commands are run locally.\n" +" # Default: serve\n" +" sources = serve" +msgstr "" + +msgid " [acl.deny.branches]" +msgstr "" + +msgid "" +" # Everyone is denied to the frozen branch:\n" +" frozen-branch = *" +msgstr "" + +msgid "" +" # A bad user is denied on all branches:\n" +" * = bad-user" +msgstr "" + +msgid " [acl.allow.branches]" +msgstr "" + +msgid "" +" # A few users are allowed on branch-a:\n" +" branch-a = user-1, user-2, user-3" +msgstr "" + +msgid "" +" # Only one user is allowed on branch-b:\n" +" branch-b = user-1" +msgstr "" + +msgid "" +" # The super user is allowed on any branch:\n" +" * = super-user" +msgstr "" + +msgid "" +" # Everyone is allowed on branch-for-tests:\n" +" branch-for-tests = *" +msgstr "" + +msgid "" +" [acl.deny]\n" +" # This list is checked first. If a match is found, acl.allow is not\n" +" # checked. All users are granted access if acl.deny is not present.\n" +" # Format for both lists: glob pattern = user, ..., @group, ..." +msgstr "" + +msgid "" +" # To match everyone, use an asterisk for the user:\n" +" # my/glob/pattern = *" +msgstr "" + +msgid "" +" # user6 will not have write access to any file:\n" +" ** = user6" +msgstr "" + +msgid "" +" # Group \"hg-denied\" will not have write access to any file:\n" +" ** = @hg-denied" +msgstr "" + +msgid "" +" # Nobody will be able to change \"DONT-TOUCH-THIS.txt\", despite\n" +" # everyone being able to change all other files. See below.\n" +" src/main/resources/DONT-TOUCH-THIS.txt = *" +msgstr "" + +msgid "" +" [acl.allow]\n" +" # if acl.allow is not present, all users are allowed by default\n" +" # empty acl.allow = no users allowed" +msgstr "" + +msgid "" +" # User \"doc_writer\" has write access to any file under the \"docs\"\n" +" # folder:\n" +" docs/** = doc_writer" +msgstr "" + +msgid "" +" # User \"jack\" and group \"designers\" have write access to any file\n" +" # under the \"images\" folder:\n" +" images/** = jack, @designers" +msgstr "" + +msgid "" +" # Everyone (except for \"user6\" - see acl.deny above) will have write\n" +" # access to any file under the \"resources\" folder (except for 1\n" +" # file. See acl.deny):\n" +" src/main/resources/** = *" +msgstr "" + +msgid " .hgtags = release_engineer" +msgstr "" + +#, python-format +msgid "group '%s' is undefined" +msgstr "" + +#, python-format +msgid "" +"config error - hook type \"%s\" cannot stop incoming changesets nor commits" +msgstr "" + +#, python-format +msgid "acl: user \"%s\" denied on branch \"%s\" (changeset \"%s\")" +msgstr "" + +#, python-format +msgid "acl: user \"%s\" not allowed on branch \"%s\" (changeset \"%s\")" +msgstr "" + +#, python-format +msgid "acl: access denied for changeset %s" +msgstr "" + +msgid "track a line of development with movable markers" +msgstr "" + +msgid "" +"Bookmarks are local movable markers to changesets. Every bookmark\n" +"points to a changeset identified by its hash. If you commit a\n" +"changeset that is based on a changeset that has a bookmark on it, the\n" +"bookmark shifts to the new changeset." +msgstr "" + +msgid "" +"It is possible to use bookmark names in every revision lookup (e.g.\n" +":hg:`merge`, :hg:`update`)." +msgstr "" + +msgid "" +"By default, when several bookmarks point to the same changeset, they\n" +"will all move forward together. It is possible to obtain a more\n" +"git-like experience by adding the following configuration option to\n" +"your .hgrc::" +msgstr "" + +msgid "" +" [bookmarks]\n" +" track.current = True" +msgstr "" + +msgid "" +"This will cause Mercurial to track the bookmark that you are currently\n" +"using, and only update it. This is similar to git's approach to\n" +"branching.\n" +msgstr "" + +msgid "" +" Bookmarks are pointers to certain commits that move when\n" +" committing. Bookmarks are local. They can be renamed, copied and\n" +" deleted. It is possible to use bookmark names in :hg:`merge` and\n" +" :hg:`update` to merge and update respectively to a given bookmark." +msgstr "" + +msgid "" +" You can use :hg:`bookmark NAME` to set a bookmark on the working\n" +" directory's parent revision with the given name. If you specify\n" +" a revision using -r REV (where REV may be an existing bookmark),\n" +" the bookmark is assigned to that revision.\n" +" " +msgstr "" + +msgid "a bookmark of this name does not exist" +msgstr "" + +msgid "a bookmark of the same name already exists" +msgstr "" + +msgid "new bookmark name required" +msgstr "" + +msgid "bookmark name required" +msgstr "" + +msgid "bookmark name cannot contain newlines" +msgstr "" + +msgid "bookmark names cannot consist entirely of whitespace" +msgstr "" + +msgid "a bookmark cannot have the name of an existing branch" +msgstr "" + +msgid "no bookmarks set\n" +msgstr "" + +#, python-format +msgid "updating bookmark %s\n" +msgstr "se actualizează semnul de carte %s\n" + +#, python-format +msgid "not updating divergent bookmark %s\n" +msgstr "nu se actualizează semnul de carte divergent %s\n" + +#, python-format +msgid "updating bookmark %s failed!\n" +msgstr "actualizarea semnului de carte %s a eșuat!\n" + +#, python-format +msgid "remote bookmark %s not found!" +msgstr "" + +#, python-format +msgid "importing bookmark %s\n" +msgstr "" + +#, python-format +msgid "exporting bookmark %s\n" +msgstr "" + +#, python-format +msgid "deleting remote bookmark %s\n" +msgstr "" + +#, python-format +msgid "bookmark %s does not exist on the local or remote repository!\n" +msgstr "" + +msgid "searching for changes\n" +msgstr "se caută modificări\n" + +msgid "no changes found\n" +msgstr "nu s-au găsit modificări\n" + +#, python-format +msgid "comparing with %s\n" +msgstr "se compară cu %s\n" + +msgid "bookmark to import" +msgstr "" + +msgid "bookmark to export" +msgstr "" + +msgid "compare bookmark" +msgstr "" + +msgid "force" +msgstr "" + +msgid "REV" +msgstr "REV" + +msgid "revision" +msgstr "revizia" + +msgid "delete a given bookmark" +msgstr "" + +msgid "NAME" +msgstr "NUME" + +msgid "rename a given bookmark" +msgstr "" + +msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]" +msgstr "" + +msgid "hooks for integrating with the Bugzilla bug tracker" +msgstr "" + +msgid "" +"This hook extension adds comments on bugs in Bugzilla when changesets\n" +"that refer to bugs by Bugzilla ID are seen. The hook does not change\n" +"bug status." +msgstr "" + +msgid "" +"The hook updates the Bugzilla database directly. Only Bugzilla\n" +"installations using MySQL are supported." +msgstr "" + +msgid "" +"The hook relies on a Bugzilla script to send bug change notification\n" +"emails. That script changes between Bugzilla versions; the\n" +"'processmail' script used prior to 2.18 is replaced in 2.18 and\n" +"subsequent versions by 'config/sendbugmail.pl'. Note that these will\n" +"be run by Mercurial as the user pushing the change; you will need to\n" +"ensure the Bugzilla install file permissions are set appropriately." +msgstr "" + +msgid "" +"The extension is configured through three different configuration\n" +"sections. These keys are recognized in the [bugzilla] section:" +msgstr "" + +msgid "" +"host\n" +" Hostname of the MySQL server holding the Bugzilla database." +msgstr "" + +msgid "" +"db\n" +" Name of the Bugzilla database in MySQL. Default 'bugs'." +msgstr "" + +msgid "" +"user\n" +" Username to use to access MySQL server. Default 'bugs'." +msgstr "" + +msgid "" +"password\n" +" Password to use to access MySQL server." +msgstr "" + +msgid "" +"timeout\n" +" Database connection timeout (seconds). Default 5." +msgstr "" + +msgid "" +"version\n" +" Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 and later,\n" +" '2.18' for Bugzilla versions from 2.18 and '2.16' for versions prior\n" +" to 2.18." +msgstr "" + +msgid "" +"bzuser\n" +" Fallback Bugzilla user name to record comments with, if changeset\n" +" committer cannot be found as a Bugzilla user." +msgstr "" + +msgid "" +"bzdir\n" +" Bugzilla install directory. Used by default notify. Default\n" +" '/var/www/html/bugzilla'." +msgstr "" + +msgid "" +"notify\n" +" The command to run to get Bugzilla to send bug change notification\n" +" emails. Substitutes from a map with 3 keys, 'bzdir', 'id' (bug id)\n" +" and 'user' (committer bugzilla email). Default depends on version;\n" +" from 2.18 it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n" +" %(id)s %(user)s\"." +msgstr "" + +msgid "" +"regexp\n" +" Regular expression to match bug IDs in changeset commit message.\n" +" Must contain one \"()\" group. The default expression matches 'Bug\n" +" 1234', 'Bug no. 1234', 'Bug number 1234', 'Bugs 1234,5678', 'Bug\n" +" 1234 and 5678' and variations thereof. Matching is case insensitive." +msgstr "" + +msgid "" +"style\n" +" The style file to use when formatting comments." +msgstr "" + +msgid "" +"template\n" +" Template to use when formatting comments. Overrides style if\n" +" specified. In addition to the usual Mercurial keywords, the\n" +" extension specifies::" +msgstr "" + +msgid "" +" {bug} The Bugzilla bug ID.\n" +" {root} The full pathname of the Mercurial repository.\n" +" {webroot} Stripped pathname of the Mercurial repository.\n" +" {hgweb} Base URL for browsing Mercurial repositories." +msgstr "" + +msgid "" +" Default 'changeset {node|short} in repo {root} refers '\n" +" 'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'" +msgstr "" + +msgid "" +"strip\n" +" The number of slashes to strip from the front of {root} to produce\n" +" {webroot}. Default 0." +msgstr "" + +msgid "" +"usermap\n" +" Path of file containing Mercurial committer ID to Bugzilla user ID\n" +" mappings. If specified, the file should contain one mapping per\n" +" line, \"committer\"=\"Bugzilla user\". See also the [usermap] section." +msgstr "" + +msgid "" +"The [usermap] section is used to specify mappings of Mercurial\n" +"committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n" +"\"committer\"=\"Bugzilla user\"" +msgstr "" + +msgid "Finally, the [web] section supports one entry:" +msgstr "" + +msgid "" +"baseurl\n" +" Base URL for browsing Mercurial repositories. Reference from\n" +" templates as {hgweb}." +msgstr "" + +msgid "Activating the extension::" +msgstr "" + +msgid "" +" [extensions]\n" +" bugzilla =" +msgstr "" + +msgid "" +" [hooks]\n" +" # run bugzilla hook on every change pulled or pushed in here\n" +" incoming.bugzilla = python:hgext.bugzilla.hook" +msgstr "" + +msgid "Example configuration:" +msgstr "" + +msgid "" +"This example configuration is for a collection of Mercurial\n" +"repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n" +"installation in /opt/bugzilla-3.2. ::" +msgstr "" + +msgid "" +" [bugzilla]\n" +" host=localhost\n" +" password=XYZZY\n" +" version=3.0\n" +" bzuser=unknown@domain.com\n" +" bzdir=/opt/bugzilla-3.2\n" +" template=Changeset {node|short} in {root|basename}.\n" +" {hgweb}/{webroot}/rev/{node|short}\\n\n" +" {desc}\\n\n" +" strip=5" +msgstr "" + +msgid "" +" [web]\n" +" baseurl=http://dev.domain.com/hg" +msgstr "" + +msgid "" +" [usermap]\n" +" user@emaildomain.com=user.name@bugzilladomain.com" +msgstr "" + +msgid "Commits add a comment to the Bugzilla bug record of the form::" +msgstr "" + +msgid "" +" Changeset 3b16791d6642 in repository-name.\n" +" http://dev.domain.com/hg/repository-name/rev/3b16791d6642" +msgstr "" + +msgid " Changeset commit comment. Bug 1234.\n" +msgstr "" + +#, python-format +msgid "connecting to %s:%s as %s, password %s\n" +msgstr "" + +#, python-format +msgid "query: %s %s\n" +msgstr "" + +#, python-format +msgid "failed query: %s %s\n" +msgstr "" + +msgid "unknown database schema" +msgstr "" + +#, python-format +msgid "bug %d already knows about changeset %s\n" +msgstr "" + +msgid "telling bugzilla to send mail:\n" +msgstr "" + +#, python-format +msgid " bug %s\n" +msgstr "" + +#, python-format +msgid "running notify command %s\n" +msgstr "" + +#, python-format +msgid "bugzilla notify command %s" +msgstr "" + +msgid "done\n" +msgstr "" + +#, python-format +msgid "looking up user %s\n" +msgstr "" + +#, python-format +msgid "cannot find bugzilla user id for %s" +msgstr "" + +#, python-format +msgid "cannot find bugzilla user id for %s or %s" +msgstr "" + +#, python-format +msgid "bugzilla version %s not supported" +msgstr "" + +msgid "" +"changeset {node|short} in repo {root} refers to bug {bug}.\n" +"details:\n" +"\t{desc|tabindent}" +msgstr "" + +#, python-format +msgid "python mysql support not available: %s" +msgstr "" + +#, python-format +msgid "hook type %s does not pass a changeset id" +msgstr "" + +#, python-format +msgid "database error: %s" +msgstr "" + +msgid "command to display child changesets" +msgstr "" + +msgid "show the children of the given or working directory revision" +msgstr "afișează copiii reviziei specificate sau a celei din directorul curent" + +msgid "" +" Print the children of the working directory's revisions. If a\n" +" revision is given via -r/--rev, the children of that revision will\n" +" be printed. If a file argument is given, revision in which the\n" +" file was last changed (after the working directory revision or the\n" +" argument to --rev if given) is printed.\n" +" " +msgstr "" + +msgid "show children of the specified revision" +msgstr "afișează fiii reviziei specificate" + +msgid "hg children [-r REV] [FILE]" +msgstr "" + +msgid "command to display statistics about repository history" +msgstr "" + +#, python-format +msgid "Revision %d is a merge, ignoring...\n" +msgstr "" + +msgid "analyzing" +msgstr "" + +msgid "histogram of changes to the repository" +msgstr "" + +msgid "" +" This command will display a histogram representing the number\n" +" of changed lines or revisions, grouped according to the given\n" +" template. The default template will group changes by author.\n" +" The --dateformat option may be used to group the results by\n" +" date instead." +msgstr "" + +msgid "" +" Statistics are based on the number of changed lines, or\n" +" alternatively the number of matching revisions if the\n" +" --changesets option is specified." +msgstr "" + +msgid " Examples::" +msgstr "" + +msgid "" +" # display count of changed lines for every committer\n" +" hg churn -t '{author|email}'" +msgstr "" + +msgid "" +" # display daily activity graph\n" +" hg churn -f '%H' -s -c" +msgstr "" + +msgid "" +" # display activity of developers by month\n" +" hg churn -f '%Y-%m' -s -c" +msgstr "" + +msgid "" +" # display count of lines changed in every year\n" +" hg churn -f '%Y' -s" +msgstr "" + +msgid "" +" It is possible to map alternate email addresses to a main address\n" +" by providing a file using the following format::" +msgstr "" + +msgid " = " +msgstr " = " + +msgid "" +" Such a file may be specified with the --aliases option, otherwise\n" +" a .hgchurn file will be looked for in the working directory root.\n" +" " +msgstr "" + +msgid "count rate for the specified revision or range" +msgstr "" + +msgid "DATE" +msgstr "" + +msgid "count rate for revisions matching date spec" +msgstr "" + +msgid "TEMPLATE" +msgstr "ȘABLON" + +msgid "template to group changesets" +msgstr "" + +msgid "FORMAT" +msgstr "" + +msgid "strftime-compatible format for grouping by date" +msgstr "" + +msgid "count rate by number of changesets" +msgstr "" + +msgid "sort by key (default: sort by count)" +msgstr "" + +msgid "display added/removed lines separately" +msgstr "" + +msgid "FILE" +msgstr "" + +msgid "file with email aliases" +msgstr "" + +msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]" +msgstr "" + +msgid "colorize output from some commands" +msgstr "" + +msgid "" +"This extension modifies the status and resolve commands to add color to " +"their\n" +"output to reflect file status, the qseries command to add color to reflect\n" +"patch status (applied, unapplied, missing), and to diff-related\n" +"commands to highlight additions, removals, diff headers, and trailing\n" +"whitespace." +msgstr "" + +msgid "" +"Other effects in addition to color, like bold and underlined text, are\n" +"also available. Effects are rendered with the ECMA-48 SGR control\n" +"function (aka ANSI escape codes). This module also provides the\n" +"render_text function, which can be used to add effects to any text." +msgstr "" + +msgid "Default effects may be overridden from the .hgrc file::" +msgstr "" + +msgid "" +" [color]\n" +" status.modified = blue bold underline red_background\n" +" status.added = green bold\n" +" status.removed = red bold blue_background\n" +" status.deleted = cyan bold underline\n" +" status.unknown = magenta bold underline\n" +" status.ignored = black bold" +msgstr "" + +msgid "" +" # 'none' turns off all effects\n" +" status.clean = none\n" +" status.copied = none" +msgstr "" + +msgid "" +" qseries.applied = blue bold underline\n" +" qseries.unapplied = black bold\n" +" qseries.missing = red bold" +msgstr "" + +msgid "" +" diff.diffline = bold\n" +" diff.extended = cyan bold\n" +" diff.file_a = red bold\n" +" diff.file_b = green bold\n" +" diff.hunk = magenta\n" +" diff.deleted = red\n" +" diff.inserted = green\n" +" diff.changed = white\n" +" diff.trailingwhitespace = bold red_background" +msgstr "" + +msgid "" +" resolve.unresolved = red bold\n" +" resolve.resolved = green bold" +msgstr "" + +msgid " bookmarks.current = green" +msgstr "" + +msgid "" +" branches.active = none\n" +" branches.closed = black bold\n" +" branches.current = green\n" +" branches.inactive = none" +msgstr "" + +msgid "" +"The color extension will try to detect whether to use ANSI codes or\n" +"Win32 console APIs, unless it is made explicit::" +msgstr "" + +msgid "" +" [color]\n" +" mode = ansi" +msgstr "" + +msgid "Any value other than 'ansi', 'win32', or 'auto' will disable color." +msgstr "" + +#, python-format +msgid "ignoring unknown color/effect %r (configured in color.%s)\n" +msgstr "" + +msgid "win32console not found, please install pywin32\n" +msgstr "" + +msgid "when to colorize (always, auto, or never)" +msgstr "când să se coloreze (întotdeauna, auto, sau niciodată)" + +msgid "TYPE" +msgstr "" + +msgid "import revisions from foreign VCS repositories into Mercurial" +msgstr "" + +msgid "convert a foreign SCM repository to a Mercurial one." +msgstr "" + +msgid " Accepted source formats [identifiers]:" +msgstr "" + +msgid "" +" - Mercurial [hg]\n" +" - CVS [cvs]\n" +" - Darcs [darcs]\n" +" - git [git]\n" +" - Subversion [svn]\n" +" - Monotone [mtn]\n" +" - GNU Arch [gnuarch]\n" +" - Bazaar [bzr]\n" +" - Perforce [p4]" +msgstr "" + +msgid " Accepted destination formats [identifiers]:" +msgstr "" + +msgid "" +" - Mercurial [hg]\n" +" - Subversion [svn] (history on branches is not preserved)" +msgstr "" + +msgid "" +" If no revision is given, all revisions will be converted.\n" +" Otherwise, convert will only import up to the named revision\n" +" (given in a format understood by the source)." +msgstr "" + +msgid "" +" If no destination directory name is specified, it defaults to the\n" +" basename of the source with '-hg' appended. If the destination\n" +" repository doesn't exist, it will be created." +msgstr "" + +msgid "" +" By default, all sources except Mercurial will use --branchsort.\n" +" Mercurial uses --sourcesort to preserve original revision numbers\n" +" order. Sort modes have the following effects:" +msgstr "" + +msgid "" +" --branchsort convert from parent to child revision when possible,\n" +" which means branches are usually converted one after\n" +" the other. It generates more compact repositories." +msgstr "" + +msgid "" +" --datesort sort revisions by date. Converted repositories have\n" +" good-looking changelogs but are often an order of\n" +" magnitude larger than the same ones generated by\n" +" --branchsort." +msgstr "" + +msgid "" +" --sourcesort try to preserve source revisions order, only\n" +" supported by Mercurial sources." +msgstr "" + +msgid "" +" If isn't given, it will be put in a default location\n" +" (/.hg/shamap by default). The is a simple text file\n" +" that maps each source commit ID to the destination ID for that\n" +" revision, like so::" +msgstr "" + +msgid " " +msgstr "" + +msgid "" +" If the file doesn't exist, it's automatically created. It's\n" +" updated on each commit copied, so convert-repo can be interrupted\n" +" and can be run repeatedly to copy new commits." +msgstr "" + +msgid "" +" The [username mapping] file is a simple text file that maps each\n" +" source commit author to a destination commit author. It is handy\n" +" for source SCMs that use unix logins to identify authors (eg:\n" +" CVS). One line per author mapping and the line format is:\n" +" srcauthor=whatever string you want" +msgstr "" + +msgid "" +" The filemap is a file that allows filtering and remapping of files\n" +" and directories. Each line can contain one of the following\n" +" directives::" +msgstr "" + +msgid " include path/to/file-or-dir" +msgstr "" + +msgid " exclude path/to/file-or-dir" +msgstr "" + +msgid " rename path/to/source path/to/destination" +msgstr "" + +msgid "" +" Comment lines start with '#'. A specified path matches if it\n" +" equals the full relative name of a file or one of its parent\n" +" directories. The 'include' or 'exclude' directive with the longest\n" +" matching path applies, so line order does not matter." +msgstr "" + +msgid "" +" The 'include' directive causes a file, or all files under a\n" +" directory, to be included in the destination repository, and the\n" +" exclusion of all other files and directories not explicitly\n" +" included. The 'exclude' directive causes files or directories to\n" +" be omitted. The 'rename' directive renames a file or directory if\n" +" it is converted. To rename from a subdirectory into the root of\n" +" the repository, use '.' as the path to rename to." +msgstr "" + +msgid "" +" The splicemap is a file that allows insertion of synthetic\n" +" history, letting you specify the parents of a revision. This is\n" +" useful if you want to e.g. give a Subversion merge two parents, or\n" +" graft two disconnected series of history together. Each entry\n" +" contains a key, followed by a space, followed by one or two\n" +" comma-separated values. The key is the revision ID in the source\n" +" revision control system whose parents should be modified (same\n" +" format as a key in .hg/shamap). The values are the revision IDs\n" +" (in either the source or destination revision control system) that\n" +" should be used as the new parents for that node. For example, if\n" +" you have merged \"release-1.0\" into \"trunk\", then you should\n" +" specify the revision on \"trunk\" as the first parent and the one on\n" +" the \"release-1.0\" branch as the second." +msgstr "" + +msgid "" +" The branchmap is a file that allows you to rename a branch when it is\n" +" being brought in from whatever external repository. When used in\n" +" conjunction with a splicemap, it allows for a powerful combination\n" +" to help fix even the most badly mismanaged repositories and turn them\n" +" into nicely structured Mercurial repositories. The branchmap contains\n" +" lines of the form \"original_branch_name new_branch_name\".\n" +" \"original_branch_name\" is the name of the branch in the source\n" +" repository, and \"new_branch_name\" is the name of the branch is the\n" +" destination repository. This can be used to (for instance) move code\n" +" in one repository from \"default\" to a named branch." +msgstr "" + +msgid "" +" Mercurial Source\n" +" ----------------" +msgstr "" + +msgid "" +" --config convert.hg.ignoreerrors=False (boolean)\n" +" ignore integrity errors when reading. Use it to fix Mercurial\n" +" repositories with missing revlogs, by converting from and to\n" +" Mercurial.\n" +" --config convert.hg.saverev=False (boolean)\n" +" store original revision ID in changeset (forces target IDs to\n" +" change)\n" +" --config convert.hg.startrev=0 (hg revision identifier)\n" +" convert start revision and its descendants" +msgstr "" + +msgid "" +" CVS Source\n" +" ----------" +msgstr "" + +msgid "" +" CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n" +" to indicate the starting point of what will be converted. Direct\n" +" access to the repository files is not needed, unless of course the\n" +" repository is :local:. The conversion uses the top level directory\n" +" in the sandbox to find the CVS repository, and then uses CVS rlog\n" +" commands to find files to convert. This means that unless a\n" +" filemap is given, all files under the starting directory will be\n" +" converted, and that any directory reorganization in the CVS\n" +" sandbox is ignored." +msgstr "" + +msgid " The options shown are the defaults." +msgstr "" + +msgid "" +" --config convert.cvsps.cache=True (boolean)\n" +" Set to False to disable remote log caching, for testing and\n" +" debugging purposes.\n" +" --config convert.cvsps.fuzz=60 (integer)\n" +" Specify the maximum time (in seconds) that is allowed between\n" +" commits with identical user and log message in a single\n" +" changeset. When very large files were checked in as part of a\n" +" changeset then the default may not be long enough.\n" +" --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n" +" Specify a regular expression to which commit log messages are\n" +" matched. If a match occurs, then the conversion process will\n" +" insert a dummy revision merging the branch on which this log\n" +" message occurs to the branch indicated in the regex.\n" +" --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n" +" Specify a regular expression to which commit log messages are\n" +" matched. If a match occurs, then the conversion process will\n" +" add the most recent revision on the branch indicated in the\n" +" regex as the second parent of the changeset.\n" +" --config hook.cvslog\n" +" Specify a Python function to be called at the end of gathering\n" +" the CVS log. The function is passed a list with the log entries,\n" +" and can modify the entries in-place, or add or delete them.\n" +" --config hook.cvschangesets\n" +" Specify a Python function to be called after the changesets\n" +" are calculated from the the CVS log. The function is passed\n" +" a list with the changeset entries, and can modify the changesets\n" +" in-place, or add or delete them." +msgstr "" + +msgid "" +" An additional \"debugcvsps\" Mercurial command allows the builtin\n" +" changeset merging code to be run without doing a conversion. Its\n" +" parameters and output are similar to that of cvsps 2.1. Please see\n" +" the command help for more details." +msgstr "" + +msgid "" +" Subversion Source\n" +" -----------------" +msgstr "" + +msgid "" +" Subversion source detects classical trunk/branches/tags layouts.\n" +" By default, the supplied \"svn://repo/path/\" source URL is\n" +" converted as a single branch. If \"svn://repo/path/trunk\" exists it\n" +" replaces the default branch. If \"svn://repo/path/branches\" exists,\n" +" its subdirectories are listed as possible branches. If\n" +" \"svn://repo/path/tags\" exists, it is looked for tags referencing\n" +" converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n" +" can be overridden with following options. Set them to paths\n" +" relative to the source URL, or leave them blank to disable auto\n" +" detection." +msgstr "" + +msgid "" +" --config convert.svn.branches=branches (directory name)\n" +" specify the directory containing branches\n" +" --config convert.svn.tags=tags (directory name)\n" +" specify the directory containing tags\n" +" --config convert.svn.trunk=trunk (directory name)\n" +" specify the name of the trunk branch" +msgstr "" + +msgid "" +" Source history can be retrieved starting at a specific revision,\n" +" instead of being integrally converted. Only single branch\n" +" conversions are supported." +msgstr "" + +msgid "" +" --config convert.svn.startrev=0 (svn revision number)\n" +" specify start Subversion revision." +msgstr "" + +msgid "" +" Perforce Source\n" +" ---------------" +msgstr "" + +msgid "" +" The Perforce (P4) importer can be given a p4 depot path or a\n" +" client specification as source. It will convert all files in the\n" +" source to a flat Mercurial repository, ignoring labels, branches\n" +" and integrations. Note that when a depot path is given you then\n" +" usually should specify a target directory, because otherwise the\n" +" target may be named ...-hg." +msgstr "" + +msgid "" +" It is possible to limit the amount of source history to be\n" +" converted by specifying an initial Perforce revision." +msgstr "" + +msgid "" +" --config convert.p4.startrev=0 (perforce changelist number)\n" +" specify initial Perforce revision." +msgstr "" + +msgid "" +" Mercurial Destination\n" +" ---------------------" +msgstr "" + +msgid "" +" --config convert.hg.clonebranches=False (boolean)\n" +" dispatch source branches in separate clones.\n" +" --config convert.hg.tagsbranch=default (branch name)\n" +" tag revisions branch name\n" +" --config convert.hg.usebranchnames=True (boolean)\n" +" preserve branch names" +msgstr "" + +msgid " " +msgstr "" + +msgid "create changeset information from CVS" +msgstr "" + +msgid "" +" This command is intended as a debugging tool for the CVS to\n" +" Mercurial converter, and can be used as a direct replacement for\n" +" cvsps." +msgstr "" + +msgid "" +" Hg debugcvsps reads the CVS rlog for current directory (or any\n" +" named directory) in the CVS repository, and converts the log to a\n" +" series of changesets based on matching commit log entries and\n" +" dates." +msgstr "" + +msgid "username mapping filename" +msgstr "" + +msgid "destination repository type" +msgstr "" + +msgid "remap file names using contents of file" +msgstr "" + +msgid "import up to target revision REV" +msgstr "" + +msgid "source repository type" +msgstr "" + +msgid "splice synthesized history into place" +msgstr "" + +msgid "change branch names while converting" +msgstr "" + +msgid "try to sort changesets by branches" +msgstr "" + +msgid "try to sort changesets by date" +msgstr "" + +msgid "preserve source changesets order" +msgstr "" + +msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]" +msgstr "" + +msgid "only return changes on specified branches" +msgstr "" + +msgid "prefix to remove from file names" +msgstr "" + +msgid "only return changes after or between specified tags" +msgstr "" + +msgid "update cvs log cache" +msgstr "" + +msgid "create new cvs log cache" +msgstr "" + +msgid "set commit time fuzz in seconds" +msgstr "" + +msgid "specify cvsroot" +msgstr "" + +msgid "show parent changesets" +msgstr "afișează seturile de modificări părinte" + +msgid "show current changeset in ancestor branches" +msgstr "afișează setul de modificări curent în ramurile strămoș" + +msgid "ignored for compatibility" +msgstr "" + +msgid "hg debugcvsps [OPTION]... [PATH]..." +msgstr "" + +#, python-format +msgid "%s does not look like a Bazaar repository" +msgstr "" + +msgid "Bazaar modules could not be loaded" +msgstr "" + +msgid "" +"warning: lightweight checkouts may cause conversion failures, try with a " +"regular branch instead.\n" +msgstr "" + +msgid "bzr source type could not be determined\n" +msgstr "" + +#, python-format +msgid "%s is not a valid revision in current branch" +msgstr "" + +#, python-format +msgid "%s is not available in %s anymore" +msgstr "" + +#, python-format +msgid "%s.%s symlink has no target" +msgstr "" + +#, python-format +msgid "cannot find required \"%s\" tool" +msgstr "" + +#, python-format +msgid "%s error:\n" +msgstr "" + +#, python-format +msgid "syntax error in %s(%d): key/value pair expected" +msgstr "" + +#, python-format +msgid "could not open map file %r: %s" +msgstr "" + +#, python-format +msgid "%s: invalid source repository type" +msgstr "%s: tipul depozitului sursă este invalid" + +#, python-format +msgid "%s: missing or unsupported repository" +msgstr "" + +#, python-format +msgid "%s: invalid destination repository type" +msgstr "" + +#, python-format +msgid "convert: %s\n" +msgstr "" + +#, python-format +msgid "%s: unknown repository type" +msgstr "" + +msgid "getting files" +msgstr "se obțin fișierele" + +msgid "revisions" +msgstr "" + +msgid "scanning" +msgstr "" + +#, python-format +msgid "unknown sort mode: %s" +msgstr "" + +#, python-format +msgid "cycle detected between %s and %s" +msgstr "" + +msgid "not all revisions were sorted" +msgstr "" + +#, python-format +msgid "Writing author map file %s\n" +msgstr "" + +#, python-format +msgid "Ignoring bad line in author map file %s: %s\n" +msgstr "" + +#, python-format +msgid "mapping author %s to %s\n" +msgstr "" + +#, python-format +msgid "overriding mapping for author %s, was %s, will be %s\n" +msgstr "" + +#, python-format +msgid "spliced in %s as parents of %s\n" +msgstr "" + +msgid "scanning source...\n" +msgstr "" + +msgid "sorting...\n" +msgstr "" + +msgid "converting...\n" +msgstr "" + +#, python-format +msgid "source: %s\n" +msgstr "" + +msgid "converting" +msgstr "" + +#, python-format +msgid "assuming destination %s\n" +msgstr "" + +msgid "more than one sort mode specified" +msgstr "" + +msgid "--sourcesort is not supported by this data source" +msgstr "" + +#, python-format +msgid "%s does not look like a CVS checkout" +msgstr "" + +#, python-format +msgid "revision %s is not a patchset number" +msgstr "" + +#, python-format +msgid "connecting to %s\n" +msgstr "" + +msgid "CVS pserver authentication failed" +msgstr "" + +#, python-format +msgid "" +"unexpected response from CVS server (expected \"Valid-requests\", but got %r)" +msgstr "" + +#, python-format +msgid "%d bytes missing from remote file" +msgstr "" + +msgid "malformed response from CVS" +msgstr "" + +#, python-format +msgid "cvs server: %s\n" +msgstr "" + +#, python-format +msgid "unknown CVS response: %s" +msgstr "" + +msgid "collecting CVS rlog\n" +msgstr "" + +msgid "not a CVS sandbox" +msgstr "" + +#, python-format +msgid "reading cvs log cache %s\n" +msgstr "" + +#, python-format +msgid "cache has %d log entries\n" +msgstr "" + +#, python-format +msgid "error reading cache: %r\n" +msgstr "" + +#, python-format +msgid "running %s\n" +msgstr "" + +msgid "RCS file must be followed by working file" +msgstr "" + +msgid "must have at least some revisions" +msgstr "" + +msgid "expected revision number" +msgstr "" + +msgid "revision must be followed by date line" +msgstr "" + +msgid "log cache overlaps with new log entries, re-run without cache." +msgstr "" + +#, python-format +msgid "writing cvs log cache %s\n" +msgstr "" + +#, python-format +msgid "%d log entries\n" +msgstr "" + +msgid "creating changesets\n" +msgstr "" + +msgid "synthetic changeset cannot have multiple parents" +msgstr "" + +#, python-format +msgid "" +"warning: CVS commit message references non-existent branch %r:\n" +"%s\n" +msgstr "" + +#, python-format +msgid "%d changeset entries\n" +msgstr "" + +#, python-format +msgid "%s does not look like a darcs repository" +msgstr "" + +#, python-format +msgid "darcs version 2.1 or newer needed (found %r)" +msgstr "" + +msgid "Python ElementTree module is not available" +msgstr "" + +msgid "internal calling inconsistency" +msgstr "" + +msgid "errors in filemap" +msgstr "" + +#, python-format +msgid "%s:%d: path to %s is missing\n" +msgstr "" + +#, python-format +msgid "%s:%d: %r already in %s list\n" +msgstr "" + +#, python-format +msgid "%s:%d: superfluous / in %s %r\n" +msgstr "" + +#, python-format +msgid "%s:%d: unknown directive %r\n" +msgstr "" + +msgid "source repository doesn't support --filemap" +msgstr "" + +#, python-format +msgid "%s does not look like a Git repository" +msgstr "" + +msgid "cannot retrieve git heads" +msgstr "" + +#, python-format +msgid "cannot read %r object at %s" +msgstr "" + +#, python-format +msgid "cannot read changes in %s" +msgstr "" + +#, python-format +msgid "cannot read tags from %s" +msgstr "" + +#, python-format +msgid "%s does not look like a GNU Arch repository" +msgstr "" + +msgid "cannot find a GNU Arch tool" +msgstr "" + +#, python-format +msgid "analyzing tree version %s...\n" +msgstr "" + +#, python-format +msgid "" +"tree analysis stopped because it points to an unregistered archive %s...\n" +msgstr "" + +#, python-format +msgid "could not parse cat-log of %s" +msgstr "" + +#, python-format +msgid "%s is not a local Mercurial repository" +msgstr "" + +#, python-format +msgid "initializing destination %s repository\n" +msgstr "" + +#, python-format +msgid "could not create hg repository %s as sink" +msgstr "" + +#, python-format +msgid "pulling from %s into %s\n" +msgstr "" + +msgid "filtering out empty revision\n" +msgstr "" + +msgid "updating tags\n" +msgstr "se actualizează etichetele\n" + +#, python-format +msgid "%s is not a valid start revision" +msgstr "" + +#, python-format +msgid "ignoring: %s\n" +msgstr "" + +#, python-format +msgid "%s does not look like a monotone repository" +msgstr "" + +#, python-format +msgid "copying file in renamed directory from '%s' to '%s'" +msgstr "" + +#, python-format +msgid "%s does not look like a P4 repository" +msgstr "" + +msgid "reading p4 views\n" +msgstr "" + +msgid "collecting p4 changelists\n" +msgstr "" + +msgid "Mercurial failed to run itself, check hg executable is in PATH" +msgstr "" + +msgid "" +"svn: cannot probe remote repository, assume it could be a subversion " +"repository. Use --source-type if you know better.\n" +msgstr "" + +#, python-format +msgid "%s does not look like a Subversion repository" +msgstr "%s nu pare a fi un depozit Subversion" + +msgid "Subversion python bindings could not be loaded" +msgstr "" + +#, python-format +msgid "Subversion python bindings %d.%d found, 1.4 or later required" +msgstr "" + +msgid "Subversion python bindings are too old, 1.4 or later required" +msgstr "" + +#, python-format +msgid "svn: revision %s is not an integer" +msgstr "" + +#, python-format +msgid "svn: start revision %s is not an integer" +msgstr "" + +#, python-format +msgid "no revision found in module %s" +msgstr "" + +#, python-format +msgid "expected %s to be at %r, but not found" +msgstr "" + +#, python-format +msgid "found %s at %r\n" +msgstr "" + +#, python-format +msgid "ignoring empty branch %s\n" +msgstr "" + +#, python-format +msgid "found branch %s at %d\n" +msgstr "" + +msgid "svn: start revision is not supported with more than one branch" +msgstr "" + +#, python-format +msgid "svn: no revision found after start revision %d" +msgstr "" + +#, python-format +msgid "%s not found up to revision %d" +msgstr "" + +msgid "scanning paths" +msgstr "" + +#, python-format +msgid "found parent of branch %s at %d: %s\n" +msgstr "" + +#, python-format +msgid "fetching revision log for \"%s\" from %d to %d\n" +msgstr "" + +#, python-format +msgid "svn: branch has no revision %s" +msgstr "" + +#, python-format +msgid "initializing svn repository %r\n" +msgstr "" + +#, python-format +msgid "initializing svn working copy %r\n" +msgstr "" + +msgid "unexpected svn output:\n" +msgstr "" + +msgid "unable to cope with svn output" +msgstr "" + +msgid "writing Subversion tags is not yet implemented\n" +msgstr "" + +msgid "automatically manage newlines in repository files" +msgstr "" + +msgid "" +"This extension allows you to manage the type of line endings (CRLF or\n" +"LF) that are used in the repository and in the local working\n" +"directory. That way you can get CRLF line endings on Windows and LF on\n" +"Unix/Mac, thereby letting everybody use their OS native line endings." +msgstr "" + +msgid "" +"The extension reads its configuration from a versioned ``.hgeol``\n" +"configuration file every time you run an ``hg`` command. The\n" +"``.hgeol`` file use the same syntax as all other Mercurial\n" +"configuration files. It uses two sections, ``[patterns]`` and\n" +"``[repository]``." +msgstr "" + +msgid "" +"The ``[patterns]`` section specifies the line endings used in the\n" +"working directory. The format is specified by a file pattern. The\n" +"first match is used, so put more specific patterns first. The\n" +"available line endings are ``LF``, ``CRLF``, and ``BIN``." +msgstr "" + +msgid "" +"Files with the declared format of ``CRLF`` or ``LF`` are always\n" +"checked out in that format and files declared to be binary (``BIN``)\n" +"are left unchanged. Additionally, ``native`` is an alias for the\n" +"platform's default line ending: ``LF`` on Unix (including Mac OS X)\n" +"and ``CRLF`` on Windows. Note that ``BIN`` (do nothing to line\n" +"endings) is Mercurial's default behaviour; it is only needed if you\n" +"need to override a later, more general pattern." +msgstr "" + +msgid "" +"The optional ``[repository]`` section specifies the line endings to\n" +"use for files stored in the repository. It has a single setting,\n" +"``native``, which determines the storage line endings for files\n" +"declared as ``native`` in the ``[patterns]`` section. It can be set to\n" +"``LF`` or ``CRLF``. The default is ``LF``. For example, this means\n" +"that on Windows, files configured as ``native`` (``CRLF`` by default)\n" +"will be converted to ``LF`` when stored in the repository. Files\n" +"declared as ``LF``, ``CRLF``, or ``BIN`` in the ``[patterns]`` section\n" +"are always stored as-is in the repository." +msgstr "" + +msgid "Example versioned ``.hgeol`` file::" +msgstr "" + +msgid "" +" [patterns]\n" +" **.py = native\n" +" **.vcproj = CRLF\n" +" **.txt = native\n" +" Makefile = LF\n" +" **.jpg = BIN" +msgstr "" + +msgid "" +" [repository]\n" +" native = LF" +msgstr "" + +msgid "" +"The extension uses an optional ``[eol]`` section in your hgrc file\n" +"(not the ``.hgeol`` file) for settings that control the overall\n" +"behavior. There are two settings:" +msgstr "" + +msgid "" +"- ``eol.native`` (default ``os.linesep``) can be set to ``LF`` or\n" +" ``CRLF`` override the default interpretation of ``native`` for\n" +" checkout. This can be used with :hg:`archive` on Unix, say, to\n" +" generate an archive where files have line endings for Windows." +msgstr "" + +msgid "" +"- ``eol.only-consistent`` (default True) can be set to False to make\n" +" the extension convert files with inconsistent EOLs. Inconsistent\n" +" means that there is both ``CRLF`` and ``LF`` present in the file.\n" +" Such files are normally not touched under the assumption that they\n" +" have mixed EOLs on purpose." +msgstr "" + +msgid "" +"See :hg:`help patterns` for more information about the glob patterns\n" +"used.\n" +msgstr "" + +#, python-format +msgid "%s should not have CRLF line endings" +msgstr "" + +#, python-format +msgid "%s should not have LF line endings" +msgstr "" + +msgid "the eol extension is incompatible with the win32text extension" +msgstr "" + +#, python-format +msgid "ignoring unknown EOL style '%s' from %s\n" +msgstr "" + +#, python-format +msgid "inconsistent newline style in %s\n" +msgstr "" + +msgid "command to allow external programs to compare revisions" +msgstr "" + +msgid "" +"The extdiff Mercurial extension allows you to use external programs\n" +"to compare revisions, or revision with working directory. The external\n" +"diff programs are called with a configurable set of options and two\n" +"non-option arguments: paths to directories containing snapshots of\n" +"files to compare." +msgstr "" + +msgid "" +"The extdiff extension also allows to configure new diff commands, so\n" +"you do not need to type :hg:`extdiff -p kdiff3` always. ::" +msgstr "" + +msgid "" +" [extdiff]\n" +" # add new command that runs GNU diff(1) in 'context diff' mode\n" +" cdiff = gdiff -Nprc5\n" +" ## or the old way:\n" +" #cmd.cdiff = gdiff\n" +" #opts.cdiff = -Nprc5" +msgstr "" + +msgid "" +" # add new command called vdiff, runs kdiff3\n" +" vdiff = kdiff3" +msgstr "" + +msgid "" +" # add new command called meld, runs meld (no need to name twice)\n" +" meld =" +msgstr "" + +msgid "" +" # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n" +" # (see http://www.vim.org/scripts/script.php?script_id=102) Non\n" +" # English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n" +" # your .vimrc\n" +" vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'" +msgstr "" + +msgid "Tool arguments can include variables that are expanded at runtime::" +msgstr "" + +msgid "" +" $parent1, $plabel1 - filename, descriptive label of first parent\n" +" $child, $clabel - filename, descriptive label of child revision\n" +" $parent2, $plabel2 - filename, descriptive label of second parent\n" +" $parent is an alias for $parent1." +msgstr "" + +msgid "" +"The extdiff extension will look in your [diff-tools] and [merge-tools]\n" +"sections for diff tool arguments, when none are specified in [extdiff]." +msgstr "" + +msgid "" +" [extdiff]\n" +" kdiff3 =" +msgstr "" + +msgid "" +" [diff-tools]\n" +" kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child" +msgstr "" + +msgid "" +"You can use -I/-X and list of file or directory names like normal\n" +":hg:`diff` command. The extdiff extension makes snapshots of only\n" +"needed files, so running the external diff program will actually be\n" +"pretty fast (at least faster than having to compare the entire tree).\n" +msgstr "" + +#, python-format +msgid "making snapshot of %d files from rev %s\n" +msgstr "" + +#, python-format +msgid "making snapshot of %d files from working directory\n" +msgstr "" + +msgid "cannot specify --rev and --change at the same time" +msgstr "" + +msgid "cleaning up temp directory\n" +msgstr "" + +msgid "use external program to diff repository (or selected files)" +msgstr "" + +msgid "" +" Show differences between revisions for the specified files, using\n" +" an external program. The default program used is diff, with\n" +" default options \"-Npru\"." +msgstr "" + +msgid "" +" To select a different program, use the -p/--program option. The\n" +" program will be passed the names of two directories to compare. To\n" +" pass additional options to the program, use -o/--option. These\n" +" will be passed before the names of the directories to compare." +msgstr "" + +msgid "" +" When two revision arguments are given, then changes are shown\n" +" between those revisions. If only one revision is specified then\n" +" that revision is compared to the working directory, and, when no\n" +" revisions are specified, the working directory files are compared\n" +" to its parent." +msgstr "" + +msgid "CMD" +msgstr "CMD" + +msgid "comparison program to run" +msgstr "" + +msgid "OPT" +msgstr "" + +msgid "pass option to comparison program" +msgstr "" + +msgid "change made by revision" +msgstr "" + +msgid "hg extdiff [OPT]... [FILE]..." +msgstr "" + +#, python-format +msgid "use %(path)s to diff repository (or selected files)" +msgstr "" + +#, python-format +msgid "" +" Show differences between revisions for the specified files, using\n" +" the %(path)s program." +msgstr "" + +#, python-format +msgid "hg %s [OPTION]... [FILE]..." +msgstr "hg %s [OPȚIUNE]... [FIȘIER]..." + +msgid "pull, update and merge in one command" +msgstr "" + +msgid "pull changes from a remote repository, merge new changes if needed." +msgstr "" + +msgid "" +" This finds all changes from the repository at the specified path\n" +" or URL and adds them to the local repository." +msgstr "" + +msgid "" +" If the pulled changes add a new branch head, the head is\n" +" automatically merged, and the result of the merge is committed.\n" +" Otherwise, the working directory is updated to include the new\n" +" changes." +msgstr "" + +msgid "" +" When a merge occurs, the newly pulled changes are assumed to be\n" +" \"authoritative\". The head of the new changes is used as the first\n" +" parent, with local changes as the second. To switch the merge\n" +" order, use --switch-parent." +msgstr "" + +msgid "" +" See :hg:`help dates` for a list of formats valid for -d/--date.\n" +" " +msgstr "" +" Vezi :hg:`help dates` pentru o listă de formate valide cu d/--date.\n" +" " + +msgid "" +"working dir not at branch tip (use \"hg update\" to check out branch tip)" +msgstr "" + +msgid "outstanding uncommitted merge" +msgstr "fuziune nedepozitată în suspensie" + +msgid "outstanding uncommitted changes" +msgstr "modificări nedepozitate în suspensie" + +msgid "working directory is missing some files" +msgstr "" + +msgid "" +"multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)" +msgstr "" + +#, python-format +msgid "pulling from %s\n" +msgstr "" + +msgid "" +"Other repository doesn't support revision lookup, so a rev cannot be " +"specified." +msgstr "" + +#, python-format +msgid "" +"not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge" +"\" to merge them)\n" +msgstr "" + +#, python-format +msgid "updating to %d:%s\n" +msgstr "se actualizează la %d:%s\n" + +#, python-format +msgid "merging with %d:%s\n" +msgstr "" + +#, python-format +msgid "new changeset %d:%s merges remote changes with local\n" +msgstr "" + +msgid "a specific revision you would like to pull" +msgstr "" + +msgid "edit commit message" +msgstr "" + +msgid "edit commit message (DEPRECATED)" +msgstr "" + +msgid "switch parents when merging" +msgstr "" + +msgid "hg fetch [SOURCE]" +msgstr "" + +msgid "commands to sign and verify changesets" +msgstr "" + +msgid "error while verifying signature" +msgstr "" + +#, python-format +msgid "%s Bad signature from \"%s\"\n" +msgstr "" + +#, python-format +msgid "%s Note: Signature has expired (signed by: \"%s\")\n" +msgstr "" + +#, python-format +msgid "%s Note: This key has expired (signed by: \"%s\")\n" +msgstr "" + +msgid "list signed changesets" +msgstr "" + +#, python-format +msgid "%s:%d node does not exist\n" +msgstr "" + +msgid "verify all the signatures there may be for a particular revision" +msgstr "" + +#, python-format +msgid "No valid signature for %s\n" +msgstr "" + +msgid "add a signature for the current or given revision" +msgstr "" + +msgid "" +" If no revision is given, the parent of the working directory is used,\n" +" or tip if no revision is checked out." +msgstr "" + +msgid "uncommitted merge - please provide a specific revision" +msgstr "" + +#, python-format +msgid "Signing %d:%s\n" +msgstr "" + +msgid "Error while signing" +msgstr "" + +msgid "" +"working copy of .hgsigs is changed (please commit .hgsigs manually or use --" +"force)" +msgstr "" + +msgid "unknown signature version" +msgstr "" + +msgid "make the signature local" +msgstr "" + +msgid "sign even if the sigfile is modified" +msgstr "" + +msgid "do not commit the sigfile after signing" +msgstr "" + +msgid "ID" +msgstr "" + +msgid "the key id to sign with" +msgstr "" + +msgid "TEXT" +msgstr "" + +msgid "commit message" +msgstr "" + +msgid "hg sign [OPTION]... [REVISION]..." +msgstr "hg sign [OPȚIUNE]... [REVIZIE].." + +msgid "hg sigcheck REVISION" +msgstr "" + +msgid "hg sigs" +msgstr "" + +msgid "command to view revision graphs from a shell" +msgstr "" + +msgid "" +"This extension adds a --graph option to the incoming, outgoing and log\n" +"commands. When this options is given, an ASCII representation of the\n" +"revision graph is also shown.\n" +msgstr "" + +#, python-format +msgid "--graph option is incompatible with --%s" +msgstr "" + +msgid "show revision history alongside an ASCII revision graph" +msgstr "afișează istoricul reviziilor împreună cu un graf ASCII al reviziilor" + +msgid "" +" Print a revision history alongside a revision graph drawn with\n" +" ASCII characters." +msgstr "" +" Afișează un istoric al reviziilor împreună cu un graf al reviziilor\n" +" desenat cu caractere ASCII." + +msgid "" +" Nodes printed as an @ character are parents of the working\n" +" directory.\n" +" " +msgstr "" +" Nodurile afișate cu un caracter @ sunt părinți ai directorului de " +"lucru.\n" +" " + +msgid "show the revision DAG" +msgstr "afișează graful (DAG) reviziilor" + +msgid "NUM" +msgstr "" + +msgid "limit number of changes displayed" +msgstr "limitează numărul de modificări afișat" + +msgid "show patch" +msgstr "afișează patch-ul" + +msgid "show the specified revision or range" +msgstr "afișează revizia sau intervalul specificat" + +msgid "hg glog [OPTION]... [FILE]" +msgstr "" + +msgid "hooks for integrating with the CIA.vc notification service" +msgstr "" + +msgid "" +"This is meant to be run as a changegroup or incoming hook. To\n" +"configure it, set the following options in your hgrc::" +msgstr "" + +msgid "" +" [cia]\n" +" # your registered CIA user name\n" +" user = foo\n" +" # the name of the project in CIA\n" +" project = foo\n" +" # the module (subproject) (optional)\n" +" #module = foo\n" +" # Append a diffstat to the log message (optional)\n" +" #diffstat = False\n" +" # Template to use for log messages (optional)\n" +" #template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n" +" # Style to use (optional)\n" +" #style = foo\n" +" # The URL of the CIA notification service (optional)\n" +" # You can use mailto: URLs to send by email, eg\n" +" # mailto:cia@cia.vc\n" +" # Make sure to set email.from if you do this.\n" +" #url = http://cia.vc/\n" +" # print message instead of sending it (optional)\n" +" #test = False" +msgstr "" + +msgid "" +" [hooks]\n" +" # one of these:\n" +" changegroup.cia = python:hgcia.hook\n" +" #incoming.cia = python:hgcia.hook" +msgstr "" + +msgid "" +" [web]\n" +" # If you want hyperlinks (optional)\n" +" baseurl = http://server/path/to/repo\n" +msgstr "" + +#, python-format +msgid "%s returned an error: %s" +msgstr "" + +#, python-format +msgid "hgcia: sending update to %s\n" +msgstr "" + +msgid "email.from must be defined when sending by email" +msgstr "" + +msgid "browse the repository in a graphical way" +msgstr "" + +msgid "" +"The hgk extension allows browsing the history of a repository in a\n" +"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n" +"distributed with Mercurial.)" +msgstr "" + +msgid "" +"hgk consists of two parts: a Tcl script that does the displaying and\n" +"querying of information, and an extension to Mercurial named hgk.py,\n" +"which provides hooks for hgk to get information. hgk can be found in\n" +"the contrib directory, and the extension is shipped in the hgext\n" +"repository, and needs to be enabled." +msgstr "" + +msgid "" +"The :hg:`view` command will launch the hgk Tcl script. For this command\n" +"to work, hgk must be in your search path. Alternately, you can specify\n" +"the path to hgk in your .hgrc file::" +msgstr "" + +msgid "" +" [hgk]\n" +" path=/location/of/hgk" +msgstr "" + +msgid "" +"hgk can make use of the extdiff extension to visualize revisions.\n" +"Assuming you had already configured extdiff vdiff command, just add::" +msgstr "" + +msgid "" +" [hgk]\n" +" vdiff=vdiff" +msgstr "" + +msgid "" +"Revisions context menu will now display additional entries to fire\n" +"vdiff on hovered and selected revisions.\n" +msgstr "" + +msgid "diff trees from two commits" +msgstr "" + +msgid "output common ancestor information" +msgstr "" + +msgid "cat a specific revision" +msgstr "" + +msgid "cat-file: type or revision not supplied\n" +msgstr "" + +msgid "aborting hg cat-file only understands commits\n" +msgstr "se abandonează hg cat-fișierul înțelege doar depozitări\n" + +msgid "parse given revisions" +msgstr "" + +msgid "print revisions" +msgstr "" + +msgid "print extension options" +msgstr "" + +msgid "start interactive history viewer" +msgstr "" + +msgid "hg view [-l LIMIT] [REVRANGE]" +msgstr "" + +msgid "generate patch" +msgstr "" + +msgid "recursive" +msgstr "" + +msgid "pretty" +msgstr "" + +msgid "stdin" +msgstr "" + +msgid "detect copies" +msgstr "" + +msgid "search" +msgstr "" + +msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..." +msgstr "" + +msgid "hg debug-cat-file [OPTION]... TYPE FILE" +msgstr "" + +msgid "hg debug-config" +msgstr "" + +msgid "hg debug-merge-base REV REV" +msgstr "" + +msgid "ignored" +msgstr "" + +msgid "hg debug-rev-parse REV" +msgstr "" + +msgid "header" +msgstr "" + +msgid "topo-order" +msgstr "" + +msgid "parents" +msgstr "" + +msgid "max-count" +msgstr "" + +msgid "hg debug-rev-list [OPTION]... REV..." +msgstr "" + +msgid "syntax highlighting for hgweb (requires Pygments)" +msgstr "" + +msgid "" +"It depends on the Pygments syntax highlighting library:\n" +"http://pygments.org/" +msgstr "" + +msgid "There is a single configuration option::" +msgstr "" + +msgid "" +" [web]\n" +" pygments_style =