From: Junio C Hamano Date: Wed, 25 Jun 2014 18:46:34 +0000 (-0700) Subject: Merge branch 'jx/blame-align-relative-time' into maint X-Git-Tag: v2.0.1~20 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6bf84263b3be507352f2edc9397e4ca6660be289?hp=dd75553b357d4483d2b58a9e1ac86352f3d2e103 Merge branch 'jx/blame-align-relative-time' into maint "git blame" miscounted number of columns needed to show localized timestamps, resulting in jaggy left-side-edge of the source code lines in its output. * jx/blame-align-relative-time: blame: dynamic blame_date_width for different locales blame: fix broken time_buf paddings in relative timestamp --- diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index dab5c61bfe..f424dbd75c 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -164,6 +164,16 @@ For C programs: * multi-line comment. */ + Note however that a comment that explains a translatable string to + translators uses a convention of starting with a magic token + "TRANSLATORS: " immediately after the opening delimiter, even when + it spans multiple lines. We do not add an asterisk at the beginning + of each line, either. E.g. + + /* TRANSLATORS: here is a comment that explains the string + to be translated, that follows immediately after it */ + _("Here is a translatable string explained by the above."); + - Double negation is often harder to understand than no negation at all. diff --git a/Documentation/RelNotes/1.9.3.txt b/Documentation/RelNotes/1.9.3.txt new file mode 100644 index 0000000000..17b05ca7b5 --- /dev/null +++ b/Documentation/RelNotes/1.9.3.txt @@ -0,0 +1,21 @@ +Git v1.9.3 Release Notes +======================== + +Fixes since v1.9.2 +------------------ + + * "git p4" dealing with changes in binary files were broken by a + change in 1.9 release. + + * The shell prompt script (in contrib/), when using the PROMPT_COMMAND + interface, used an unsafe construct when showing the branch name in + $PS1. + + * "git rebase" used a POSIX shell construct FreeBSD /bin/sh does not + work well with. + + * Some more Unicode codepoints defined in Unicode 6.3 as having + zero width have been taught to our display column counting logic. + + * Some tests used shell constructs that did not work well on + FreeBSD. diff --git a/Documentation/RelNotes/1.9.4.txt b/Documentation/RelNotes/1.9.4.txt new file mode 100644 index 0000000000..e1d1835436 --- /dev/null +++ b/Documentation/RelNotes/1.9.4.txt @@ -0,0 +1,16 @@ +Git v1.9.4 Release Notes +======================== + +Fixes since v1.9.3 +------------------ + + * Commands that take pathspecs on the command line misbehaved when + the pathspec is given as an absolute pathname (which is a + practice not particularly encouraged) that points at a symbolic + link in the working tree. + + * An earlier fix to the shell prompt script (in contrib/) for using + the PROMPT_COMMAND interface did not correctly check if the extra + code path needs to trigger, causing the branch name not to appear + when 'promptvars' option is disabled in bash or PROMPT_SUBST is + unset in zsh. diff --git a/Documentation/RelNotes/2.0.0.txt b/Documentation/RelNotes/2.0.0.txt index e310252452..2617372a0c 100644 --- a/Documentation/RelNotes/2.0.0.txt +++ b/Documentation/RelNotes/2.0.0.txt @@ -41,6 +41,11 @@ with "git diff-files --diff-filter=d"). "git request-pull" lost a few "heuristics" that often led to mistakes. +The default prefix for "git svn" has changed in Git 2.0. For a long +time, "git svn" created its remote-tracking branches directly under +refs/remotes, but it now places them under refs/remotes/origin/ unless +it is told otherwise with its "--prefix" option. + Updates since v1.9 series ------------------------- @@ -48,7 +53,11 @@ Updates since v1.9 series UI, Workflows & Features * The "multi-mail" post-receive hook (in contrib/) has been updated - to a more recent version from the upstream. + to a more recent version from upstream. + + * The "remote-hg/bzr" remote-helper interfaces (used to be in + contrib/) are no more. They are now maintained separately as + third-party plug-ins in their own repositories. * "git gc --aggressive" learned "--depth" option and "gc.aggressiveDepth" configuration variable to allow use of a less @@ -58,12 +67,13 @@ UI, Workflows & Features single strand-of-pearls is broken in its output. * The "rev-parse --parseopt" mechanism used by scripted Porcelains to - parse command line options and to give help text learned to take + parse command-line options and to give help text learned to take the argv-help (the placeholder string for an option parameter, e.g. "key-id" in "--gpg-sign="). * The pattern to find where the function begins in C/C++ used in - "diff" and "grep -p" have been updated to help C++ source better. + "diff" and "grep -p" has been updated to improve viewing C++ + sources. * "git rebase" learned to interpret a lone "-" as "@{-1}", the branch that we were previously on. @@ -74,7 +84,7 @@ UI, Workflows & Features "--sort=version:refname". * Discard the accumulated "heuristics" to guess from which branch the - result wants to be pulled from and make sure what the end user + result wants to be pulled from and make sure that what the end user specified is not second-guessed by "git request-pull", to avoid mistakes. When you pushed out your 'master' branch to your public repository as 'for-linus', use the new "master:for-linus" syntax to @@ -83,9 +93,9 @@ UI, Workflows & Features * "git grep" learned to behave in a way similar to native grep when "-h" (no header) and "-c" (count) options are given. - * transport-helper, fast-import and fast-export have been updated to - allow the ref mapping and ref deletion in a way similar to the - natively supported transports. + * "git push" via transport-helper interface has been updated to + allow forced ref updates in a way similar to the natively + supported transports. * The "simple" mode is the default for "git push". @@ -93,7 +103,7 @@ UI, Workflows & Features tree-wide operation even when run inside a subdirectory of a working tree. - * "git add is the same as "git add -A " now. + * "git add " is the same as "git add -A " now. * "core.statinfo" configuration variable, which is a never-advertised synonym to "core.checkstat", has been removed. @@ -109,30 +119,30 @@ UI, Workflows & Features * The progress indicators from various time-consuming commands have been marked for i18n/l10n. - * "git notes -C " diagnoses an attempt to use an object that - is not a blob as an error. + * "git notes -C " diagnoses as an error an attempt to use an + object that is not a blob. * "git config" learned to read from the standard input when "-" is given as the value to its "--file" parameter (attempting an - operation to update the configuration in the standard input of - course is rejected). + operation to update the configuration in the standard input is + rejected, of course). * Trailing whitespaces in .gitignore files, unless they are quoted for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly - speaking, this is a backward incompatible change, but very unlikely + speaking, this is a backward-incompatible change, but very unlikely to bite any sane user and adjusting should be obvious and easy. - * Many commands that create commits, e.g. "pull", "rebase", - learned to take the --gpg-sign option on the command line. + * Many commands that create commits, e.g. "pull" and "rebase", + learned to take the "--gpg-sign" option on the command line. * "git commit" can be told to always GPG sign the resulting commit - by setting "commit.gpgsign" configuration variable to true (the - command line option --no-gpg-sign should override it). + by setting the "commit.gpgsign" configuration variable to "true" + (the command-line option "--no-gpg-sign" should override it). * "git pull" can be told to only accept fast-forward by setting the - new "pull.ff" configuration. + new "pull.ff" configuration variable. - * "git reset" learned "-N" option, which does not reset the index + * "git reset" learned the "-N" option, which does not reset the index fully for paths the index knows about but the tree-ish the command resets to does not (these paths are kept as intend-to-add entries). @@ -147,15 +157,15 @@ Performance, Internal Implementation, etc. * Uses of curl's "multi" interface and "easy" interface do not mix well when we attempt to reuse outgoing connections. Teach the RPC - over http code, used in the smart HTTP transport, not to use the + over HTTP code, used in the smart HTTP transport, not to use the "easy" interface. * The bitmap-index feature from JGit has been ported, which should - significantly improve performance when serving objects form a + significantly improve performance when serving objects from a repository that uses it. * The way "git log --cc" shows a combined diff against multiple - parents have been optimized. + parents has been optimized. * The prefixcmp() and suffixcmp() functions are gone. Use starts_with() and ends_with(), and also consider if skip_prefix() @@ -174,13 +184,26 @@ Unless otherwise noted, all the fixes since v1.9 in the maintenance track are contained in this release (see the maintenance releases' notes for details). + * "git p4" was broken in 1.9 release to deal with changes in binary + files. + (merge 749b668 cl/p4-use-diff-tree later to maint). + + * The shell prompt script (in contrib/), when using the PROMPT_COMMAND + interface, used an unsafe construct when showing the branch name in + $PS1. + (merge 1e4119c8 rh/prompt-pcmode-avoid-eval-on-refname later to maint). + + * "git rebase" used a POSIX shell construct FreeBSD's /bin/sh does not + work well with. + (merge 8cd6596 km/avoid-non-function-return-in-rebase later to maint). + * zsh prompt (in contrib/) leaked unnecessary error messages. - * bash completion (in contrib/) did not complete the refs and remotes + * Bash completion (in contrib/) did not complete the refs and remotes correctly given "git pu" when "pu" is aliased to "push". - * Some more Unicode codepoints defined in Unicode 6.3 as having zero - width have been taught to our display column counting logic. + * Some more Unicode code points, defined in Unicode 6.3 as having zero + width, have been taught to our display column counting logic. (merge d813ab9 tb/unicode-6.3-zero-width later to maint). * Some tests used shell constructs that did not work well on FreeBSD @@ -194,7 +217,7 @@ notes for details). * "git diff --no-index -Mq a b" fell into an infinite loop. (merge ad1c3fb jc/fix-diff-no-index-diff-opt-parse later to maint). - * "git fetch --prune", when the right-hand-side of multiple fetch + * "git fetch --prune", when the right-hand side of multiple fetch refspecs overlap (e.g. storing "refs/heads/*" to "refs/remotes/origin/*", while storing "refs/frotz/*" to "refs/remotes/origin/fr/*"), aggressively thought that lack of @@ -249,7 +272,7 @@ notes for details). (merge 3c3e6f5 rr/doc-merge-strategies later to maint). * Serving objects from a shallow repository needs to write a - new file to hold the temporary shallow boundaries but it was not + new file to hold the temporary shallow boundaries, but it was not cleaned when we exit due to die() or a signal. (merge 7839632 jk/shallow-update-fix later to maint). @@ -272,19 +295,19 @@ notes for details). ".git" tells us where it is. (merge fcfec8b da/difftool-git-files later to maint). - * "git push" did not pay attention to branch.*.pushremote if it is - defined earlier than remote.pushdefault; the order of these two + * "git push" did not pay attention to "branch.*.pushremote" if it is + defined earlier than "remote.pushdefault"; the order of these two variables in the configuration file should not matter, but it did by mistake. (merge 98b406f jk/remote-pushremote-config-reading later to maint). - * Codepaths that parse timestamps in commit objects have been + * Code paths that parse timestamps in commit objects have been tightened. (merge f80d1f9 jk/commit-dates-parsing-fix later to maint). * "git diff --external-diff" incorrectly fed the submodule directory - in the working tree to the external diff driver when it knew it is - the same as one of the versions being compared. + in the working tree to the external diff driver when it knew that it + is the same as one of the versions being compared. (merge aba4727 tr/diff-submodule-no-reuse-worktree later to maint). * "git reset" needs to refresh the index when working in a working @@ -295,7 +318,7 @@ notes for details). * "git check-attr" when working on a repository with a working tree did not work well when the working tree was specified via the - --work-tree (and obviously with --git-dir) option. + "--work-tree" (and obviously with "--git-dir") option. (merge cdbf623 jc/check-attr-honor-working-tree later to maint). * "merge-recursive" was broken in 1.7.7 era and stopped working in @@ -303,12 +326,12 @@ notes for details). involved. This has been corrected. (merge 6e2068a bk/refresh-missing-ok-in-merge-recursive later to maint.) - * "git rev-parse" was loose in rejecting command line arguments + * "git rev-parse" was loose in rejecting command-line arguments that do not make sense, e.g. "--default" without the required value for that option. (merge a43219f ds/rev-parse-required-args later to maint.) - * include.path variable (or any variable that expects a path that + * "include.path" variable (or any variable that expects a path that can use ~username expansion) in the configuration file is not a boolean, but the code failed to check it. (merge 67beb60 jk/config-path-include-fix later to maint.) @@ -317,23 +340,23 @@ notes for details). the pathspec is given as an absolute pathname (which is a practice not particularly encouraged) that points at a symbolic link in the working tree. - (merge later 655ee9e mw/symlinks to maint.) + (merge 6127ff6 mw/symlinks later to maint.) * "git diff --quiet -- pathspec1 pathspec2" sometimes did not return - correct status value. + the correct status value. (merge f34b205 nd/diff-quiet-stat-dirty later to maint.) * Attempting to deepen a shallow repository by fetching over smart - HTTP transport failed in the protocol exchange, when no-done + HTTP transport failed in the protocol exchange, when the no-done extension was used. The fetching side waited for the list of - shallow boundary commits after the sending end stopped talking to + shallow boundary commits after the sending side stopped talking to it. (merge 0232852 nd/http-fetch-shallow-fix later to maint.) * Allow "git cmd path/", when the 'path' is where a submodule is bound to the top-level working tree, to match 'path', despite the extra and unnecessary trailing slash (such a slash is often - given by command line completion). + given by command-line completion). (merge 2e70c01 nd/submodule-pathspec-ending-with-slash later to maint.) * Documentation and in-code comments had many instances of mistaken diff --git a/Documentation/config.txt b/Documentation/config.txt index d8b6cc9654..1932e9b9a2 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1340,6 +1340,10 @@ gui.diffcontext:: Specifies how many context lines should be used in calls to diff made by the linkgit:git-gui[1]. The default is "5". +gui.displayuntracked:: + Determines if linkgit::git-gui[1] shows untracked files + in the file list. The default is "true". + gui.encoding:: Specifies the default encoding to use for displaying of file contents in linkgit:git-gui[1] and linkgit:gitk[1]. diff --git a/Documentation/git-shell.txt b/Documentation/git-shell.txt index c35051ba58..e4bdd2235c 100644 --- a/Documentation/git-shell.txt +++ b/Documentation/git-shell.txt @@ -66,7 +66,7 @@ EXAMPLE ------- To disable interactive logins, displaying a greeting instead: -+ + ---------------- $ chsh -s /usr/bin/git-shell $ mkdir $HOME/git-shell-commands diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index 30c5ee2564..fce585388c 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -86,13 +86,14 @@ COMMANDS (refs/remotes/$remote/*). Setting a prefix is also useful if you wish to track multiple projects that share a common repository. + By default, the prefix is set to 'origin/'. + -NOTE: In Git v2.0, the default prefix will CHANGE from "" (no prefix) -to "origin/". This is done to put SVN-tracking refs at -"refs/remotes/origin/*" instead of "refs/remotes/*", and make them -more compatible with how Git's own remote-tracking refs are organized -(i.e. refs/remotes/$remote/*). You can enjoy the same benefits today, -by using the --prefix option. +NOTE: Before Git v2.0, the default prefix was "" (no prefix). This +meant that SVN-tracking refs were put at "refs/remotes/*", which is +incompatible with how Git's own remote-tracking refs are organized. +If you still want the old default, you can get it by passing +`--prefix ""` on the command line (`--prefix=""` may not work if +your Perl's Getopt::Long is < v2.37). --ignore-paths=;; When passed to 'init' or 'clone' this regular expression will @@ -994,16 +995,6 @@ without giving any repository layout options. If the full history with branches and tags is required, the options '--trunk' / '--branches' / '--tags' must be used. -When using the options for describing the repository layout (--trunk, ---tags, --branches, --stdlayout), please also specify the --prefix -option (e.g. '--prefix=origin/') to cause your SVN-tracking refs to be -placed at refs/remotes/origin/* rather than the default refs/remotes/*. -The former is more compatible with the layout of Git's "regular" -remote-tracking refs (refs/remotes/$remote/*), and may potentially -prevent similarly named SVN branches and Git remotes from clobbering -each other. In Git v2.0 the default prefix used (i.e. when no --prefix -is given) will change from "" (no prefix) to "origin/". - When using multiple --branches or --tags, 'git svn' does not automatically handle name collisions (for example, if two branches from different paths have the same name, or if a branch and a tag have the same name). In these cases, diff --git a/Documentation/git.txt b/Documentation/git.txt index 35eb677ce0..b075e0bed5 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -43,9 +43,16 @@ unreleased) version of Git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.9.2/git.html[documentation for release 1.9.2] +* link:v2.0.0/git.html[documentation for release 2.0] * release notes for + link:RelNotes/2.0.0.txt[2.0.0]. + +* link:v1.9.4/git.html[documentation for release 1.9.4] + +* release notes for + link:RelNotes/1.9.4.txt[1.9.4], + link:RelNotes/1.9.3.txt[1.9.3], link:RelNotes/1.9.2.txt[1.9.2], link:RelNotes/1.9.1.txt[1.9.1], link:RelNotes/1.9.0.txt[1.9.0]. diff --git a/Documentation/howto-index.sh b/Documentation/howto-index.sh index a2340864b5..167b363668 100755 --- a/Documentation/howto-index.sh +++ b/Documentation/howto-index.sh @@ -11,8 +11,8 @@ EOF for txt do - title=`expr "$txt" : '.*/\(.*\)\.txt$'` - from=`sed -ne ' + title=$(expr "$txt" : '.*/\(.*\)\.txt$') + from=$(sed -ne ' /^$/q /^From:[ ]/{ s/// @@ -21,9 +21,9 @@ do s/^/by / p } - ' "$txt"` + ' "$txt") - abstract=`sed -ne ' + abstract=$(sed -ne ' /^Abstract:[ ]/{ s/^[^ ]*// x @@ -39,11 +39,11 @@ do x p q - }' "$txt"` + }' "$txt") if grep 'Content-type: text/asciidoc' >/dev/null $txt then - file=`expr "$txt" : '\(.*\)\.txt$'`.html + file=$(expr "$txt" : '\(.*\)\.txt$').html else file="$txt" fi diff --git a/Documentation/install-webdoc.sh b/Documentation/install-webdoc.sh index 76d69a907b..ed8b4ff3e5 100755 --- a/Documentation/install-webdoc.sh +++ b/Documentation/install-webdoc.sh @@ -18,17 +18,17 @@ do else echo >&2 "# install $h $T/$h" rm -f "$T/$h" - mkdir -p `dirname "$T/$h"` + mkdir -p $(dirname "$T/$h") cp "$h" "$T/$h" fi done -strip_leading=`echo "$T/" | sed -e 's|.|.|g'` +strip_leading=$(echo "$T/" | sed -e 's|.|.|g') for th in \ "$T"/*.html "$T"/*.txt \ "$T"/howto/*.txt "$T"/howto/*.html \ "$T"/technical/*.txt "$T"/technical/*.html do - h=`expr "$th" : "$strip_leading"'\(.*\)'` + h=$(expr "$th" : "$strip_leading"'\(.*\)') case "$h" in RelNotes-*.txt | index.html) continue ;; esac diff --git a/Documentation/technical/api-hashmap.txt b/Documentation/technical/api-hashmap.txt index 42ca2347ed..b977ae8bbb 100644 --- a/Documentation/technical/api-hashmap.txt +++ b/Documentation/technical/api-hashmap.txt @@ -166,7 +166,6 @@ Usage example ------------- Here's a simple usage example that maps long keys to double values. -[source,c] ------------ struct hashmap map; diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 5b367ab7fe..5d6dc5b4c6 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.0.0-rc0 +DEF_VER=v2.0.0 LF=' ' diff --git a/Makefile b/Makefile index 2128ce3ea2..a53f3a8326 100644 --- a/Makefile +++ b/Makefile @@ -2102,7 +2102,7 @@ pdf: XGETTEXT_FLAGS = \ --force-po \ - --add-comments \ + --add-comments=TRANSLATORS: \ --msgid-bugs-address="Git Mailing List " \ --from-code=UTF-8 XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \ diff --git a/builtin/apply.c b/builtin/apply.c index 87439fad11..9c5724eacc 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -300,11 +300,13 @@ static int fuzzy_matchlines(const char *s1, size_t n1, while ((*last2 == '\r') || (*last2 == '\n')) last2--; - /* skip leading whitespace */ - while (isspace(*s1) && (s1 <= last1)) - s1++; - while (isspace(*s2) && (s2 <= last2)) - s2++; + /* skip leading whitespaces, if both begin with whitespace */ + if (s1 <= last1 && s2 <= last2 && isspace(*s1) && isspace(*s2)) { + while (isspace(*s1) && (s1 <= last1)) + s1++; + while (isspace(*s2) && (s2 <= last2)) + s2++; + } /* early return if both lines are empty */ if ((s1 > last1) && (s2 > last2)) return 1; diff --git a/builtin/init-db.c b/builtin/init-db.c index c7c76bbf21..56f85e239a 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -412,11 +412,9 @@ int init_db(const char *template_dir, unsigned int flags) if (!(flags & INIT_DB_QUIET)) { int len = strlen(git_dir); - /* - * TRANSLATORS: The first '%s' is either "Reinitialized - * existing" or "Initialized empty", the second " shared" or - * "", and the last '%s%s' is the verbatim directory name. - */ + /* TRANSLATORS: The first '%s' is either "Reinitialized + existing" or "Initialized empty", the second " shared" or + "", and the last '%s%s' is the verbatim directory name. */ printf(_("%s%s Git repository in %s%s\n"), reinit ? _("Reinitialized existing") : _("Initialized empty"), shared_repository ? _(" shared") : "", diff --git a/builtin/update-index.c b/builtin/update-index.c index ba54e19cd5..ebea285e1b 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -637,6 +637,9 @@ static int parse_new_style_cacheinfo(const char *arg, unsigned long ul; char *endp; + if (!arg) + return -1; + errno = 0; ul = strtoul(arg, &endp, 8); if (errno || endp == arg || *endp != ',' || (unsigned int) ul != ul) diff --git a/config.c b/config.c index a30cb5c07d..5272fc6f0b 100644 --- a/config.c +++ b/config.c @@ -952,7 +952,7 @@ static int git_default_push_config(const char *var, const char *value) static int git_default_mailmap_config(const char *var, const char *value) { if (!strcmp(var, "mailmap.file")) - return git_config_string(&git_mailmap_file, var, value); + return git_config_pathname(&git_mailmap_file, var, value); if (!strcmp(var, "mailmap.blob")) return git_config_string(&git_mailmap_blob, var, value); diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 2c59a76bc2..019026efcb 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1472,9 +1472,12 @@ _git_log () __git_complete_revlist } +# Common merge options shared by git-merge(1) and git-pull(1). __git_merge_options=" --no-commit --no-stat --log --no-log --squash --strategy --commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit + --verify-signatures --no-verify-signatures --gpg-sign + --quiet --verbose --progress --no-progress " _git_merge () @@ -1483,7 +1486,8 @@ _git_merge () case "$cur" in --*) - __gitcomp "$__git_merge_options" + __gitcomp "$__git_merge_options + --rerere-autoupdate --no-rerere-autoupdate --abort" return esac __gitcomp_nl "$(__git_refs)" diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index 54489080f8..9d684b10a6 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@ -207,7 +207,16 @@ __git_ps1_show_upstream () p=" u+${count#* }-${count% *}" ;; esac if [[ -n "$count" && -n "$name" ]]; then - p="$p $(git rev-parse --abbrev-ref "$upstream" 2>/dev/null)" + __git_ps1_upstream_name=$(git rev-parse \ + --abbrev-ref "$upstream" 2>/dev/null) + if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then + p="$p \${__git_ps1_upstream_name}" + else + p="$p ${__git_ps1_upstream_name}" + # not needed anymore; keep user's + # environment clean + unset __git_ps1_upstream_name + fi fi fi @@ -259,7 +268,7 @@ __git_ps1_colorize_gitstring () r="$c_clear$r" } -eread () +__git_eread () { f="$1" shift @@ -297,6 +306,43 @@ __git_ps1 () ;; esac + # ps1_expanded: This variable is set to 'yes' if the shell + # subjects the value of PS1 to parameter expansion: + # + # * bash does unless the promptvars option is disabled + # * zsh does not unless the PROMPT_SUBST option is set + # * POSIX shells always do + # + # If the shell would expand the contents of PS1 when drawing + # the prompt, a raw ref name must not be included in PS1. + # This protects the user from arbitrary code execution via + # specially crafted ref names. For example, a ref named + # 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the + # shell to execute 'sudo rm -rf /' when the prompt is drawn. + # + # Instead, the ref name should be placed in a separate global + # variable (in the __git_ps1_* namespace to avoid colliding + # with the user's environment) and that variable should be + # referenced from PS1. For example: + # + # __git_ps1_foo=$(do_something_to_get_ref_name) + # PS1="...stuff...\${__git_ps1_foo}...stuff..." + # + # If the shell does not expand the contents of PS1, the raw + # ref name must be included in PS1. + # + # The value of this variable is only relevant when in pcmode. + # + # Assume that the shell follows the POSIX specification and + # expands PS1 unless determined otherwise. (This is more + # likely to be correct if the user has a non-bash, non-zsh + # shell and safer than the alternative if the assumption is + # incorrect.) + # + local ps1_expanded=yes + [ -z "$ZSH_VERSION" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no + [ -z "$BASH_VERSION" ] || shopt -q promptvars || ps1_expanded=no + local repo_info rev_parse_exit_code repo_info="$(git rev-parse --git-dir --is-inside-git-dir \ --is-bare-repository --is-inside-work-tree \ @@ -328,9 +374,9 @@ __git_ps1 () local step="" local total="" if [ -d "$g/rebase-merge" ]; then - eread "$g/rebase-merge/head-name" b - eread "$g/rebase-merge/msgnum" step - eread "$g/rebase-merge/end" total + __git_eread "$g/rebase-merge/head-name" b + __git_eread "$g/rebase-merge/msgnum" step + __git_eread "$g/rebase-merge/end" total if [ -f "$g/rebase-merge/interactive" ]; then r="|REBASE-i" else @@ -338,10 +384,10 @@ __git_ps1 () fi else if [ -d "$g/rebase-apply" ]; then - eread "$g/rebase-apply/next" step - eread "$g/rebase-apply/last" total + __git_eread "$g/rebase-apply/next" step + __git_eread "$g/rebase-apply/last" total if [ -f "$g/rebase-apply/rebasing" ]; then - eread "$g/rebase-apply/head-name" b + __git_eread "$g/rebase-apply/head-name" b r="|REBASE" elif [ -f "$g/rebase-apply/applying" ]; then r="|AM" @@ -365,7 +411,7 @@ __git_ps1 () b="$(git symbolic-ref HEAD 2>/dev/null)" else local head="" - if ! eread "$g/HEAD" head; then + if ! __git_eread "$g/HEAD" head; then if [ $pcmode = yes ]; then PS1="$ps1pc_start$ps1pc_end" fi @@ -445,8 +491,14 @@ __git_ps1 () __git_ps1_colorize_gitstring fi + b=${b##refs/heads/} + if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then + __git_ps1_branch_name=$b + b="\${__git_ps1_branch_name}" + fi + local f="$w$i$s$u" - local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p" + local gitstring="$c$b${f:+$z$f}$r$p" if [ $pcmode = yes ]; then if [ "${__git_printf_supports_v-}" != yes ]; then diff --git a/contrib/examples/git-checkout.sh b/contrib/examples/git-checkout.sh index d2c1f98b86..683cae7c3f 100755 --- a/contrib/examples/git-checkout.sh +++ b/contrib/examples/git-checkout.sh @@ -222,7 +222,7 @@ else # Match the index to the working tree, and do a three-way. git diff-files --name-only | git update-index --remove --stdin && - work=`git write-tree` && + work=$(git write-tree) && git read-tree $v --reset -u $new || exit eval GITHEAD_$new='${new_name:-${branch:-$new}}' && @@ -233,7 +233,7 @@ else # Do not register the cleanly merged paths in the index yet. # this is not a real merge before committing, but just carrying # the working tree changes along. - unmerged=`git ls-files -u` + unmerged=$(git ls-files -u) git read-tree $v --reset $new case "$unmerged" in '') ;; @@ -269,7 +269,7 @@ if [ "$?" -eq 0 ]; then fi if test -n "$branch" then - old_branch_name=`expr "z$oldbranch" : 'zrefs/heads/\(.*\)'` + old_branch_name=$(expr "z$oldbranch" : 'zrefs/heads/\(.*\)') GIT_DIR="$GIT_DIR" git symbolic-ref -m "checkout: moving from ${old_branch_name:-$old} to $branch" HEAD "refs/heads/$branch" if test -n "$quiet" then @@ -282,7 +282,7 @@ if [ "$?" -eq 0 ]; then fi elif test -n "$detached" then - old_branch_name=`expr "z$oldbranch" : 'zrefs/heads/\(.*\)'` + old_branch_name=$(expr "z$oldbranch" : 'zrefs/heads/\(.*\)') git update-ref --no-deref -m "checkout: moving from ${old_branch_name:-$old} to $arg" HEAD "$detached" || die "Cannot detach HEAD" if test -n "$detach_warn" diff --git a/contrib/examples/git-clone.sh b/contrib/examples/git-clone.sh index 547228e13c..b4c9376a2c 100755 --- a/contrib/examples/git-clone.sh +++ b/contrib/examples/git-clone.sh @@ -40,7 +40,7 @@ eval "$(echo "$OPTIONS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?) get_repo_base() { ( - cd "`/bin/pwd`" && + cd "$(/bin/pwd)" && cd "$1" || cd "$1.git" && { cd .git @@ -50,7 +50,7 @@ get_repo_base() { } if [ -n "$GIT_SSL_NO_VERIFY" -o \ - "`git config --bool http.sslVerify`" = false ]; then + "$(git config --bool http.sslVerify)" = false ]; then curl_extra_args="-k" fi @@ -70,7 +70,7 @@ clone_dumb_http () { clone_tmp="$GIT_DIR/clone-tmp" && mkdir -p "$clone_tmp" || exit 1 if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \ - "`git config --bool http.noEPSV`" = true ]; then + "$(git config --bool http.noEPSV)" = true ]; then curl_extra_args="${curl_extra_args} --disable-epsv" fi http_fetch "$1/info/refs" "$clone_tmp/refs" || @@ -79,7 +79,7 @@ Perhaps git-update-server-info needs to be run there?" test "z$quiet" = z && v=-v || v= while read sha1 refname do - name=`expr "z$refname" : 'zrefs/\(.*\)'` && + name=$(expr "z$refname" : 'zrefs/\(.*\)') && case "$name" in *^*) continue;; esac @@ -88,7 +88,7 @@ Perhaps git-update-server-info needs to be run there?" *) continue ;; esac if test -n "$use_separate_remote" && - branch_name=`expr "z$name" : 'zheads/\(.*\)'` + branch_name=$(expr "z$name" : 'zheads/\(.*\)') then tname="remotes/$origin/$branch_name" else @@ -100,7 +100,7 @@ Perhaps git-update-server-info needs to be run there?" http_fetch "$1/HEAD" "$GIT_DIR/REMOTE_HEAD" || rm -f "$GIT_DIR/REMOTE_HEAD" if test -f "$GIT_DIR/REMOTE_HEAD"; then - head_sha1=`cat "$GIT_DIR/REMOTE_HEAD"` + head_sha1=$(cat "$GIT_DIR/REMOTE_HEAD") case "$head_sha1" in 'ref: refs/'*) ;; @@ -444,15 +444,15 @@ then # a non-bare repository is always in separate-remote layout remote_top="refs/remotes/$origin" head_sha1= - test ! -r "$GIT_DIR/REMOTE_HEAD" || head_sha1=`cat "$GIT_DIR/REMOTE_HEAD"` + test ! -r "$GIT_DIR/REMOTE_HEAD" || head_sha1=$(cat "$GIT_DIR/REMOTE_HEAD") case "$head_sha1" in 'ref: refs/'*) # Uh-oh, the remote told us (http transport done against # new style repository with a symref HEAD). # Ideally we should skip the guesswork but for now # opt for minimum change. - head_sha1=`expr "z$head_sha1" : 'zref: refs/heads/\(.*\)'` - head_sha1=`cat "$GIT_DIR/$remote_top/$head_sha1"` + head_sha1=$(expr "z$head_sha1" : 'zref: refs/heads/\(.*\)') + head_sha1=$(cat "$GIT_DIR/$remote_top/$head_sha1") ;; esac @@ -467,7 +467,7 @@ then while read name do test t = $done && continue - branch_tip=`cat "$GIT_DIR/$remote_top/$name"` + branch_tip=$(cat "$GIT_DIR/$remote_top/$name") if test "$head_sha1" = "$branch_tip" then echo "$name" diff --git a/contrib/examples/git-commit.sh b/contrib/examples/git-commit.sh index 4aab1a6d21..5cafe2eb77 100755 --- a/contrib/examples/git-commit.sh +++ b/contrib/examples/git-commit.sh @@ -91,7 +91,7 @@ signoff= force_author= only_include_assumed= untracked_files= -templatefile="`git config commit.template`" +templatefile="$(git config commit.template)" while test $# != 0 do case "$1" in @@ -350,7 +350,7 @@ t,) TMP_INDEX="$GIT_DIR/tmp-index$$" W= test -z "$initial_commit" && W=--with-tree=HEAD - commit_only=`git ls-files --error-unmatch $W -- "$@"` || exit + commit_only=$(git ls-files --error-unmatch $W -- "$@") || exit # Build a temporary index and update the real index # the same way. @@ -475,8 +475,8 @@ then fi if test '' != "$force_author" then - GIT_AUTHOR_NAME=`expr "z$force_author" : 'z\(.*[^ ]\) *<.*'` && - GIT_AUTHOR_EMAIL=`expr "z$force_author" : '.*\(<.*\)'` && + GIT_AUTHOR_NAME=$(expr "z$force_author" : 'z\(.*[^ ]\) *<.*') && + GIT_AUTHOR_EMAIL=$(expr "z$force_author" : '.*\(<.*\)') && test '' != "$GIT_AUTHOR_NAME" && test '' != "$GIT_AUTHOR_EMAIL" || die "malformed --author parameter" @@ -489,7 +489,7 @@ then rloga='commit' if [ -f "$GIT_DIR/MERGE_HEAD" ]; then rloga='commit (merge)' - PARENTS="-p HEAD "`sed -e 's/^/-p /' "$GIT_DIR/MERGE_HEAD"` + PARENTS="-p HEAD "$(sed -e 's/^/-p /' "$GIT_DIR/MERGE_HEAD") elif test -n "$amend"; then rloga='commit (amend)' PARENTS=$(git cat-file commit HEAD | diff --git a/contrib/examples/git-fetch.sh b/contrib/examples/git-fetch.sh index a314273bd5..554070909c 100755 --- a/contrib/examples/git-fetch.sh +++ b/contrib/examples/git-fetch.sh @@ -67,7 +67,7 @@ do keep='-k -k' ;; --depth=*) - shallow_depth="--depth=`expr "z$1" : 'z-[^=]*=\(.*\)'`" + shallow_depth="--depth=$(expr "z$1" : 'z-[^=]*=\(.*\)')" ;; --depth) shift @@ -262,12 +262,12 @@ fetch_per_ref () { http://* | https://* | ftp://*) test -n "$shallow_depth" && die "shallow clone with http not supported" - proto=`expr "$remote" : '\([^:]*\):'` + proto=$(expr "$remote" : '\([^:]*\):') if [ -n "$GIT_SSL_NO_VERIFY" ]; then curl_extra_args="-k" fi if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \ - "`git config --bool http.noEPSV`" = true ]; then + "$(git config --bool http.noEPSV)" = true ]; then noepsv_opt="--disable-epsv" fi diff --git a/contrib/examples/git-ls-remote.sh b/contrib/examples/git-ls-remote.sh index fec70bbf88..2aa89a7df8 100755 --- a/contrib/examples/git-ls-remote.sh +++ b/contrib/examples/git-ls-remote.sh @@ -55,11 +55,11 @@ tmpdir=$tmp-d case "$peek_repo" in http://* | https://* | ftp://* ) if [ -n "$GIT_SSL_NO_VERIFY" -o \ - "`git config --bool http.sslVerify`" = false ]; then + "$(git config --bool http.sslVerify)" = false ]; then curl_extra_args="-k" fi if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \ - "`git config --bool http.noEPSV`" = true ]; then + "$(git config --bool http.noEPSV)" = true ]; then curl_extra_args="${curl_extra_args} --disable-epsv" fi curl -nsf $curl_extra_args --header "Pragma: no-cache" "$peek_repo/info/refs" || diff --git a/contrib/examples/git-merge.sh b/contrib/examples/git-merge.sh index a5e42a9f01..7e40f40c78 100755 --- a/contrib/examples/git-merge.sh +++ b/contrib/examples/git-merge.sh @@ -341,7 +341,7 @@ case "$use_strategies" in '') case "$#" in 1) - var="`git config --get pull.twohead`" + var="$(git config --get pull.twohead)" if test -n "$var" then use_strategies="$var" @@ -349,7 +349,7 @@ case "$use_strategies" in use_strategies="$default_twohead_strategies" fi ;; *) - var="`git config --get pull.octopus`" + var="$(git config --get pull.octopus)" if test -n "$var" then use_strategies="$var" diff --git a/contrib/examples/git-repack.sh b/contrib/examples/git-repack.sh index 757933174e..f312405a25 100755 --- a/contrib/examples/git-repack.sh +++ b/contrib/examples/git-repack.sh @@ -49,7 +49,7 @@ do shift done -case "`git config --bool repack.usedeltabaseoffset || echo true`" in +case "$(git config --bool repack.usedeltabaseoffset || echo true)" in true) extra="$extra --delta-base-offset" ;; esac diff --git a/contrib/examples/git-resolve.sh b/contrib/examples/git-resolve.sh index 8f98142f77..48d0fc971f 100755 --- a/contrib/examples/git-resolve.sh +++ b/contrib/examples/git-resolve.sh @@ -75,7 +75,7 @@ case "$common" in GIT_INDEX_FILE=$G git read-tree -m $c $head $merge \ 2>/dev/null || continue # Count the paths that are unmerged. - cnt=`GIT_INDEX_FILE=$G git ls-files --unmerged | wc -l` + cnt=$(GIT_INDEX_FILE=$G git ls-files --unmerged | wc -l) if test $best_cnt -le 0 -o $cnt -le $best_cnt then best=$c diff --git a/contrib/examples/git-revert.sh b/contrib/examples/git-revert.sh index 6bf155cbdb..7e2aad5491 100755 --- a/contrib/examples/git-revert.sh +++ b/contrib/examples/git-revert.sh @@ -137,7 +137,7 @@ cherry-pick) q }' - logmsg=`git show -s --pretty=raw --encoding="$encoding" "$commit"` + logmsg=$(git show -s --pretty=raw --encoding="$encoding" "$commit") set_author_env=`echo "$logmsg" | LANG=C LC_ALL=C sed -ne "$pick_author_script"` eval "$set_author_env" diff --git a/contrib/examples/git-tag.sh b/contrib/examples/git-tag.sh index 2c15bc955b..1bd8f3c58d 100755 --- a/contrib/examples/git-tag.sh +++ b/contrib/examples/git-tag.sh @@ -156,7 +156,7 @@ prev=0000000000000000000000000000000000000000 if git show-ref --verify --quiet -- "refs/tags/$name" then test -n "$force" || die "tag '$name' already exists" - prev=`git rev-parse "refs/tags/$name"` + prev=$(git rev-parse "refs/tags/$name") fi shift git check-ref-format "tags/$name" || diff --git a/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh b/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh index 811a90c9ae..22f069db48 100755 --- a/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh +++ b/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh @@ -191,10 +191,10 @@ test_expect_success 'Git clone works with the shallow option' ' test_path_is_file mw_dir_11/Main_Page.mw && ( cd mw_dir_11 && - test `git log --oneline Nyan.mw | wc -l` -eq 1 && - test `git log --oneline Foo.mw | wc -l` -eq 1 && - test `git log --oneline Bar.mw | wc -l` -eq 1 && - test `git log --oneline Main_Page.mw | wc -l ` -eq 1 + test $(git log --oneline Nyan.mw | wc -l) -eq 1 && + test $(git log --oneline Foo.mw | wc -l) -eq 1 && + test $(git log --oneline Bar.mw | wc -l) -eq 1 && + test $(git log --oneline Main_Page.mw | wc -l ) -eq 1 ) && wiki_check_content mw_dir_11/Nyan.mw Nyan && wiki_check_content mw_dir_11/Foo.mw Foo && @@ -218,9 +218,9 @@ test_expect_success 'Git clone works with the shallow option with a delete page' test_path_is_file mw_dir_12/Main_Page.mw && ( cd mw_dir_12 && - test `git log --oneline Nyan.mw | wc -l` -eq 1 && - test `git log --oneline Bar.mw | wc -l` -eq 1 && - test `git log --oneline Main_Page.mw | wc -l ` -eq 1 + test $(git log --oneline Nyan.mw | wc -l) -eq 1 && + test $(git log --oneline Bar.mw | wc -l) -eq 1 && + test $(git log --oneline Main_Page.mw | wc -l ) -eq 1 ) && wiki_check_content mw_dir_12/Nyan.mw Nyan && wiki_check_content mw_dir_12/Bar.mw Bar && diff --git a/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh b/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh index 37021e200a..6b0dbdac4d 100755 --- a/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh +++ b/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh @@ -70,8 +70,8 @@ test_expect_success 'The shallow option works with accents' ' test_path_is_file mw_dir_4/Main_Page.mw && ( cd mw_dir_4 && - test `git log --oneline Néoà.mw | wc -l` -eq 1 && - test `git log --oneline Main_Page.mw | wc -l ` -eq 1 + test $(git log --oneline Néoà.mw | wc -l) -eq 1 && + test $(git log --oneline Main_Page.mw | wc -l ) -eq 1 ) && wiki_check_content mw_dir_4/Néoà.mw Néoà && wiki_check_content mw_dir_4/Main_Page.mw Main_Page diff --git a/contrib/remote-helpers/Makefile b/contrib/remote-helpers/Makefile deleted file mode 100644 index 239161de33..0000000000 --- a/contrib/remote-helpers/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -TESTS := $(wildcard test*.sh) - -export T := $(addprefix $(CURDIR)/,$(TESTS)) -export MAKE := $(MAKE) -e -export PATH := $(CURDIR):$(PATH) -export TEST_LINT := test-lint-executable test-lint-shell-syntax - -test: - $(MAKE) -C ../../t $@ - -$(TESTS): - $(MAKE) -C ../../t $(CURDIR)/$@ - -.PHONY: $(TESTS) diff --git a/contrib/remote-helpers/README b/contrib/remote-helpers/README new file mode 100644 index 0000000000..ac72332517 --- /dev/null +++ b/contrib/remote-helpers/README @@ -0,0 +1,15 @@ +The remote-helper bridges to access data stored in Mercurial and +Bazaar are maintained outside the git.git tree in the repositories +of their primary author: + + https://github.com/felipec/git-remote-hg (for Mercurial) + https://github.com/felipec/git-remote-bzr (for Bazaar) + +You can pick a directory on your $PATH and download them from these +repositories, e.g.: + + $ wget -O $HOME/bin/git-remote-hg \ + https://raw.github.com/felipec/git-remote-hg/master/git-remote-hg + $ wget -O $HOME/bin/git-remote-bzr \ + https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr + $ chmod +x $HOME/bin/git-remote-hg $HOME/bin/git-remote-bzr diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index 9abb58e6ab..712a1377e2 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -1,983 +1,13 @@ #!/usr/bin/env python -# -# Copyright (c) 2012 Felipe Contreras -# - -# -# Just copy to your ~/bin, or anywhere in your $PATH. -# Then you can clone with: -# % git clone bzr::/path/to/bzr/repo/or/url -# -# For example: -# % git clone bzr::$HOME/myrepo -# or -# % git clone bzr::lp:myrepo -# -# If you want to specify which branches you want to track (per repo): -# % git config remote.origin.bzr-branches 'trunk, devel, test' -# -# Where 'origin' is the name of the repository you want to specify the -# branches. -# - -import sys - -import bzrlib -if hasattr(bzrlib, "initialize"): - bzrlib.initialize() - -import bzrlib.plugin -bzrlib.plugin.load_plugins() - -import bzrlib.generate_ids -import bzrlib.transport -import bzrlib.errors -import bzrlib.ui -import bzrlib.urlutils -import bzrlib.branch import sys -import os -import json -import re -import StringIO -import atexit, shutil, hashlib, urlparse, subprocess - -NAME_RE = re.compile('^([^<>]+)') -AUTHOR_RE = re.compile('^([^<>]+?)? ?[<>]([^<>]*)(?:$|>)') -EMAIL_RE = re.compile(r'([^ \t<>]+@[^ \t<>]+)') -RAW_AUTHOR_RE = re.compile('^(\w+) (.+)? <(.*)> (\d+) ([+-]\d+)') - -def die(msg, *args): - sys.stderr.write('ERROR: %s\n' % (msg % args)) - sys.exit(1) - -def warn(msg, *args): - sys.stderr.write('WARNING: %s\n' % (msg % args)) - -def gittz(tz): - return '%+03d%02d' % (tz / 3600, tz % 3600 / 60) - -def get_config(config): - cmd = ['git', 'config', '--get', config] - process = subprocess.Popen(cmd, stdout=subprocess.PIPE) - output, _ = process.communicate() - return output - -class Marks: - - def __init__(self, path): - self.path = path - self.tips = {} - self.marks = {} - self.rev_marks = {} - self.last_mark = 0 - self.load() - - def load(self): - if not os.path.exists(self.path): - return - - tmp = json.load(open(self.path)) - self.tips = tmp['tips'] - self.marks = tmp['marks'] - self.last_mark = tmp['last-mark'] - - for rev, mark in self.marks.iteritems(): - self.rev_marks[mark] = rev - - def dict(self): - return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : self.last_mark } - - def store(self): - json.dump(self.dict(), open(self.path, 'w')) - - def __str__(self): - return str(self.dict()) - - def from_rev(self, rev): - return self.marks[rev] - - def to_rev(self, mark): - return str(self.rev_marks[mark]) - - def next_mark(self): - self.last_mark += 1 - return self.last_mark - - def get_mark(self, rev): - self.last_mark += 1 - self.marks[rev] = self.last_mark - return self.last_mark - - def is_marked(self, rev): - return rev in self.marks - - def new_mark(self, rev, mark): - self.marks[rev] = mark - self.rev_marks[mark] = rev - self.last_mark = mark - - def get_tip(self, branch): - try: - return str(self.tips[branch]) - except KeyError: - return None - - def set_tip(self, branch, tip): - self.tips[branch] = tip - -class Parser: - - def __init__(self, repo): - self.repo = repo - self.line = self.get_line() - - def get_line(self): - return sys.stdin.readline().strip() - - def __getitem__(self, i): - return self.line.split()[i] - - def check(self, word): - return self.line.startswith(word) - - def each_block(self, separator): - while self.line != separator: - yield self.line - self.line = self.get_line() - - def __iter__(self): - return self.each_block('') - - def next(self): - self.line = self.get_line() - if self.line == 'done': - self.line = None - - def get_mark(self): - i = self.line.index(':') + 1 - return int(self.line[i:]) - - def get_data(self): - if not self.check('data'): - return None - i = self.line.index(' ') + 1 - size = int(self.line[i:]) - return sys.stdin.read(size) - - def get_author(self): - m = RAW_AUTHOR_RE.match(self.line) - if not m: - return None - _, name, email, date, tz = m.groups() - name = name.decode('utf-8') - committer = '%s <%s>' % (name, email) - tz = int(tz) - tz = ((tz / 100) * 3600) + ((tz % 100) * 60) - return (committer, int(date), tz) - -def rev_to_mark(rev): - return marks.from_rev(rev) - -def mark_to_rev(mark): - return marks.to_rev(mark) - -def fixup_user(user): - name = mail = None - user = user.replace('"', '') - m = AUTHOR_RE.match(user) - if m: - name = m.group(1) - mail = m.group(2).strip() - else: - m = EMAIL_RE.match(user) - if m: - mail = m.group(1) - else: - m = NAME_RE.match(user) - if m: - name = m.group(1).strip() - - if not name: - name = 'unknown' - if not mail: - mail = 'Unknown' - - return '%s <%s>' % (name, mail) - -def get_filechanges(cur, prev): - modified = {} - removed = {} - - changes = cur.changes_from(prev) - - def u(s): - return s.encode('utf-8') - - for path, fid, kind in changes.added: - modified[u(path)] = fid - for path, fid, kind in changes.removed: - removed[u(path)] = None - for path, fid, kind, mod, _ in changes.modified: - modified[u(path)] = fid - for oldpath, newpath, fid, kind, mod, _ in changes.renamed: - removed[u(oldpath)] = None - if kind == 'directory': - lst = cur.list_files(from_dir=newpath, recursive=True) - for path, file_class, kind, fid, entry in lst: - if kind != 'directory': - modified[u(newpath + '/' + path)] = fid - else: - modified[u(newpath)] = fid - - return modified, removed - -def export_files(tree, files): - final = [] - for path, fid in files.iteritems(): - kind = tree.kind(fid) - - h = tree.get_file_sha1(fid) - - if kind == 'symlink': - d = tree.get_symlink_target(fid) - mode = '120000' - elif kind == 'file': - - if tree.is_executable(fid): - mode = '100755' - else: - mode = '100644' - - # is the blob already exported? - if h in filenodes: - mark = filenodes[h] - final.append((mode, mark, path)) - continue - - d = tree.get_file_text(fid) - elif kind == 'directory': - continue - else: - die("Unhandled kind '%s' for path '%s'" % (kind, path)) - - mark = marks.next_mark() - filenodes[h] = mark - - print "blob" - print "mark :%u" % mark - print "data %d" % len(d) - print d - - final.append((mode, mark, path)) - - return final - -def export_branch(repo, name): - ref = '%s/heads/%s' % (prefix, name) - tip = marks.get_tip(name) - - branch = get_remote_branch(name) - repo = branch.repository - - branch.lock_read() - revs = branch.iter_merge_sorted_revisions(None, tip, 'exclude', 'forward') - try: - tip_revno = branch.revision_id_to_revno(tip) - last_revno, _ = branch.last_revision_info() - total = last_revno - tip_revno - except bzrlib.errors.NoSuchRevision: - tip_revno = 0 - total = 0 - - for revid, _, seq, _ in revs: - - if marks.is_marked(revid): - continue - - rev = repo.get_revision(revid) - revno = seq[0] - - parents = rev.parent_ids - time = rev.timestamp - tz = rev.timezone - committer = rev.committer.encode('utf-8') - committer = "%s %u %s" % (fixup_user(committer), time, gittz(tz)) - authors = rev.get_apparent_authors() - if authors: - author = authors[0].encode('utf-8') - author = "%s %u %s" % (fixup_user(author), time, gittz(tz)) - else: - author = committer - msg = rev.message.encode('utf-8') - - msg += '\n' - - if len(parents) == 0: - parent = bzrlib.revision.NULL_REVISION - else: - parent = parents[0] - - cur_tree = repo.revision_tree(revid) - prev = repo.revision_tree(parent) - modified, removed = get_filechanges(cur_tree, prev) - - modified_final = export_files(cur_tree, modified) - - if len(parents) == 0: - print 'reset %s' % ref - - print "commit %s" % ref - print "mark :%d" % (marks.get_mark(revid)) - print "author %s" % (author) - print "committer %s" % (committer) - print "data %d" % (len(msg)) - print msg - - for i, p in enumerate(parents): - try: - m = rev_to_mark(p) - except KeyError: - # ghost? - continue - if i == 0: - print "from :%s" % m - else: - print "merge :%s" % m - - for f in removed: - print "D %s" % (f,) - for f in modified_final: - print "M %s :%u %s" % f - print - - if len(seq) > 1: - # let's skip branch revisions from the progress report - continue - - progress = (revno - tip_revno) - if (progress % 100 == 0): - if total: - print "progress revision %d '%s' (%d/%d)" % (revno, name, progress, total) - else: - print "progress revision %d '%s' (%d)" % (revno, name, progress) - - branch.unlock() - - revid = branch.last_revision() - - # make sure the ref is updated - print "reset %s" % ref - print "from :%u" % rev_to_mark(revid) - print - - marks.set_tip(name, revid) - -def export_tag(repo, name): - ref = '%s/tags/%s' % (prefix, name) - print "reset %s" % ref - print "from :%u" % rev_to_mark(tags[name]) - print - -def do_import(parser): - repo = parser.repo - path = os.path.join(dirname, 'marks-git') - - print "feature done" - if os.path.exists(path): - print "feature import-marks=%s" % path - print "feature export-marks=%s" % path - print "feature force" - sys.stdout.flush() - - while parser.check('import'): - ref = parser[1] - if ref.startswith('refs/heads/'): - name = ref[len('refs/heads/'):] - export_branch(repo, name) - if ref.startswith('refs/tags/'): - name = ref[len('refs/tags/'):] - export_tag(repo, name) - parser.next() - - print 'done' - - sys.stdout.flush() - -def parse_blob(parser): - parser.next() - mark = parser.get_mark() - parser.next() - data = parser.get_data() - blob_marks[mark] = data - parser.next() - -class CustomTree(): - - def __init__(self, branch, revid, parents, files): - self.updates = {} - self.branch = branch - - def copy_tree(revid): - files = files_cache[revid] = {} - branch.lock_read() - tree = branch.repository.revision_tree(revid) - try: - for path, entry in tree.iter_entries_by_dir(): - files[path] = [entry.file_id, None] - finally: - branch.unlock() - return files - - if len(parents) == 0: - self.base_id = bzrlib.revision.NULL_REVISION - self.base_files = {} - else: - self.base_id = parents[0] - self.base_files = files_cache.get(self.base_id, None) - if not self.base_files: - self.base_files = copy_tree(self.base_id) - - self.files = files_cache[revid] = self.base_files.copy() - self.rev_files = {} - - for path, data in self.files.iteritems(): - fid, mark = data - self.rev_files[fid] = [path, mark] - - for path, f in files.iteritems(): - fid, mark = self.files.get(path, [None, None]) - if not fid: - fid = bzrlib.generate_ids.gen_file_id(path) - f['path'] = path - self.rev_files[fid] = [path, mark] - self.updates[fid] = f - - def last_revision(self): - return self.base_id - - def iter_changes(self): - changes = [] - - def get_parent(dirname, basename): - parent_fid, mark = self.base_files.get(dirname, [None, None]) - if parent_fid: - return parent_fid - parent_fid, mark = self.files.get(dirname, [None, None]) - if parent_fid: - return parent_fid - if basename == '': - return None - fid = bzrlib.generate_ids.gen_file_id(path) - add_entry(fid, dirname, 'directory') - return fid - - def add_entry(fid, path, kind, mode=None): - dirname, basename = os.path.split(path) - parent_fid = get_parent(dirname, basename) - - executable = False - if mode == '100755': - executable = True - elif mode == '120000': - kind = 'symlink' - - change = (fid, - (None, path), - True, - (False, True), - (None, parent_fid), - (None, basename), - (None, kind), - (None, executable)) - self.files[path] = [change[0], None] - changes.append(change) - - def update_entry(fid, path, kind, mode=None): - dirname, basename = os.path.split(path) - parent_fid = get_parent(dirname, basename) - - executable = False - if mode == '100755': - executable = True - elif mode == '120000': - kind = 'symlink' - - change = (fid, - (path, path), - True, - (True, True), - (None, parent_fid), - (None, basename), - (None, kind), - (None, executable)) - self.files[path] = [change[0], None] - changes.append(change) - - def remove_entry(fid, path, kind): - dirname, basename = os.path.split(path) - parent_fid = get_parent(dirname, basename) - change = (fid, - (path, None), - True, - (True, False), - (parent_fid, None), - (None, None), - (None, None), - (None, None)) - del self.files[path] - changes.append(change) - - for fid, f in self.updates.iteritems(): - path = f['path'] - - if 'deleted' in f: - remove_entry(fid, path, 'file') - continue - - if path in self.base_files: - update_entry(fid, path, 'file', f['mode']) - else: - add_entry(fid, path, 'file', f['mode']) - - self.files[path][1] = f['mark'] - self.rev_files[fid][1] = f['mark'] - - return changes - - def get_content(self, file_id): - path, mark = self.rev_files[file_id] - if mark: - return blob_marks[mark] - - # last resort - tree = self.branch.repository.revision_tree(self.base_id) - return tree.get_file_text(file_id) - - def get_file_with_stat(self, file_id, path=None): - content = self.get_content(file_id) - return (StringIO.StringIO(content), None) - - def get_symlink_target(self, file_id): - return self.get_content(file_id) - - def id2path(self, file_id): - path, mark = self.rev_files[file_id] - return path - -def c_style_unescape(string): - if string[0] == string[-1] == '"': - return string.decode('string-escape')[1:-1] - return string - -def parse_commit(parser): - parents = [] - - ref = parser[1] - parser.next() - - if ref.startswith('refs/heads/'): - name = ref[len('refs/heads/'):] - branch = get_remote_branch(name) - else: - die('unknown ref') - - commit_mark = parser.get_mark() - parser.next() - author = parser.get_author() - parser.next() - committer = parser.get_author() - parser.next() - data = parser.get_data() - parser.next() - if parser.check('from'): - parents.append(parser.get_mark()) - parser.next() - while parser.check('merge'): - parents.append(parser.get_mark()) - parser.next() - - # fast-export adds an extra newline - if data[-1] == '\n': - data = data[:-1] - - files = {} - - for line in parser: - if parser.check('M'): - t, m, mark_ref, path = line.split(' ', 3) - mark = int(mark_ref[1:]) - f = { 'mode' : m, 'mark' : mark } - elif parser.check('D'): - t, path = line.split(' ', 1) - f = { 'deleted' : True } - else: - die('Unknown file command: %s' % line) - path = c_style_unescape(path).decode('utf-8') - files[path] = f - - committer, date, tz = committer - author, _, _ = author - parents = [mark_to_rev(p) for p in parents] - revid = bzrlib.generate_ids.gen_revision_id(committer, date) - props = {} - props['branch-nick'] = branch.nick - props['authors'] = author - - mtree = CustomTree(branch, revid, parents, files) - changes = mtree.iter_changes() - - branch.lock_write() - try: - builder = branch.get_commit_builder(parents, None, date, tz, committer, props, revid) - try: - list(builder.record_iter_changes(mtree, mtree.last_revision(), changes)) - builder.finish_inventory() - builder.commit(data.decode('utf-8', 'replace')) - except Exception, e: - builder.abort() - raise - finally: - branch.unlock() - - parsed_refs[ref] = revid - marks.new_mark(revid, commit_mark) - -def parse_reset(parser): - ref = parser[1] - parser.next() - - # ugh - if parser.check('commit'): - parse_commit(parser) - return - if not parser.check('from'): - return - from_mark = parser.get_mark() - parser.next() - - parsed_refs[ref] = mark_to_rev(from_mark) - -def do_export(parser): - parser.next() - - for line in parser.each_block('done'): - if parser.check('blob'): - parse_blob(parser) - elif parser.check('commit'): - parse_commit(parser) - elif parser.check('reset'): - parse_reset(parser) - elif parser.check('tag'): - pass - elif parser.check('feature'): - pass - else: - die('unhandled export command: %s' % line) - - for ref, revid in parsed_refs.iteritems(): - if ref.startswith('refs/heads/'): - name = ref[len('refs/heads/'):] - branch = get_remote_branch(name) - branch.generate_revision_history(revid, marks.get_tip(name)) - - if name in peers: - peer = bzrlib.branch.Branch.open(peers[name], - possible_transports=transports) - try: - peer.bzrdir.push_branch(branch, revision_id=revid, - overwrite=force) - except bzrlib.errors.DivergedBranches: - print "error %s non-fast forward" % ref - continue - - try: - wt = branch.bzrdir.open_workingtree() - wt.update() - except bzrlib.errors.NoWorkingTree: - pass - elif ref.startswith('refs/tags/'): - # TODO: implement tag push - print "error %s pushing tags not supported" % ref - continue - else: - # transport-helper/fast-export bugs - continue - - print "ok %s" % ref - - print - -def do_capabilities(parser): - print "import" - print "export" - print "refspec refs/heads/*:%s/heads/*" % prefix - print "refspec refs/tags/*:%s/tags/*" % prefix - - path = os.path.join(dirname, 'marks-git') - - if os.path.exists(path): - print "*import-marks %s" % path - print "*export-marks %s" % path - - print "option" - print - -class InvalidOptionValue(Exception): - pass - -def get_bool_option(val): - if val == 'true': - return True - elif val == 'false': - return False - else: - raise InvalidOptionValue() - -def do_option(parser): - global force - opt, val = parser[1:3] - try: - if opt == 'force': - force = get_bool_option(val) - print 'ok' - else: - print 'unsupported' - except InvalidOptionValue: - print "error '%s' is not a valid value for option '%s'" % (val, opt) - -def ref_is_valid(name): - return not True in [c in name for c in '~^: \\'] - -def do_list(parser): - master_branch = None - - for name in branches: - if not master_branch: - master_branch = name - print "? refs/heads/%s" % name - - branch = get_remote_branch(master_branch) - branch.lock_read() - for tag, revid in branch.tags.get_tag_dict().items(): - try: - branch.revision_id_to_dotted_revno(revid) - except bzrlib.errors.NoSuchRevision: - continue - if not ref_is_valid(tag): - continue - print "? refs/tags/%s" % tag - tags[tag] = revid - branch.unlock() - - print "@refs/heads/%s HEAD" % master_branch - print - -def clone(path, remote_branch): - try: - bdir = bzrlib.bzrdir.BzrDir.create(path, possible_transports=transports) - except bzrlib.errors.AlreadyControlDirError: - bdir = bzrlib.bzrdir.BzrDir.open(path, possible_transports=transports) - repo = bdir.find_repository() - repo.fetch(remote_branch.repository) - return remote_branch.sprout(bdir, repository=repo) - -def get_remote_branch(name): - remote_branch = bzrlib.branch.Branch.open(branches[name], - possible_transports=transports) - if isinstance(remote_branch.bzrdir.root_transport, bzrlib.transport.local.LocalTransport): - return remote_branch - - branch_path = os.path.join(dirname, 'clone', name) - - try: - branch = bzrlib.branch.Branch.open(branch_path, - possible_transports=transports) - except bzrlib.errors.NotBranchError: - # clone - branch = clone(branch_path, remote_branch) - else: - # pull - try: - branch.pull(remote_branch, overwrite=True) - except bzrlib.errors.DivergedBranches: - # use remote branch for now - return remote_branch - - return branch - -def find_branches(repo): - transport = repo.bzrdir.root_transport - - for fn in transport.iter_files_recursive(): - if not fn.endswith('.bzr/branch-format'): - continue - - name = subdir = fn[:-len('/.bzr/branch-format')] - name = name if name != '' else 'master' - name = name.replace('/', '+') - - try: - cur = transport.clone(subdir) - branch = bzrlib.branch.Branch.open_from_transport(cur) - except bzrlib.errors.NotBranchError: - continue - else: - yield name, branch.base - -def get_repo(url, alias): - normal_url = bzrlib.urlutils.normalize_url(url) - origin = bzrlib.bzrdir.BzrDir.open(url, possible_transports=transports) - is_local = isinstance(origin.transport, bzrlib.transport.local.LocalTransport) - - shared_path = os.path.join(gitdir, 'bzr') - try: - shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path, - possible_transports=transports) - except bzrlib.errors.NotBranchError: - shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path, - possible_transports=transports) - try: - shared_repo = shared_dir.open_repository() - except bzrlib.errors.NoRepositoryPresent: - shared_repo = shared_dir.create_repository(shared=True) - - if not is_local: - clone_path = os.path.join(dirname, 'clone') - if not os.path.exists(clone_path): - os.mkdir(clone_path) - else: - # check and remove old organization - try: - bdir = bzrlib.bzrdir.BzrDir.open(clone_path, - possible_transports=transports) - bdir.destroy_repository() - except bzrlib.errors.NotBranchError: - pass - except bzrlib.errors.NoRepositoryPresent: - pass - - wanted = get_config('remote.%s.bzr-branches' % alias).rstrip().split(', ') - # stupid python - wanted = [e for e in wanted if e] - if not wanted: - wanted = get_config('remote-bzr.branches').rstrip().split(', ') - # stupid python - wanted = [e for e in wanted if e] - - if not wanted: - try: - repo = origin.open_repository() - if not repo.bzrdir.root_transport.listable(): - # this repository is not usable for us - raise bzrlib.errors.NoRepositoryPresent(repo.bzrdir) - except bzrlib.errors.NoRepositoryPresent: - wanted = ['master'] - - if wanted: - def list_wanted(url, wanted): - for name in wanted: - subdir = name if name != 'master' else '' - yield name, bzrlib.urlutils.join(url, subdir) - - branch_list = list_wanted(url, wanted) - else: - branch_list = find_branches(repo) - - for name, url in branch_list: - if not is_local: - peers[name] = url - branches[name] = url - - return origin - -def fix_path(alias, orig_url): - url = urlparse.urlparse(orig_url, 'file') - if url.scheme != 'file' or os.path.isabs(url.path): - return - abs_url = urlparse.urljoin("%s/" % os.getcwd(), orig_url) - cmd = ['git', 'config', 'remote.%s.url' % alias, "bzr::%s" % abs_url] - subprocess.call(cmd) - -def main(args): - global marks, prefix, gitdir, dirname - global tags, filenodes - global blob_marks - global parsed_refs - global files_cache - global is_tmp - global branches, peers - global transports - global force - - marks = None - is_tmp = False - gitdir = os.environ.get('GIT_DIR', None) - - if len(args) < 3: - die('Not enough arguments.') - - if not gitdir: - die('GIT_DIR not set') - - alias = args[1] - url = args[2] - - tags = {} - filenodes = {} - blob_marks = {} - parsed_refs = {} - files_cache = {} - branches = {} - peers = {} - transports = [] - force = False - - if alias[5:] == url: - is_tmp = True - alias = hashlib.sha1(alias).hexdigest() - - prefix = 'refs/bzr/%s' % alias - dirname = os.path.join(gitdir, 'bzr', alias) - - if not is_tmp: - fix_path(alias, url) - - if not os.path.exists(dirname): - os.makedirs(dirname) - - if hasattr(bzrlib.ui.ui_factory, 'be_quiet'): - bzrlib.ui.ui_factory.be_quiet(True) - - repo = get_repo(url, alias) - - marks_path = os.path.join(dirname, 'marks-int') - marks = Marks(marks_path) - - parser = Parser(repo) - for line in parser: - if parser.check('capabilities'): - do_capabilities(parser) - elif parser.check('list'): - do_list(parser) - elif parser.check('import'): - do_import(parser) - elif parser.check('export'): - do_export(parser) - elif parser.check('option'): - do_option(parser) - else: - die('unhandled command: %s' % line) - sys.stdout.flush() -def bye(): - if not marks: - return - if not is_tmp: - marks.store() - else: - shutil.rmtree(dirname) +sys.stderr.write('WARNING: git-remote-bzr is now maintained independently.\n') +sys.stderr.write('WARNING: For more information visit https://github.com/felipec/git-remote-bzr\n') -atexit.register(bye) -sys.exit(main(sys.argv)) +sys.stderr.write('''WARNING: +WARNING: You can pick a directory on your $PATH and download it, e.g.: +WARNING: $ wget -O $HOME/bin/git-remote-bzr \\ +WARNING: https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr +WARNING: $ chmod +x $HOME/bin/git-remote-bzr +''') diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index 34cda02759..4255ad6312 100755 --- a/contrib/remote-helpers/git-remote-hg +++ b/contrib/remote-helpers/git-remote-hg @@ -1,1258 +1,13 @@ #!/usr/bin/env python -# -# Copyright (c) 2012 Felipe Contreras -# -# Inspired by Rocco Rutte's hg-fast-export - -# Just copy to your ~/bin, or anywhere in your $PATH. -# Then you can clone with: -# git clone hg::/path/to/mercurial/repo/ -# -# For remote repositories a local clone is stored in -# "$GIT_DIR/hg/origin/clone/.hg/". - -from mercurial import hg, ui, bookmarks, context, encoding, node, error, extensions, discovery, util - -import re import sys -import os -import json -import shutil -import subprocess -import urllib -import atexit -import urlparse, hashlib -import time as ptime - -# -# If you want to see Mercurial revisions as Git commit notes: -# git config core.notesRef refs/notes/hg -# -# If you are not in hg-git-compat mode and want to disable the tracking of -# named branches: -# git config --global remote-hg.track-branches false -# -# If you want the equivalent of hg's clone/pull--insecure option: -# git config --global remote-hg.insecure true -# -# If you want to switch to hg-git compatibility mode: -# git config --global remote-hg.hg-git-compat true -# -# git: -# Sensible defaults for git. -# hg bookmarks are exported as git branches, hg branches are prefixed -# with 'branches/', HEAD is a special case. -# -# hg: -# Emulate hg-git. -# Only hg bookmarks are exported as git branches. -# Commits are modified to preserve hg information and allow bidirectionality. -# - -NAME_RE = re.compile('^([^<>]+)') -AUTHOR_RE = re.compile('^([^<>]+?)? ?[<>]([^<>]*)(?:$|>)') -EMAIL_RE = re.compile(r'([^ \t<>]+@[^ \t<>]+)') -AUTHOR_HG_RE = re.compile('^(.*?) ?<(.*?)(?:>(.+)?)?$') -RAW_AUTHOR_RE = re.compile('^(\w+) (?:(.+)? )?<(.*)> (\d+) ([+-]\d+)') - -VERSION = 2 - -def die(msg, *args): - sys.stderr.write('ERROR: %s\n' % (msg % args)) - sys.exit(1) - -def warn(msg, *args): - sys.stderr.write('WARNING: %s\n' % (msg % args)) - -def gitmode(flags): - return 'l' in flags and '120000' or 'x' in flags and '100755' or '100644' - -def gittz(tz): - return '%+03d%02d' % (-tz / 3600, -tz % 3600 / 60) - -def hgmode(mode): - m = { '100755': 'x', '120000': 'l' } - return m.get(mode, '') - -def hghex(n): - return node.hex(n) - -def hgbin(n): - return node.bin(n) - -def hgref(ref): - return ref.replace('___', ' ') - -def gitref(ref): - return ref.replace(' ', '___') - -def check_version(*check): - if not hg_version: - return True - return hg_version >= check - -def get_config(config): - cmd = ['git', 'config', '--get', config] - process = subprocess.Popen(cmd, stdout=subprocess.PIPE) - output, _ = process.communicate() - return output - -def get_config_bool(config, default=False): - value = get_config(config).rstrip('\n') - if value == "true": - return True - elif value == "false": - return False - else: - return default - -class Marks: - - def __init__(self, path, repo): - self.path = path - self.repo = repo - self.clear() - self.load() - - if self.version < VERSION: - if self.version == 1: - self.upgrade_one() - - # upgraded? - if self.version < VERSION: - self.clear() - self.version = VERSION - - def clear(self): - self.tips = {} - self.marks = {} - self.rev_marks = {} - self.last_mark = 0 - self.version = 0 - self.last_note = 0 - - def load(self): - if not os.path.exists(self.path): - return - - tmp = json.load(open(self.path)) - - self.tips = tmp['tips'] - self.marks = tmp['marks'] - self.last_mark = tmp['last-mark'] - self.version = tmp.get('version', 1) - self.last_note = tmp.get('last-note', 0) - - for rev, mark in self.marks.iteritems(): - self.rev_marks[mark] = rev - - def upgrade_one(self): - def get_id(rev): - return hghex(self.repo.changelog.node(int(rev))) - self.tips = dict((name, get_id(rev)) for name, rev in self.tips.iteritems()) - self.marks = dict((get_id(rev), mark) for rev, mark in self.marks.iteritems()) - self.rev_marks = dict((mark, get_id(rev)) for mark, rev in self.rev_marks.iteritems()) - self.version = 2 - - def dict(self): - return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : self.last_mark, 'version' : self.version, 'last-note' : self.last_note } - - def store(self): - json.dump(self.dict(), open(self.path, 'w')) - - def __str__(self): - return str(self.dict()) - - def from_rev(self, rev): - return self.marks[rev] - - def to_rev(self, mark): - return str(self.rev_marks[mark]) - - def next_mark(self): - self.last_mark += 1 - return self.last_mark - - def get_mark(self, rev): - self.last_mark += 1 - self.marks[rev] = self.last_mark - return self.last_mark - - def new_mark(self, rev, mark): - self.marks[rev] = mark - self.rev_marks[mark] = rev - self.last_mark = mark - - def is_marked(self, rev): - return rev in self.marks - - def get_tip(self, branch): - return str(self.tips[branch]) - - def set_tip(self, branch, tip): - self.tips[branch] = tip - -class Parser: - - def __init__(self, repo): - self.repo = repo - self.line = self.get_line() - - def get_line(self): - return sys.stdin.readline().strip() - - def __getitem__(self, i): - return self.line.split()[i] - - def check(self, word): - return self.line.startswith(word) - - def each_block(self, separator): - while self.line != separator: - yield self.line - self.line = self.get_line() - - def __iter__(self): - return self.each_block('') - - def next(self): - self.line = self.get_line() - if self.line == 'done': - self.line = None - - def get_mark(self): - i = self.line.index(':') + 1 - return int(self.line[i:]) - - def get_data(self): - if not self.check('data'): - return None - i = self.line.index(' ') + 1 - size = int(self.line[i:]) - return sys.stdin.read(size) - - def get_author(self): - ex = None - m = RAW_AUTHOR_RE.match(self.line) - if not m: - return None - _, name, email, date, tz = m.groups() - if name and 'ext:' in name: - m = re.match('^(.+?) ext:\((.+)\)$', name) - if m: - name = m.group(1) - ex = urllib.unquote(m.group(2)) - - if email != bad_mail: - if name: - user = '%s <%s>' % (name, email) - else: - user = '<%s>' % (email) - else: - user = name - - if ex: - user += ex - - tz = int(tz) - tz = ((tz / 100) * 3600) + ((tz % 100) * 60) - return (user, int(date), -tz) - -def fix_file_path(path): - path = os.path.normpath(path) - if not os.path.isabs(path): - return path - return os.path.relpath(path, '/') - -def export_files(files): - final = [] - for f in files: - fid = node.hex(f.filenode()) - - if fid in filenodes: - mark = filenodes[fid] - else: - mark = marks.next_mark() - filenodes[fid] = mark - d = f.data() - - print "blob" - print "mark :%u" % mark - print "data %d" % len(d) - print d - - path = fix_file_path(f.path()) - final.append((gitmode(f.flags()), mark, path)) - - return final - -def get_filechanges(repo, ctx, parent): - modified = set() - added = set() - removed = set() - - # load earliest manifest first for caching reasons - prev = parent.manifest().copy() - cur = ctx.manifest() - - for fn in cur: - if fn in prev: - if (cur.flags(fn) != prev.flags(fn) or cur[fn] != prev[fn]): - modified.add(fn) - del prev[fn] - else: - added.add(fn) - removed |= set(prev.keys()) - - return added | modified, removed - -def fixup_user_git(user): - name = mail = None - user = user.replace('"', '') - m = AUTHOR_RE.match(user) - if m: - name = m.group(1) - mail = m.group(2).strip() - else: - m = EMAIL_RE.match(user) - if m: - mail = m.group(1) - else: - m = NAME_RE.match(user) - if m: - name = m.group(1).strip() - return (name, mail) - -def fixup_user_hg(user): - def sanitize(name): - # stole this from hg-git - return re.sub('[<>\n]', '?', name.lstrip('< ').rstrip('> ')) - - m = AUTHOR_HG_RE.match(user) - if m: - name = sanitize(m.group(1)) - mail = sanitize(m.group(2)) - ex = m.group(3) - if ex: - name += ' ext:(' + urllib.quote(ex) + ')' - else: - name = sanitize(user) - if '@' in user: - mail = name - else: - mail = None - - return (name, mail) - -def fixup_user(user): - if mode == 'git': - name, mail = fixup_user_git(user) - else: - name, mail = fixup_user_hg(user) - - if not name: - name = bad_name - if not mail: - mail = bad_mail - - return '%s <%s>' % (name, mail) - -def updatebookmarks(repo, peer): - remotemarks = peer.listkeys('bookmarks') - localmarks = repo._bookmarks - - if not remotemarks: - return - - for k, v in remotemarks.iteritems(): - localmarks[k] = hgbin(v) - - if hasattr(localmarks, 'write'): - localmarks.write() - else: - bookmarks.write(repo) - -def get_repo(url, alias): - global peer - - myui = ui.ui() - myui.setconfig('ui', 'interactive', 'off') - myui.fout = sys.stderr - - if get_config_bool('remote-hg.insecure'): - myui.setconfig('web', 'cacerts', '') - - extensions.loadall(myui) - - if hg.islocal(url) and not os.environ.get('GIT_REMOTE_HG_TEST_REMOTE'): - repo = hg.repository(myui, url) - if not os.path.exists(dirname): - os.makedirs(dirname) - else: - shared_path = os.path.join(gitdir, 'hg') - - # check and upgrade old organization - hg_path = os.path.join(shared_path, '.hg') - if os.path.exists(shared_path) and not os.path.exists(hg_path): - repos = os.listdir(shared_path) - for x in repos: - local_hg = os.path.join(shared_path, x, 'clone', '.hg') - if not os.path.exists(local_hg): - continue - if not os.path.exists(hg_path): - shutil.move(local_hg, hg_path) - shutil.rmtree(os.path.join(shared_path, x, 'clone')) - - # setup shared repo (if not there) - try: - hg.peer(myui, {}, shared_path, create=True) - except error.RepoError: - pass - - if not os.path.exists(dirname): - os.makedirs(dirname) - - local_path = os.path.join(dirname, 'clone') - if not os.path.exists(local_path): - hg.share(myui, shared_path, local_path, update=False) - else: - # make sure the shared path is always up-to-date - util.writefile(os.path.join(local_path, '.hg', 'sharedpath'), hg_path) - - repo = hg.repository(myui, local_path) - try: - peer = hg.peer(myui, {}, url) - except: - die('Repository error') - repo.pull(peer, heads=None, force=True) - - updatebookmarks(repo, peer) - - return repo - -def rev_to_mark(rev): - return marks.from_rev(rev.hex()) - -def mark_to_rev(mark): - return marks.to_rev(mark) - -def export_ref(repo, name, kind, head): - ename = '%s/%s' % (kind, name) - try: - tip = marks.get_tip(ename) - tip = repo[tip].rev() - except: - tip = 0 - - revs = xrange(tip, head.rev() + 1) - total = len(revs) - - for rev in revs: - - c = repo[rev] - node = c.node() - - if marks.is_marked(c.hex()): - continue - - (manifest, user, (time, tz), files, desc, extra) = repo.changelog.read(node) - rev_branch = extra['branch'] - - author = "%s %d %s" % (fixup_user(user), time, gittz(tz)) - if 'committer' in extra: - user, time, tz = extra['committer'].rsplit(' ', 2) - committer = "%s %s %s" % (user, time, gittz(int(tz))) - else: - committer = author - - parents = [repo[p] for p in repo.changelog.parentrevs(rev) if p >= 0] - - if len(parents) == 0: - modified = c.manifest().keys() - removed = [] - else: - modified, removed = get_filechanges(repo, c, parents[0]) - - desc += '\n' - - if mode == 'hg': - extra_msg = '' - - if rev_branch != 'default': - extra_msg += 'branch : %s\n' % rev_branch - - renames = [] - for f in c.files(): - if f not in c.manifest(): - continue - rename = c.filectx(f).renamed() - if rename: - renames.append((rename[0], f)) - - for e in renames: - extra_msg += "rename : %s => %s\n" % e - - for key, value in extra.iteritems(): - if key in ('author', 'committer', 'encoding', 'message', 'branch', 'hg-git'): - continue - else: - extra_msg += "extra : %s : %s\n" % (key, urllib.quote(value)) - - if extra_msg: - desc += '\n--HG--\n' + extra_msg - - if len(parents) == 0 and rev: - print 'reset %s/%s' % (prefix, ename) - - modified_final = export_files(c.filectx(f) for f in modified) - - print "commit %s/%s" % (prefix, ename) - print "mark :%d" % (marks.get_mark(c.hex())) - print "author %s" % (author) - print "committer %s" % (committer) - print "data %d" % (len(desc)) - print desc - - if len(parents) > 0: - print "from :%s" % (rev_to_mark(parents[0])) - if len(parents) > 1: - print "merge :%s" % (rev_to_mark(parents[1])) - - for f in removed: - print "D %s" % (fix_file_path(f)) - for f in modified_final: - print "M %s :%u %s" % f - print - - progress = (rev - tip) - if (progress % 100 == 0): - print "progress revision %d '%s' (%d/%d)" % (rev, name, progress, total) - - # make sure the ref is updated - print "reset %s/%s" % (prefix, ename) - print "from :%u" % rev_to_mark(head) - print - - pending_revs = set(revs) - notes - if pending_revs: - note_mark = marks.next_mark() - ref = "refs/notes/hg" - - print "commit %s" % ref - print "mark :%d" % (note_mark) - print "committer remote-hg <> %d %s" % (ptime.time(), gittz(ptime.timezone)) - desc = "Notes for %s\n" % (name) - print "data %d" % (len(desc)) - print desc - if marks.last_note: - print "from :%u" % marks.last_note - - for rev in pending_revs: - notes.add(rev) - c = repo[rev] - print "N inline :%u" % rev_to_mark(c) - msg = c.hex() - print "data %d" % (len(msg)) - print msg - print - - marks.last_note = note_mark - - marks.set_tip(ename, head.hex()) - -def export_tag(repo, tag): - export_ref(repo, tag, 'tags', repo[hgref(tag)]) - -def export_bookmark(repo, bmark): - head = bmarks[hgref(bmark)] - export_ref(repo, bmark, 'bookmarks', head) - -def export_branch(repo, branch): - tip = get_branch_tip(repo, branch) - head = repo[tip] - export_ref(repo, branch, 'branches', head) - -def export_head(repo): - export_ref(repo, g_head[0], 'bookmarks', g_head[1]) - -def do_capabilities(parser): - print "import" - print "export" - print "refspec refs/heads/branches/*:%s/branches/*" % prefix - print "refspec refs/heads/*:%s/bookmarks/*" % prefix - print "refspec refs/tags/*:%s/tags/*" % prefix - - path = os.path.join(dirname, 'marks-git') - - if os.path.exists(path): - print "*import-marks %s" % path - print "*export-marks %s" % path - print "option" - - print - -def branch_tip(branch): - return branches[branch][-1] - -def get_branch_tip(repo, branch): - heads = branches.get(hgref(branch), None) - if not heads: - return None - - # verify there's only one head - if (len(heads) > 1): - warn("Branch '%s' has more than one head, consider merging" % branch) - return branch_tip(hgref(branch)) - - return heads[0] - -def list_head(repo, cur): - global g_head, fake_bmark - - if 'default' not in branches: - # empty repo - return - - node = repo[branch_tip('default')] - head = 'master' if not 'master' in bmarks else 'default' - fake_bmark = head - bmarks[head] = node - - head = gitref(head) - print "@refs/heads/%s HEAD" % head - g_head = (head, node) - -def do_list(parser): - repo = parser.repo - for bmark, node in bookmarks.listbookmarks(repo).iteritems(): - bmarks[bmark] = repo[node] - - cur = repo.dirstate.branch() - orig = peer if peer else repo - - for branch, heads in orig.branchmap().iteritems(): - # only open heads - heads = [h for h in heads if 'close' not in repo.changelog.read(h)[5]] - if heads: - branches[branch] = heads - - list_head(repo, cur) - - if track_branches: - for branch in branches: - print "? refs/heads/branches/%s" % gitref(branch) - - for bmark in bmarks: - if bmarks[bmark].hex() == '0000000000000000000000000000000000000000': - warn("Ignoring invalid bookmark '%s'", bmark) - else: - print "? refs/heads/%s" % gitref(bmark) - - for tag, node in repo.tagslist(): - if tag == 'tip': - continue - print "? refs/tags/%s" % gitref(tag) - - print - -def do_import(parser): - repo = parser.repo - - path = os.path.join(dirname, 'marks-git') - - print "feature done" - if os.path.exists(path): - print "feature import-marks=%s" % path - print "feature export-marks=%s" % path - print "feature force" - sys.stdout.flush() - - tmp = encoding.encoding - encoding.encoding = 'utf-8' - - # lets get all the import lines - while parser.check('import'): - ref = parser[1] - - if (ref == 'HEAD'): - export_head(repo) - elif ref.startswith('refs/heads/branches/'): - branch = ref[len('refs/heads/branches/'):] - export_branch(repo, branch) - elif ref.startswith('refs/heads/'): - bmark = ref[len('refs/heads/'):] - export_bookmark(repo, bmark) - elif ref.startswith('refs/tags/'): - tag = ref[len('refs/tags/'):] - export_tag(repo, tag) - - parser.next() - - encoding.encoding = tmp - - print 'done' - -def parse_blob(parser): - parser.next() - mark = parser.get_mark() - parser.next() - data = parser.get_data() - blob_marks[mark] = data - parser.next() - -def get_merge_files(repo, p1, p2, files): - for e in repo[p1].files(): - if e not in files: - if e not in repo[p1].manifest(): - continue - f = { 'ctx' : repo[p1][e] } - files[e] = f - -def c_style_unescape(string): - if string[0] == string[-1] == '"': - return string.decode('string-escape')[1:-1] - return string - -def parse_commit(parser): - from_mark = merge_mark = None - - ref = parser[1] - parser.next() - - commit_mark = parser.get_mark() - parser.next() - author = parser.get_author() - parser.next() - committer = parser.get_author() - parser.next() - data = parser.get_data() - parser.next() - if parser.check('from'): - from_mark = parser.get_mark() - parser.next() - if parser.check('merge'): - merge_mark = parser.get_mark() - parser.next() - if parser.check('merge'): - die('octopus merges are not supported yet') - - # fast-export adds an extra newline - if data[-1] == '\n': - data = data[:-1] - - files = {} - - for line in parser: - if parser.check('M'): - t, m, mark_ref, path = line.split(' ', 3) - mark = int(mark_ref[1:]) - f = { 'mode' : hgmode(m), 'data' : blob_marks[mark] } - elif parser.check('D'): - t, path = line.split(' ', 1) - f = { 'deleted' : True } - else: - die('Unknown file command: %s' % line) - path = c_style_unescape(path) - files[path] = f - - # only export the commits if we are on an internal proxy repo - if dry_run and not peer: - parsed_refs[ref] = None - return - - def getfilectx(repo, memctx, f): - of = files[f] - if 'deleted' in of: - raise IOError - if 'ctx' in of: - return of['ctx'] - is_exec = of['mode'] == 'x' - is_link = of['mode'] == 'l' - rename = of.get('rename', None) - return context.memfilectx(f, of['data'], - is_link, is_exec, rename) - - repo = parser.repo - - user, date, tz = author - extra = {} - - if committer != author: - extra['committer'] = "%s %u %u" % committer - - if from_mark: - p1 = mark_to_rev(from_mark) - else: - p1 = '0' * 40 - - if merge_mark: - p2 = mark_to_rev(merge_mark) - else: - p2 = '0' * 40 - - # - # If files changed from any of the parents, hg wants to know, but in git if - # nothing changed from the first parent, nothing changed. - # - if merge_mark: - get_merge_files(repo, p1, p2, files) - - # Check if the ref is supposed to be a named branch - if ref.startswith('refs/heads/branches/'): - branch = ref[len('refs/heads/branches/'):] - extra['branch'] = hgref(branch) - - if mode == 'hg': - i = data.find('\n--HG--\n') - if i >= 0: - tmp = data[i + len('\n--HG--\n'):].strip() - for k, v in [e.split(' : ', 1) for e in tmp.split('\n')]: - if k == 'rename': - old, new = v.split(' => ', 1) - files[new]['rename'] = old - elif k == 'branch': - extra[k] = v - elif k == 'extra': - ek, ev = v.split(' : ', 1) - extra[ek] = urllib.unquote(ev) - data = data[:i] - - ctx = context.memctx(repo, (p1, p2), data, - files.keys(), getfilectx, - user, (date, tz), extra) - - tmp = encoding.encoding - encoding.encoding = 'utf-8' - - node = hghex(repo.commitctx(ctx)) - - encoding.encoding = tmp - - parsed_refs[ref] = node - marks.new_mark(node, commit_mark) - -def parse_reset(parser): - ref = parser[1] - parser.next() - # ugh - if parser.check('commit'): - parse_commit(parser) - return - if not parser.check('from'): - return - from_mark = parser.get_mark() - parser.next() - - try: - rev = mark_to_rev(from_mark) - except KeyError: - rev = None - parsed_refs[ref] = rev - -def parse_tag(parser): - name = parser[1] - parser.next() - from_mark = parser.get_mark() - parser.next() - tagger = parser.get_author() - parser.next() - data = parser.get_data() - parser.next() - - parsed_tags[name] = (tagger, data) - -def write_tag(repo, tag, node, msg, author): - branch = repo[node].branch() - tip = branch_tip(branch) - tip = repo[tip] - - def getfilectx(repo, memctx, f): - try: - fctx = tip.filectx(f) - data = fctx.data() - except error.ManifestLookupError: - data = "" - content = data + "%s %s\n" % (node, tag) - return context.memfilectx(f, content, False, False, None) - - p1 = tip.hex() - p2 = '0' * 40 - if author: - user, date, tz = author - date_tz = (date, tz) - else: - cmd = ['git', 'var', 'GIT_COMMITTER_IDENT'] - process = subprocess.Popen(cmd, stdout=subprocess.PIPE) - output, _ = process.communicate() - m = re.match('^.* <.*>', output) - if m: - user = m.group(0) - else: - user = repo.ui.username() - date_tz = None - - ctx = context.memctx(repo, (p1, p2), msg, - ['.hgtags'], getfilectx, - user, date_tz, {'branch' : branch}) - - tmp = encoding.encoding - encoding.encoding = 'utf-8' - - tagnode = repo.commitctx(ctx) - - encoding.encoding = tmp - - return (tagnode, branch) - -def checkheads_bmark(repo, ref, ctx): - bmark = ref[len('refs/heads/'):] - if not bmark in bmarks: - # new bmark - return True - - ctx_old = bmarks[bmark] - ctx_new = ctx - if not repo.changelog.descendant(ctx_old.rev(), ctx_new.rev()): - if force_push: - print "ok %s forced update" % ref - else: - print "error %s non-fast forward" % ref - return False - - return True - -def checkheads(repo, remote, p_revs): - - remotemap = remote.branchmap() - if not remotemap: - # empty repo - return True - - new = {} - ret = True - - for node, ref in p_revs.iteritems(): - ctx = repo[node] - branch = ctx.branch() - if not branch in remotemap: - # new branch - continue - if not ref.startswith('refs/heads/branches'): - if ref.startswith('refs/heads/'): - if not checkheads_bmark(repo, ref, ctx): - ret = False - - # only check branches - continue - new.setdefault(branch, []).append(ctx.rev()) - - for branch, heads in new.iteritems(): - old = [repo.changelog.rev(x) for x in remotemap[branch]] - for rev in heads: - if check_version(2, 3): - ancestors = repo.changelog.ancestors([rev], stoprev=min(old)) - else: - ancestors = repo.changelog.ancestors(rev) - found = False - - for x in old: - if x in ancestors: - found = True - break - - if found: - continue - - node = repo.changelog.node(rev) - ref = p_revs[node] - if force_push: - print "ok %s forced update" % ref - else: - print "error %s non-fast forward" % ref - ret = False - - return ret - -def push_unsafe(repo, remote, parsed_refs, p_revs): - - force = force_push - - fci = discovery.findcommonincoming - commoninc = fci(repo, remote, force=force) - common, _, remoteheads = commoninc - - if not checkheads(repo, remote, p_revs): - return None - - cg = repo.getbundle('push', heads=list(p_revs), common=common) - - unbundle = remote.capable('unbundle') - if unbundle: - if force: - remoteheads = ['force'] - return remote.unbundle(cg, remoteheads, 'push') - else: - return remote.addchangegroup(cg, 'push', repo.url()) - -def push(repo, remote, parsed_refs, p_revs): - if hasattr(remote, 'canpush') and not remote.canpush(): - print "error cannot push" - - if not p_revs: - # nothing to push - return - - lock = None - unbundle = remote.capable('unbundle') - if not unbundle: - lock = remote.lock() - try: - ret = push_unsafe(repo, remote, parsed_refs, p_revs) - finally: - if lock is not None: - lock.release() - - return ret - -def check_tip(ref, kind, name, heads): - try: - ename = '%s/%s' % (kind, name) - tip = marks.get_tip(ename) - except KeyError: - return True - else: - return tip in heads - -def do_export(parser): - p_bmarks = [] - p_revs = {} - - parser.next() - - for line in parser.each_block('done'): - if parser.check('blob'): - parse_blob(parser) - elif parser.check('commit'): - parse_commit(parser) - elif parser.check('reset'): - parse_reset(parser) - elif parser.check('tag'): - parse_tag(parser) - elif parser.check('feature'): - pass - else: - die('unhandled export command: %s' % line) - - need_fetch = False - - for ref, node in parsed_refs.iteritems(): - bnode = hgbin(node) if node else None - if ref.startswith('refs/heads/branches'): - branch = ref[len('refs/heads/branches/'):] - if branch in branches and bnode in branches[branch]: - # up to date - continue - - if peer: - remotemap = peer.branchmap() - if remotemap and branch in remotemap: - heads = [hghex(e) for e in remotemap[branch]] - if not check_tip(ref, 'branches', branch, heads): - print "error %s fetch first" % ref - need_fetch = True - continue - - p_revs[bnode] = ref - print "ok %s" % ref - elif ref.startswith('refs/heads/'): - bmark = ref[len('refs/heads/'):] - new = node - old = bmarks[bmark].hex() if bmark in bmarks else '' - - if old == new: - continue - - print "ok %s" % ref - if bmark != fake_bmark and \ - not (bmark == 'master' and bmark not in parser.repo._bookmarks): - p_bmarks.append((ref, bmark, old, new)) - - if peer: - remote_old = peer.listkeys('bookmarks').get(bmark) - if remote_old: - if not check_tip(ref, 'bookmarks', bmark, remote_old): - print "error %s fetch first" % ref - need_fetch = True - continue - - p_revs[bnode] = ref - elif ref.startswith('refs/tags/'): - if dry_run: - print "ok %s" % ref - continue - tag = ref[len('refs/tags/'):] - tag = hgref(tag) - author, msg = parsed_tags.get(tag, (None, None)) - if mode == 'git': - if not msg: - msg = 'Added tag %s for changeset %s' % (tag, node[:12]) - tagnode, branch = write_tag(parser.repo, tag, node, msg, author) - p_revs[tagnode] = 'refs/heads/branches/' + gitref(branch) - else: - fp = parser.repo.opener('localtags', 'a') - fp.write('%s %s\n' % (node, tag)) - fp.close() - p_revs[bnode] = ref - print "ok %s" % ref - else: - # transport-helper/fast-export bugs - continue - - if need_fetch: - print - return - - if dry_run: - if peer and not force_push: - checkheads(parser.repo, peer, p_revs) - print - return - - if peer: - if not push(parser.repo, peer, parsed_refs, p_revs): - # do not update bookmarks - print - return - - # update remote bookmarks - remote_bmarks = peer.listkeys('bookmarks') - for ref, bmark, old, new in p_bmarks: - if force_push: - old = remote_bmarks.get(bmark, '') - if not peer.pushkey('bookmarks', bmark, old, new): - print "error %s" % ref - else: - # update local bookmarks - for ref, bmark, old, new in p_bmarks: - if not bookmarks.pushbookmark(parser.repo, bmark, old, new): - print "error %s" % ref - - print - -def do_option(parser): - global dry_run, force_push - _, key, value = parser.line.split(' ') - if key == 'dry-run': - dry_run = (value == 'true') - print 'ok' - elif key == 'force': - force_push = (value == 'true') - print 'ok' - else: - print 'unsupported' - -def fix_path(alias, repo, orig_url): - url = urlparse.urlparse(orig_url, 'file') - if url.scheme != 'file' or os.path.isabs(os.path.expanduser(url.path)): - return - abs_url = urlparse.urljoin("%s/" % os.getcwd(), orig_url) - cmd = ['git', 'config', 'remote.%s.url' % alias, "hg::%s" % abs_url] - subprocess.call(cmd) - -def main(args): - global prefix, gitdir, dirname, branches, bmarks - global marks, blob_marks, parsed_refs - global peer, mode, bad_mail, bad_name - global track_branches, force_push, is_tmp - global parsed_tags - global filenodes - global fake_bmark, hg_version - global dry_run - global notes, alias - - marks = None - is_tmp = False - gitdir = os.environ.get('GIT_DIR', None) - - if len(args) < 3: - die('Not enough arguments.') - - if not gitdir: - die('GIT_DIR not set') - - alias = args[1] - url = args[2] - peer = None - - hg_git_compat = get_config_bool('remote-hg.hg-git-compat') - track_branches = get_config_bool('remote-hg.track-branches', True) - force_push = False - - if hg_git_compat: - mode = 'hg' - bad_mail = 'none@none' - bad_name = '' - else: - mode = 'git' - bad_mail = 'unknown' - bad_name = 'Unknown' - - if alias[4:] == url: - is_tmp = True - alias = hashlib.sha1(alias).hexdigest() - - dirname = os.path.join(gitdir, 'hg', alias) - branches = {} - bmarks = {} - blob_marks = {} - parsed_refs = {} - parsed_tags = {} - filenodes = {} - fake_bmark = None - try: - hg_version = tuple(int(e) for e in util.version().split('.')) - except: - hg_version = None - dry_run = False - notes = set() - - repo = get_repo(url, alias) - prefix = 'refs/hg/%s' % alias - - if not is_tmp: - fix_path(alias, peer or repo, url) - - marks_path = os.path.join(dirname, 'marks-hg') - marks = Marks(marks_path, repo) - - if sys.platform == 'win32': - import msvcrt - msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) - - parser = Parser(repo) - for line in parser: - if parser.check('capabilities'): - do_capabilities(parser) - elif parser.check('list'): - do_list(parser) - elif parser.check('import'): - do_import(parser) - elif parser.check('export'): - do_export(parser) - elif parser.check('option'): - do_option(parser) - else: - die('unhandled command: %s' % line) - sys.stdout.flush() -def bye(): - if not marks: - return - if not is_tmp: - marks.store() - else: - shutil.rmtree(dirname) +sys.stderr.write('WARNING: git-remote-hg is now maintained independently.\n') +sys.stderr.write('WARNING: For more information visit https://github.com/felipec/git-remote-hg\n') -atexit.register(bye) -sys.exit(main(sys.argv)) +sys.stderr.write('''WARNING: +WARNING: You can pick a directory on your $PATH and download it, e.g.: +WARNING: $ wget -O $HOME/bin/git-remote-hg \\ +WARNING: https://raw.github.com/felipec/git-remote-hg/master/git-remote-hg +WARNING: $ chmod +x $HOME/bin/git-remote-hg +''') diff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh deleted file mode 100755 index a4656ce412..0000000000 --- a/contrib/remote-helpers/test-bzr.sh +++ /dev/null @@ -1,438 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012 Felipe Contreras -# - -test_description='Test remote-bzr' - -test -n "$TEST_DIRECTORY" || TEST_DIRECTORY=${0%/*}/../../t -. "$TEST_DIRECTORY"/test-lib.sh - -if ! test_have_prereq PYTHON -then - skip_all='skipping remote-bzr tests; python not available' - test_done -fi - -if ! python -c 'import bzrlib' -then - skip_all='skipping remote-bzr tests; bzr not available' - test_done -fi - -check () { - echo $3 >expected && - git --git-dir=$1/.git log --format='%s' -1 $2 >actual - test_cmp expected actual -} - -bzr whoami "A U Thor " - -test_expect_success 'cloning' ' - ( - bzr init bzrrepo && - cd bzrrepo && - echo one >content && - bzr add content && - bzr commit -m one - ) && - - git clone "bzr::bzrrepo" gitrepo && - check gitrepo HEAD one -' - -test_expect_success 'pulling' ' - ( - cd bzrrepo && - echo two >content && - bzr commit -m two - ) && - - (cd gitrepo && git pull) && - - check gitrepo HEAD two -' - -test_expect_success 'pushing' ' - ( - cd gitrepo && - echo three >content && - git commit -a -m three && - git push - ) && - - echo three >expected && - cat bzrrepo/content >actual && - test_cmp expected actual -' - -test_expect_success 'forced pushing' ' - ( - cd gitrepo && - echo three-new >content && - git commit -a --amend -m three-new && - git push -f - ) && - - ( - cd bzrrepo && - # the forced update overwrites the bzr branch but not the bzr - # working directory (it tries to merge instead) - bzr revert - ) && - - echo three-new >expected && - cat bzrrepo/content >actual && - test_cmp expected actual -' - -test_expect_success 'roundtrip' ' - ( - cd gitrepo && - git pull && - git log --format="%s" -1 origin/master >actual - ) && - echo three-new >expected && - test_cmp expected actual && - - (cd gitrepo && git push && git pull) && - - ( - cd bzrrepo && - echo four >content && - bzr commit -m four - ) && - - (cd gitrepo && git pull && git push) && - - check gitrepo HEAD four && - - ( - cd gitrepo && - echo five >content && - git commit -a -m five && - git push && git pull - ) && - - (cd bzrrepo && bzr revert) && - - echo five >expected && - cat bzrrepo/content >actual && - test_cmp expected actual -' - -cat >expected <<\EOF -100644 blob 54f9d6da5c91d556e6b54340b1327573073030af content -100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb executable -120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea link -EOF - -test_expect_success 'special modes' ' - ( - cd bzrrepo && - echo exec >executable - chmod +x executable && - bzr add executable - bzr commit -m exec && - ln -s content link - bzr add link - bzr commit -m link && - mkdir dir && - bzr add dir && - bzr commit -m dir - ) && - - ( - cd gitrepo && - git pull - git ls-tree HEAD >../actual - ) && - - test_cmp expected actual && - - ( - cd gitrepo && - git cat-file -p HEAD:link >../actual - ) && - - printf content >expected && - test_cmp expected actual -' - -cat >expected <<\EOF -100644 blob 54f9d6da5c91d556e6b54340b1327573073030af content -100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb executable -120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea link -040000 tree 35c0caa46693cef62247ac89a680f0c5ce32b37b movedir-new -EOF - -test_expect_success 'moving directory' ' - ( - cd bzrrepo && - mkdir movedir && - echo one >movedir/one && - echo two >movedir/two && - bzr add movedir && - bzr commit -m movedir && - bzr mv movedir movedir-new && - bzr commit -m movedir-new - ) && - - ( - cd gitrepo && - git pull && - git ls-tree HEAD >../actual - ) && - - test_cmp expected actual -' - -test_expect_success 'different authors' ' - ( - cd bzrrepo && - echo john >>content && - bzr commit -m john \ - --author "Jane Rey " \ - --author "John Doe " - ) && - - ( - cd gitrepo && - git pull && - git show --format="%an <%ae>, %cn <%ce>" --quiet >../actual - ) && - - echo "Jane Rey , A U Thor " >expected && - test_cmp expected actual -' - -# cleanup previous stuff -rm -rf bzrrepo gitrepo - -test_expect_success 'fetch utf-8 filenames' ' - test_when_finished "rm -rf bzrrepo gitrepo && LC_ALL=C" && - - LC_ALL=en_US.UTF-8 - export LC_ALL - - ( - bzr init bzrrepo && - cd bzrrepo && - - echo test >>"ærø" && - bzr add "ærø" && - echo test >>"ø~?" && - bzr add "ø~?" && - bzr commit -m add-utf-8 && - echo test >>"ærø" && - bzr commit -m test-utf-8 && - bzr rm "ø~?" && - bzr mv "ærø" "ø~?" && - bzr commit -m bzr-mv-utf-8 - ) && - - ( - git clone "bzr::bzrrepo" gitrepo && - cd gitrepo && - git -c core.quotepath=false ls-files >../actual - ) && - echo "ø~?" >expected && - test_cmp expected actual -' - -test_expect_success 'push utf-8 filenames' ' - test_when_finished "rm -rf bzrrepo gitrepo && LC_ALL=C" && - - mkdir -p tmp && cd tmp && - - LC_ALL=en_US.UTF-8 - export LC_ALL - - ( - bzr init bzrrepo && - cd bzrrepo && - - echo one >>content && - bzr add content && - bzr commit -m one - ) && - - ( - git clone "bzr::bzrrepo" gitrepo && - cd gitrepo && - - echo test >>"ærø" && - git add "ærø" && - git commit -m utf-8 && - - git push - ) && - - (cd bzrrepo && bzr ls >../actual) && - printf "content\nærø\n" >expected && - test_cmp expected actual -' - -test_expect_success 'pushing a merge' ' - test_when_finished "rm -rf bzrrepo gitrepo" && - - ( - bzr init bzrrepo && - cd bzrrepo && - echo one >content && - bzr add content && - bzr commit -m one - ) && - - git clone "bzr::bzrrepo" gitrepo && - - ( - cd bzrrepo && - echo two >content && - bzr commit -m two - ) && - - ( - cd gitrepo && - echo three >content && - git commit -a -m three && - git fetch && - git merge origin/master || true && - echo three >content && - git commit -a --no-edit && - git push - ) && - - echo three >expected && - cat bzrrepo/content >actual && - test_cmp expected actual -' - -cat >expected <<\EOF -origin/HEAD -origin/branch -origin/trunk -EOF - -test_expect_success 'proper bzr repo' ' - test_when_finished "rm -rf bzrrepo gitrepo" && - - bzr init-repo bzrrepo && - - ( - bzr init bzrrepo/trunk && - cd bzrrepo/trunk && - echo one >>content && - bzr add content && - bzr commit -m one - ) && - - ( - bzr branch bzrrepo/trunk bzrrepo/branch && - cd bzrrepo/branch && - echo two >>content && - bzr commit -m one - ) && - - ( - git clone "bzr::bzrrepo" gitrepo && - cd gitrepo && - git for-each-ref --format "%(refname:short)" refs/remotes/origin >../actual - ) && - - test_cmp expected actual -' - -test_expect_success 'strip' ' - test_when_finished "rm -rf bzrrepo gitrepo" && - - ( - bzr init bzrrepo && - cd bzrrepo && - - echo one >>content && - bzr add content && - bzr commit -m one && - - echo two >>content && - bzr commit -m two - ) && - - git clone "bzr::bzrrepo" gitrepo && - - ( - cd bzrrepo && - bzr uncommit --force && - - echo three >>content && - bzr commit -m three && - - echo four >>content && - bzr commit -m four && - bzr log --line | sed -e "s/^[0-9][0-9]*: //" >../expected - ) && - - ( - cd gitrepo && - git fetch && - git log --format="%an %ad %s" --date=short origin/master >../actual - ) && - - test_cmp expected actual -' - -test_expect_success 'export utf-8 authors' ' - test_when_finished "rm -rf bzrrepo gitrepo && LC_ALL=C && GIT_COMMITTER_NAME=\"C O Mitter\"" - - LC_ALL=en_US.UTF-8 - export LC_ALL - - GIT_COMMITTER_NAME="Grégoire" - export GIT_COMMITTER_NAME - - bzr init bzrrepo && - - ( - git init gitrepo && - cd gitrepo && - echo greg >>content && - git add content && - git commit -m one && - git remote add bzr "bzr::../bzrrepo" && - git push bzr master - ) && - - ( - cd bzrrepo && - bzr log | grep "^committer: " >../actual - ) && - - echo "committer: Grégoire " >expected && - test_cmp expected actual -' - -test_expect_success 'push different author' ' - test_when_finished "rm -rf bzrrepo gitrepo" && - - bzr init bzrrepo && - - ( - git init gitrepo && - cd gitrepo && - echo john >> content && - git add content && - git commit -m john --author "John Doe " && - git remote add bzr "bzr::../bzrrepo" && - git push bzr master - ) && - - ( - cd bzrrepo && - bzr log | grep "^author: " > ../actual - ) && - - echo "author: John Doe " > expected && - test_cmp expected actual -' - -test_done diff --git a/contrib/remote-helpers/test-hg-bidi.sh b/contrib/remote-helpers/test-hg-bidi.sh deleted file mode 100755 index d86e147d3d..0000000000 --- a/contrib/remote-helpers/test-hg-bidi.sh +++ /dev/null @@ -1,243 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012 Felipe Contreras -# -# Base commands from hg-git tests: -# https://bitbucket.org/durin42/hg-git/src -# - -test_description='Test bidirectionality of remote-hg' - -test -n "$TEST_DIRECTORY" || TEST_DIRECTORY=${0%/*}/../../t -. "$TEST_DIRECTORY"/test-lib.sh - -if ! test_have_prereq PYTHON -then - skip_all='skipping remote-hg tests; python not available' - test_done -fi - -if ! python -c 'import mercurial' -then - skip_all='skipping remote-hg tests; mercurial not available' - test_done -fi - -# clone to a git repo -git_clone () { - git clone -q "hg::$1" $2 -} - -# clone to an hg repo -hg_clone () { - ( - hg init $2 && - cd $1 && - git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' - ) && - - (cd $2 && hg -q update) -} - -# push an hg repo -hg_push () { - ( - cd $2 - git checkout -q -b tmp && - git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' && - git checkout -q @{-1} && - git branch -q -D tmp 2>/dev/null || true - ) -} - -hg_log () { - hg -R $1 log --graph --debug -} - -setup () { - ( - echo "[ui]" - echo "username = A U Thor " - echo "[defaults]" - echo "backout = -d \"0 0\"" - echo "commit = -d \"0 0\"" - echo "debugrawcommit = -d \"0 0\"" - echo "tag = -d \"0 0\"" - echo "[extensions]" - echo "graphlog =" - ) >>"$HOME"/.hgrc && - git config --global remote-hg.hg-git-compat true - git config --global remote-hg.track-branches true - - HGEDITOR=/usr/bin/true - GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230" - GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" - export HGEDITOR GIT_AUTHOR_DATE GIT_COMMITTER_DATE -} - -setup - -test_expect_success 'encoding' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - - echo alpha >alpha && - git add alpha && - git commit -m "add älphà" && - - GIT_AUTHOR_NAME="tést èncödîng" && - export GIT_AUTHOR_NAME && - echo beta >beta && - git add beta && - git commit -m "add beta" && - - echo gamma >gamma && - git add gamma && - git commit -m "add gämmâ" && - - : TODO git config i18n.commitencoding latin-1 && - echo delta >delta && - git add delta && - git commit -m "add déltà" - ) && - - hg_clone gitrepo hgrepo && - git_clone hgrepo gitrepo2 && - hg_clone gitrepo2 hgrepo2 && - - HGENCODING=utf-8 hg_log hgrepo >expected && - HGENCODING=utf-8 hg_log hgrepo2 >actual && - - test_cmp expected actual -' - -test_expect_success 'file removal' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - echo beta >beta && - git add beta && - git commit -m "add beta" - mkdir foo && - echo blah >foo/bar && - git add foo && - git commit -m "add foo" && - git rm alpha && - git commit -m "remove alpha" && - git rm foo/bar && - git commit -m "remove foo/bar" - ) && - - hg_clone gitrepo hgrepo && - git_clone hgrepo gitrepo2 && - hg_clone gitrepo2 hgrepo2 && - - hg_log hgrepo >expected && - hg_log hgrepo2 >actual && - - test_cmp expected actual -' - -test_expect_success 'git tags' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - git config receive.denyCurrentBranch ignore && - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - git tag alpha && - - echo beta >beta && - git add beta && - git commit -m "add beta" && - git tag -a -m "added tag beta" beta - ) && - - hg_clone gitrepo hgrepo && - git_clone hgrepo gitrepo2 && - hg_clone gitrepo2 hgrepo2 && - - hg_log hgrepo >expected && - hg_log hgrepo2 >actual && - - test_cmp expected actual -' - -test_expect_success 'hg branch' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - - echo alpha >alpha && - git add alpha && - git commit -q -m "add alpha" && - git checkout -q -b not-master - ) && - - ( - hg_clone gitrepo hgrepo && - - cd hgrepo && - hg -q co default && - hg mv alpha beta && - hg -q commit -m "rename alpha to beta" && - hg branch gamma | grep -v "permanent and global" && - hg -q commit -m "started branch gamma" - ) && - - hg_push hgrepo gitrepo && - hg_clone gitrepo hgrepo2 && - - : Back to the common revision && - (cd hgrepo && hg checkout default) && - - hg_log hgrepo >expected && - hg_log hgrepo2 >actual && - - test_cmp expected actual -' - -test_expect_success 'hg tags' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - git checkout -q -b not-master - ) && - - ( - hg_clone gitrepo hgrepo && - - cd hgrepo && - hg co default && - hg tag alpha - ) && - - hg_push hgrepo gitrepo && - hg_clone gitrepo hgrepo2 && - - hg_log hgrepo >expected && - hg_log hgrepo2 >actual && - - test_cmp expected actual -' - -test_done diff --git a/contrib/remote-helpers/test-hg-hg-git.sh b/contrib/remote-helpers/test-hg-hg-git.sh deleted file mode 100755 index b23909ae6c..0000000000 --- a/contrib/remote-helpers/test-hg-hg-git.sh +++ /dev/null @@ -1,542 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012 Felipe Contreras -# -# Base commands from hg-git tests: -# https://bitbucket.org/durin42/hg-git/src -# - -test_description='Test remote-hg output compared to hg-git' - -test -n "$TEST_DIRECTORY" || TEST_DIRECTORY=${0%/*}/../../t -. "$TEST_DIRECTORY"/test-lib.sh - -if ! test_have_prereq PYTHON -then - skip_all='skipping remote-hg tests; python not available' - test_done -fi - -if ! python -c 'import mercurial' -then - skip_all='skipping remote-hg tests; mercurial not available' - test_done -fi - -if ! python -c 'import hggit' -then - skip_all='skipping remote-hg tests; hg-git not available' - test_done -fi - -# clone to a git repo with git -git_clone_git () { - git clone -q "hg::$1" $2 && - (cd $2 && git checkout master && git branch -D default) -} - -# clone to an hg repo with git -hg_clone_git () { - ( - hg init $2 && - hg -R $2 bookmark -i master && - cd $1 && - git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' - ) && - - (cd $2 && hg -q update) -} - -# clone to a git repo with hg -git_clone_hg () { - ( - git init -q $2 && - cd $1 && - hg bookmark -i -f -r tip master && - hg -q push -r master ../$2 || true - ) -} - -# clone to an hg repo with hg -hg_clone_hg () { - hg -q clone $1 $2 -} - -# push an hg repo with git -hg_push_git () { - ( - cd $2 - git checkout -q -b tmp && - git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' && - git branch -D default && - git checkout -q @{-1} && - git branch -q -D tmp 2>/dev/null || true - ) -} - -# push an hg git repo with hg -hg_push_hg () { - ( - cd $1 && - hg -q push ../$2 || true - ) -} - -hg_log () { - hg -R $1 log --graph --debug >log && - grep -v 'tag: *default/' log -} - -git_log () { - git --git-dir=$1/.git fast-export --branches -} - -setup () { - ( - echo "[ui]" - echo "username = A U Thor " - echo "[defaults]" - echo "backout = -d \"0 0\"" - echo "commit = -d \"0 0\"" - echo "debugrawcommit = -d \"0 0\"" - echo "tag = -d \"0 0\"" - echo "[extensions]" - echo "hgext.bookmarks =" - echo "hggit =" - echo "graphlog =" - ) >>"$HOME"/.hgrc && - git config --global receive.denycurrentbranch warn - git config --global remote-hg.hg-git-compat true - git config --global remote-hg.track-branches false - - HGEDITOR=true - HGMERGE=true - - GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230" - GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" - export HGEDITOR HGMERGE GIT_AUTHOR_DATE GIT_COMMITTER_DATE -} - -setup - -test_expect_success 'executable bit' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - echo alpha >alpha && - chmod 0644 alpha && - git add alpha && - git commit -m "add alpha" && - chmod 0755 alpha && - git add alpha && - git commit -m "set executable bit" && - chmod 0644 alpha && - git add alpha && - git commit -m "clear executable bit" - ) && - - for x in hg git - do - ( - hg_clone_$x gitrepo hgrepo-$x && - cd hgrepo-$x && - hg_log . && - hg manifest -r 1 -v && - hg manifest -v - ) >"output-$x" && - - git_clone_$x hgrepo-$x gitrepo2-$x && - git_log gitrepo2-$x >"log-$x" - done && - - test_cmp output-hg output-git && - test_cmp log-hg log-git -' - -test_expect_success 'symlink' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - ln -s alpha beta && - git add beta && - git commit -m "add beta" - ) && - - for x in hg git - do - ( - hg_clone_$x gitrepo hgrepo-$x && - cd hgrepo-$x && - hg_log . && - hg manifest -v - ) >"output-$x" && - - git_clone_$x hgrepo-$x gitrepo2-$x && - git_log gitrepo2-$x >"log-$x" - done && - - test_cmp output-hg output-git && - test_cmp log-hg log-git -' - -test_expect_success 'merge conflict 1' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - hg init hgrepo1 && - cd hgrepo1 && - echo A >afile && - hg add afile && - hg ci -m "origin" && - - echo B >afile && - hg ci -m "A->B" && - - hg up -r0 && - echo C >afile && - hg ci -m "A->C" && - - hg merge -r1 && - echo C >afile && - hg resolve -m afile && - hg ci -m "merge to C" - ) && - - for x in hg git - do - git_clone_$x hgrepo1 gitrepo-$x && - hg_clone_$x gitrepo-$x hgrepo2-$x && - hg_log hgrepo2-$x >"hg-log-$x" && - git_log gitrepo-$x >"git-log-$x" - done && - - test_cmp hg-log-hg hg-log-git && - test_cmp git-log-hg git-log-git -' - -test_expect_success 'merge conflict 2' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - hg init hgrepo1 && - cd hgrepo1 && - echo A >afile && - hg add afile && - hg ci -m "origin" && - - echo B >afile && - hg ci -m "A->B" && - - hg up -r0 && - echo C >afile && - hg ci -m "A->C" && - - hg merge -r1 || true && - echo B >afile && - hg resolve -m afile && - hg ci -m "merge to B" - ) && - - for x in hg git - do - git_clone_$x hgrepo1 gitrepo-$x && - hg_clone_$x gitrepo-$x hgrepo2-$x && - hg_log hgrepo2-$x >"hg-log-$x" && - git_log gitrepo-$x >"git-log-$x" - done && - - test_cmp hg-log-hg hg-log-git && - test_cmp git-log-hg git-log-git -' - -test_expect_success 'converged merge' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - hg init hgrepo1 && - cd hgrepo1 && - echo A >afile && - hg add afile && - hg ci -m "origin" && - - echo B >afile && - hg ci -m "A->B" && - - echo C >afile && - hg ci -m "B->C" && - - hg up -r0 && - echo C >afile && - hg ci -m "A->C" && - - hg merge -r2 || true && - hg ci -m "merge" - ) && - - for x in hg git - do - git_clone_$x hgrepo1 gitrepo-$x && - hg_clone_$x gitrepo-$x hgrepo2-$x && - hg_log hgrepo2-$x >"hg-log-$x" && - git_log gitrepo-$x >"git-log-$x" - done && - - test_cmp hg-log-hg hg-log-git && - test_cmp git-log-hg git-log-git -' - -test_expect_success 'encoding' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - - echo alpha >alpha && - git add alpha && - git commit -m "add älphà" && - - GIT_AUTHOR_NAME="tést èncödîng" && - export GIT_AUTHOR_NAME && - echo beta >beta && - git add beta && - git commit -m "add beta" && - - echo gamma >gamma && - git add gamma && - git commit -m "add gämmâ" && - - : TODO git config i18n.commitencoding latin-1 && - echo delta >delta && - git add delta && - git commit -m "add déltà" - ) && - - for x in hg git - do - hg_clone_$x gitrepo hgrepo-$x && - git_clone_$x hgrepo-$x gitrepo2-$x && - - HGENCODING=utf-8 hg_log hgrepo-$x >"hg-log-$x" && - git_log gitrepo2-$x >"git-log-$x" - done && - - test_cmp hg-log-hg hg-log-git && - test_cmp git-log-hg git-log-git -' - -test_expect_success 'file removal' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - echo beta >beta && - git add beta && - git commit -m "add beta" - mkdir foo && - echo blah >foo/bar && - git add foo && - git commit -m "add foo" && - git rm alpha && - git commit -m "remove alpha" && - git rm foo/bar && - git commit -m "remove foo/bar" - ) && - - for x in hg git - do - ( - hg_clone_$x gitrepo hgrepo-$x && - cd hgrepo-$x && - hg_log . && - hg manifest -r 3 && - hg manifest - ) >"output-$x" && - - git_clone_$x hgrepo-$x gitrepo2-$x && - git_log gitrepo2-$x >"log-$x" - done && - - test_cmp output-hg output-git && - test_cmp log-hg log-git -' - -test_expect_success 'git tags' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - ( - git init -q gitrepo && - cd gitrepo && - git config receive.denyCurrentBranch ignore && - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - git tag alpha && - - echo beta >beta && - git add beta && - git commit -m "add beta" && - git tag -a -m "added tag beta" beta - ) && - - for x in hg git - do - hg_clone_$x gitrepo hgrepo-$x && - hg_log hgrepo-$x >"log-$x" - done && - - test_cmp log-hg log-git -' - -test_expect_success 'hg author' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - for x in hg git - do - ( - git init -q gitrepo-$x && - cd gitrepo-$x && - - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - git checkout -q -b not-master - ) && - - ( - hg_clone_$x gitrepo-$x hgrepo-$x && - cd hgrepo-$x && - - hg co master && - echo beta >beta && - hg add beta && - hg commit -u "test" -m "add beta" && - - echo gamma >>beta && - hg commit -u "test (comment)" -m "modify beta" && - - echo gamma >gamma && - hg add gamma && - hg commit -u "" -m "add gamma" && - - echo delta >delta && - hg add delta && - hg commit -u "name" -m "add delta" && - - echo epsilon >epsilon && - hg add epsilon && - hg commit -u "name zeta && - hg add zeta && - hg commit -u " test " -m "add zeta" && - - echo eta >eta && - hg add eta && - hg commit -u "test < test@example.com >" -m "add eta" && - - echo theta >theta && - hg add theta && - hg commit -u "test >test@example.com>" -m "add theta" && - - echo iota >iota && - hg add iota && - hg commit -u "test example com>" -m "add iota" - ) && - - hg_push_$x hgrepo-$x gitrepo-$x && - hg_clone_$x gitrepo-$x hgrepo2-$x && - - hg_log hgrepo2-$x >"hg-log-$x" && - git_log gitrepo-$x >"git-log-$x" - done && - - test_cmp hg-log-hg hg-log-git && - test_cmp git-log-hg git-log-git -' - -test_expect_success 'hg branch' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - for x in hg git - do - ( - git init -q gitrepo-$x && - cd gitrepo-$x && - - echo alpha >alpha && - git add alpha && - git commit -q -m "add alpha" && - git checkout -q -b not-master - ) && - - ( - hg_clone_$x gitrepo-$x hgrepo-$x && - - cd hgrepo-$x && - hg -q co master && - hg mv alpha beta && - hg -q commit -m "rename alpha to beta" && - hg branch gamma | grep -v "permanent and global" && - hg -q commit -m "started branch gamma" - ) && - - hg_push_$x hgrepo-$x gitrepo-$x && - hg_clone_$x gitrepo-$x hgrepo2-$x && - - hg_log hgrepo2-$x >"hg-log-$x" && - git_log gitrepo-$x >"git-log-$x" - done && - - test_cmp hg-log-hg hg-log-git && - test_cmp git-log-hg git-log-git -' - -test_expect_success 'hg tags' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - for x in hg git - do - ( - git init -q gitrepo-$x && - cd gitrepo-$x && - - echo alpha >alpha && - git add alpha && - git commit -m "add alpha" && - git checkout -q -b not-master - ) && - - ( - hg_clone_$x gitrepo-$x hgrepo-$x && - - cd hgrepo-$x && - hg co master && - hg tag alpha - ) && - - hg_push_$x hgrepo-$x gitrepo-$x && - hg_clone_$x gitrepo-$x hgrepo2-$x && - - ( - git --git-dir=gitrepo-$x/.git tag -l && - hg_log hgrepo2-$x && - cat hgrepo2-$x/.hgtags - ) >"output-$x" - done && - - test_cmp output-hg output-git -' - -test_done diff --git a/contrib/remote-helpers/test-hg.sh b/contrib/remote-helpers/test-hg.sh deleted file mode 100755 index 7d90056cf3..0000000000 --- a/contrib/remote-helpers/test-hg.sh +++ /dev/null @@ -1,848 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012 Felipe Contreras -# -# Base commands from hg-git tests: -# https://bitbucket.org/durin42/hg-git/src -# - -test_description='Test remote-hg' - -test -n "$TEST_DIRECTORY" || TEST_DIRECTORY=${0%/*}/../../t -. "$TEST_DIRECTORY"/test-lib.sh - -if ! test_have_prereq PYTHON -then - skip_all='skipping remote-hg tests; python not available' - test_done -fi - -if ! python -c 'import mercurial' -then - skip_all='skipping remote-hg tests; mercurial not available' - test_done -fi - -check () { - echo $3 >expected && - git --git-dir=$1/.git log --format='%s' -1 $2 >actual - test_cmp expected actual -} - -check_branch () { - if test -n "$3" - then - echo $3 >expected && - hg -R $1 log -r $2 --template '{desc}\n' >actual && - test_cmp expected actual - else - hg -R $1 branches >out && - ! grep $2 out - fi -} - -check_bookmark () { - if test -n "$3" - then - echo $3 >expected && - hg -R $1 log -r "bookmark('$2')" --template '{desc}\n' >actual && - test_cmp expected actual - else - hg -R $1 bookmarks >out && - ! grep $2 out - fi -} - -check_push () { - expected_ret=$1 ret=0 ref_ret=0 - - shift - git push origin "$@" 2>error - ret=$? - cat error - - while IFS=':' read branch kind - do - case "$kind" in - 'new') - grep "^ \* \[new branch\] *${branch} -> ${branch}$" error || ref_ret=1 - ;; - 'non-fast-forward') - grep "^ ! \[rejected\] *${branch} -> ${branch} (non-fast-forward)$" error || ref_ret=1 - ;; - 'fetch-first') - grep "^ ! \[rejected\] *${branch} -> ${branch} (fetch first)$" error || ref_ret=1 - ;; - 'forced-update') - grep "^ + [a-f0-9]*\.\.\.[a-f0-9]* *${branch} -> ${branch} (forced update)$" error || ref_ret=1 - ;; - '') - grep "^ [a-f0-9]*\.\.[a-f0-9]* *${branch} -> ${branch}$" error || ref_ret=1 - ;; - esac - test $ref_ret -ne 0 && echo "match for '$branch' failed" && break - done - - if test $expected_ret -ne $ret || test $ref_ret -ne 0 - then - return 1 - fi - - return 0 -} - -setup () { - ( - echo "[ui]" - echo "username = H G Wells " - echo "[extensions]" - echo "mq =" - ) >>"$HOME"/.hgrc && - - GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230" && - GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" && - export GIT_COMMITTER_DATE GIT_AUTHOR_DATE -} - -setup - -test_expect_success 'cloning' ' - test_when_finished "rm -rf gitrepo*" && - - ( - hg init hgrepo && - cd hgrepo && - echo zero >content && - hg add content && - hg commit -m zero - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo HEAD zero -' - -test_expect_success 'cloning with branches' ' - test_when_finished "rm -rf gitrepo*" && - - ( - cd hgrepo && - hg branch next && - echo next >content && - hg commit -m next - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo origin/branches/next next -' - -test_expect_success 'cloning with bookmarks' ' - test_when_finished "rm -rf gitrepo*" && - - ( - cd hgrepo && - hg checkout default && - hg bookmark feature-a && - echo feature-a >content && - hg commit -m feature-a - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo origin/feature-a feature-a -' - -test_expect_success 'update bookmark' ' - test_when_finished "rm -rf gitrepo*" && - - ( - cd hgrepo && - hg bookmark devel - ) && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git checkout --quiet devel && - echo devel >content && - git commit -a -m devel && - git push --quiet - ) && - - check_bookmark hgrepo devel devel -' - -test_expect_success 'new bookmark' ' - test_when_finished "rm -rf gitrepo*" && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git checkout --quiet -b feature-b && - echo feature-b >content && - git commit -a -m feature-b && - git push --quiet origin feature-b - ) && - - check_bookmark hgrepo feature-b feature-b -' - -# cleanup previous stuff -rm -rf hgrepo - -author_test () { - echo $1 >>content && - hg commit -u "$2" -m "add $1" && - echo "$3" >>../expected -} - -test_expect_success 'authors' ' - test_when_finished "rm -rf hgrepo gitrepo" && - - ( - hg init hgrepo && - cd hgrepo && - - touch content && - hg add content && - - >../expected && - author_test alpha "" "H G Wells " && - author_test beta "beta" "beta " && - author_test gamma "gamma (comment)" "gamma " && - author_test delta "" "Unknown " && - author_test epsilon "epsilon" "epsilon " && - author_test zeta "zeta " && - author_test eta " eta " "eta " && - author_test theta "theta < test@example.com >" "theta " && - author_test iota "iota >test@example.com>" "iota " && - author_test kappa "kappa < test example com>" "kappa " && - author_test lambda "lambda@example.com" "Unknown " && - author_test mu "mu.mu@example.com" "Unknown " - ) && - - git clone "hg::hgrepo" gitrepo && - git --git-dir=gitrepo/.git log --reverse --format="%an <%ae>" >actual && - - test_cmp expected actual -' - -test_expect_success 'strip' ' - test_when_finished "rm -rf hgrepo gitrepo" && - - ( - hg init hgrepo && - cd hgrepo && - - echo one >>content && - hg add content && - hg commit -m one && - - echo two >>content && - hg commit -m two - ) && - - git clone "hg::hgrepo" gitrepo && - - ( - cd hgrepo && - hg strip 1 && - - echo three >>content && - hg commit -m three && - - echo four >>content && - hg commit -m four - ) && - - ( - cd gitrepo && - git fetch && - git log --format="%s" origin/master >../actual - ) && - - hg -R hgrepo log --template "{desc}\n" >expected && - test_cmp actual expected -' - -test_expect_success 'remote push with master bookmark' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - ( - hg init hgrepo && - cd hgrepo && - echo zero >content && - hg add content && - hg commit -m zero && - hg bookmark master && - echo one >content && - hg commit -m one - ) && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - echo two >content && - git commit -a -m two && - git push - ) && - - check_branch hgrepo default two -' - -cat >expected <<\EOF -changeset: 0:6e2126489d3d -tag: tip -user: A U Thor -date: Mon Jan 01 00:00:00 2007 +0230 -summary: one - -EOF - -test_expect_success 'remote push from master branch' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - hg init hgrepo && - - ( - git init gitrepo && - cd gitrepo && - git remote add origin "hg::../hgrepo" && - echo one >content && - git add content && - git commit -a -m one && - git push origin master - ) && - - hg -R hgrepo log >actual && - cat actual && - test_cmp expected actual && - - check_branch hgrepo default one -' - -GIT_REMOTE_HG_TEST_REMOTE=1 -export GIT_REMOTE_HG_TEST_REMOTE - -test_expect_success 'remote cloning' ' - test_when_finished "rm -rf gitrepo*" && - - ( - hg init hgrepo && - cd hgrepo && - echo zero >content && - hg add content && - hg commit -m zero - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo HEAD zero -' - -test_expect_success 'moving remote clone' ' - test_when_finished "rm -rf gitrepo*" && - - ( - git clone "hg::hgrepo" gitrepo && - mv gitrepo gitrepo2 && - cd gitrepo2 && - git fetch - ) -' - -test_expect_success 'remote update bookmark' ' - test_when_finished "rm -rf gitrepo*" && - - ( - cd hgrepo && - hg bookmark devel - ) && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git checkout --quiet devel && - echo devel >content && - git commit -a -m devel && - git push --quiet - ) && - - check_bookmark hgrepo devel devel -' - -test_expect_success 'remote new bookmark' ' - test_when_finished "rm -rf gitrepo*" && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git checkout --quiet -b feature-b && - echo feature-b >content && - git commit -a -m feature-b && - git push --quiet origin feature-b - ) && - - check_bookmark hgrepo feature-b feature-b -' - -test_expect_success 'remote push diverged' ' - test_when_finished "rm -rf gitrepo*" && - - git clone "hg::hgrepo" gitrepo && - - ( - cd hgrepo && - hg checkout default && - echo bump >content && - hg commit -m bump - ) && - - ( - cd gitrepo && - echo diverge >content && - git commit -a -m diverged && - check_push 1 <<-\EOF - master:non-fast-forward - EOF - ) && - - check_branch hgrepo default bump -' - -test_expect_success 'remote update bookmark diverge' ' - test_when_finished "rm -rf gitrepo*" && - - ( - cd hgrepo && - hg checkout tip^ && - hg bookmark diverge - ) && - - git clone "hg::hgrepo" gitrepo && - - ( - cd hgrepo && - echo "bump bookmark" >content && - hg commit -m "bump bookmark" - ) && - - ( - cd gitrepo && - git checkout --quiet diverge && - echo diverge >content && - git commit -a -m diverge && - check_push 1 <<-\EOF - diverge:fetch-first - EOF - ) && - - check_bookmark hgrepo diverge "bump bookmark" -' - -test_expect_success 'remote new bookmark multiple branch head' ' - test_when_finished "rm -rf gitrepo*" && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git checkout --quiet -b feature-c HEAD^ && - echo feature-c >content && - git commit -a -m feature-c && - git push --quiet origin feature-c - ) && - - check_bookmark hgrepo feature-c feature-c -' - -# cleanup previous stuff -rm -rf hgrepo - -test_expect_success 'fetch special filenames' ' - test_when_finished "rm -rf hgrepo gitrepo && LC_ALL=C" && - - LC_ALL=en_US.UTF-8 - export LC_ALL - - ( - hg init hgrepo && - cd hgrepo && - - echo test >> "æ rø" && - hg add "æ rø" && - echo test >> "ø~?" && - hg add "ø~?" && - hg commit -m add-utf-8 && - echo test >> "æ rø" && - hg commit -m test-utf-8 && - hg rm "ø~?" && - hg mv "æ rø" "ø~?" && - hg commit -m hg-mv-utf-8 - ) && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git -c core.quotepath=false ls-files > ../actual - ) && - echo "ø~?" > expected && - test_cmp expected actual -' - -test_expect_success 'push special filenames' ' - test_when_finished "rm -rf hgrepo gitrepo && LC_ALL=C" && - - mkdir -p tmp && cd tmp && - - LC_ALL=en_US.UTF-8 - export LC_ALL - - ( - hg init hgrepo && - cd hgrepo && - - echo one >> content && - hg add content && - hg commit -m one - ) && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - - echo test >> "æ rø" && - git add "æ rø" && - git commit -m utf-8 && - - git push - ) && - - (cd hgrepo && - hg update && - hg manifest > ../actual - ) && - - printf "content\næ rø\n" > expected && - test_cmp expected actual -' - -setup_big_push () { - ( - hg init hgrepo && - cd hgrepo && - echo zero >content && - hg add content && - hg commit -m zero && - hg bookmark bad_bmark1 && - echo one >content && - hg commit -m one && - hg bookmark bad_bmark2 && - hg bookmark good_bmark && - hg bookmark -i good_bmark && - hg -q branch good_branch && - echo "good branch" >content && - hg commit -m "good branch" && - hg -q branch bad_branch && - echo "bad branch" >content && - hg commit -m "bad branch" - ) && - - git clone "hg::hgrepo" gitrepo && - - ( - cd gitrepo && - echo two >content && - git commit -q -a -m two && - - git checkout -q good_bmark && - echo three >content && - git commit -q -a -m three && - - git checkout -q bad_bmark1 && - git reset --hard HEAD^ && - echo four >content && - git commit -q -a -m four && - - git checkout -q bad_bmark2 && - git reset --hard HEAD^ && - echo five >content && - git commit -q -a -m five && - - git checkout -q -b new_bmark master && - echo six >content && - git commit -q -a -m six && - - git checkout -q branches/good_branch && - echo seven >content && - git commit -q -a -m seven && - echo eight >content && - git commit -q -a -m eight && - - git checkout -q branches/bad_branch && - git reset --hard HEAD^ && - echo nine >content && - git commit -q -a -m nine && - - git checkout -q -b branches/new_branch master && - echo ten >content && - git commit -q -a -m ten - ) -} - -test_expect_success 'remote big push' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - setup_big_push - - ( - cd gitrepo && - - check_push 1 --all <<-\EOF - master - good_bmark - branches/good_branch - new_bmark:new - branches/new_branch:new - bad_bmark1:non-fast-forward - bad_bmark2:non-fast-forward - branches/bad_branch:non-fast-forward - EOF - ) && - - check_branch hgrepo default one && - check_branch hgrepo good_branch "good branch" && - check_branch hgrepo bad_branch "bad branch" && - check_branch hgrepo new_branch '' && - check_bookmark hgrepo good_bmark one && - check_bookmark hgrepo bad_bmark1 one && - check_bookmark hgrepo bad_bmark2 one && - check_bookmark hgrepo new_bmark '' -' - -test_expect_success 'remote big push fetch first' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - ( - hg init hgrepo && - cd hgrepo && - echo zero >content && - hg add content && - hg commit -m zero && - hg bookmark bad_bmark && - hg bookmark good_bmark && - hg bookmark -i good_bmark && - hg -q branch good_branch && - echo "good branch" >content && - hg commit -m "good branch" && - hg -q branch bad_branch && - echo "bad branch" >content && - hg commit -m "bad branch" - ) && - - git clone "hg::hgrepo" gitrepo && - - ( - cd hgrepo && - hg bookmark -f bad_bmark && - echo update_bmark >content && - hg commit -m "update bmark" - ) && - - ( - cd gitrepo && - echo two >content && - git commit -q -a -m two && - - git checkout -q good_bmark && - echo three >content && - git commit -q -a -m three && - - git checkout -q bad_bmark && - echo four >content && - git commit -q -a -m four && - - git checkout -q branches/bad_branch && - echo five >content && - git commit -q -a -m five && - - check_push 1 --all <<-\EOF && - master - good_bmark - bad_bmark:fetch-first - branches/bad_branch:festch-first - EOF - - git fetch && - - check_push 1 --all <<-\EOF - master - good_bmark - bad_bmark:non-fast-forward - branches/bad_branch:non-fast-forward - EOF - ) -' - -test_expect_success 'remote big push force' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - setup_big_push - - ( - cd gitrepo && - - check_push 0 --force --all <<-\EOF - master - good_bmark - branches/good_branch - new_bmark:new - branches/new_branch:new - bad_bmark1:forced-update - bad_bmark2:forced-update - branches/bad_branch:forced-update - EOF - ) && - - check_branch hgrepo default six && - check_branch hgrepo good_branch eight && - check_branch hgrepo bad_branch nine && - check_branch hgrepo new_branch ten && - check_bookmark hgrepo good_bmark three && - check_bookmark hgrepo bad_bmark1 four && - check_bookmark hgrepo bad_bmark2 five && - check_bookmark hgrepo new_bmark six -' - -test_expect_success 'remote big push dry-run' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - setup_big_push - - ( - cd gitrepo && - - check_push 1 --dry-run --all <<-\EOF && - master - good_bmark - branches/good_branch - new_bmark:new - branches/new_branch:new - bad_bmark1:non-fast-forward - bad_bmark2:non-fast-forward - branches/bad_branch:non-fast-forward - EOF - - check_push 0 --dry-run master good_bmark new_bmark branches/good_branch branches/new_branch <<-\EOF - master - good_bmark - branches/good_branch - new_bmark:new - branches/new_branch:new - EOF - ) && - - check_branch hgrepo default one && - check_branch hgrepo good_branch "good branch" && - check_branch hgrepo bad_branch "bad branch" && - check_branch hgrepo new_branch '' && - check_bookmark hgrepo good_bmark one && - check_bookmark hgrepo bad_bmark1 one && - check_bookmark hgrepo bad_bmark2 one && - check_bookmark hgrepo new_bmark '' -' - -test_expect_success 'remote double failed push' ' - test_when_finished "rm -rf hgrepo gitrepo*" && - - ( - hg init hgrepo && - cd hgrepo && - echo zero >content && - hg add content && - hg commit -m zero && - echo one >content && - hg commit -m one - ) && - - ( - git clone "hg::hgrepo" gitrepo && - cd gitrepo && - git reset --hard HEAD^ && - echo two >content && - git commit -a -m two && - test_expect_code 1 git push && - test_expect_code 1 git push - ) -' - -test_expect_success 'clone remote with master null bookmark, then push to the bookmark' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - hg init hgrepo && - ( - cd hgrepo && - echo a >a && - hg add a && - hg commit -m a && - hg bookmark -r null master - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo HEAD a && - ( - cd gitrepo && - git checkout --quiet -b master && - echo b >b && - git add b && - git commit -m b && - git push origin master - ) -' - -test_expect_success 'clone remote with default null bookmark, then push to the bookmark' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - hg init hgrepo && - ( - cd hgrepo && - echo a >a && - hg add a && - hg commit -m a && - hg bookmark -r null -f default - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo HEAD a && - ( - cd gitrepo && - git checkout --quiet -b default && - echo b >b && - git add b && - git commit -m b && - git push origin default - ) -' - -test_expect_success 'clone remote with generic null bookmark, then push to the bookmark' ' - test_when_finished "rm -rf gitrepo* hgrepo*" && - - hg init hgrepo && - ( - cd hgrepo && - echo a >a && - hg add a && - hg commit -m a && - hg bookmark -r null bmark - ) && - - git clone "hg::hgrepo" gitrepo && - check gitrepo HEAD a && - ( - cd gitrepo && - git checkout --quiet -b bmark && - git remote -v && - echo b >b && - git add b && - git commit -m b && - git push origin bmark - ) -' - -test_done diff --git a/date.c b/date.c index e1a2cee568..782de95d90 100644 --- a/date.c +++ b/date.c @@ -144,8 +144,8 @@ void show_date_relative(unsigned long time, int tz, if (months) { struct strbuf sb = STRBUF_INIT; strbuf_addf(&sb, Q_("%lu year", "%lu years", years), years); - /* TRANSLATORS: "%s" is " years" */ strbuf_addf(timebuf, + /* TRANSLATORS: "%s" is " years" */ Q_("%s, %lu month ago", "%s, %lu months ago", months), sb.buf, months); strbuf_release(&sb); diff --git a/diff.c b/diff.c index 539997fc6a..f72769a1c4 100644 --- a/diff.c +++ b/diff.c @@ -16,6 +16,7 @@ #include "submodule.h" #include "ll-merge.h" #include "string-list.h" +#include "argv-array.h" #ifdef NO_FAST_WORKING_DIRECTORY #define FAST_WORKING_DIRECTORY 0 @@ -1461,20 +1462,12 @@ int print_stat_summary(FILE *fp, int files, int insertions, int deletions) * but nothing about added/removed lines? Is this a bug in Git?"). */ if (insertions || deletions == 0) { - /* - * TRANSLATORS: "+" in (+) is a line addition marker; - * do not translate it. - */ strbuf_addf(&sb, (insertions == 1) ? ", %d insertion(+)" : ", %d insertions(+)", insertions); } if (deletions || insertions == 0) { - /* - * TRANSLATORS: "-" in (-) is a line removal marker; - * do not translate it. - */ strbuf_addf(&sb, (deletions == 1) ? ", %d deletion(-)" : ", %d deletions(-)", deletions); @@ -2902,9 +2895,8 @@ static void run_external_diff(const char *pgm, int complete_rewrite, struct diff_options *o) { - const char *spawn_arg[10]; + struct argv_array argv = ARGV_ARRAY_INIT; int retval; - const char **arg = &spawn_arg[0]; struct diff_queue_struct *q = &diff_queued_diff; const char *env[3] = { NULL }; char env_counter[50]; @@ -2915,23 +2907,22 @@ static void run_external_diff(const char *pgm, const char *othername = (other ? other : name); temp_one = prepare_temp_file(name, one); temp_two = prepare_temp_file(othername, two); - *arg++ = pgm; - *arg++ = name; - *arg++ = temp_one->name; - *arg++ = temp_one->hex; - *arg++ = temp_one->mode; - *arg++ = temp_two->name; - *arg++ = temp_two->hex; - *arg++ = temp_two->mode; + argv_array_push(&argv, pgm); + argv_array_push(&argv, name); + argv_array_push(&argv, temp_one->name); + argv_array_push(&argv, temp_one->hex); + argv_array_push(&argv, temp_one->mode); + argv_array_push(&argv, temp_two->name); + argv_array_push(&argv, temp_two->hex); + argv_array_push(&argv, temp_two->mode); if (other) { - *arg++ = other; - *arg++ = xfrm_msg; + argv_array_push(&argv, other); + argv_array_push(&argv, xfrm_msg); } } else { - *arg++ = pgm; - *arg++ = name; + argv_array_push(&argv, pgm); + argv_array_push(&argv, name); } - *arg = NULL; fflush(NULL); env[0] = env_counter; @@ -2940,8 +2931,9 @@ static void run_external_diff(const char *pgm, env[1] = env_total; snprintf(env_total, sizeof(env_total), "GIT_DIFF_PATH_TOTAL=%d", q->nr); - retval = run_command_v_opt_cd_env(spawn_arg, RUN_USING_SHELL, NULL, env); + retval = run_command_v_opt_cd_env(argv.argv, RUN_USING_SHELL, NULL, env); remove_tempfile(); + argv_array_clear(&argv); if (retval) { fprintf(stderr, "external diff died, stopping at %s.\n", name); exit(1); diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c index 9ced2dadfe..fccb42b52c 100644 --- a/ewah/ewah_bitmap.c +++ b/ewah/ewah_bitmap.c @@ -41,7 +41,7 @@ static inline void buffer_grow(struct ewah_bitmap *self, size_t new_size) self->alloc_size = new_size; self->buffer = ewah_realloc(self->buffer, self->alloc_size * sizeof(eword_t)); - self->rlw = self->buffer + (rlw_offset / sizeof(size_t)); + self->rlw = self->buffer + (rlw_offset / sizeof(eword_t)); } static inline void buffer_push(struct ewah_bitmap *self, eword_t value) diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh index cf2209b4f2..6a8907e7b3 100755 --- a/git-gui/git-gui.sh +++ b/git-gui/git-gui.sh @@ -1283,7 +1283,7 @@ load_config 0 apply_config # v1.7.0 introduced --show-toplevel to return the canonical work-tree -if {[package vsatisfies $_git_version 1.7.0]} { +if {[package vsatisfies $_git_version 1.7.0-]} { if { [is_Cygwin] } { catch {set _gitworktree [exec cygpath --windows [git rev-parse --show-toplevel]]} } else { @@ -1539,7 +1539,7 @@ proc rescan_stage2 {fd after} { close $fd } - if {[package vsatisfies $::_git_version 1.6.3]} { + if {[package vsatisfies $::_git_version 1.6.3-]} { set ls_others [list --exclude-standard] } else { set ls_others [list --exclude-per-directory=.gitignore] diff --git a/git-p4.py b/git-p4.py index 8d11b25ae3..773cafcd89 100755 --- a/git-p4.py +++ b/git-p4.py @@ -1311,7 +1311,7 @@ def applyCommit(self, id): else: die("unknown modifier %s for %s" % (modifier, path)) - diffcmd = "git diff-tree -p \"%s\"" % (id) + diffcmd = "git diff-tree --full-index -p \"%s\"" % (id) patchcmd = diffcmd + " | git apply " tryPatchCmd = patchcmd + "--check -" applyPatchCmd = patchcmd + "--check --apply -" diff --git a/git-pull.sh b/git-pull.sh index 6cd8ebc534..7358fac864 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -58,11 +58,9 @@ pull_ff=$(git config pull.ff) case "$pull_ff" in false) no_ff=--no-ff - break ;; only) ff_only=--ff-only - break ;; esac diff --git a/git-rebase--am.sh b/git-rebase--am.sh index df46f4ca96..ca20e1e66f 100644 --- a/git-rebase--am.sh +++ b/git-rebase--am.sh @@ -4,6 +4,17 @@ # Copyright (c) 2010 Junio C Hamano. # +# The whole contents of this file is run by dot-sourcing it from +# inside a shell function. It used to be that "return"s we see +# below were not inside any function, and expected to return +# to the function that dot-sourced us. +# +# However, FreeBSD /bin/sh misbehaves on such a construct and +# continues to run the statements that follow such a "return". +# As a work-around, we introduce an extra layer of a function +# here, and immediately call it after defining it. +git_rebase__am () { + case "$action" in continue) git am --resolved --resolvemsg="$resolvemsg" \ @@ -75,3 +86,7 @@ then fi move_to_original_branch + +} +# ... and then we call the whole thing. +git_rebase__am diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 1c41cbd66c..6ec9d3cb40 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -820,6 +820,17 @@ add_exec_commands () { mv "$1.new" "$1" } +# The whole contents of this file is run by dot-sourcing it from +# inside a shell function. It used to be that "return"s we see +# below were not inside any function, and expected to return +# to the function that dot-sourced us. +# +# However, FreeBSD /bin/sh misbehaves on such a construct and +# continues to run the statements that follow such a "return". +# As a work-around, we introduce an extra layer of a function +# here, and immediately call it after defining it. +git_rebase__interactive () { + case "$action" in continue) # do we have anything to commit? @@ -1055,3 +1066,7 @@ GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" output git checkout $onto || die_abort "could not detach HEAD" git update-ref ORIG_HEAD $orig_head do_rest + +} +# ... and then we call the whole thing. +git_rebase__interactive diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh index 5381857c59..71429fd743 100644 --- a/git-rebase--merge.sh +++ b/git-rebase--merge.sh @@ -101,6 +101,17 @@ finish_rb_merge () { say All done. } +# The whole contents of this file is run by dot-sourcing it from +# inside a shell function. It used to be that "return"s we see +# below were not inside any function, and expected to return +# to the function that dot-sourced us. +# +# However, FreeBSD /bin/sh misbehaves on such a construct and +# continues to run the statements that follow such a "return". +# As a work-around, we introduce an extra layer of a function +# here, and immediately call it after defining it. +git_rebase__merge () { + case "$action" in continue) read_state @@ -151,3 +162,7 @@ do done finish_rb_merge + +} +# ... and then we call the whole thing. +git_rebase__merge diff --git a/git-rebase.sh b/git-rebase.sh index 2c75e9fa0f..4543815ffd 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -175,22 +175,13 @@ You can run "git stash pop" or "git stash drop" at any time. rm -rf "$state_dir" } -run_specific_rebase_internal () { +run_specific_rebase () { if [ "$interactive_rebase" = implied ]; then GIT_EDITOR=: export GIT_EDITOR autosquash= fi - # On FreeBSD, the shell's "return" returns from the current - # function, not from the current file inclusion. - # run_specific_rebase_internal has the file inclusion as a - # last statement, so POSIX and FreeBSD's return will do the - # same thing. . git-rebase--$type -} - -run_specific_rebase () { - run_specific_rebase_internal ret=$? if test $ret -eq 0 then diff --git a/git-request-pull.sh b/git-request-pull.sh index 5c15997523..d5500fde46 100755 --- a/git-request-pull.sh +++ b/git-request-pull.sh @@ -119,6 +119,12 @@ then status=1 fi +# Special case: turn "for_linus" to "tags/for_linus" when it is correct +if test "$ref" = "refs/tags/$pretty_remote" +then + pretty_remote=tags/$pretty_remote +fi + url=$(git ls-remote --get-url "$url") git show -s --format='The following changes since commit %H: diff --git a/git-svn.perl b/git-svn.perl index 7349ffea5a..0a323722a6 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -1389,17 +1389,7 @@ sub cmd_multi_init { usage(1); } - unless (defined $_prefix) { - $_prefix = ''; - warn < неразпозната стойност на +# +# ======================== +# „“…— # ======================== # RECHECK # ------------------------ @@ -25,70 +55,60 @@ # grep ^#: bg.po | cut -c4- |tr ' ' '\n'| sed -e 's/:[0-9][0-9]*//' -e 's%.*/%%' -e 's/[.][^.]*$//' > OUT # sort -u OUT > UNIQUE # for i in `cat UNIQUE`; do echo `grep "^$i$" OUT | wc -l` $i ; done | sort -nr > STATS +# # ======================== -# DONE strings -# ------------------------ -# 222 -# ======================== -# REMAINING strings +# FIND NON FULLY TRANSLATED # ------------------------ -# 1988 +# msgattrib --untranslated bg.po > untranslated.po +# msgattrib --only-fuzzy bg.po > fuzzy.po +# msgcat.exe untranslated.po fuzzy.po > new.po +# grep ^#: new.po | cut -c4- |tr ' ' '\n'| sed -e 's/:[0-9][0-9]*//' -e 's%.*/%%' -e 's/[.][^.]*$//' | sort -u +# # ======================== -# DONE alphabetical ordering +# STRINGS statistics # ------------------------ -# -# advice, fsck, gc, help, parse-options, reflog, remote, rm, run-command +# 1307t,0f,921u # # ======================== -# REMAINING alphabetical ordering +# MOST IMPORTANT name asc ordering # ------------------------ -# -# add, apply, archive, attr, bisect--helper, blame, branch, bundle, cat-file, check-attr, check-ignore, check-mailmap, -# checkout, checkout-index, clean, clone, column, commit, common-cmds, config, connected, count-objects, date, describe, -# diff, diffcore-order, fast-export, fetch, fmt-merge-msg, for-each-ref, git, git-am, git-bisect, git-pull, git-rebase, -# git-stash, git-submodule, gpg-interface, grep, hash-object, index-pack, init-db, log, ls-files, ls-tree, merge, -# merge-base, merge-file, merge-recursive, mktree, mv, name-rev, notes, notes-utils, object, obstack, pack-objects, -# pack-refs, pathspec, precompose_utf8, prune, prune-packed, push, read-tree, repack, replace, rerere, reset, revert, -# rev-parse, sequencer, sha1_name, shortlog, show-branch, show-ref, submodule, symbolic-ref, tag, update-index, -# update-ref, update-server-info, urlmatch, verify-pack, verify-tag, wrapper, write-tree, wt-status -# +# add, blame, branch, checkout, clone, commit, common-cmds, config, diff, fetch, fsck, gc, git-rebase, git-stash, grep, log, mv, parse-options, push, reflog, remote, reset, revert, rm, wt-status # # ======================== -# MOST IMPORTANT strings ordering +# IMPORTANT strings desc, name asc ordering # ------------------------ -# 144 [remote] 68 fetch 28 blame 16 [parse-options] -# 137 commit 64 grep 27 git-rebase 12 [gc] -# 115 branch 46 push 24 revert 12 [fsck] -# 102 wt-status 38 add 21 common-cmds 3 reflog -# 78 checkout 34 config 21 [rm] -# 77 log 33 reset 21 mv -# 69 clone 29 git-stash 13 diff +# 111 apply 54 git-submodule 30 git-am 13 check-ignore 10 merge-file +# 97 merge 39 init-db 30 describe 12 pathspec 10 merge-base +# 64 tag 35 archive 29 git-bisect 12 name-rev 10 ls-tree +# 55 merge-recursive 32 clean 14 show-ref 11 date 10 hash-object # # ======================== -# WHOLE STATISTICS strings ordering +# WHOLE STATISTICS strings desc, name asc ordering # ------------------------ -# 144 remote 54 git-submodule 27 ls-files 12 pathspec 8 replace 3 prune-packed -# 137 commit 48 push 27 git-rebase 12 name-rev 8 git-pull 3 pack-refs -# 115 branch 41 help 24 revert 12 gc 8 fmt-merge-msg 3 count-objects -# 111 apply 40 pack-objects 24 mv 12 fsck 7 symbolic-ref 3 connected -# 102 wt-status 39 init-db 21 rm 12 checkout-index 6 gpg-interface 3 bisect--helper -# 100 notes 38 add 21 common-cmds 11 date 6 check-attr 2 verify-tag -# 97 merge 35 archive 19 show-branch 11 column 5 write-tree 2 update-server-info -# 78 checkout 34 config 19 read-tree 10 urlmatch 5 sha1_name 2 run-command -# 77 log 33 reset 19 bundle 10 shortlog 5 rev-parse 2 rerere -# 69 clone 32 clean 17 repack 10 merge-file 5 prune 2 obstack -# 68 index-pack 30 git-am 16 parse-options 10 merge-base 4 wrapper 2 advice -# 68 fetch 30 describe 14 submodule 10 ls-tree 4 notes-utils 1 precompose_utf8 -# 64 grep 29 git-stash 14 show-ref 10 hash-object 4 mktree 1 object -# 58 tag 29 git-bisect 14 fast-export 10 for-each-ref 4 check-mailmap 1 git -# 56 sequencer 28 update-index 13 diff 10 cat-file 3 verify-pack 1 diffcore-order -# 55 merge-recursive 28 blame 13 check-ignore 9 update-ref 3 reflog 1 attr +# 144 [remote] 47 [push] 26 [revert] 12 checkout-index 6 [prune] 2 [verify-tag] +# 137 [commit] 46 pack-objects 24 [mv] 11 date 6 [gpg-interface] 2 [update-server-info] +# 114 [branch] 41 [help] 23 repack 11 column 6 [check-attr] 2 [run-command] +# 111 apply 39 init-db 21 [rm] 10 urlmatch 5 [write-tree] 2 [rerere] +# 101 notes 36 [add] 21 [common-cmds] 10 shortlog 5 [sha1_name] 2 [read-cache] +# 100 [wt-status] 35 [reset] 19 [show-branch] 10 merge-file 5 [rev-parse] 2 [obstack] +# 97 merge 35 archive 19 read-tree 10 merge-base 4 [wrapper] 2 [advice] +# 78 [checkout] 34 [config] 19 bundle 10 ls-tree 4 [prune-packed] 1 [unpack-trees] +# 77 [log] 32 clean 16 [parse-options] 10 hash-object 4 [notes-utils] 1 [unpack-objects] +# 69 [clone] 30 git-am 15 [fsck] 10 for-each-ref 4 [mktree] 1 [progress] +# 68 index-pack 30 describe 14 show-ref 10 cat-file 4 [check-mailmap] 1 [precompose_utf8] +# 68 [fetch] 29 [git-stash] 14 [gc] 9 [update-ref] 3 [verify-pack] 1 [object] +# 64 tag 29 git-bisect 14 fast-export 9 [submodule] 3 [reflog] 1 [git] +# 64 [grep] 28 update-index 13 [diff] 8 [replace] 3 [pack-refs] 1 [diffcore-rename] +# 56 sequencer 28 [blame] 13 check-ignore 8 [git-pull] 3 [count-objects] 1 [diffcore-order] +# 55 merge-recursive 27 ls-files 12 pathspec 8 [fmt-merge-msg] 3 [connected] 1 [attr] +# 54 git-submodule 27 [git-rebase] 12 name-rev 7 [symbolic-ref] 3 [bisect--helper] +# msgid "" msgstr "" "Project-Id-Version: git master\n" "Report-Msgid-Bugs-To: Git Mailing List \n" -"POT-Creation-Date: 2014-01-18 07:42+0800\n" -"PO-Revision-Date: 2014-01-28 19:05+0200\n" +"POT-Creation-Date: 2014-04-19 12:50+0800\n" +"PO-Revision-Date: 2014-05-11 17:06+0300\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -97,16 +117,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: advice.c:57 +#: advice.c:55 #, c-format msgid "hint: %.*s\n" msgstr "Подсказка: %.*s\n" -#. -#. * Message used both when 'git commit' fails and when -#. * other commands doing a merge do. -#. -#: advice.c:87 +#: advice.c:85 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm ' as\n" @@ -135,76 +151,76 @@ msgstr "" msgid "git archive --remote [--exec ] --list" msgstr "" -#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328 +#: archive.c:243 builtin/add.c:136 builtin/add.c:428 builtin/rm.c:328 #, c-format msgid "pathspec '%s' did not match any files" msgstr "пътят „%s“ не съвпада с никой файл" -#: archive.c:327 +#: archive.c:328 msgid "fmt" msgstr "" -#: archive.c:327 +#: archive.c:328 msgid "archive format" msgstr "" -#: archive.c:328 builtin/log.c:1193 +#: archive.c:329 builtin/log.c:1193 msgid "prefix" -msgstr "" +msgstr "префикс" -#: archive.c:329 +#: archive.c:330 msgid "prepend prefix to each pathname in the archive" msgstr "" -#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265 -#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680 -#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77 -#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408 -#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154 +#: archive.c:331 builtin/archive.c:88 builtin/blame.c:2258 +#: builtin/blame.c:2259 builtin/config.c:57 builtin/fast-export.c:680 +#: builtin/fast-export.c:682 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:489 builtin/ls-files.c:492 builtin/notes.c:412 +#: builtin/notes.c:569 builtin/read-tree.c:108 parse-options.h:151 msgid "file" msgstr "файл" -#: archive.c:331 builtin/archive.c:89 +#: archive.c:332 builtin/archive.c:89 msgid "write the archive to this file" msgstr "" -#: archive.c:333 +#: archive.c:334 msgid "read .gitattributes in working directory" msgstr "" -#: archive.c:334 +#: archive.c:335 msgid "report archived files on stderr" msgstr "" -#: archive.c:335 +#: archive.c:336 msgid "store only" msgstr "" -#: archive.c:336 +#: archive.c:337 msgid "compress faster" msgstr "" -#: archive.c:344 +#: archive.c:345 msgid "compress better" msgstr "" -#: archive.c:347 +#: archive.c:348 msgid "list supported archive formats" msgstr "" -#: archive.c:349 builtin/archive.c:90 builtin/clone.c:84 +#: archive.c:350 builtin/archive.c:90 builtin/clone.c:84 msgid "repo" -msgstr "" +msgstr "хранилище" -#: archive.c:350 builtin/archive.c:91 +#: archive.c:351 builtin/archive.c:91 msgid "retrieve the archive from remote repository " msgstr "" -#: archive.c:351 builtin/archive.c:92 builtin/notes.c:487 +#: archive.c:352 builtin/archive.c:92 builtin/notes.c:491 msgid "command" msgstr "" -#: archive.c:352 builtin/archive.c:93 +#: archive.c:353 builtin/archive.c:93 msgid "path to the remote git-upload-archive command" msgstr "" @@ -213,87 +229,88 @@ msgid "" "Negative patterns are ignored in git attributes\n" "Use '\\!' for literal leading exclamation." msgstr "" +"Отрицателните шаблони се игнорират в атрибутите на git.\n" +"Ако ви трябва начална удивителна, ползвайте „\\!“." #: branch.c:60 #, c-format msgid "Not setting branch %s as its own upstream." msgstr "" +"Клонът „%s“ не може да служи като източник за собствената си синхронизация." -#: branch.c:82 +#: branch.c:83 #, c-format msgid "Branch %s set up to track remote branch %s from %s by rebasing." msgstr "" +"Клонът „%s“ ще следи клона „%s“ от отдалеченото хранилище „%s“ чрез " +"пребазиране." -#: branch.c:83 +#: branch.c:84 #, c-format msgid "Branch %s set up to track remote branch %s from %s." -msgstr "" +msgstr "Клонът „%s“ ще следи клона „%s“ от отдалеченото хранилище „%s“." -#: branch.c:87 +#: branch.c:88 #, c-format msgid "Branch %s set up to track local branch %s by rebasing." msgstr "" +"Клонът „%s“ ще следи клона „%s“ от локалното хранилище чрез пребазиране." -#: branch.c:88 +#: branch.c:89 #, c-format msgid "Branch %s set up to track local branch %s." -msgstr "" +msgstr "Клонът „%s“ ще следи клона „%s“ от локалното хранилище." -#: branch.c:92 +#: branch.c:94 #, c-format msgid "Branch %s set up to track remote ref %s by rebasing." -msgstr "" +msgstr "Клонът „%s“ ще следи отдалечения указател „%s“ чрез пребазиране." -#: branch.c:93 +#: branch.c:95 #, c-format msgid "Branch %s set up to track remote ref %s." -msgstr "" +msgstr "Клонът „%s“ ще следи отдалечения указател „%s“." -#: branch.c:97 +#: branch.c:99 #, c-format msgid "Branch %s set up to track local ref %s by rebasing." -msgstr "" +msgstr "Клонът „%s“ ще следи локалния указател „%s“ чрез пребазиране." -#: branch.c:98 +#: branch.c:100 #, c-format msgid "Branch %s set up to track local ref %s." -msgstr "" - -#: branch.c:118 -#, c-format -msgid "Tracking not set up: name too long: %s" -msgstr "" +msgstr "Клонът „%s“ ще следи локалния указател „%s“." -#: branch.c:137 +#: branch.c:133 #, c-format msgid "Not tracking: ambiguous information for ref %s" -msgstr "" +msgstr "Няма следене: двусмислена информация за указателя „%s“" -#: branch.c:182 +#: branch.c:178 #, c-format msgid "'%s' is not a valid branch name." -msgstr "" +msgstr "„%s“ не е позволено име за клон." -#: branch.c:187 +#: branch.c:183 #, c-format msgid "A branch named '%s' already exists." -msgstr "" +msgstr "Вече съществува клон с име „%s“." -#: branch.c:195 +#: branch.c:191 msgid "Cannot force update the current branch." -msgstr "" +msgstr "Текущият клон не може да бъде принудително обновен." -#: branch.c:215 +#: branch.c:211 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." -msgstr "" +msgstr "Зададените настройки за следенето са грешни — началото „%s“ не е клон." -#: branch.c:217 +#: branch.c:213 #, c-format msgid "the requested upstream branch '%s' does not exist" -msgstr "" +msgstr "заявеният отдалечен клон „%s“ не съществува" -#: branch.c:219 +#: branch.c:215 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -304,135 +321,142 @@ msgid "" "will track its remote counterpart, you may want to use\n" "\"git push -u\" to set the upstream config as you push." msgstr "" +"\n" +"Ако искате да базирате работата си на клон от отдалечено хранилище, може \n" +"да се наложи да изпълните „git fetch“, за да получите информацията за него.\n" +"\n" +"Ако искате да изтласкате нов, локален клон, който да следи отдалечен клон,\n" +"може да използвате „git push -u“, за да настроите към кой клон да се " +"изтласква." -#: branch.c:264 +#: branch.c:260 #, c-format msgid "Not a valid object name: '%s'." -msgstr "" +msgstr "Неправилно име на обект: „%s“" -#: branch.c:284 +#: branch.c:280 #, c-format msgid "Ambiguous object name: '%s'." -msgstr "" +msgstr "Двусмислено име на обект: „%s“" -#: branch.c:289 +#: branch.c:285 #, c-format msgid "Not a valid branch point: '%s'." -msgstr "" +msgstr "Неправилно място за начало на клон: „%s“" -#: branch.c:295 +#: branch.c:291 msgid "Failed to lock ref for update" -msgstr "" +msgstr "Указателят не може да бъде заключен, за да бъде обновен" -#: branch.c:313 +#: branch.c:309 msgid "Failed to write ref" -msgstr "" +msgstr "Указателят не може да бъде записан" -#: bundle.c:37 +#: bundle.c:33 #, c-format msgid "'%s' does not look like a v2 bundle file" -msgstr "" +msgstr "Файлът „%s“ не изглежда да е архив на git версия 2" -#: bundle.c:64 +#: bundle.c:60 #, c-format msgid "unrecognized header: %s%s (%d)" msgstr "" -#: bundle.c:90 builtin/commit.c:706 +#: bundle.c:86 builtin/commit.c:706 #, c-format msgid "could not open '%s'" -msgstr "" +msgstr "„%s“ не може да се отвори" -#: bundle.c:141 +#: bundle.c:138 msgid "Repository lacks these prerequisite commits:" msgstr "" -#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332 +#: bundle.c:162 sequencer.c:669 sequencer.c:1123 builtin/log.c:332 #: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357 #: builtin/shortlog.c:158 msgid "revision walk setup failed" -msgstr "" +msgstr "неуспешно настройване на обхождането на версиите" -#: bundle.c:187 +#: bundle.c:184 #, c-format msgid "The bundle contains this ref:" msgid_plural "The bundle contains these %d refs:" msgstr[0] "" msgstr[1] "" -#: bundle.c:194 +#: bundle.c:191 msgid "The bundle records a complete history." msgstr "" -#: bundle.c:196 +#: bundle.c:193 #, c-format msgid "The bundle requires this ref:" msgid_plural "The bundle requires these %d refs:" msgstr[0] "" msgstr[1] "" -#: bundle.c:296 +#: bundle.c:293 msgid "rev-list died" msgstr "" -#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261 +#: bundle.c:299 builtin/log.c:1329 builtin/shortlog.c:261 #, c-format msgid "unrecognized argument: %s" -msgstr "" +msgstr "непознат аргумент: %s" -#: bundle.c:337 +#: bundle.c:334 #, c-format msgid "ref '%s' is excluded by the rev-list options" msgstr "" -#: bundle.c:382 +#: bundle.c:379 msgid "Refusing to create empty bundle." msgstr "" -#: bundle.c:398 +#: bundle.c:395 msgid "Could not spawn pack-objects" msgstr "" -#: bundle.c:416 +#: bundle.c:413 msgid "pack-objects died" msgstr "" -#: bundle.c:419 +#: bundle.c:416 #, c-format msgid "cannot create '%s'" msgstr "" -#: bundle.c:441 +#: bundle.c:438 msgid "index-pack died" msgstr "" -#: commit.c:53 +#: commit.c:54 #, c-format msgid "could not parse %s" -msgstr "" +msgstr "„%s“ не може да се анализира" -#: commit.c:55 +#: commit.c:56 #, c-format msgid "%s %s is not a commit!" -msgstr "" +msgstr "%s %s не е подаване!" #: compat/obstack.c:406 compat/obstack.c:408 msgid "memory exhausted" -msgstr "" +msgstr "паметта свърши" #: connected.c:70 msgid "Could not run 'git rev-list'" -msgstr "" +msgstr "Командата „git rev-list“ не може да бъде изпълнена." #: connected.c:90 #, c-format msgid "failed write to rev-list: %s" -msgstr "" +msgstr "неуспешен запис в списъка с версиите: %s" #: connected.c:98 #, c-format msgid "failed to close rev-list's stdin: %s" -msgstr "" +msgstr "стандартният вход на списъка с версиите не може да бъде затворен: %s" #: date.c:95 msgid "in the future" @@ -487,6 +511,7 @@ msgid_plural "%lu years" msgstr[0] "" msgstr[1] "" +#. TRANSLATORS: "%s" is " years" #: date.c:149 #, c-format msgid "%s, %lu month ago" @@ -504,22 +529,28 @@ msgstr[1] "" #: diffcore-order.c:24 #, c-format msgid "failed to read orderfile '%s'" -msgstr "" +msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен" + +#: diffcore-rename.c:517 +msgid "Performing inexact rename detection" +msgstr "Търсене на преименувания на обекти съчетани с промени" #: diff.c:113 #, c-format msgid " Failed to parse dirstat cut-off percentage '%s'\n" msgstr "" +" Неуспешно разпознаване на „%s“ като процент-праг за статистиката по " +"директории\n" #: diff.c:118 #, c-format msgid " Unknown dirstat parameter '%s'\n" -msgstr "" +msgstr " Непознат параметър „%s“ за статистиката по директории'\n" #: diff.c:213 #, c-format msgid "Unknown value for 'diff.submodule' config variable: '%s'" -msgstr "" +msgstr "Непозната стойност „%s“ за настройката „diff.submodule“" #: diff.c:263 #, c-format @@ -527,70 +558,74 @@ msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" msgstr "" +"Грешки в настройката „diff.dirstat“:\n" +"%s" -#: diff.c:3509 +#: diff.c:3495 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" "%s" msgstr "" +"Неразпознат параметър към опцията „--dirstat/-X“:\n" +"%s" -#: diff.c:3523 +#: diff.c:3509 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" -msgstr "" +msgstr "Неразпознат параметър към опцията „--submodule“: „%s“" #: gpg-interface.c:59 gpg-interface.c:131 msgid "could not run gpg." -msgstr "" +msgstr "Програмата „gpg“ не може да бъде стартирана." #: gpg-interface.c:71 msgid "gpg did not accept the data" -msgstr "" +msgstr "Програмата „gpg“ не прие подадените данни." #: gpg-interface.c:82 msgid "gpg failed to sign the data" -msgstr "" +msgstr "Програмата „gpg“ не подписа данните." #: gpg-interface.c:115 #, c-format msgid "could not create temporary file '%s': %s" -msgstr "" +msgstr "Програмата „gpg“ не успя да създаде временния файл „%s“: %s" #: gpg-interface.c:118 #, c-format msgid "failed writing detached signature to '%s': %s" -msgstr "" +msgstr "Програмата „gpg“ не успя да запише самостоятелния подпис към „%s“: %s" -#: grep.c:1695 +#: grep.c:1698 #, c-format msgid "'%s': unable to read %s" -msgstr "" +msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен" -#: grep.c:1712 +#: grep.c:1715 #, c-format msgid "'%s': %s" -msgstr "" +msgstr "„%s“: „%s“" -#: grep.c:1723 +#: grep.c:1726 #, c-format msgid "'%s': short read %s" -msgstr "" +msgstr "„%s“: изчитането на „%s“ върна по-малко байтове от заявените" -#: help.c:210 +#: help.c:209 #, c-format msgid "available git commands in '%s'" msgstr "налични команди на git от „%s“" -#: help.c:217 +#: help.c:216 msgid "git commands available from elsewhere on your $PATH" msgstr "команди на git от други директории от пътя „$PATH“" -#: help.c:233 +#: help.c:232 msgid "The most commonly used git commands are:" msgstr "Най-често употребяваните команди на git са:" -#: help.c:290 +#: help.c:289 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -599,11 +634,12 @@ msgstr "" "Изглежда, че „%s“ е команда на git, но тя не може да\n" "бъде изпълнена. Вероятно пакетът „git-%s“ е повреден." -#: help.c:347 +# FIXME bad message +#: help.c:346 msgid "Uh oh. Your system reports no Git commands at all." msgstr "Странно, изглежда, че на системата ви няма нито една команда на git." -#: help.c:369 +#: help.c:368 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -614,17 +650,17 @@ msgstr "" "съществува. Изпълнението автоматично продължава, като се счита, че имате " "предвид „%s“" -#: help.c:374 +#: help.c:373 #, c-format msgid "in %0.1f seconds automatically..." msgstr "след %0.1f секунди…" -#: help.c:381 +#: help.c:380 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: „%s“ не е команда на git. Вижте изхода от „git --help“." -#: help.c:385 help.c:444 +#: help.c:384 help.c:443 msgid "" "\n" "Did you mean this?" @@ -638,7 +674,7 @@ msgstr[1] "" "\n" "Команди с подобно име са:" -#: help.c:440 +#: help.c:439 #, c-format msgid "%s: %s - %s" msgstr "%s: %s — %s" @@ -647,305 +683,305 @@ msgstr "%s: %s — %s" msgid "failed to read the cache" msgstr "" -#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559 +#: merge.c:110 builtin/checkout.c:357 builtin/checkout.c:558 #: builtin/clone.c:661 msgid "unable to write new index file" -msgstr "" +msgstr "неуспешно записване на новия индекс" #: merge-recursive.c:190 #, c-format msgid "(bad commit)\n" msgstr "" -#: merge-recursive.c:206 +#: merge-recursive.c:208 #, c-format msgid "addinfo_cache failed for path '%s'" msgstr "" -#: merge-recursive.c:269 +#: merge-recursive.c:271 msgid "error building trees" msgstr "" -#: merge-recursive.c:673 +#: merge-recursive.c:675 #, c-format msgid "failed to create path '%s'%s" msgstr "" -#: merge-recursive.c:684 +#: merge-recursive.c:686 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "" -#. something else exists -#. .. but not some other error (who really cares what?) -#: merge-recursive.c:698 merge-recursive.c:719 +#: merge-recursive.c:700 merge-recursive.c:721 msgid ": perhaps a D/F conflict?" msgstr "" -#: merge-recursive.c:709 +#: merge-recursive.c:711 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "" -#: merge-recursive.c:749 +#: merge-recursive.c:751 #, c-format msgid "cannot read object %s '%s'" msgstr "" -#: merge-recursive.c:751 +#: merge-recursive.c:753 #, c-format msgid "blob expected for %s '%s'" msgstr "" -#: merge-recursive.c:774 builtin/clone.c:317 +#: merge-recursive.c:776 builtin/clone.c:317 #, c-format msgid "failed to open '%s'" -msgstr "" +msgstr "директорията „%s“ не може да бъде отворена" -#: merge-recursive.c:782 +#: merge-recursive.c:784 #, c-format msgid "failed to symlink '%s'" msgstr "" -#: merge-recursive.c:785 +#: merge-recursive.c:787 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "" -#: merge-recursive.c:923 +#: merge-recursive.c:925 msgid "Failed to execute internal merge" msgstr "" -#: merge-recursive.c:927 +#: merge-recursive.c:929 #, c-format msgid "Unable to add %s to database" msgstr "" -#: merge-recursive.c:943 +#: merge-recursive.c:945 msgid "unsupported object type in the tree" msgstr "" -#: merge-recursive.c:1022 merge-recursive.c:1036 +#: merge-recursive.c:1024 merge-recursive.c:1038 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " "in tree." msgstr "" -#: merge-recursive.c:1028 merge-recursive.c:1041 +#: merge-recursive.c:1030 merge-recursive.c:1043 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " "in tree at %s." msgstr "" -#: merge-recursive.c:1082 +#: merge-recursive.c:1084 msgid "rename" msgstr "" -#: merge-recursive.c:1082 wt-status.c:283 +#: merge-recursive.c:1084 msgid "renamed" -msgstr "" +msgstr "преименуван" -#: merge-recursive.c:1138 +#: merge-recursive.c:1140 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "" -#: merge-recursive.c:1160 +#: merge-recursive.c:1162 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" "\"->\"%s\" in \"%s\"%s" msgstr "" -#: merge-recursive.c:1165 +#: merge-recursive.c:1167 msgid " (left unresolved)" msgstr "" -#: merge-recursive.c:1219 +#: merge-recursive.c:1221 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" -#: merge-recursive.c:1249 +#: merge-recursive.c:1251 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "" -#: merge-recursive.c:1448 +#: merge-recursive.c:1450 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "" -#: merge-recursive.c:1458 +#: merge-recursive.c:1460 #, c-format msgid "Adding merged %s" msgstr "" -#: merge-recursive.c:1463 merge-recursive.c:1661 +#: merge-recursive.c:1465 merge-recursive.c:1663 #, c-format msgid "Adding as %s instead" msgstr "" -#: merge-recursive.c:1514 +#: merge-recursive.c:1516 #, c-format msgid "cannot read object %s" msgstr "" -#: merge-recursive.c:1517 +#: merge-recursive.c:1519 #, c-format msgid "object %s is not a blob" msgstr "" -#: merge-recursive.c:1565 +#: merge-recursive.c:1567 msgid "modify" msgstr "" -#: merge-recursive.c:1565 wt-status.c:281 +#: merge-recursive.c:1567 msgid "modified" -msgstr "" +msgstr "променен" -#: merge-recursive.c:1575 +#: merge-recursive.c:1577 msgid "content" msgstr "" -#: merge-recursive.c:1582 +#: merge-recursive.c:1584 msgid "add/add" msgstr "" -#: merge-recursive.c:1616 +#: merge-recursive.c:1618 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "" -#: merge-recursive.c:1630 +#: merge-recursive.c:1632 #, c-format msgid "Auto-merging %s" msgstr "" -#: merge-recursive.c:1634 git-submodule.sh:1148 +#: merge-recursive.c:1636 git-submodule.sh:1149 msgid "submodule" -msgstr "" +msgstr "ПОДМОДУЛ" -#: merge-recursive.c:1635 +#: merge-recursive.c:1637 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "" -#: merge-recursive.c:1725 +#: merge-recursive.c:1727 #, c-format msgid "Removing %s" -msgstr "" +msgstr "Изтриване на „%s“" -#: merge-recursive.c:1750 +#: merge-recursive.c:1752 msgid "file/directory" msgstr "" -#: merge-recursive.c:1756 +#: merge-recursive.c:1758 msgid "directory/file" msgstr "" -#: merge-recursive.c:1761 +#: merge-recursive.c:1763 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" -#: merge-recursive.c:1771 +#: merge-recursive.c:1773 #, c-format msgid "Adding %s" msgstr "" -#: merge-recursive.c:1788 +#: merge-recursive.c:1790 msgid "Fatal merge failure, shouldn't happen." msgstr "" -#: merge-recursive.c:1807 +#: merge-recursive.c:1809 msgid "Already up-to-date!" msgstr "" -#: merge-recursive.c:1816 +#: merge-recursive.c:1818 #, c-format msgid "merging of trees %s and %s failed" msgstr "" -#: merge-recursive.c:1846 +#: merge-recursive.c:1848 #, c-format msgid "Unprocessed path??? %s" msgstr "" -#: merge-recursive.c:1891 +#: merge-recursive.c:1893 msgid "Merging:" msgstr "" -#: merge-recursive.c:1904 +#: merge-recursive.c:1906 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "" msgstr[1] "" -#: merge-recursive.c:1941 +#: merge-recursive.c:1943 msgid "merge returned no commit" msgstr "" -#: merge-recursive.c:1998 +#: merge-recursive.c:2000 #, c-format msgid "Could not parse object '%s'" msgstr "" -#: merge-recursive.c:2010 builtin/merge.c:665 +#: merge-recursive.c:2012 builtin/merge.c:668 msgid "Unable to write index." msgstr "" #: notes-utils.c:40 msgid "Cannot commit uninitialized/unreferenced notes tree" msgstr "" +"Неинициализирано или нереферирано дърво за бележки не може да бъде подадено" #: notes-utils.c:81 #, c-format msgid "Bad notes.rewriteMode value: '%s'" -msgstr "" +msgstr "Лоша стойност за „notes.rewriteMode“: „%s“" #: notes-utils.c:91 #, c-format msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" msgstr "" +"Бележките в „%s“ няма да бъдат презаписани, защото са извън „refs/notes/“." #. TRANSLATORS: The first %s is the name of the #. environment variable, the second %s is its value #: notes-utils.c:118 #, c-format msgid "Bad %s value: '%s'" -msgstr "" +msgstr "Зададена е лоша стойност на променливата „%s“: „%s“" -#: object.c:202 +#: object.c:229 #, c-format msgid "unable to parse object: %s" -msgstr "" +msgstr "обектът „%s“ не може да бъде анализиран" -#: parse-options.c:537 +#: parse-options.c:532 msgid "..." msgstr "…" -#: parse-options.c:555 +#: parse-options.c:550 #, c-format msgid "usage: %s" msgstr "употреба: %s" #. TRANSLATORS: the colon here should align with the #. one in "usage: %s" translation -#: parse-options.c:559 +#: parse-options.c:554 #, c-format msgid " or: %s" msgstr " или: %s" -#: parse-options.c:562 +#: parse-options.c:557 #, c-format msgid " %s" msgstr " %s" -#: parse-options.c:596 +#: parse-options.c:591 msgid "-NUM" msgstr "-ЧИСЛО" @@ -993,11 +1029,6 @@ msgstr "" msgid "Pathspec '%s' is in submodule '%.*s'" msgstr "" -#. -#. * We may want to substitute "this command" with a command -#. * name. E.g. when add--interactive dies when running -#. * "checkout -p" -#. #: pathspec.c:353 #, c-format msgid "%s: pathspec magic not supported by this command: %s" @@ -1014,56 +1045,74 @@ msgid "" "Perhaps you forgot to add either ':/' or '.' ?" msgstr "" -#: remote.c:753 +#: progress.c:224 +msgid "done" +msgstr "действието завърши" + +#: read-cache.c:1238 +#, c-format +msgid "" +"index.version set, but the value is invalid.\n" +"Using version %i" +msgstr "" +"Зададена е неправилна стойност на настройката „index.version“.\n" +"Ще се ползва версия %i" + +#: read-cache.c:1248 +#, c-format +msgid "" +"GIT_INDEX_VERSION set, but the value is invalid.\n" +"Using version %i" +msgstr "" +"Зададена е неправилна стойност на променливата на средата " +"„GIT_INDEX_VERSION“.\n" +"Ще се ползва версия %i" + +#: remote.c:758 #, c-format msgid "Cannot fetch both %s and %s to %s" msgstr "Невъзможно е да се доставят едновременно и „%s“, и „%s“ към „%s“" -#: remote.c:757 +#: remote.c:762 #, c-format msgid "%s usually tracks %s, not %s" msgstr "„%s“ обикновено следи „%s“, а не „%s“" -#: remote.c:761 +#: remote.c:766 #, c-format msgid "%s tracks both %s and %s" msgstr "„%s“ следи както „%s“, така и „%s“" -#. -#. * This last possibility doesn't occur because -#. * FETCH_HEAD_IGNORE entries always appear at -#. * the end of the list. -#. -#: remote.c:769 +#: remote.c:774 msgid "Internal error" msgstr "Вътрешна грешка" -#: remote.c:1871 +#: remote.c:1948 #, c-format msgid "Your branch is based on '%s', but the upstream is gone.\n" msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n" -#: remote.c:1875 +#: remote.c:1952 msgid " (use \"git branch --unset-upstream\" to fixup)\n" -msgstr " (за да коригирате това използвайте „git branch --unset-upstream“)\n" +msgstr " (за да коригирате това, използвайте „git branch --unset-upstream“)\n" -#: remote.c:1878 +#: remote.c:1955 #, c-format msgid "Your branch is up-to-date with '%s'.\n" msgstr "Клонът е актуализиран както „%s“.\n" -#: remote.c:1882 +#: remote.c:1959 #, c-format msgid "Your branch is ahead of '%s' by %d commit.\n" msgid_plural "Your branch is ahead of '%s' by %d commits.\n" msgstr[0] "Клонът ви е с %2$d подаване пред „%1$s“.\n" msgstr[1] "Клонът ви е с %2$d подавания пред „%1$s“.\n" -#: remote.c:1888 +#: remote.c:1965 msgid " (use \"git push\" to publish your local commits)\n" msgstr " (публикувайте локалните си промени чрез „git push“)\n" -#: remote.c:1891 +#: remote.c:1968 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" @@ -1073,11 +1122,11 @@ msgstr[0] "" msgstr[1] "" "Клонът ви е с %2$d подавания след „%1$s“ и може да бъде тривиално слят.\n" -#: remote.c:1899 +#: remote.c:1976 msgid " (use \"git pull\" to update your local branch)\n" msgstr " (обновете локалния си клон чрез „git pull“)\n" -#: remote.c:1902 +#: remote.c:1979 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -1092,7 +1141,7 @@ msgstr[1] "" "Текущият клон се е отделил от „%s“,\n" "двата имат съответно по %d и %d несъвпадащи подавания.\n" -#: remote.c:1912 +#: remote.c:1989 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr " (слейте отдалечения клон в локалния чрез „git pull“)\n" @@ -1105,14 +1154,14 @@ msgstr "неуспешно отваряне на „/dev/null“" msgid "dup2(%d,%d) failed" msgstr "неуспешно изпълнение на dup2(%d,%d)" -#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896 -#: builtin/merge.c:1006 builtin/merge.c:1016 +#: sequencer.c:206 builtin/merge.c:786 builtin/merge.c:899 +#: builtin/merge.c:1009 builtin/merge.c:1019 #, c-format msgid "Could not open '%s' for writing" msgstr "" -#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786 -#: builtin/merge.c:1008 builtin/merge.c:1021 +#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:789 +#: builtin/merge.c:1011 builtin/merge.c:1024 #, c-format msgid "Could not write to '%s'" msgstr "" @@ -1130,7 +1179,7 @@ msgid "" "and commit the result with 'git commit'" msgstr "" -#: sequencer.c:245 sequencer.c:870 sequencer.c:953 +#: sequencer.c:245 sequencer.c:879 sequencer.c:962 #, c-format msgid "Could not write to %s" msgstr "" @@ -1156,7 +1205,7 @@ msgstr "" #: sequencer.c:325 #, c-format msgid "%s: Unable to write new index file" -msgstr "" +msgstr "%s: новият индекс не може да бъде запазен" #: sequencer.c:356 msgid "Could not resolve HEAD commit\n" @@ -1166,184 +1215,184 @@ msgstr "" msgid "Unable to update cache tree\n" msgstr "" -#: sequencer.c:423 +#: sequencer.c:430 #, c-format msgid "Could not parse commit %s\n" msgstr "" -#: sequencer.c:428 +#: sequencer.c:435 #, c-format msgid "Could not parse parent commit %s\n" msgstr "" -#: sequencer.c:494 +#: sequencer.c:501 msgid "Your index file is unmerged." -msgstr "" +msgstr "Индексът не е слят." -#: sequencer.c:513 +#: sequencer.c:520 #, c-format msgid "Commit %s is a merge but no -m option was given." msgstr "" -#: sequencer.c:521 +#: sequencer.c:528 #, c-format msgid "Commit %s does not have parent %d" msgstr "" -#: sequencer.c:525 +#: sequencer.c:532 #, c-format msgid "Mainline was specified but commit %s is not a merge." msgstr "" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:538 +#: sequencer.c:545 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "" -#: sequencer.c:542 +#: sequencer.c:549 #, c-format msgid "Cannot get commit message for %s" msgstr "" -#: sequencer.c:628 +#: sequencer.c:635 #, c-format msgid "could not revert %s... %s" msgstr "" -#: sequencer.c:629 +#: sequencer.c:636 #, c-format msgid "could not apply %s... %s" msgstr "" -#: sequencer.c:665 +#: sequencer.c:672 msgid "empty commit set passed" msgstr "" -#: sequencer.c:673 +#: sequencer.c:680 #, c-format msgid "git %s: failed to read the index" msgstr "" -#: sequencer.c:678 +#: sequencer.c:685 #, c-format msgid "git %s: failed to refresh the index" msgstr "" -#: sequencer.c:736 +#: sequencer.c:743 #, c-format msgid "Cannot %s during a %s" msgstr "" -#: sequencer.c:758 +#: sequencer.c:765 #, c-format msgid "Could not parse line %d." msgstr "" -#: sequencer.c:763 +#: sequencer.c:770 msgid "No commits parsed." msgstr "" -#: sequencer.c:776 +#: sequencer.c:783 #, c-format msgid "Could not open %s" msgstr "" -#: sequencer.c:780 +#: sequencer.c:787 #, c-format msgid "Could not read %s." msgstr "" -#: sequencer.c:787 +#: sequencer.c:794 #, c-format msgid "Unusable instruction sheet: %s" msgstr "" -#: sequencer.c:815 +#: sequencer.c:824 #, c-format msgid "Invalid key: %s" msgstr "" -#: sequencer.c:818 +#: sequencer.c:827 #, c-format msgid "Invalid value for %s: %s" msgstr "" -#: sequencer.c:830 +#: sequencer.c:839 #, c-format msgid "Malformed options sheet: %s" msgstr "" -#: sequencer.c:851 +#: sequencer.c:860 msgid "a cherry-pick or revert is already in progress" msgstr "" -#: sequencer.c:852 +#: sequencer.c:861 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "" -#: sequencer.c:856 +#: sequencer.c:865 #, c-format msgid "Could not create sequencer directory %s" msgstr "" -#: sequencer.c:872 sequencer.c:957 +#: sequencer.c:881 sequencer.c:966 #, c-format msgid "Error wrapping up %s." msgstr "" -#: sequencer.c:891 sequencer.c:1025 +#: sequencer.c:900 sequencer.c:1036 msgid "no cherry-pick or revert in progress" msgstr "" -#: sequencer.c:893 +#: sequencer.c:902 msgid "cannot resolve HEAD" msgstr "" -#: sequencer.c:895 +#: sequencer.c:904 msgid "cannot abort from a branch yet to be born" msgstr "" -#: sequencer.c:917 builtin/apply.c:4061 +#: sequencer.c:926 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "" -#: sequencer.c:920 +#: sequencer.c:929 #, c-format msgid "cannot read %s: %s" msgstr "" -#: sequencer.c:921 +#: sequencer.c:930 msgid "unexpected end of file" msgstr "" -#: sequencer.c:927 +#: sequencer.c:936 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "" -#: sequencer.c:950 +#: sequencer.c:959 #, c-format msgid "Could not format %s." msgstr "" -#: sequencer.c:1093 +#: sequencer.c:1104 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "" -#: sequencer.c:1096 +#: sequencer.c:1107 #, c-format msgid "%s: bad revision" msgstr "" -#: sequencer.c:1130 +#: sequencer.c:1141 msgid "Can't revert as initial commit" msgstr "" -#: sequencer.c:1131 +#: sequencer.c:1142 msgid "Can't cherry-pick into empty head" msgstr "" @@ -1359,80 +1408,76 @@ msgid "" "examine these refs and maybe delete them. Turn this message off by\n" "running \"git config advice.objectNameWarning false\"" msgstr "" +"При нормална работа git никога не създава указатели, които завършват с 40\n" +"шестнасетични знаци, защото те ще бъдат прескачани, когато указвате \n" +"шестнайсетични знаци. Една възможност е такива указатели да са създадени\n" +"по погрешка. Например:\n" +"\n" +" git checkout -b $BRANCH $(git rev-parse…)\n" +"\n" +"където стойността на променливата на средата BRANCH е празна, при което се\n" +"създава подобен указател. Прегледайте тези указатели и ги изтрийте. Можете " +"да\n" +"спрете това съобщение като изпълнете „git config advice.objectNameWarning " +"false“" -#: sha1_name.c:1109 +#: sha1_name.c:1072 msgid "HEAD does not point to a branch" -msgstr "" +msgstr "Указателят „HEAD“ не сочи към клон" -#: sha1_name.c:1112 +#: sha1_name.c:1075 #, c-format msgid "No such branch: '%s'" -msgstr "" +msgstr "Не съществува клон на име „%s“" -#: sha1_name.c:1114 +#: sha1_name.c:1077 #, c-format msgid "No upstream configured for branch '%s'" -msgstr "" +msgstr "Не е зададен клон-източник за клона „%s“" -#: sha1_name.c:1118 +#: sha1_name.c:1081 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" -msgstr "" +msgstr "Клонът-източник „%s“ не е съхранен като следящ клон" #: submodule.c:64 submodule.c:98 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first" msgstr "" +"Неслетите файлове „.gitmodules“ не могат да бъдат променяни. Първо " +"коригирайте конфликтите" #: submodule.c:68 submodule.c:102 #, c-format msgid "Could not find section in .gitmodules where path=%s" -msgstr "" +msgstr "Във файла „.gitmodules“ липсва раздел за директория „path=%s“" -#. Maybe the user already did that, don't error out here #: submodule.c:76 #, c-format msgid "Could not update .gitmodules entry %s" -msgstr "" +msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен" -#. Maybe the user already did that, don't error out here #: submodule.c:109 #, c-format msgid "Could not remove .gitmodules entry for %s" -msgstr "" - -#: submodule.c:127 -msgid "could not find .gitmodules in index" -msgstr "" - -#: submodule.c:133 -msgid "reading updated .gitmodules failed" -msgstr "" - -#: submodule.c:135 -msgid "unable to stat updated .gitmodules" -msgstr "" +msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде изтрит" -#: submodule.c:139 -msgid "unable to remove .gitmodules from index" -msgstr "" - -#: submodule.c:141 -msgid "adding updated .gitmodules failed" -msgstr "" - -#: submodule.c:143 +#: submodule.c:120 msgid "staging updated .gitmodules failed" -msgstr "" +msgstr "неуспешно добавяне в индекса на променения файл „.gitmodules“" -#: submodule.c:1144 builtin/init-db.c:363 +#: submodule.c:1121 builtin/init-db.c:363 #, c-format msgid "Could not create git link %s" -msgstr "" +msgstr "Връзката в Git „%s“ не може да бъде създадена" -#: submodule.c:1155 +#: submodule.c:1132 #, c-format msgid "Could not set core.worktree in %s" -msgstr "" +msgstr "В „%s“ не може да се зададе настройката „core.worktree“" + +#: unpack-trees.c:206 +msgid "Checking out files" +msgstr "Изтегляне на файлове" #: urlmatch.c:120 msgid "invalid URL scheme name or missing '://' suffix" @@ -1466,623 +1511,623 @@ msgstr "" #: wrapper.c:422 #, c-format msgid "unable to access '%s': %s" -msgstr "" +msgstr "няма достъп до „%s“: %s" #: wrapper.c:443 #, c-format msgid "unable to access '%s'" -msgstr "" +msgstr "няма достъп до „%s“" #: wrapper.c:454 #, c-format msgid "unable to look up current user in the passwd file: %s" -msgstr "" +msgstr "текущият потребител не може да бъде открит във файла „/etc/passwd“: %s" #: wrapper.c:455 msgid "no such user" -msgstr "" +msgstr "такъв потребител не съществува" #: wt-status.c:150 msgid "Unmerged paths:" -msgstr "" +msgstr "Неслети пътища:" #: wt-status.c:177 wt-status.c:204 #, c-format msgid " (use \"git reset %s ...\" to unstage)" -msgstr "" +msgstr " (използвайте „git reset %s ФАЙЛ…“, за да извадите ФАЙЛа от индекса)" #: wt-status.c:179 wt-status.c:206 msgid " (use \"git rm --cached ...\" to unstage)" msgstr "" +" (използвайте „git rm --cached %s ФАЙЛ…“, за да извадите ФАЙЛа от индекса)" #: wt-status.c:183 msgid " (use \"git add ...\" to mark resolution)" msgstr "" +" (използвайте „git add ФАЙЛ…“, за да укажете разрешаването на конфликта)" #: wt-status.c:185 wt-status.c:189 msgid " (use \"git add/rm ...\" as appropriate to mark resolution)" msgstr "" +" (използвайте „git add/rm ФАЙЛ…“, според решението, което избирате за " +"конфликта)" #: wt-status.c:187 msgid " (use \"git rm ...\" to mark resolution)" msgstr "" +" (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)" #: wt-status.c:198 msgid "Changes to be committed:" -msgstr "" +msgstr "Промени, които ще бъдат подадени:" #: wt-status.c:216 msgid "Changes not staged for commit:" -msgstr "" +msgstr "Промени, които не са в индекса за подаване:" #: wt-status.c:220 msgid " (use \"git add ...\" to update what will be committed)" msgstr "" +" (използвайте „git add ФАЙЛ…“, за да обновите съдържанието за подаване)" #: wt-status.c:222 msgid " (use \"git add/rm ...\" to update what will be committed)" msgstr "" +" (използвайте „git add/rm ФАЙЛ…“, за да обновите съдържанието за подаване)" #: wt-status.c:223 msgid "" " (use \"git checkout -- ...\" to discard changes in working directory)" msgstr "" +" (използвайте „git checkout -- ФАЙЛ…“, за да отхвърлите промените в " +"работното дърво)" #: wt-status.c:225 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" +" (подайте или отхвърлете неследеното или промененото съдържание в " +"подмодулите)" #: wt-status.c:237 #, c-format msgid " (use \"git %s ...\" to include in what will be committed)" msgstr "" +" (използвайте „git %s ФАЙЛ…“, за да определите какво включвате в подаването)" -#: wt-status.c:254 -msgid "bug" -msgstr "" - -#: wt-status.c:259 +#: wt-status.c:252 msgid "both deleted:" -msgstr "" +msgstr "изтрити в двата случая:" -#: wt-status.c:260 +#: wt-status.c:254 msgid "added by us:" -msgstr "" +msgstr "добавени от вас:" -#: wt-status.c:261 +#: wt-status.c:256 msgid "deleted by them:" -msgstr "" +msgstr "изтрити от тях:" -#: wt-status.c:262 +#: wt-status.c:258 msgid "added by them:" -msgstr "" +msgstr "добавени от тях:" -#: wt-status.c:263 +#: wt-status.c:260 msgid "deleted by us:" -msgstr "" +msgstr "изтрити от нас:" -#: wt-status.c:264 +#: wt-status.c:262 msgid "both added:" -msgstr "" +msgstr "добавени и в двата случая:" -#: wt-status.c:265 +#: wt-status.c:264 msgid "both modified:" -msgstr "" +msgstr "променени и в двата случая:" -#: wt-status.c:275 -msgid "new file" -msgstr "" +#: wt-status.c:266 +#, c-format +msgid "bug: unhandled unmerged status %x" +msgstr "грешка: състоянието на промяната „%x“ не може да бъде обработено" -#: wt-status.c:277 -msgid "copied" -msgstr "" +#: wt-status.c:274 +msgid "new file:" +msgstr "нов файл:" -#: wt-status.c:279 -msgid "deleted" -msgstr "" +#: wt-status.c:276 +msgid "copied:" +msgstr "копиран:" -#: wt-status.c:285 -msgid "typechange" -msgstr "" +#: wt-status.c:278 +msgid "deleted:" +msgstr "изтрит:" -#: wt-status.c:287 -msgid "unknown" -msgstr "" +#: wt-status.c:280 +msgid "modified:" +msgstr "променен:" -#: wt-status.c:289 -msgid "unmerged" -msgstr "" +#: wt-status.c:282 +msgid "renamed:" +msgstr "преименуван:" -#: wt-status.c:336 +#: wt-status.c:284 +msgid "typechange:" +msgstr "смяна на вида:" + +#: wt-status.c:286 +msgid "unknown:" +msgstr "непозната промяна:" + +#: wt-status.c:288 +msgid "unmerged:" +msgstr "неслят:" + +#: wt-status.c:370 msgid "new commits, " -msgstr "" +msgstr "нови подавания, " -#: wt-status.c:338 +#: wt-status.c:372 msgid "modified content, " -msgstr "" +msgstr "променено съдържание, " -#: wt-status.c:340 +#: wt-status.c:374 msgid "untracked content, " -msgstr "" +msgstr "неследено съдържание, " -#: wt-status.c:357 +#: wt-status.c:391 #, c-format msgid "bug: unhandled diff status %c" -msgstr "" +msgstr "грешка: състоянието на промяната „%c“ не може да бъде обработено" -#: wt-status.c:732 +#: wt-status.c:765 msgid "Submodules changed but not updated:" -msgstr "" +msgstr "Подмодулите са променени, но не са обновени:" -#: wt-status.c:734 +#: wt-status.c:767 msgid "Submodule changes to be committed:" -msgstr "" +msgstr "Промени в подмодулите за подаване:" -#: wt-status.c:836 +#: wt-status.c:846 msgid "" "Do not touch the line above.\n" "Everything below will be removed." msgstr "" +"Не променяйте горния ред.\n" +"Всичко отдолу ще бъде изтрито." -#: wt-status.c:899 +#: wt-status.c:937 msgid "You have unmerged paths." -msgstr "" +msgstr "Някои пътища не са слети." -#: wt-status.c:902 +#: wt-status.c:940 msgid " (fix conflicts and run \"git commit\")" -msgstr "" +msgstr " (коригирайте конфликтите и изпълнете „git commit“)" -#: wt-status.c:905 +#: wt-status.c:943 msgid "All conflicts fixed but you are still merging." -msgstr "" +msgstr "Всички конфликти са решени, но продължавате сливането." -#: wt-status.c:908 +#: wt-status.c:946 msgid " (use \"git commit\" to conclude merge)" -msgstr "" +msgstr " (използвайте „git commit“, за да завършите сливането)" -#: wt-status.c:918 +#: wt-status.c:956 msgid "You are in the middle of an am session." -msgstr "" +msgstr "В момента прилагате поредица от кръпки чрез „git am“." -#: wt-status.c:921 +#: wt-status.c:959 msgid "The current patch is empty." -msgstr "" +msgstr "Текущата кръпка е празна." -#: wt-status.c:925 +#: wt-status.c:963 msgid " (fix conflicts and then run \"git am --continue\")" -msgstr "" +msgstr " (коригирайте конфликтите и изпълнете „git am --continue“)" -#: wt-status.c:927 +#: wt-status.c:965 msgid " (use \"git am --skip\" to skip this patch)" -msgstr "" +msgstr " (използвайте „git am --skip“, за да пропуснете тази кръпка)" -#: wt-status.c:929 +#: wt-status.c:967 msgid " (use \"git am --abort\" to restore the original branch)" msgstr "" +" (използвайте „git am --abort“, за да възстановите първоначалния клон)" -#: wt-status.c:989 wt-status.c:1006 +#: wt-status.c:1027 wt-status.c:1044 #, c-format msgid "You are currently rebasing branch '%s' on '%s'." -msgstr "" +msgstr "В момента пребазирате клона „%s“ върху „%s“." -#: wt-status.c:994 wt-status.c:1011 +#: wt-status.c:1032 wt-status.c:1049 msgid "You are currently rebasing." -msgstr "" +msgstr "В момента пребазирате." -#: wt-status.c:997 +#: wt-status.c:1035 msgid " (fix conflicts and then run \"git rebase --continue\")" -msgstr "" +msgstr " (коригирайте конфликтите и използвайте „git rebase --continue“)" -#: wt-status.c:999 +#: wt-status.c:1037 msgid " (use \"git rebase --skip\" to skip this patch)" -msgstr "" +msgstr " (използвайте „git rebase --skip“, за да пропуснете тази кръпка)" -#: wt-status.c:1001 +#: wt-status.c:1039 msgid " (use \"git rebase --abort\" to check out the original branch)" msgstr "" +" (използвайте „git rebase --abort“, за да възстановите първоначалния клон)" -#: wt-status.c:1014 +#: wt-status.c:1052 msgid " (all conflicts fixed: run \"git rebase --continue\")" -msgstr "" +msgstr " (всички конфликти са коригирани: изпълнете „git rebase --continue“)" -#: wt-status.c:1018 +#: wt-status.c:1056 #, c-format msgid "" "You are currently splitting a commit while rebasing branch '%s' on '%s'." -msgstr "" +msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“." -#: wt-status.c:1023 +#: wt-status.c:1061 msgid "You are currently splitting a commit during a rebase." -msgstr "" +msgstr "В момента разделяте подаване докато пребазирате." -#: wt-status.c:1026 +#: wt-status.c:1064 msgid " (Once your working directory is clean, run \"git rebase --continue\")" msgstr "" +" (След като работното ви дърво стане чисто, използвайте „git rebase --" +"continue“)" -#: wt-status.c:1030 +#: wt-status.c:1068 #, c-format msgid "You are currently editing a commit while rebasing branch '%s' on '%s'." msgstr "" +"В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“." -#: wt-status.c:1035 +#: wt-status.c:1073 msgid "You are currently editing a commit during a rebase." -msgstr "" +msgstr "В момента редактирате подаване докато пребазирате." -#: wt-status.c:1038 +#: wt-status.c:1076 msgid " (use \"git commit --amend\" to amend the current commit)" msgstr "" +" (използвайте „git commit --amend“, за да редактирате текущото подаване)" -#: wt-status.c:1040 +#: wt-status.c:1078 msgid "" " (use \"git rebase --continue\" once you are satisfied with your changes)" msgstr "" +" (използвайте „git rebase --continue“, след като завършите промените си)" -#: wt-status.c:1050 +#: wt-status.c:1088 #, c-format msgid "You are currently cherry-picking commit %s." -msgstr "" +msgstr "В момента отбирате подаването „%s“." -#: wt-status.c:1055 +#: wt-status.c:1093 msgid " (fix conflicts and run \"git cherry-pick --continue\")" -msgstr "" +msgstr " (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)" -#: wt-status.c:1058 +#: wt-status.c:1096 msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" msgstr "" +" (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)" -#: wt-status.c:1060 +#: wt-status.c:1098 msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" msgstr "" +" (използвайте „git cherry-pick --abort“, за да отмените всички действия с " +"отбиране)" -#: wt-status.c:1069 +#: wt-status.c:1107 #, c-format msgid "You are currently reverting commit %s." -msgstr "" +msgstr "В момента отменяте подаване „%s“." -#: wt-status.c:1074 +#: wt-status.c:1112 msgid " (fix conflicts and run \"git revert --continue\")" -msgstr "" +msgstr " (коригирайте конфликтите и изпълнете „git revert --continue“)" -#: wt-status.c:1077 +#: wt-status.c:1115 msgid " (all conflicts fixed: run \"git revert --continue\")" -msgstr "" +msgstr " (всички конфликти са коригирани, изпълнете „git revert --continue“)" -#: wt-status.c:1079 +#: wt-status.c:1117 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr "" +" (използвайте „git revert --abort“, за да преустановите отмяната на " +"подаване)" -#: wt-status.c:1090 +#: wt-status.c:1128 #, c-format msgid "You are currently bisecting, started from branch '%s'." -msgstr "" +msgstr "В момента търсите двоично, като сте стартирали от клон „%s“." -#: wt-status.c:1094 +#: wt-status.c:1132 msgid "You are currently bisecting." -msgstr "" +msgstr "В момента търсите двоично." -#: wt-status.c:1097 +#: wt-status.c:1135 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" +" (използвайте „git bisect reset“, за да се върнете към първоначалното " +"състояние и клон)" -#: wt-status.c:1272 +#: wt-status.c:1310 msgid "On branch " -msgstr "" +msgstr "На клон " -#: wt-status.c:1279 +#: wt-status.c:1317 msgid "rebase in progress; onto " -msgstr "" +msgstr "извършвате пребазиране върху " -#: wt-status.c:1286 +#: wt-status.c:1324 msgid "HEAD detached at " -msgstr "" +msgstr "Указателят „HEAD“ не е свързан и е на подаване " -#: wt-status.c:1288 +#: wt-status.c:1326 msgid "HEAD detached from " -msgstr "" +msgstr "Указателят „HEAD“ не е свързан и е отделѐн от " -#: wt-status.c:1291 +#: wt-status.c:1329 msgid "Not currently on any branch." -msgstr "" +msgstr "Извън всички клони" -#: wt-status.c:1308 +#: wt-status.c:1346 msgid "Initial commit" -msgstr "" +msgstr "Първоначално подаване" -#: wt-status.c:1322 +#: wt-status.c:1360 msgid "Untracked files" -msgstr "" +msgstr "Неследени файлове" -#: wt-status.c:1324 +#: wt-status.c:1362 msgid "Ignored files" -msgstr "" +msgstr "Игнорирани файлове" -#: wt-status.c:1328 +#: wt-status.c:1366 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" "may speed it up, but you have to be careful not to forget to add\n" "new files yourself (see 'git help status')." msgstr "" +"Бяха необходими %.2f секунди за изброяването на неследените файлове.\n" +"Добавянето на опцията „-uno“ към командата „git status“, ще ускори\n" +"нещата, но не трябва да забравяте ръчно да добавяте новите файлове.\n" +"За повече подробности погледнете „git status help“." -#: wt-status.c:1334 +#: wt-status.c:1372 #, c-format msgid "Untracked files not listed%s" -msgstr "" +msgstr "Неследените файлове не са изведени%s" -#: wt-status.c:1336 +#: wt-status.c:1374 msgid " (use -u option to show untracked files)" -msgstr "" +msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)" -#: wt-status.c:1342 +#: wt-status.c:1380 msgid "No changes" -msgstr "" +msgstr "Няма промени" -#: wt-status.c:1347 +#: wt-status.c:1385 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" +"към индекса за подаване не са добавени промени (използвайте „git add“ и/или " +"„git commit -a“)\n" -#: wt-status.c:1350 +#: wt-status.c:1388 #, c-format msgid "no changes added to commit\n" -msgstr "" +msgstr "към индекса за подаване не са добавени промени\n" -#: wt-status.c:1353 +#: wt-status.c:1391 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " "track)\n" msgstr "" +"към индекса за подаване не са добавени промени, но има нови файлове " +"(използвайте „git add“, за да започне тяхното следене)\n" -#: wt-status.c:1356 +#: wt-status.c:1394 #, c-format msgid "nothing added to commit but untracked files present\n" -msgstr "" +msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n" -#: wt-status.c:1359 +#: wt-status.c:1397 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "" +"липсват каквито и да е промени (създайте или копирайте файлове и използвайте " +"„git add“, за да започне тяхното следене)\n" -#: wt-status.c:1362 wt-status.c:1367 +#: wt-status.c:1400 wt-status.c:1405 #, c-format msgid "nothing to commit\n" -msgstr "" +msgstr "липсват каквито и да е промени\n" -#: wt-status.c:1365 +#: wt-status.c:1403 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "" +"липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и " +"неследените файлове)\n" -#: wt-status.c:1369 +#: wt-status.c:1407 #, c-format msgid "nothing to commit, working directory clean\n" -msgstr "" +msgstr "липсват каквито и да е промени, работното дърво е чисто\n" -#: wt-status.c:1478 +#: wt-status.c:1516 msgid "HEAD (no branch)" -msgstr "" +msgstr "HEAD (извън клон)" -#: wt-status.c:1484 +#: wt-status.c:1522 msgid "Initial commit on " -msgstr "" +msgstr "Първоначално подаване на " -#: wt-status.c:1514 +#: wt-status.c:1554 msgid "gone" -msgstr "" +msgstr "изтрит" -#: wt-status.c:1516 +#: wt-status.c:1556 wt-status.c:1564 msgid "behind " -msgstr "" - -#: wt-status.c:1519 wt-status.c:1522 -msgid "ahead " -msgstr "" - -#: wt-status.c:1524 -msgid ", behind " -msgstr "" +msgstr "назад с " #: compat/precompose_utf8.c:55 builtin/clone.c:356 #, c-format msgid "failed to unlink '%s'" -msgstr "" +msgstr "неуспешно изтриване на „%s“" -#: builtin/add.c:20 +#: builtin/add.c:21 msgid "git add [options] [--] ..." -msgstr "" - -#. -#. * To be consistent with "git add -p" and most Git -#. * commands, we should default to being tree-wide, but -#. * this is not the original behavior and can't be -#. * changed until users trained themselves not to type -#. * "git add -u" or "git add -A". For now, we warn and -#. * keep the old behavior. Later, the behavior can be changed -#. * to tree-wide, keeping the warning for a while, and -#. * eventually we can drop the warning. -#. -#: builtin/add.c:58 -#, c-format -msgid "" -"The behavior of 'git add %s (or %s)' with no path argument from a\n" -"subdirectory of the tree will change in Git 2.0 and should not be used " -"anymore.\n" -"To add content for the whole tree, run:\n" -"\n" -" git add %s :/\n" -" (or git add %s :/)\n" -"\n" -"To restrict the command to the current directory, run:\n" -"\n" -" git add %s .\n" -" (or git add %s .)\n" -"\n" -"With the current Git version, the command is restricted to the current " -"directory.\n" -msgstr "" - -#: builtin/add.c:100 -#, c-format -msgid "" -"You ran 'git add' with neither '-A (--all)' or '--ignore-removal',\n" -"whose behaviour will change in Git 2.0 with respect to paths you removed.\n" -"Paths like '%s' that are\n" -"removed from your working tree are ignored with this version of Git.\n" -"\n" -"* 'git add --ignore-removal ', which is the current default,\n" -" ignores paths you removed from your working tree.\n" -"\n" -"* 'git add --all ' will let you also record the removals.\n" -"\n" -"Run 'git status' to check the paths you removed from your working tree.\n" -msgstr "" +msgstr "git add [ОПЦИИ] [--] ПЪТ…" -#: builtin/add.c:144 +#: builtin/add.c:64 #, c-format msgid "unexpected diff status %c" -msgstr "" +msgstr "неочакван изходен код при генериране на разлика: %c" -#: builtin/add.c:149 builtin/commit.c:260 +#: builtin/add.c:69 builtin/commit.c:261 msgid "updating files failed" -msgstr "" +msgstr "неуспешно обновяване на файловете" -#: builtin/add.c:163 +#: builtin/add.c:79 #, c-format msgid "remove '%s'\n" -msgstr "" +msgstr "изтриване на „%s“\n" -#: builtin/add.c:237 +#: builtin/add.c:133 msgid "Unstaged changes after refreshing the index:" -msgstr "" +msgstr "Промени, които и след обновяването на индекса не са добавени към него:" -#: builtin/add.c:299 +#: builtin/add.c:193 msgid "Could not read the index" -msgstr "" +msgstr "Индексът не може да бъде прочетен" -#: builtin/add.c:310 +#: builtin/add.c:204 #, c-format msgid "Could not open '%s' for writing." -msgstr "" +msgstr "Файлът „%s“ не може да бъде отворен за запис." -#: builtin/add.c:314 +#: builtin/add.c:208 msgid "Could not write patch" -msgstr "" +msgstr "Кръпката не може да бъде записана" -#: builtin/add.c:319 +#: builtin/add.c:213 #, c-format msgid "Could not stat '%s'" -msgstr "" +msgstr "Не може да се получи информация чрез „stat“ за файла „%s“" -#: builtin/add.c:321 +#: builtin/add.c:215 msgid "Empty patch. Aborted." -msgstr "" +msgstr "Празна кръпка, преустановяване на действието." -#: builtin/add.c:327 +#: builtin/add.c:221 #, c-format msgid "Could not apply '%s'" -msgstr "" +msgstr "Кръпката „%s“ не може да бъде приложена" -#: builtin/add.c:337 +#: builtin/add.c:231 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" +"Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n" -#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70 -#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344 +#: builtin/add.c:248 builtin/clean.c:876 builtin/fetch.c:93 builtin/mv.c:70 +#: builtin/prune-packed.c:77 builtin/push.c:489 builtin/remote.c:1344 #: builtin/rm.c:269 msgid "dry run" msgstr "пробно изпълнeние" -#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19 -#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612 +#: builtin/add.c:249 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1256 builtin/count-objects.c:95 builtin/fsck.c:612 #: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113 msgid "be verbose" msgstr "повече подробности" -#: builtin/add.c:357 +#: builtin/add.c:251 msgid "interactive picking" -msgstr "" +msgstr "интерактивно отбиране на промени" -#: builtin/add.c:358 builtin/checkout.c:1109 builtin/reset.c:272 +#: builtin/add.c:252 builtin/checkout.c:1108 builtin/reset.c:283 msgid "select hunks interactively" -msgstr "" +msgstr "интерактивен избор на парчета код" -#: builtin/add.c:359 +#: builtin/add.c:253 msgid "edit current diff and apply" -msgstr "" +msgstr "редактиране на текущата разлика и прилагане" -#: builtin/add.c:360 +#: builtin/add.c:254 msgid "allow adding otherwise ignored files" -msgstr "" +msgstr "добавяне и на иначе игнорираните файлове" -#: builtin/add.c:361 +#: builtin/add.c:255 msgid "update tracked files" -msgstr "" +msgstr "обновяване на следените файлове" -#: builtin/add.c:362 +#: builtin/add.c:256 msgid "record only the fact that the path will be added later" -msgstr "" +msgstr "отбелязване само на факта, че пътят ще бъде добавен по-късно" -#: builtin/add.c:363 +#: builtin/add.c:257 msgid "add changes from all tracked and untracked files" -msgstr "" +msgstr "добавяне на всички промени в следените и неследените файлове" -#. takes no arguments -#: builtin/add.c:366 +#: builtin/add.c:260 msgid "ignore paths removed in the working tree (same as --no-all)" msgstr "" +"игнориране на пътищата, които са изтрити от работното дърво (същото като „--" +"no-all“)" -#: builtin/add.c:368 +#: builtin/add.c:262 msgid "don't add, only refresh the index" -msgstr "" +msgstr "без добавяне на нови файлове, само обновяване на индекса" -#: builtin/add.c:369 +#: builtin/add.c:263 msgid "just skip files which cannot be added because of errors" msgstr "" +"прескачане на файловете, които не могат да бъдат добавени поради грешки" -#: builtin/add.c:370 +#: builtin/add.c:264 msgid "check if - even missing - files are ignored in dry run" msgstr "" +"проверка, че при пробно изпълнение всички файлове, дори и изтритите, се " +"игнорират" -#: builtin/add.c:392 +#: builtin/add.c:286 #, c-format msgid "Use -f if you really want to add them.\n" -msgstr "" +msgstr "Използвайте опцията „-f“, ако наистина искате да ги добавите.\n" -#: builtin/add.c:393 +#: builtin/add.c:287 msgid "no files added" -msgstr "" +msgstr "не са добавени файлове" -#: builtin/add.c:399 +#: builtin/add.c:293 msgid "adding files failed" -msgstr "" +msgstr "неуспешно добавяне на файлове" -#: builtin/add.c:438 +#: builtin/add.c:330 msgid "-A and -u are mutually incompatible" -msgstr "" +msgstr "опциите „-A“ и „-u“ са несъвместими" -#: builtin/add.c:456 +#: builtin/add.c:337 msgid "Option --ignore-missing can only be used together with --dry-run" -msgstr "" +msgstr "Опцията „--ignore-missing“ е съвместима само с „--dry-run“" -#: builtin/add.c:486 +#: builtin/add.c:358 #, c-format msgid "Nothing specified, nothing added.\n" -msgstr "" +msgstr "Нищо не е зададено и нищо не е добавено.\n" -#: builtin/add.c:487 +#: builtin/add.c:359 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" -msgstr "" +msgstr "Вероятно искахте да използвате „git add .“?\n" -#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919 -#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299 +#: builtin/add.c:364 builtin/check-ignore.c:172 builtin/clean.c:920 +#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:234 builtin/rm.c:299 msgid "index file corrupt" msgstr "файлът с индекса е повреден" -#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432 +#: builtin/add.c:448 builtin/apply.c:4506 builtin/mv.c:280 builtin/rm.c:432 msgid "Unable to write new index file" -msgstr "Новият файл с индекса не може да бъде записан" +msgstr "Новият индекс не може да бъде записан" #: builtin/apply.c:57 msgid "git apply [options] [...]" @@ -2177,17 +2222,17 @@ msgstr "" msgid "deleted file %s still has contents" msgstr "" +# FIXME - double **?? #: builtin/apply.c:1725 #, c-format msgid "** warning: file %s becomes empty but is not deleted" -msgstr "" +msgstr "●● предупреждение: файлът „%s“ вече е празен, но не е изтрит" #: builtin/apply.c:1871 #, c-format msgid "corrupt binary patch at line %d: %.*s" msgstr "" -#. there has to be one hunk (forward hunk) #: builtin/apply.c:1900 #, c-format msgid "unrecognized binary patch at line %d" @@ -2326,10 +2371,10 @@ msgstr "" msgid "Checking patch %s..." msgstr "" -#: builtin/apply.c:3680 builtin/checkout.c:213 builtin/reset.c:127 +#: builtin/apply.c:3680 builtin/checkout.c:213 builtin/reset.c:134 #, c-format msgid "make_cache_entry failed for path '%s'" -msgstr "" +msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“" #: builtin/apply.c:3823 #, c-format @@ -2375,7 +2420,6 @@ msgstr "" msgid "internal error" msgstr "" -#. Say this even without --verbose #: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." @@ -2404,12 +2448,12 @@ msgstr "" #: builtin/apply.c:4238 msgid "unable to read index file" -msgstr "" +msgstr "индексът не може да бъде записан" #: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90 #: builtin/fetch.c:78 msgid "path" -msgstr "" +msgstr "път" #: builtin/apply.c:4358 msgid "don't apply changes matching the given path" @@ -2467,14 +2511,13 @@ msgstr "" msgid "build a temporary index based on embedded index information" msgstr "" -#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:452 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:455 msgid "paths are separated with NUL character" -msgstr "" +msgstr "разделяне на пътищата с нулевия знак „NUL“" #: builtin/apply.c:4392 -#, fuzzy msgid "ensure at least lines of context match" -msgstr "<брой>" +msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове" #: builtin/apply.c:4393 msgid "action" @@ -2588,132 +2631,150 @@ msgstr "" #: builtin/bisect--helper.c:7 msgid "git bisect--helper --next-all [--no-checkout]" -msgstr "" +msgstr "git bisect--helper --next-all [--no-checkout]" #: builtin/bisect--helper.c:17 msgid "perform 'git bisect next'" -msgstr "" +msgstr "извършване на „git bisect next“" #: builtin/bisect--helper.c:19 msgid "update BISECT_HEAD instead of checking out the current commit" msgstr "" +"обновяване на указателя „BISECT_HEAD“ вместо да се използва текущото подаване" #: builtin/blame.c:27 msgid "git blame [options] [rev-opts] [rev] [--] file" -msgstr "" +msgstr "git blame [ОПЦИИ] [ОПЦИИ_ЗА_ВЕРСИЯТА] [ВЕРСИЯ] [--] ФАЙЛ" #: builtin/blame.c:32 msgid "[rev-opts] are documented in git-rev-list(1)" -msgstr "" +msgstr "ОПЦИИте_ЗА_ВЕРСИЯТА са документирани в ръководството git-rev-list(1)" -#: builtin/blame.c:2249 +#: builtin/blame.c:2242 msgid "Show blame entries as we find them, incrementally" -msgstr "" +msgstr "Извеждане на анотациите с намирането им, последователно" -# FIXME -#: builtin/blame.c:2250 +# FIXME SHA-1 -> SHA1 +#: builtin/blame.c:2243 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "" +"Извеждане на празни суми по SHA1 за граничните подавания (стандартно опцията " +"е изключена)" -#: builtin/blame.c:2251 +#: builtin/blame.c:2244 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "" +"Началните подавания да не се считат за гранични (стандартно опцията е " +"изключена)" -#: builtin/blame.c:2252 +#: builtin/blame.c:2245 msgid "Show work cost statistics" -msgstr "" +msgstr "Извеждане на статистика за извършените действия" -#: builtin/blame.c:2253 +#: builtin/blame.c:2246 msgid "Show output score for blame entries" -msgstr "" +msgstr "Извеждане на допълнителна информация за определянето на анотациите" -#: builtin/blame.c:2254 +#: builtin/blame.c:2247 msgid "Show original filename (Default: auto)" msgstr "" +"Извеждане на първоначалното име на файл (стандартно това е автоматично)" -#: builtin/blame.c:2255 +#: builtin/blame.c:2248 msgid "Show original linenumber (Default: off)" msgstr "" +"Извеждане на първоначалният номер на ред (стандартно опцията е изключена)" -#: builtin/blame.c:2256 +#: builtin/blame.c:2249 msgid "Show in a format designed for machine consumption" -msgstr "" +msgstr "Извеждане във формат за по-нататъшна обработка" -#: builtin/blame.c:2257 +#: builtin/blame.c:2250 msgid "Show porcelain format with per-line commit information" msgstr "" +"Извеждане във формат за по-нататъшна обработка с информация на всеки ред" -#: builtin/blame.c:2258 +#: builtin/blame.c:2251 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "" +"Използване на същия формат като „git-annotate“ (стандартно опцията е " +"изключена)" -#: builtin/blame.c:2259 +#: builtin/blame.c:2252 msgid "Show raw timestamp (Default: off)" -msgstr "" +msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)" -#: builtin/blame.c:2260 +#: builtin/blame.c:2253 msgid "Show long commit SHA1 (Default: off)" -msgstr "" +msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)" -#: builtin/blame.c:2261 +#: builtin/blame.c:2254 msgid "Suppress author name and timestamp (Default: off)" -msgstr "" +msgstr "Без име на автор и време на промяна(стандартно опцията е изключена)" -#: builtin/blame.c:2262 +#: builtin/blame.c:2255 msgid "Show author email instead of name (Default: off)" msgstr "" +"Извеждане на е-пощата на автора, а не името му (стандартно опцията е " +"изключена)" -#: builtin/blame.c:2263 +#: builtin/blame.c:2256 msgid "Ignore whitespace differences" -msgstr "" +msgstr "Без разлики в знаците за интервали" -#: builtin/blame.c:2264 +#: builtin/blame.c:2257 msgid "Spend extra cycles to find better match" -msgstr "" +msgstr "Допълнителни изчисления за по-добри резултати" -#: builtin/blame.c:2265 +#: builtin/blame.c:2258 msgid "Use revisions from instead of calling git-rev-list" -msgstr "" +msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“" -#: builtin/blame.c:2266 +#: builtin/blame.c:2259 msgid "Use 's contents as the final image" -msgstr "" +msgstr "Използване на съдържанието на ФАЙЛа като крайно положение" -#: builtin/blame.c:2267 builtin/blame.c:2268 +#: builtin/blame.c:2260 builtin/blame.c:2261 msgid "score" -msgstr "" +msgstr "напасване на редовете" -#: builtin/blame.c:2267 +#: builtin/blame.c:2260 msgid "Find line copies within and across files" msgstr "" +"Търсене на копирани редове както в рамките на един файл, така и от един файл " +"към друг" -#: builtin/blame.c:2268 +#: builtin/blame.c:2261 msgid "Find line movements within and across files" msgstr "" +"Търсене на преместени редове както в рамките на един файл, така и от един " +"файл към друг" -#: builtin/blame.c:2269 +#: builtin/blame.c:2262 msgid "n,m" -msgstr "" +msgstr "n,m" -#: builtin/blame.c:2269 +#: builtin/blame.c:2262 msgid "Process only line range n,m, counting from 1" msgstr "" +"Информация само за редовете в интервала от n до m включително. Броенето " +"започва от 1" #: builtin/branch.c:24 msgid "git branch [options] [-r | -a] [--merged | --no-merged]" -msgstr "" +msgstr "git branch [ОПЦИИ] [-r | -a] [--merged | --no-merged]" #: builtin/branch.c:25 msgid "git branch [options] [-l] [-f] []" -msgstr "" +msgstr "git branch [ОПЦИИ] [-l] [-f] ИМЕ_НА_КЛОН [НАЧАЛО]" #: builtin/branch.c:26 msgid "git branch [options] [-r] (-d | -D) ..." -msgstr "" +msgstr "git branch [ОПЦИИ] [-r] (-d | -D) ИМЕ_НА_КЛОН…" #: builtin/branch.c:27 msgid "git branch [options] (-m | -M) [] " -msgstr "" +msgstr "git branch [ОПЦИИ] (-m | -M) [СТАР_КЛОН] НОВ_КЛОН" #: builtin/branch.c:150 #, c-format @@ -2721,6 +2782,8 @@ msgid "" "deleting branch '%s' that has been merged to\n" " '%s', but not yet merged to HEAD." msgstr "" +"изтриване на клона „%s“, който е слят към „%s“,\n" +" но още не е слят към върха „HEAD“." #: builtin/branch.c:154 #, c-format @@ -2728,11 +2791,13 @@ msgid "" "not deleting branch '%s' that is not yet merged to\n" " '%s', even though it is merged to HEAD." msgstr "" +"отказване на изтриване на клона „%s“, който не е слят към\n" +" „%s“, но е слят към върха „HEAD“." #: builtin/branch.c:168 #, c-format msgid "Couldn't look up commit object for '%s'" -msgstr "" +msgstr "Обектът-подаване за „%s“ не може да бъде открит" #: builtin/branch.c:172 #, c-format @@ -2740,336 +2805,346 @@ msgid "" "The branch '%s' is not fully merged.\n" "If you are sure you want to delete it, run 'git branch -D %s'." msgstr "" +"Клонът „%s“ не е слят напълно. Ако сте сигурни, че искате\n" +"да го изтриете, изпълнете „git branch -D %s“." #: builtin/branch.c:185 msgid "Update of config-file failed" -msgstr "" +msgstr "Неуспешно обновяване на конфигурационния файл" #: builtin/branch.c:213 msgid "cannot use -a with -d" -msgstr "" +msgstr "Опцията „-a“ е несъвместима с опцията „-d“" #: builtin/branch.c:219 msgid "Couldn't look up commit object for HEAD" -msgstr "" +msgstr "Обектът-подаване, сочен от указателя „HEAD“, не може да бъде открит" #: builtin/branch.c:227 #, c-format msgid "Cannot delete the branch '%s' which you are currently on." -msgstr "" +msgstr "Не можете да изтриете клона „%s“, защото в момента е текущ." #: builtin/branch.c:240 #, c-format msgid "remote branch '%s' not found." -msgstr "" +msgstr "отдалеченият клон „%s“ не може да бъде открит." #: builtin/branch.c:241 #, c-format msgid "branch '%s' not found." -msgstr "" +msgstr "клонът „%s“ не може да бъде открит." #: builtin/branch.c:255 #, c-format msgid "Error deleting remote branch '%s'" -msgstr "" +msgstr "Грешка при изтриването на отдалечения клон „%s“" #: builtin/branch.c:256 #, c-format msgid "Error deleting branch '%s'" -msgstr "" +msgstr "Грешка при изтриването на клона „%s“" #: builtin/branch.c:263 #, c-format msgid "Deleted remote branch %s (was %s).\n" -msgstr "" +msgstr "Изтрит отдалечен клон „%s“ (той сочеше към „%s“).\n" #: builtin/branch.c:264 #, c-format msgid "Deleted branch %s (was %s).\n" -msgstr "" +msgstr "Изтрит клон „%s“ (той сочеше към „%s“).\n" #: builtin/branch.c:366 #, c-format msgid "branch '%s' does not point at a commit" -msgstr "" +msgstr "клонът „%s“ не сочи към подаване" #: builtin/branch.c:454 #, c-format msgid "[%s: gone]" -msgstr "" +msgstr "[%s: изтрит]" #: builtin/branch.c:459 #, c-format msgid "[%s]" -msgstr "" +msgstr "[%s]" #: builtin/branch.c:464 #, c-format msgid "[%s: behind %d]" -msgstr "" +msgstr "[%s: назад с %d]" #: builtin/branch.c:466 #, c-format msgid "[behind %d]" -msgstr "" +msgstr "[назад с %d]" #: builtin/branch.c:470 #, c-format msgid "[%s: ahead %d]" -msgstr "" +msgstr "[%s: напред с %d]" #: builtin/branch.c:472 #, c-format msgid "[ahead %d]" -msgstr "" +msgstr "[напред с %d]" #: builtin/branch.c:475 #, c-format msgid "[%s: ahead %d, behind %d]" -msgstr "" +msgstr "[%s: напред с %d, назад с %d]" #: builtin/branch.c:478 #, c-format msgid "[ahead %d, behind %d]" -msgstr "" +msgstr "[напред с %d, назад с %d]" +# FIXME ** how many?? #: builtin/branch.c:502 msgid " **** invalid ref ****" -msgstr "" +msgstr " ●●●● неправилен указател ●●●●" #: builtin/branch.c:594 #, c-format msgid "(no branch, rebasing %s)" -msgstr "" +msgstr "(извън клон, пребазиране на „%s“)" #: builtin/branch.c:597 #, c-format msgid "(no branch, bisect started on %s)" -msgstr "" +msgstr "(извън клон, двоично търсене от „%s“)" #: builtin/branch.c:600 #, c-format msgid "(detached from %s)" -msgstr "" +msgstr "(състояние, несвързано към „%s“)" #: builtin/branch.c:603 msgid "(no branch)" -msgstr "" +msgstr "(извън клон)" #: builtin/branch.c:649 #, c-format msgid "object '%s' does not point to a commit" -msgstr "" +msgstr "обектът „%s“ не сочи към подаване" #: builtin/branch.c:681 msgid "some refs could not be read" -msgstr "" +msgstr "някои указатели не могат да бъдат прочетени" #: builtin/branch.c:694 msgid "cannot rename the current branch while not on any." msgstr "" +"не можете да преименувате текущия клон, защото сте извън който и да е клон" #: builtin/branch.c:704 #, c-format msgid "Invalid branch name: '%s'" -msgstr "" +msgstr "Неправилно име на клон: „%s“" #: builtin/branch.c:719 msgid "Branch rename failed" -msgstr "" +msgstr "Неуспешно преименуване на клон" #: builtin/branch.c:723 #, c-format msgid "Renamed a misnamed branch '%s' away" -msgstr "" +msgstr "На клона с неправилно име „%s“ е дадено служебно име" #: builtin/branch.c:727 #, c-format msgid "Branch renamed to %s, but HEAD is not updated!" -msgstr "" +msgstr "Клонът е преименуван на „%s“, но указателят „HEAD“ не е преименуван" #: builtin/branch.c:734 msgid "Branch is renamed, but update of config-file failed" -msgstr "" +msgstr "Клонът е преименуван, но конфигурационният файл не бе обновен" #: builtin/branch.c:749 #, c-format msgid "malformed object name %s" -msgstr "" +msgstr "неправилно име на обект „%s“" #: builtin/branch.c:773 #, c-format msgid "could not write branch description template: %s" -msgstr "" +msgstr "шаблонът за описание на клон не бе записан: „%s“" #: builtin/branch.c:803 msgid "Generic options" -msgstr "" +msgstr "Общи настройки" #: builtin/branch.c:805 msgid "show hash and subject, give twice for upstream branch" msgstr "" +"извеждане на хеша и темата. Повтарянето на опцията прибавя отдалечените клони" #: builtin/branch.c:806 msgid "suppress informational messages" -msgstr "" +msgstr "без информационни съобщения" #: builtin/branch.c:807 msgid "set up tracking mode (see git-pull(1))" -msgstr "" +msgstr "задаване на режима на следене (виж git-pull(1))" #: builtin/branch.c:809 msgid "change upstream info" -msgstr "" +msgstr "смяна на следения клон" #: builtin/branch.c:813 msgid "use colored output" -msgstr "" +msgstr "цветен изход" #: builtin/branch.c:814 msgid "act on remote-tracking branches" -msgstr "" +msgstr "действие върху следящите клони" #: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844 -#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461 -#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468 +#: builtin/branch.c:850 builtin/commit.c:1494 builtin/commit.c:1495 +#: builtin/commit.c:1496 builtin/commit.c:1497 builtin/tag.c:527 +#: builtin/tag.c:533 msgid "commit" -msgstr "" +msgstr "подаване" #: builtin/branch.c:818 builtin/branch.c:824 msgid "print only branches that contain the commit" -msgstr "" +msgstr "извеждане само на клоните, които съдържат това подаване" #: builtin/branch.c:830 msgid "Specific git-branch actions:" -msgstr "" +msgstr "Специални действия на „git-branch“:" #: builtin/branch.c:831 msgid "list both remote-tracking and local branches" -msgstr "" +msgstr "извеждане както на следящите, така и на локалните клони" #: builtin/branch.c:833 msgid "delete fully merged branch" -msgstr "" +msgstr "изтриване на клони, които са напълно слети" #: builtin/branch.c:834 msgid "delete branch (even if not merged)" -msgstr "" +msgstr "изтриване и на клони, които не са напълно слети" #: builtin/branch.c:835 msgid "move/rename a branch and its reflog" msgstr "" +"преместване/преименуване на клон и принадлежащият му журнал на указателите" #: builtin/branch.c:836 msgid "move/rename a branch, even if target exists" -msgstr "" +msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име" #: builtin/branch.c:837 msgid "list branch names" -msgstr "" +msgstr "извеждане на имената на клоните" #: builtin/branch.c:838 msgid "create the branch's reflog" -msgstr "" +msgstr "създаване на журнала на указателите на клона" #: builtin/branch.c:840 msgid "edit the description for the branch" -msgstr "" +msgstr "редактиране на описанието на клона" #: builtin/branch.c:841 msgid "force creation (when already exists)" -msgstr "" +msgstr "принудително създаване, дори ако съществува клон с такова име" #: builtin/branch.c:844 msgid "print only not merged branches" -msgstr "" +msgstr "извеждане само на неслетите клони" #: builtin/branch.c:850 msgid "print only merged branches" -msgstr "" +msgstr "извеждане само на слетите клони" #: builtin/branch.c:854 msgid "list branches in columns" -msgstr "" +msgstr "извеждане по колони" #: builtin/branch.c:867 msgid "Failed to resolve HEAD as a valid ref." -msgstr "" +msgstr "Не може да се открие към какво сочи указателят „HEAD“" #: builtin/branch.c:872 builtin/clone.c:635 msgid "HEAD not found below refs/heads!" -msgstr "" +msgstr "В директорията „refs/heads“ липсва файл „HEAD“" #: builtin/branch.c:896 msgid "--column and --verbose are incompatible" -msgstr "" +msgstr "Опциите „--column“ и „--verbose“ са несъвместими" #: builtin/branch.c:902 builtin/branch.c:941 msgid "branch name required" -msgstr "" +msgstr "Необходимо е име на клон" #: builtin/branch.c:917 msgid "Cannot give description to detached HEAD" -msgstr "" +msgstr "Не може да зададете описание на „HEAD“ извън клон" #: builtin/branch.c:922 msgid "cannot edit description of more than one branch" -msgstr "" +msgstr "Не може да редактирате описанието на повече от един клон едновременно" #: builtin/branch.c:929 #, c-format msgid "No commit on branch '%s' yet." -msgstr "" +msgstr "В клона „%s“ все още няма подавания." #: builtin/branch.c:932 #, c-format msgid "No branch named '%s'." -msgstr "" +msgstr "Липсва клон на име „%s“." #: builtin/branch.c:947 msgid "too many branches for a rename operation" -msgstr "" +msgstr "Прекалено много клони за преименуване" #: builtin/branch.c:952 msgid "too many branches to set new upstream" -msgstr "" +msgstr "Прекалено много клони за задаване на следене" #: builtin/branch.c:956 #, c-format msgid "" "could not set upstream of HEAD to %s when it does not point to any branch." msgstr "" +"Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към " +"никой клон." #: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002 #, c-format msgid "no such branch '%s'" -msgstr "" +msgstr "Няма клон на име „%s“." #: builtin/branch.c:963 #, c-format msgid "branch '%s' does not exist" -msgstr "" +msgstr "Не съществува клон на име „%s“." #: builtin/branch.c:975 msgid "too many branches to unset upstream" -msgstr "" +msgstr "Прекалено много клони за махане на следене" #: builtin/branch.c:979 msgid "could not unset upstream of HEAD when it does not point to any branch." msgstr "" +"Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон." #: builtin/branch.c:985 #, c-format msgid "Branch '%s' has no upstream information" -msgstr "" +msgstr "Няма информация клонът „%s“ да следи някой друг" #: builtin/branch.c:999 msgid "it does not make sense to create 'HEAD' manually" -msgstr "" +msgstr "Няма никакъв смисъл ръчно да създавате „HEAD“." #: builtin/branch.c:1005 msgid "-a and -r options to 'git branch' do not make sense with a branch name" -msgstr "" +msgstr "Опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон" #: builtin/branch.c:1008 #, c-format @@ -3077,6 +3152,8 @@ msgid "" "The --set-upstream flag is deprecated and will be removed. Consider using --" "track or --set-upstream-to\n" msgstr "" +"Опцията „--set-upstream“ вече е остаряла и предстои да бъде махната. " +"Използвайте „--track“ или „--set-upstream-to“\n" #: builtin/branch.c:1025 #, c-format @@ -3085,16 +3162,19 @@ msgid "" "If you wanted to make '%s' track '%s', do this:\n" "\n" msgstr "" +"\n" +"За да накарате „%s“ да следи „%s“, изпълнете следната команда:\n" +"\n" #: builtin/branch.c:1026 #, c-format msgid " git branch -d %s\n" -msgstr "" +msgstr " git branch -d %s\n" #: builtin/branch.c:1027 #, c-format msgid " git branch --set-upstream-to %s\n" -msgstr "" +msgstr " git branch --set-upstream-to %s\n" #: builtin/bundle.c:47 #, c-format @@ -3109,71 +3189,71 @@ msgstr "" msgid "Need a repository to unbundle." msgstr "" -#: builtin/cat-file.c:328 +#: builtin/cat-file.c:331 msgid "git cat-file (-t|-s|-e|-p||--textconv) " msgstr "" -#: builtin/cat-file.c:329 +#: builtin/cat-file.c:332 msgid "git cat-file (--batch|--batch-check) < " msgstr "" -#: builtin/cat-file.c:366 +#: builtin/cat-file.c:369 msgid " can be one of: blob, tree, commit, tag" msgstr "" -#: builtin/cat-file.c:367 +#: builtin/cat-file.c:370 msgid "show object type" msgstr "" -#: builtin/cat-file.c:368 +#: builtin/cat-file.c:371 msgid "show object size" msgstr "" -#: builtin/cat-file.c:370 +#: builtin/cat-file.c:373 msgid "exit with zero when there's no error" msgstr "" -#: builtin/cat-file.c:371 +#: builtin/cat-file.c:374 msgid "pretty-print object's content" msgstr "" -#: builtin/cat-file.c:373 +#: builtin/cat-file.c:376 msgid "for blob objects, run textconv on object's content" msgstr "" -#: builtin/cat-file.c:375 +#: builtin/cat-file.c:378 msgid "show info and content of objects fed from the standard input" msgstr "" -#: builtin/cat-file.c:378 +#: builtin/cat-file.c:381 msgid "show info about objects fed from the standard input" msgstr "" #: builtin/check-attr.c:11 msgid "git check-attr [-a | --all | attr...] [--] pathname..." -msgstr "" +msgstr "git check-attr [-a | --all | АТРИБУТ…] [--] ПЪТ…" #: builtin/check-attr.c:12 msgid "git check-attr --stdin [-z] [-a | --all | attr...] < " -msgstr "" +msgstr "git check-attr --stdin [-z] [-a | --all | АТРИБУТ…] < СПИСЪК_С_ПЪТИЩА" #: builtin/check-attr.c:19 msgid "report all attributes set on file" -msgstr "" +msgstr "извеждане на всички атрибути, зададени върху файл" #: builtin/check-attr.c:20 msgid "use .gitattributes only from the index" -msgstr "" +msgstr "използване на файла „.gitattributes“ само от индекса" #: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75 msgid "read file names from stdin" -msgstr "" +msgstr "изчитане на имената на файловете от стандартния вход" #: builtin/check-attr.c:23 builtin/check-ignore.c:24 msgid "terminate input and output records by a NUL character" -msgstr "" +msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“" -#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260 +#: builtin/check-ignore.c:18 builtin/checkout.c:1089 builtin/gc.c:271 msgid "suppress progress reporting" msgstr "без показване на напредъка" @@ -3211,20 +3291,20 @@ msgstr "" #: builtin/check-mailmap.c:8 msgid "git check-mailmap [options] ..." -msgstr "" +msgstr "git check-mailmap [ОПЦИИ] КОНТАКТ…" #: builtin/check-mailmap.c:13 msgid "also read contacts from stdin" -msgstr "" +msgstr "четене на контакти и от стандартния вход" #: builtin/check-mailmap.c:24 #, c-format msgid "unable to parse contact: %s" -msgstr "" +msgstr "контактът не може да бъде анализиран: %s" #: builtin/check-mailmap.c:47 msgid "no contacts specified" -msgstr "" +msgstr "не са указани контакти" #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [...]" @@ -3248,7 +3328,7 @@ msgstr "" #: builtin/checkout-index.c:194 msgid "update stat information in the index file" -msgstr "" +msgstr "обновяване на информацията получена чрез „stat“ за файловете в индекса" #: builtin/checkout-index.c:200 msgid "read list of paths from the standard input" @@ -3272,112 +3352,115 @@ msgstr "" #: builtin/checkout.c:25 msgid "git checkout [options] " -msgstr "" +msgstr "git checkout [ОПЦИИ] КЛОН" #: builtin/checkout.c:26 msgid "git checkout [options] [] -- ..." -msgstr "" +msgstr "git checkout [ОПЦИИ] [КЛОН] -- ФАЙЛ…" #: builtin/checkout.c:114 builtin/checkout.c:147 #, c-format msgid "path '%s' does not have our version" -msgstr "" +msgstr "вашата версия липсва в пътя „%s“" #: builtin/checkout.c:116 builtin/checkout.c:149 #, c-format msgid "path '%s' does not have their version" -msgstr "" +msgstr "чуждата версия липсва в пътя „%s“" +# FIXME SAME AS [1] #: builtin/checkout.c:132 #, c-format msgid "path '%s' does not have all necessary versions" -msgstr "" +msgstr "някоя от необходимите версии липсва в пътя „%s“" +# FIXME SAME AS [1] #: builtin/checkout.c:176 #, c-format msgid "path '%s' does not have necessary versions" -msgstr "" +msgstr "някоя от необходимите версии липсва в пътя „%s“" #: builtin/checkout.c:193 #, c-format msgid "path '%s': cannot merge" -msgstr "" +msgstr "пътят „%s“ не може да бъде слян" #: builtin/checkout.c:210 #, c-format msgid "Unable to add merge result for '%s'" -msgstr "" +msgstr "Резултатът за „%s“ не може да бъде слян" #: builtin/checkout.c:232 builtin/checkout.c:235 builtin/checkout.c:238 #: builtin/checkout.c:241 #, c-format msgid "'%s' cannot be used with updating paths" -msgstr "" +msgstr "Опцията „%s“ е несъвместима с обновяването на пътища" #: builtin/checkout.c:244 builtin/checkout.c:247 #, c-format msgid "'%s' cannot be used with %s" -msgstr "" +msgstr "Опцията „%s“ е несъвместима с „%s“" #: builtin/checkout.c:250 #, c-format msgid "Cannot update paths and switch to branch '%s' at the same time." msgstr "" +"Невъзможно е едновременно да обновявате пътища и да се прехвърлите към клона " +"„%s“." -#: builtin/checkout.c:261 builtin/checkout.c:451 +#: builtin/checkout.c:261 builtin/checkout.c:450 msgid "corrupt index file" -msgstr "" +msgstr "повреден файл на индекса" -#: builtin/checkout.c:322 builtin/checkout.c:329 +#: builtin/checkout.c:321 builtin/checkout.c:328 #, c-format msgid "path '%s' is unmerged" -msgstr "" +msgstr "пътят „%s“ не е слят" -#: builtin/checkout.c:473 +#: builtin/checkout.c:472 msgid "you need to resolve your current index first" -msgstr "" +msgstr "първо трябва да коригирате индекса си" -#: builtin/checkout.c:594 +#: builtin/checkout.c:593 #, c-format msgid "Can not do reflog for '%s'\n" -msgstr "" +msgstr "Журналът на указателите за „%s“ не може да бъде създаден\n" -#: builtin/checkout.c:632 +#: builtin/checkout.c:631 msgid "HEAD is now at" -msgstr "" +msgstr "Указателят „HEAD“ в момента сочи към" -#: builtin/checkout.c:639 +#: builtin/checkout.c:638 #, c-format msgid "Reset branch '%s'\n" -msgstr "" +msgstr "Зануляване на клона „%s“\n" -#: builtin/checkout.c:642 +#: builtin/checkout.c:641 #, c-format msgid "Already on '%s'\n" -msgstr "" +msgstr "Вече сте на „%s“\n" -#: builtin/checkout.c:646 +#: builtin/checkout.c:645 #, c-format msgid "Switched to and reset branch '%s'\n" -msgstr "" +msgstr "Преминаване към клона „%s“ и зануляване на промените\n" -#: builtin/checkout.c:648 builtin/checkout.c:1033 +#: builtin/checkout.c:647 builtin/checkout.c:1032 #, c-format msgid "Switched to a new branch '%s'\n" -msgstr "" +msgstr "Преминахте към новия клон „%s“\n" -#: builtin/checkout.c:650 +#: builtin/checkout.c:649 #, c-format msgid "Switched to branch '%s'\n" -msgstr "" +msgstr "Преминахте към клона „%s“\n" -#: builtin/checkout.c:706 +#: builtin/checkout.c:705 #, c-format msgid " ... and %d more.\n" -msgstr "" +msgstr "… и още %d.\n" -#. The singular version -#: builtin/checkout.c:712 +#: builtin/checkout.c:711 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3390,9 +3473,16 @@ msgid_plural "" "\n" "%s\n" msgstr[0] "" +"ПРЕДУПРЕЖДЕНИЕ: изоставяте %d подаване, което не е свързано към никой клон:\n" +"\n" +"%s\n" msgstr[1] "" +"ПРЕДУПРЕЖДЕНИЕ: изоставяте %d подавания, които не са свързани към никой " +"клон:\n" +"\n" +"%s\n" -#: builtin/checkout.c:730 +#: builtin/checkout.c:729 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3401,157 +3491,171 @@ msgid "" " git branch new_branch_name %s\n" "\n" msgstr "" +"Ако все пак искате да ги запазите, сега вероятно е най-подходящият момент " +"да\n" +"създадете нов клон с тях чрез командата:\n" +"\n" +" git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n" +"\n" -#: builtin/checkout.c:760 +#: builtin/checkout.c:759 msgid "internal error in revision walk" -msgstr "" +msgstr "вътрешна грешка при обхождането на версиите" -#: builtin/checkout.c:764 +#: builtin/checkout.c:763 msgid "Previous HEAD position was" -msgstr "" +msgstr "Преди това „HEAD“ сочеше към" -#: builtin/checkout.c:791 builtin/checkout.c:1028 +#: builtin/checkout.c:790 builtin/checkout.c:1027 msgid "You are on a branch yet to be born" -msgstr "" +msgstr "В момента сте на клон, който предстои да бъде създаден" -#: builtin/checkout.c:935 +#: builtin/checkout.c:934 #, c-format msgid "only one reference expected, %d given." -msgstr "" +msgstr "очакваше се един указател, а сте подали %d." -#: builtin/checkout.c:974 +#: builtin/checkout.c:973 #, c-format msgid "invalid reference: %s" -msgstr "" +msgstr "неправилен указател: %s" -#. case (1): want a tree -#: builtin/checkout.c:1003 +#: builtin/checkout.c:1002 #, c-format msgid "reference is not a tree: %s" -msgstr "" +msgstr "указателят не сочи към обект-дърво: %s" -#: builtin/checkout.c:1042 +#: builtin/checkout.c:1041 msgid "paths cannot be used with switching branches" -msgstr "" +msgstr "задаването на път е несъвместимо с преминаването от един клон към друг" -#: builtin/checkout.c:1045 builtin/checkout.c:1049 +#: builtin/checkout.c:1044 builtin/checkout.c:1048 #, c-format msgid "'%s' cannot be used with switching branches" -msgstr "" +msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг" -#: builtin/checkout.c:1053 builtin/checkout.c:1056 builtin/checkout.c:1061 -#: builtin/checkout.c:1064 +#: builtin/checkout.c:1052 builtin/checkout.c:1055 builtin/checkout.c:1060 +#: builtin/checkout.c:1063 #, c-format msgid "'%s' cannot be used with '%s'" -msgstr "" +msgstr "опцията „%s“ е несъвместима с „%s“" -#: builtin/checkout.c:1069 +#: builtin/checkout.c:1068 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "" +"За да преминете към клон, подайте указател, който сочи към подаване. „%s“ не " +"е такъв" -#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88 +#: builtin/checkout.c:1090 builtin/checkout.c:1092 builtin/clone.c:88 #: builtin/remote.c:159 builtin/remote.c:161 msgid "branch" msgstr "клон" -#: builtin/checkout.c:1092 +#: builtin/checkout.c:1091 msgid "create and checkout a new branch" -msgstr "" +msgstr "създаване и преминаване към нов клон" -#: builtin/checkout.c:1094 +#: builtin/checkout.c:1093 msgid "create/reset and checkout a branch" -msgstr "" +msgstr "създаване/зануляване на клон и преминаване към него" -#: builtin/checkout.c:1095 +#: builtin/checkout.c:1094 msgid "create reflog for new branch" -msgstr "" +msgstr "създаване на журнал на указателите за нов клон" -#: builtin/checkout.c:1096 +#: builtin/checkout.c:1095 msgid "detach the HEAD at named commit" -msgstr "" +msgstr "отделяне на указателя „HEAD“ към указаното подаване" -#: builtin/checkout.c:1097 +#: builtin/checkout.c:1096 msgid "set upstream info for new branch" -msgstr "" +msgstr "задаване на кой клон бива следен при създаването на новия клон" -#: builtin/checkout.c:1099 -msgid "new branch" -msgstr "" +#: builtin/checkout.c:1098 +msgid "new-branch" +msgstr "НОВ_КЛОН" -#: builtin/checkout.c:1099 +#: builtin/checkout.c:1098 msgid "new unparented branch" -msgstr "" +msgstr "нов клон без родител" -#: builtin/checkout.c:1100 +#: builtin/checkout.c:1099 msgid "checkout our version for unmerged files" -msgstr "" +msgstr "изтегляне на вашата версия на неслетите файлове" -#: builtin/checkout.c:1102 +#: builtin/checkout.c:1101 msgid "checkout their version for unmerged files" -msgstr "" +msgstr "изтегляне на чуждата версия на неслетите файлове" -#: builtin/checkout.c:1104 +#: builtin/checkout.c:1103 msgid "force checkout (throw away local modifications)" -msgstr "" +msgstr "принудително изтегляне (вашите промени ще бъдат занулени)" -#: builtin/checkout.c:1105 +#: builtin/checkout.c:1104 msgid "perform a 3-way merge with the new branch" -msgstr "" +msgstr "извършване на тройно сливане с новия клон" -#: builtin/checkout.c:1106 builtin/merge.c:225 +#: builtin/checkout.c:1105 builtin/merge.c:225 msgid "update ignored files (default)" -msgstr "" +msgstr "обновяване на игнорираните файлове (стандартно)" -#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248 +#: builtin/checkout.c:1106 builtin/log.c:1228 parse-options.h:245 msgid "style" msgstr "стил" -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1107 msgid "conflict style (merge or diff3)" -msgstr "" +msgstr "действие при конфликт (сливане или тройна разлика)" -#: builtin/checkout.c:1111 +#: builtin/checkout.c:1110 msgid "do not limit pathspecs to sparse entries only" -msgstr "" +msgstr "без ограничаване на изброените пътища само до частично изтеглените" -#: builtin/checkout.c:1113 +#: builtin/checkout.c:1112 msgid "second guess 'git checkout no-such-branch'" msgstr "" +"последващ опит за отгатване след неуспешен опит с „git checkout no-such-" +"branch“" -#: builtin/checkout.c:1136 +#: builtin/checkout.c:1135 msgid "-b, -B and --orphan are mutually exclusive" -msgstr "" +msgstr "Опциите „-b“, „-B“ и „--orphan“ са несъвместими една с друга" -#: builtin/checkout.c:1153 +#: builtin/checkout.c:1152 msgid "--track needs a branch name" -msgstr "" +msgstr "опцията „--track“ изисква име на клон" -#: builtin/checkout.c:1160 +#: builtin/checkout.c:1159 msgid "Missing branch name; try -b" -msgstr "" +msgstr "Липсва име на клон, използвайте опцията „-b“" -#: builtin/checkout.c:1197 +#: builtin/checkout.c:1196 msgid "invalid path specification" -msgstr "" +msgstr "указан е неправилен път" -#: builtin/checkout.c:1204 +#: builtin/checkout.c:1203 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" "Did you intend to checkout '%s' which can not be resolved as commit?" msgstr "" +"Не можете едновременно да обновявате пътища и да преминете към клона „%s“.\n" +"Дали не искате да изтеглите „%s“, който не сочи към подаване?" -#: builtin/checkout.c:1209 +#: builtin/checkout.c:1208 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" -msgstr "" +msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“" -#: builtin/checkout.c:1213 +#: builtin/checkout.c:1212 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." msgstr "" +"git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“ са " +"несъвместими\n" +"с изтегляне от индекса." #: builtin/clean.c:26 msgid "" @@ -3583,7 +3687,7 @@ msgstr "" msgid "failed to remove %s" msgstr "" -#: builtin/clean.c:294 +#: builtin/clean.c:295 msgid "" "Prompt help:\n" "1 - select a numbered item\n" @@ -3591,7 +3695,7 @@ msgid "" " - (empty) select nothing" msgstr "" -#: builtin/clean.c:298 +#: builtin/clean.c:299 msgid "" "Prompt help:\n" "1 - select a single item\n" @@ -3603,35 +3707,35 @@ msgid "" " - (empty) finish selecting" msgstr "" -#: builtin/clean.c:516 +#: builtin/clean.c:517 #, c-format msgid "Huh (%s)?" msgstr "" -#: builtin/clean.c:659 +#: builtin/clean.c:660 #, c-format msgid "Input ignore patterns>> " msgstr "" -#: builtin/clean.c:696 +#: builtin/clean.c:697 #, c-format msgid "WARNING: Cannot find items matched by: %s" msgstr "" -#: builtin/clean.c:717 +#: builtin/clean.c:718 msgid "Select items to delete" msgstr "" -#: builtin/clean.c:757 +#: builtin/clean.c:758 #, c-format msgid "remove %s? " msgstr "" -#: builtin/clean.c:782 +#: builtin/clean.c:783 msgid "Bye." msgstr "" -#: builtin/clean.c:790 +#: builtin/clean.c:791 msgid "" "clean - start cleaning\n" "filter by pattern - exclude items from deletion\n" @@ -3642,215 +3746,218 @@ msgid "" "? - help for prompt selection" msgstr "" -#: builtin/clean.c:817 +# FIXME how many *** +#: builtin/clean.c:818 msgid "*** Commands ***" -msgstr "" +msgstr "●●● Команди ●●●" -#: builtin/clean.c:818 +#: builtin/clean.c:819 msgid "What now" msgstr "" -#: builtin/clean.c:826 +#: builtin/clean.c:827 msgid "Would remove the following item:" msgid_plural "Would remove the following items:" msgstr[0] "" msgstr[1] "" -#: builtin/clean.c:843 +#: builtin/clean.c:844 msgid "No more files to clean, exiting." msgstr "" -#: builtin/clean.c:874 +#: builtin/clean.c:875 msgid "do not print names of files removed" msgstr "" -#: builtin/clean.c:876 +#: builtin/clean.c:877 msgid "force" msgstr "" -#: builtin/clean.c:877 +#: builtin/clean.c:878 msgid "interactive cleaning" msgstr "" -#: builtin/clean.c:879 +#: builtin/clean.c:880 msgid "remove whole directories" msgstr "" -#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718 -#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185 +#: builtin/clean.c:881 builtin/describe.c:415 builtin/grep.c:716 +#: builtin/ls-files.c:486 builtin/name-rev.c:314 builtin/show-ref.c:185 msgid "pattern" -msgstr "" +msgstr "шаблон" -#: builtin/clean.c:881 +#: builtin/clean.c:882 msgid "add to ignore rules" msgstr "" -#: builtin/clean.c:882 +#: builtin/clean.c:883 msgid "remove ignored files, too" msgstr "" -#: builtin/clean.c:884 +#: builtin/clean.c:885 msgid "remove only ignored files" msgstr "" -#: builtin/clean.c:902 +#: builtin/clean.c:903 msgid "-x and -X cannot be used together" msgstr "" -#: builtin/clean.c:906 +#: builtin/clean.c:907 msgid "" -"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to " "clean" msgstr "" -#: builtin/clean.c:909 +#: builtin/clean.c:910 msgid "" -"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"clean.requireForce defaults to true and neither -i, -n, nor -f given; " "refusing to clean" msgstr "" #: builtin/clone.c:36 msgid "git clone [options] [--] []" -msgstr "" +msgstr "git clone [ОПЦИИ] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]" #: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222 -#: builtin/push.c:521 +#: builtin/push.c:504 msgid "force progress reporting" -msgstr "" +msgstr "извеждане на напредъка" #: builtin/clone.c:66 msgid "don't create a checkout" -msgstr "" +msgstr "без създаване на работно дърво" -#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:486 msgid "create a bare repository" -msgstr "" +msgstr "създаване на голо хранилище" #: builtin/clone.c:71 msgid "create a mirror repository (implies bare)" -msgstr "" +msgstr "създаване на хранилище-огледало (това включва хранилището да е голо)" #: builtin/clone.c:73 msgid "to clone from a local repository" -msgstr "" +msgstr "клониране от локално хранилище" #: builtin/clone.c:75 msgid "don't use local hardlinks, always copy" -msgstr "" +msgstr "без твърди връзки, файловете винаги да се копират" #: builtin/clone.c:77 msgid "setup as shared repository" -msgstr "" +msgstr "настройване за споделено хранилище" #: builtin/clone.c:79 builtin/clone.c:81 msgid "initialize submodules in the clone" -msgstr "" +msgstr "инициализиране на подмодулите при това клониране" -#: builtin/clone.c:82 builtin/init-db.c:485 +#: builtin/clone.c:82 builtin/init-db.c:483 msgid "template-directory" -msgstr "" +msgstr "директория с шаблони" -#: builtin/clone.c:83 builtin/init-db.c:486 +#: builtin/clone.c:83 builtin/init-db.c:484 msgid "directory from which templates will be used" -msgstr "" +msgstr "директория, която съдържа шаблоните, които да се ползват" #: builtin/clone.c:85 msgid "reference repository" -msgstr "" +msgstr "еталонно хранилище" #: builtin/clone.c:86 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" -msgstr "" +msgstr "ИМЕ" #: builtin/clone.c:87 msgid "use instead of 'origin' to track upstream" -msgstr "" +msgstr "използване на това ИМЕ вместо „origin“ при проследяване на клони" #: builtin/clone.c:89 msgid "checkout instead of the remote's HEAD" -msgstr "" +msgstr "изтегляне на този КЛОН, а не соченият от отдалечения указател „HEAD“" #: builtin/clone.c:91 msgid "path to git-upload-pack on the remote" -msgstr "" +msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище" -#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663 +#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:661 msgid "depth" -msgstr "" +msgstr "ДЪЛБОЧИНА" #: builtin/clone.c:93 msgid "create a shallow clone of that depth" -msgstr "" +msgstr "плитко клониране до тази ДЪЛБОЧИНА" #: builtin/clone.c:95 msgid "clone only one branch, HEAD or --branch" msgstr "" +"клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично " +"зададения с „--branch“" -#: builtin/clone.c:96 builtin/init-db.c:494 +#: builtin/clone.c:96 builtin/init-db.c:492 msgid "gitdir" -msgstr "" +msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ" -#: builtin/clone.c:97 builtin/init-db.c:495 +#: builtin/clone.c:97 builtin/init-db.c:493 msgid "separate git dir from working tree" -msgstr "" +msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво" #: builtin/clone.c:98 msgid "key=value" -msgstr "" +msgstr "КЛЮЧ=СТОЙНОСТ" #: builtin/clone.c:99 msgid "set config inside the new repository" -msgstr "" +msgstr "задаване на настройките на новото хранилище" #: builtin/clone.c:252 #, c-format msgid "reference repository '%s' is not a local repository." -msgstr "" +msgstr "еталонното хранилище „%s“ не е локално" #: builtin/clone.c:256 #, c-format msgid "reference repository '%s' is shallow" -msgstr "" +msgstr "еталонното хранилище „%s“ е плитко" #: builtin/clone.c:259 #, c-format msgid "reference repository '%s' is grafted" -msgstr "" +msgstr "еталонното хранилище „%s“ е с присаждане" #: builtin/clone.c:321 #, c-format msgid "failed to create directory '%s'" -msgstr "" +msgstr "директорията „%s“ не може да бъде създадена" #: builtin/clone.c:323 builtin/diff.c:83 #, c-format msgid "failed to stat '%s'" -msgstr "" +msgstr "не може да бъде получена информация чрез „stat“ за „%s“" #: builtin/clone.c:325 #, c-format msgid "%s exists and is not a directory" -msgstr "" +msgstr "„%s“ съществува и не е директория" #: builtin/clone.c:339 #, c-format msgid "failed to stat %s\n" -msgstr "" +msgstr "не може да бъде получена информация чрез „stat“ за „%s“\n" #: builtin/clone.c:361 #, c-format msgid "failed to create link '%s'" -msgstr "" +msgstr "връзката „%s“ не може да бъде създадена" #: builtin/clone.c:365 #, c-format msgid "failed to copy file to '%s'" -msgstr "" +msgstr "файлът не можа да бъде копиран като „%s“" #: builtin/clone.c:388 builtin/clone.c:565 #, c-format msgid "done.\n" -msgstr "" +msgstr "действието завърши.\n" #: builtin/clone.c:401 msgid "" @@ -3858,111 +3965,121 @@ msgid "" "You can inspect what was checked out with 'git status'\n" "and retry the checkout with 'git checkout -f HEAD'\n" msgstr "" +"Клонирането бе успешно за разлика от подготовката на работното дърво\n" +"за определен клон. Все пак можете да проверите кои файлове и от кой\n" +"клон в момента са изтеглени с командата „git status“. Можете да\n" +"завършите изтеглянето на клона с командата „git checkout -f HEAD“.\n" #: builtin/clone.c:480 #, c-format msgid "Could not find remote branch %s to clone." msgstr "" +"Клонът „%s“ от отдалеченото хранилище което клонирате,\n" +"който следва да бъде изтеглен, не съществува." #: builtin/clone.c:560 #, c-format msgid "Checking connectivity... " -msgstr "" +msgstr "Проверка на връзката…" #: builtin/clone.c:563 msgid "remote did not send all necessary objects" -msgstr "" +msgstr "отдалеченото хранилище не изпрати всички необходими обекти." #: builtin/clone.c:626 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" +"указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n" +"което не съществува. Не може да се изтегли определен клон.\n" #: builtin/clone.c:657 msgid "unable to checkout working tree" -msgstr "" +msgstr "работното дърво не може да бъде подготвено" #: builtin/clone.c:765 msgid "Too many arguments." -msgstr "" +msgstr "Прекалено много аргументи." #: builtin/clone.c:769 msgid "You must specify a repository to clone." -msgstr "" +msgstr "Трябва да укажете кое хранилище искате да клонирате." #: builtin/clone.c:780 #, c-format msgid "--bare and --origin %s options are incompatible." -msgstr "" +msgstr "опциите „--bare“ и „--origin %s“ са несъвместими." #: builtin/clone.c:783 msgid "--bare and --separate-git-dir are incompatible." -msgstr "" +msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими." #: builtin/clone.c:796 #, c-format msgid "repository '%s' does not exist" -msgstr "" +msgstr "не съществува хранилище „%s“" #: builtin/clone.c:802 msgid "--depth is ignored in local clones; use file:// instead." msgstr "" +"При локално клониране опцията „--depth“ се игнорира. Ползвайте схемата " +"„file://“." #: builtin/clone.c:805 msgid "source repository is shallow, ignoring --local" -msgstr "" +msgstr "клонираното хранилище е плитко, затова опцията „--local“ се игнорира" #: builtin/clone.c:810 msgid "--local is ignored" -msgstr "" +msgstr "опцията „--local“ се игнорира" #: builtin/clone.c:814 builtin/fetch.c:1119 #, c-format msgid "depth %s is not a positive number" -msgstr "" +msgstr "дълбочината трябва да е положително цяло число, а не „%s“" #: builtin/clone.c:824 #, c-format msgid "destination path '%s' already exists and is not an empty directory." -msgstr "" +msgstr "целевият път „%s“ съществува и не е празна директория." #: builtin/clone.c:834 #, c-format msgid "working tree '%s' already exists." -msgstr "" +msgstr "в „%s“ вече съществува работно дърво." #: builtin/clone.c:847 builtin/clone.c:859 #, c-format msgid "could not create leading directories of '%s'" -msgstr "" +msgstr "родителските директории на „%s“ не могат да бъдат създадени" #: builtin/clone.c:850 #, c-format msgid "could not create work tree dir '%s'." -msgstr "" +msgstr "работното дърво в „%s“ не може да бъде създадено." #: builtin/clone.c:869 #, c-format msgid "Cloning into bare repository '%s'...\n" -msgstr "" +msgstr "Клониране и създаване на голо хранилище в „%s“…\n" #: builtin/clone.c:871 #, c-format msgid "Cloning into '%s'...\n" -msgstr "" +msgstr "Клониране и създаване на хранилище в „%s“…\n" #: builtin/clone.c:906 #, c-format msgid "Don't know how to clone %s" -msgstr "" +msgstr "Не се поддържа клониране на връзки от вида „%s“ " #: builtin/clone.c:957 builtin/clone.c:965 #, c-format msgid "Remote branch %s not found in upstream %s" -msgstr "" +msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“" #: builtin/clone.c:968 msgid "You appear to have cloned an empty repository." -msgstr "" +msgstr "Изглежда клонирахте празно хранилище." #: builtin/column.c:9 msgid "git column [options]" @@ -3998,11 +4115,11 @@ msgstr "" #: builtin/commit.c:36 msgid "git commit [options] [--] ..." -msgstr "" +msgstr "git commit [ОПЦИИ] [--] ПЪТ…" #: builtin/commit.c:41 msgid "git status [options] [--] ..." -msgstr "" +msgstr "git status [ОПЦИИ] [--] ПЪТ…" #: builtin/commit.c:46 msgid "" @@ -4017,6 +4134,17 @@ msgid "" "\n" " git commit --amend --reset-author\n" msgstr "" +"Името и адресът за е-поща са настроени автоматично на базата на името на\n" +"потребителя и името на машината. Проверете дали са верни. Можете да спрете\n" +"това съобщение като изрично зададете стойностите:\n" +"\n" +" git config --global user.name \"Вашето Име\"\n" +" git config --global user.email пенчо@example.com\n" +"\n" +"След като направите това, можете да коригирате информацията за автора на\n" +"текущото подаване чрез:\n" +"\n" +" git commit --amend --reset-author\n" #: builtin/commit.c:58 msgid "" @@ -4024,6 +4152,11 @@ msgid "" "it empty. You can repeat your command with --allow-empty, or you can\n" "remove the commit entirely with \"git reset HEAD^\".\n" msgstr "" +"Поискахте да поправите последното си подаване. Това действие ще превърне\n" +"подаването в празно. Можете или да го повторите като разрешите такива " +"подавания\n" +"с опцията „--allow-empty“, или да го изтриете от историята с командата:\n" +"„git reset HEAD^“.\n" #: builtin/commit.c:63 msgid "" @@ -4033,10 +4166,16 @@ msgid "" " git commit --allow-empty\n" "\n" msgstr "" +"Предишното отбрано подаване вече е празно, като най-вероятната причина е\n" +"корекция на конфликт. Ако все пак искате да го ползвате, използвайте " +"командата:\n" +"\n" +" git commit --allow-empty\n" +"\n" #: builtin/commit.c:70 msgid "Otherwise, please use 'git reset'\n" -msgstr "" +msgstr "В противен случай използвайте командата „git reset“\n" #: builtin/commit.c:73 msgid "" @@ -4047,95 +4186,101 @@ msgid "" "Then \"git cherry-pick --continue\" will resume cherry-picking\n" "the remaining commits.\n" msgstr "" +"Ако искате да прескочите това подаване, използвайте командата:\n" +"\n" +" git reset\n" +"\n" +"Чрез командата „git cherry-pick --continue“ ще продължите отбирането на\n" +"останалите подавания.\n" -#: builtin/commit.c:287 +#: builtin/commit.c:288 msgid "failed to unpack HEAD tree object" -msgstr "" +msgstr "неуспешно изваждана на върховото дърво (HEAD tree object) от пакет" -#: builtin/commit.c:329 +#: builtin/commit.c:330 msgid "unable to create temporary index" -msgstr "" +msgstr "неуспешно създаване на временен индекс" -#: builtin/commit.c:335 +#: builtin/commit.c:336 msgid "interactive add failed" -msgstr "" +msgstr "неуспешно интерактивно добавяне" -#: builtin/commit.c:368 builtin/commit.c:389 builtin/commit.c:439 +#: builtin/commit.c:369 builtin/commit.c:390 builtin/commit.c:440 msgid "unable to write new_index file" -msgstr "" +msgstr "неуспешен запис на новия индекс" -#: builtin/commit.c:420 +#: builtin/commit.c:421 msgid "cannot do a partial commit during a merge." -msgstr "" +msgstr "по време на сливане не може да се извърши частично подаване." -#: builtin/commit.c:422 +#: builtin/commit.c:423 msgid "cannot do a partial commit during a cherry-pick." -msgstr "" +msgstr "по време на отбиране не може да се извърши частично подаване." -#: builtin/commit.c:432 +#: builtin/commit.c:433 msgid "cannot read the index" -msgstr "" +msgstr "индексът не може да бъде прочетен" -#: builtin/commit.c:452 +#: builtin/commit.c:453 msgid "unable to write temporary index file" -msgstr "" +msgstr "временният индекс не може да бъде записан" -#: builtin/commit.c:543 builtin/commit.c:549 +#: builtin/commit.c:544 builtin/commit.c:550 #, c-format msgid "invalid commit: %s" -msgstr "" +msgstr "неправилно подаване: %s" -#: builtin/commit.c:571 +#: builtin/commit.c:572 msgid "malformed --author parameter" -msgstr "" +msgstr "неправилен параметър към опцията „--author“" -#: builtin/commit.c:591 +#: builtin/commit.c:592 #, c-format msgid "Malformed ident string: '%s'" -msgstr "" +msgstr "Неправилен низ за идентичност: „%s“" -#: builtin/commit.c:630 builtin/commit.c:663 builtin/commit.c:1007 +#: builtin/commit.c:629 builtin/commit.c:663 builtin/commit.c:1014 #, c-format msgid "could not lookup commit %s" -msgstr "" +msgstr "следното подаване не може да бъде открито: %s" -#: builtin/commit.c:642 builtin/shortlog.c:273 +#: builtin/commit.c:641 builtin/shortlog.c:273 #, c-format msgid "(reading log message from standard input)\n" -msgstr "" +msgstr "(изчитане на съобщението за подаване от стандартния вход)\n" -#: builtin/commit.c:644 +#: builtin/commit.c:643 msgid "could not read log from standard input" -msgstr "" +msgstr "съобщението за подаване не бе прочетено стандартния вход" -#: builtin/commit.c:648 +#: builtin/commit.c:647 #, c-format msgid "could not read log file '%s'" -msgstr "" +msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен" #: builtin/commit.c:654 msgid "commit has empty message" -msgstr "" +msgstr "подаване с празно съобщение" #: builtin/commit.c:670 msgid "could not read MERGE_MSG" -msgstr "" +msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено" #: builtin/commit.c:674 msgid "could not read SQUASH_MSG" -msgstr "" +msgstr "съобщението за смачкване SQUASH_MSG не може да бъде прочетено" #: builtin/commit.c:678 #, c-format msgid "could not read '%s'" -msgstr "" +msgstr "файлът „%s“ не може да бъде прочетен" #: builtin/commit.c:749 msgid "could not write commit template" -msgstr "" +msgstr "шаблонът за подаване не може да бъде запазен" # FIXME -#: builtin/commit.c:760 +#: builtin/commit.c:764 #, c-format msgid "" "\n" @@ -4144,9 +4289,14 @@ msgid "" "\t%s\n" "and try again.\n" msgstr "" +"\n" +"Изглежда, че подавате сливане. Ако това не е така, изтрийте файла:\n" +"\n" +" %s\n" +"и опитайте отново.\n" # FIXME -#: builtin/commit.c:765 +#: builtin/commit.c:769 #, c-format msgid "" "\n" @@ -4155,681 +4305,724 @@ msgid "" "\t%s\n" "and try again.\n" msgstr "" +"\n" +"Изглежда, че извършвате отбрано подаване. Ако това не е така, изтрийте " +"файла:\n" +"\n" +" %s\n" +"и опитайте отново.\n" -#: builtin/commit.c:777 +#: builtin/commit.c:782 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be ignored, and an empty message aborts the commit.\n" msgstr "" +"Въведете съобщението за подаване на промените. Редовете, които започват\n" +"с „%c“ ще бъдат филтрирани, а празно съобщение отменя подаването.\n" -#: builtin/commit.c:782 +#: builtin/commit.c:789 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be kept; you may remove them yourself if you want to.\n" "An empty message aborts the commit.\n" msgstr "" +"Въведете съобщението за подаване на промените. Редовете, които започват\n" +"с „%c“ НЯМА да бъдат филтрирани, може да ги изтриете вие. Празно \n" +"съобщение отменя подаването.\n" -#: builtin/commit.c:795 +#: builtin/commit.c:802 #, c-format msgid "%sAuthor: %s" -msgstr "" +msgstr "%sАвтор: %s" -#: builtin/commit.c:802 +#: builtin/commit.c:809 #, c-format msgid "%sCommitter: %s" -msgstr "" +msgstr "%sПодаващ: %s" -#: builtin/commit.c:822 +#: builtin/commit.c:829 msgid "Cannot read index" -msgstr "" +msgstr "Индексът не може да бъде прочетен" -#: builtin/commit.c:865 +#: builtin/commit.c:872 msgid "Error building trees" -msgstr "" +msgstr "Грешка при изграждане на дърветата" -#: builtin/commit.c:880 builtin/tag.c:359 +#: builtin/commit.c:887 builtin/tag.c:391 #, c-format msgid "Please supply the message using either -m or -F option.\n" -msgstr "" +msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n" -#: builtin/commit.c:982 +#: builtin/commit.c:989 #, c-format msgid "No existing author found with '%s'" -msgstr "" +msgstr "Не е открит автор с име „%s“." -#: builtin/commit.c:997 builtin/commit.c:1237 +#: builtin/commit.c:1004 builtin/commit.c:1244 #, c-format msgid "Invalid untracked files mode '%s'" -msgstr "" +msgstr "Неправилна стойност за неследените файлове: „%s“" -#: builtin/commit.c:1034 +#: builtin/commit.c:1041 msgid "--long and -z are incompatible" -msgstr "" +msgstr "Опциите „--long“ и „-z“ са несъвместими." -#: builtin/commit.c:1064 +#: builtin/commit.c:1071 msgid "Using both --reset-author and --author does not make sense" -msgstr "" +msgstr "Опциите „--reset-author“ и „--author“ са несъвместими." -#: builtin/commit.c:1075 +#: builtin/commit.c:1080 msgid "You have nothing to amend." -msgstr "" +msgstr "Няма какво да бъде поправено." -#: builtin/commit.c:1078 +#: builtin/commit.c:1083 msgid "You are in the middle of a merge -- cannot amend." -msgstr "" +msgstr "В момента се извършва сливане, не можете да поправяте." -#: builtin/commit.c:1080 +#: builtin/commit.c:1085 msgid "You are in the middle of a cherry-pick -- cannot amend." -msgstr "" +msgstr "В момента се извършва отбиране на подаване, не можете да поправяте." -#: builtin/commit.c:1083 +#: builtin/commit.c:1088 msgid "Options --squash and --fixup cannot be used together" -msgstr "" +msgstr "Опциите „--squash“ и „--fixup“ са несъвместими." -#: builtin/commit.c:1093 +#: builtin/commit.c:1098 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "" +"Можете да използвате само една от опциите „-c“, „-C“, „-F“ и „--fixup“." -#: builtin/commit.c:1095 +#: builtin/commit.c:1100 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." -msgstr "" +msgstr "Опцията „-m“ е несъвместима с „-c“, „-C“, „-F“ и „--fixup“." -#: builtin/commit.c:1103 +#: builtin/commit.c:1108 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" +"Опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n" +"„--amend“." -#: builtin/commit.c:1120 +#: builtin/commit.c:1125 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" +"Опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n" +"несъвместими." -#: builtin/commit.c:1122 +#: builtin/commit.c:1127 msgid "No paths with --include/--only does not make sense." -msgstr "" +msgstr "Опциите „--include“ и „--only“ изискват аргументи." -#: builtin/commit.c:1124 +# FIXME bad message +#: builtin/commit.c:1129 msgid "Clever... amending the last one with dirty index." msgstr "" +"Поправяте последното подаване докато индекса има проблеми. Това е лоша идея." -#: builtin/commit.c:1126 -msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +#: builtin/commit.c:1131 +msgid "Explicit paths specified without -i or -o; assuming --only paths..." msgstr "" +"Зададени са изрични пътища без опциите „-i“ или „-o“. Приема се, че все едно " +"сте\n" +"ползвали опцията „--only“ с ПЪТища…" -#: builtin/commit.c:1136 builtin/tag.c:572 +#: builtin/commit.c:1143 builtin/tag.c:639 #, c-format msgid "Invalid cleanup mode %s" -msgstr "" +msgstr "Несъществуващ режим на изчистване „%s“" -#: builtin/commit.c:1141 +#: builtin/commit.c:1148 msgid "Paths with -a does not make sense." -msgstr "" +msgstr "Използването на пътища е несъвместимо със задаването на опцията „-a“." -#: builtin/commit.c:1251 builtin/commit.c:1482 +#: builtin/commit.c:1258 builtin/commit.c:1516 msgid "show status concisely" -msgstr "" +msgstr "кратка информация за състоянието" -#: builtin/commit.c:1253 builtin/commit.c:1484 +#: builtin/commit.c:1260 builtin/commit.c:1518 msgid "show branch information" -msgstr "" +msgstr "информация за клоните" -#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507 +#: builtin/commit.c:1262 builtin/commit.c:1520 builtin/push.c:490 msgid "machine-readable output" -msgstr "" +msgstr "формат на изхода за четене от програма" -#: builtin/commit.c:1258 builtin/commit.c:1488 +#: builtin/commit.c:1265 builtin/commit.c:1522 msgid "show status in long format (default)" -msgstr "" +msgstr "подробна информация за състоянието (стандартно)" -#: builtin/commit.c:1261 builtin/commit.c:1491 +#: builtin/commit.c:1268 builtin/commit.c:1525 msgid "terminate entries with NUL" -msgstr "" +msgstr "разделяне на елементите с нулевия знак „NUL“" -#: builtin/commit.c:1263 builtin/commit.c:1494 builtin/fast-export.c:674 -#: builtin/fast-export.c:677 builtin/tag.c:459 +#: builtin/commit.c:1270 builtin/commit.c:1528 builtin/fast-export.c:674 +#: builtin/fast-export.c:677 builtin/tag.c:514 msgid "mode" -msgstr "" +msgstr "режим" -#: builtin/commit.c:1264 builtin/commit.c:1494 +#: builtin/commit.c:1271 builtin/commit.c:1528 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" +"извеждане на неследените файлове. Възможните режими са „all“ (подробна\n" +"информация), „normal“ (кратка информация), „no“ (без неследените файлове).\n" +"Стандартният режим е: „all“." -#: builtin/commit.c:1267 +#: builtin/commit.c:1274 msgid "show ignored files" -msgstr "" +msgstr "извеждане на игнорираните файлове" -#: builtin/commit.c:1268 parse-options.h:156 +#: builtin/commit.c:1275 parse-options.h:153 msgid "when" msgstr "кога" -#: builtin/commit.c:1269 +#: builtin/commit.c:1276 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" +"игнориране на промените в подмодулите. Опция с незадължителна стойност — " +"една от\n" +"„all“ (всички), „dirty“ (тези с неподадени промени), „untracked“ (неследени)" -#: builtin/commit.c:1271 +#: builtin/commit.c:1278 msgid "list untracked files in columns" -msgstr "" +msgstr "извеждане на неследените файлове в колони" -#: builtin/commit.c:1340 +#: builtin/commit.c:1347 msgid "couldn't look up newly created commit" -msgstr "" +msgstr "току що създаденото подаване не може да бъде открито" -#: builtin/commit.c:1342 +#: builtin/commit.c:1349 msgid "could not parse newly created commit" -msgstr "" +msgstr "току що създаденото подаване не може да бъде анализирано" -#: builtin/commit.c:1383 +#: builtin/commit.c:1390 msgid "detached HEAD" -msgstr "" +msgstr "несвързан връх HEAD" -#: builtin/commit.c:1385 +#: builtin/commit.c:1392 msgid " (root-commit)" -msgstr "" +msgstr " (начално подаване)" -#: builtin/commit.c:1452 +#: builtin/commit.c:1486 msgid "suppress summary after successful commit" -msgstr "" +msgstr "без информация след успешно подаване" -#: builtin/commit.c:1453 +#: builtin/commit.c:1487 msgid "show diff in commit message template" -msgstr "" +msgstr "добавяне на разликата към шаблона за съобщението при подаване" -#: builtin/commit.c:1455 +#: builtin/commit.c:1489 msgid "Commit message options" -msgstr "" +msgstr "Опции за съобщението при подаване" -#: builtin/commit.c:1456 builtin/tag.c:457 +#: builtin/commit.c:1490 builtin/tag.c:512 msgid "read message from file" -msgstr "" +msgstr "взимане та съобщението от файл" -#: builtin/commit.c:1457 +#: builtin/commit.c:1491 msgid "author" -msgstr "" +msgstr "автор" -#: builtin/commit.c:1457 +#: builtin/commit.c:1491 msgid "override author for commit" -msgstr "" +msgstr "задаване на автор за подаването" -#: builtin/commit.c:1458 builtin/gc.c:261 +#: builtin/commit.c:1492 builtin/gc.c:272 msgid "date" msgstr "дата" -#: builtin/commit.c:1458 +#: builtin/commit.c:1492 msgid "override date for commit" -msgstr "" +msgstr "задаване на дата за подаването" -#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405 -#: builtin/notes.c:562 builtin/tag.c:455 +#: builtin/commit.c:1493 builtin/merge.c:216 builtin/notes.c:409 +#: builtin/notes.c:566 builtin/tag.c:510 msgid "message" -msgstr "" +msgstr "съобщение" -#: builtin/commit.c:1459 +#: builtin/commit.c:1493 msgid "commit message" -msgstr "" +msgstr "съобщение при подаване" -#: builtin/commit.c:1460 +#: builtin/commit.c:1494 msgid "reuse and edit message from specified commit" -msgstr "" +msgstr "преизползване и редактиране на съобщението от указаното подаване" -#: builtin/commit.c:1461 +#: builtin/commit.c:1495 msgid "reuse message from specified commit" -msgstr "" +msgstr "преизползване на съобщението от указаното подаване" -#: builtin/commit.c:1462 +#: builtin/commit.c:1496 msgid "use autosquash formatted message to fixup specified commit" msgstr "" +"използване на автоматичното съобщение при смачкване за вкарване на " +"указаното\n" +"подаване в предното без следа" -#: builtin/commit.c:1463 +#: builtin/commit.c:1497 msgid "use autosquash formatted message to squash specified commit" msgstr "" +"използване на автоматичното съобщение при смачкване за смачкване на " +"указаното\n" +"подаване в предното" -#: builtin/commit.c:1464 +#: builtin/commit.c:1498 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "" +"смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)" -#: builtin/commit.c:1465 builtin/log.c:1180 builtin/revert.c:86 +#: builtin/commit.c:1499 builtin/log.c:1180 builtin/revert.c:86 msgid "add Signed-off-by:" -msgstr "" +msgstr "добавяне на поле за подпис — „Signed-off-by:“" -#: builtin/commit.c:1466 +#: builtin/commit.c:1500 msgid "use specified template file" -msgstr "" +msgstr "използване на указания шаблонен файл" -#: builtin/commit.c:1467 +#: builtin/commit.c:1501 msgid "force edit of commit" -msgstr "" +msgstr "редактиране на подаване" -#: builtin/commit.c:1468 +#: builtin/commit.c:1502 msgid "default" -msgstr "" +msgstr "стандартно" -#: builtin/commit.c:1468 builtin/tag.c:460 +#: builtin/commit.c:1502 builtin/tag.c:515 msgid "how to strip spaces and #comments from message" -msgstr "" +msgstr "кои празни знаци и #коментари да се махат от съобщенията" -#: builtin/commit.c:1469 +#: builtin/commit.c:1503 msgid "include status in commit message template" -msgstr "" +msgstr "вмъкване на състоянието в шаблона за съобщението при подаване" -#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461 -msgid "key id" -msgstr "" +#: builtin/commit.c:1504 builtin/merge.c:223 builtin/revert.c:92 +#: builtin/tag.c:516 +msgid "key-id" +msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ" -#: builtin/commit.c:1471 builtin/merge.c:224 +#: builtin/commit.c:1505 builtin/merge.c:224 builtin/revert.c:93 msgid "GPG sign commit" -msgstr "" +msgstr "подписване на подаването с GPG" -#. end commit message options -#: builtin/commit.c:1474 +#: builtin/commit.c:1508 msgid "Commit contents options" -msgstr "" +msgstr "Опции за избор на файлове при подаване" -#: builtin/commit.c:1475 +#: builtin/commit.c:1509 msgid "commit all changed files" -msgstr "" +msgstr "подаване на всички променени файлове" -#: builtin/commit.c:1476 +#: builtin/commit.c:1510 msgid "add specified files to index for commit" -msgstr "" +msgstr "добавяне на указаните файлове към индекса за подаване" -#: builtin/commit.c:1477 +#: builtin/commit.c:1511 msgid "interactively add files" -msgstr "" +msgstr "интерактивно добавяне на файлове" -#: builtin/commit.c:1478 +#: builtin/commit.c:1512 msgid "interactively add changes" -msgstr "" +msgstr "интерактивно добавяне на промени" -#: builtin/commit.c:1479 +#: builtin/commit.c:1513 msgid "commit only specified files" -msgstr "" +msgstr "подаване само на указаните файлове" -#: builtin/commit.c:1480 +#: builtin/commit.c:1514 msgid "bypass pre-commit hook" -msgstr "" +msgstr "без изпълнение на куката преди подаване (pre-commit)" -#: builtin/commit.c:1481 +#: builtin/commit.c:1515 msgid "show what would be committed" -msgstr "" +msgstr "отпечатване на това, което би било подадено" -#: builtin/commit.c:1492 +#: builtin/commit.c:1526 msgid "amend previous commit" -msgstr "" +msgstr "поправяне на предишното подаване" -#: builtin/commit.c:1493 +#: builtin/commit.c:1527 msgid "bypass post-rewrite hook" -msgstr "" +msgstr "без изпълнение на куката след презаписване (post-rewrite)" -#: builtin/commit.c:1498 +#: builtin/commit.c:1532 msgid "ok to record an empty change" -msgstr "" +msgstr "позволяване на празни подавания" -#: builtin/commit.c:1500 +#: builtin/commit.c:1534 msgid "ok to record a change with an empty message" -msgstr "" +msgstr "позволяване на подавания с празни съобщения" -#: builtin/commit.c:1529 +#: builtin/commit.c:1562 msgid "could not parse HEAD commit" -msgstr "" +msgstr "върховото подаване „HEAD“ не може да бъде прочетено" -#: builtin/commit.c:1567 builtin/merge.c:518 +#: builtin/commit.c:1601 builtin/merge.c:518 #, c-format msgid "could not open '%s' for reading" -msgstr "" +msgstr "файлът не може да бъде прочетен: „%s“" -#: builtin/commit.c:1574 +#: builtin/commit.c:1608 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" -msgstr "" +msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)" -#: builtin/commit.c:1581 +#: builtin/commit.c:1615 msgid "could not read MERGE_MODE" -msgstr "" +msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен" -#: builtin/commit.c:1600 +#: builtin/commit.c:1634 #, c-format msgid "could not read commit message: %s" -msgstr "" +msgstr "съобщението за подаване не може да бъде прочетено: %s" -#: builtin/commit.c:1611 +#: builtin/commit.c:1645 #, c-format msgid "Aborting commit; you did not edit the message.\n" -msgstr "" +msgstr "Неизвършване на подаване поради нередактирано съобщение.\n" -#: builtin/commit.c:1616 +#: builtin/commit.c:1650 #, c-format msgid "Aborting commit due to empty commit message.\n" -msgstr "" +msgstr "Неизвършване на подаване поради празно съобщение.\n" -#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879 +#: builtin/commit.c:1665 builtin/merge.c:857 builtin/merge.c:882 msgid "failed to write commit object" -msgstr "" +msgstr "обектът за подаването не може да бъде записан" -#: builtin/commit.c:1652 +#: builtin/commit.c:1686 msgid "cannot lock HEAD ref" -msgstr "" +msgstr "указателят към върха „HEAD“ не може да бъде заключен" -#: builtin/commit.c:1656 +#: builtin/commit.c:1690 msgid "cannot update HEAD ref" -msgstr "" +msgstr "указателят към върха „HEAD“ не може да бъде обновен" -#: builtin/commit.c:1667 +#: builtin/commit.c:1701 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" "not exceeded, and then \"git reset HEAD\" to recover." msgstr "" +"Хранилището е обновено, но новият файл за индекс „new_index“\n" +"не е записан. Проверете дали не е препълнен диска или не сте\n" +"превишили дисковата си квота. След това изпълнете „git reset HEAD“." #: builtin/config.c:8 msgid "git config [options]" -msgstr "" +msgstr "git config [ОПЦИИ]" -#: builtin/config.c:54 +#: builtin/config.c:53 msgid "Config file location" -msgstr "" +msgstr "Местоположение на конфигурационния файл" -#: builtin/config.c:55 +#: builtin/config.c:54 msgid "use global config file" -msgstr "" +msgstr "използване на глобалния конфигурационен файл" -#: builtin/config.c:56 +#: builtin/config.c:55 msgid "use system config file" -msgstr "" +msgstr "използване на системния конфигурационен файл" -#: builtin/config.c:57 +#: builtin/config.c:56 msgid "use repository config file" -msgstr "" +msgstr "използване на конфигурационния файл на хранилището" -#: builtin/config.c:58 +#: builtin/config.c:57 msgid "use given config file" -msgstr "" +msgstr "използване на зададения конфигурационен файл" -#: builtin/config.c:59 +#: builtin/config.c:58 msgid "blob-id" -msgstr "" +msgstr "идентификатор на BLOB" -#: builtin/config.c:59 +#: builtin/config.c:58 msgid "read config from given blob object" msgstr "" +"изчитане на конфигурацията от BLOB с този идентификатор на съдържанието" -#: builtin/config.c:60 +#: builtin/config.c:59 msgid "Action" -msgstr "" +msgstr "Действие" -#: builtin/config.c:61 +#: builtin/config.c:60 msgid "get value: name [value-regex]" -msgstr "" +msgstr "извеждане на стойност: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:62 +#: builtin/config.c:61 msgid "get all values: key [value-regex]" -msgstr "" +msgstr "извеждане на всички стойности: ключ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:63 +#: builtin/config.c:62 msgid "get values for regexp: name-regex [value-regex]" msgstr "" +"извеждане на стойностите за РЕГУЛЯРНия_ИЗРАЗ: РЕГУЛЯРЕН_ИЗРАЗ_ЗА_ИМЕТО " +"[РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:64 +#: builtin/config.c:63 msgid "get value specific for the URL: section[.var] URL" -msgstr "" +msgstr "извеждане на стойността за указания адрес: РАЗДЕЛ[.ПРОМЕНЛИВА] АДРЕС" -#: builtin/config.c:65 +#: builtin/config.c:64 msgid "replace all matching variables: name value [value_regex]" msgstr "" +"замяна на всички съвпадащи променливи: ИМЕ СТОЙНОСТ " +"[РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:66 +#: builtin/config.c:65 msgid "add a new variable: name value" -msgstr "" +msgstr "добавяне на нова променлива: ИМЕ СТОЙНОСТ" -#: builtin/config.c:67 +#: builtin/config.c:66 msgid "remove a variable: name [value-regex]" -msgstr "" +msgstr "изтриване на променлива: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:68 +#: builtin/config.c:67 msgid "remove all matches: name [value-regex]" -msgstr "" +msgstr "изтриване на всички съвпадащи: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:69 +#: builtin/config.c:68 msgid "rename section: old-name new-name" -msgstr "" +msgstr "преименуване на раздел: СТАРО_ИМЕ НОВО_ИМЕ" -#: builtin/config.c:70 +#: builtin/config.c:69 msgid "remove a section: name" -msgstr "" +msgstr "изтриване на раздел: ИМЕ" -#: builtin/config.c:71 +#: builtin/config.c:70 msgid "list all" -msgstr "" +msgstr "изброяване на всички" -#: builtin/config.c:72 +#: builtin/config.c:71 msgid "open an editor" -msgstr "" +msgstr "отваряне на редактор" -#: builtin/config.c:73 builtin/config.c:74 +#: builtin/config.c:72 builtin/config.c:73 msgid "slot" -msgstr "" +msgstr "настройка" -#: builtin/config.c:73 +#: builtin/config.c:72 msgid "find the color configured: [default]" -msgstr "" +msgstr "извеждане на зададения цвят на настройката: [стандартно]" -#: builtin/config.c:74 +#: builtin/config.c:73 msgid "find the color setting: [stdout-is-tty]" msgstr "" +"извеждане на зададения цвят на настройката: [стандартният изход е терминал]" -#: builtin/config.c:75 +#: builtin/config.c:74 msgid "Type" -msgstr "" +msgstr "Вид" -#: builtin/config.c:76 +#: builtin/config.c:75 msgid "value is \"true\" or \"false\"" -msgstr "" +msgstr "СТОЙНОСТТА е „true“ (истина) или „false“ (лъжа)" -#: builtin/config.c:77 +#: builtin/config.c:76 msgid "value is decimal number" -msgstr "" +msgstr "СТОЙНОСТТА е цяло, десетично число" -#: builtin/config.c:78 +#: builtin/config.c:77 msgid "value is --bool or --int" -msgstr "" +msgstr "СТОЙНОСТТА е „--bool“ (булева) или „--int“ (десетично цяло число)" -#: builtin/config.c:79 +#: builtin/config.c:78 msgid "value is a path (file or directory name)" -msgstr "" +msgstr "СТОЙНОСТТА е път (до файл или директория)" -#: builtin/config.c:80 +#: builtin/config.c:79 msgid "Other" -msgstr "" +msgstr "Други" -#: builtin/config.c:81 +# FIXME NUL byte to null char, terminate -> razdelitel - da stane ednakvo +#: builtin/config.c:80 msgid "terminate values with NUL byte" -msgstr "" +msgstr "разделяне на стойностите с нулевия знак „NUL“" -#: builtin/config.c:82 +#: builtin/config.c:81 msgid "respect include directives on lookup" -msgstr "" +msgstr "при търсене да се уважат и директивите за включване" #: builtin/count-objects.c:82 msgid "git count-objects [-v] [-H | --human-readable]" -msgstr "" +msgstr "git count-objects [-v] [-H | --human-readable]" #: builtin/count-objects.c:97 msgid "print sizes in human readable format" -msgstr "" +msgstr "извеждане на размерите на обектите във формат лесно четим от хора" +# FIXME ... instead of *??? #: builtin/describe.c:16 msgid "git describe [options] *" -msgstr "" +msgstr "git describe [ОПЦИИ] указател към подаване…" #: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "" -#: builtin/describe.c:237 +#: builtin/describe.c:225 #, c-format msgid "annotated tag %s not available" msgstr "" -#: builtin/describe.c:241 +#: builtin/describe.c:229 #, c-format msgid "annotated tag %s has no embedded name" msgstr "" -#: builtin/describe.c:243 +#: builtin/describe.c:231 #, c-format msgid "tag '%s' is really '%s' here" msgstr "" -#: builtin/describe.c:270 +#: builtin/describe.c:258 #, c-format msgid "Not a valid object name %s" msgstr "" -#: builtin/describe.c:273 +#: builtin/describe.c:261 #, c-format msgid "%s is not a valid '%s' object" msgstr "" -#: builtin/describe.c:290 +#: builtin/describe.c:278 #, c-format msgid "no tag exactly matches '%s'" msgstr "" -#: builtin/describe.c:292 +#: builtin/describe.c:280 #, c-format msgid "searching to describe %s\n" msgstr "" -#: builtin/describe.c:332 +#: builtin/describe.c:327 #, c-format msgid "finished search at %s\n" msgstr "" -#: builtin/describe.c:359 +#: builtin/describe.c:354 #, c-format msgid "" "No annotated tags can describe '%s'.\n" "However, there were unannotated tags: try --tags." msgstr "" -#: builtin/describe.c:363 +#: builtin/describe.c:358 #, c-format msgid "" "No tags can describe '%s'.\n" "Try --always, or create some tags." msgstr "" -#: builtin/describe.c:384 +#: builtin/describe.c:379 #, c-format msgid "traversed %lu commits\n" msgstr "" -#: builtin/describe.c:387 +#: builtin/describe.c:382 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" "gave up search at %s\n" msgstr "" -#: builtin/describe.c:409 +#: builtin/describe.c:404 msgid "find the tag that comes after the commit" msgstr "" -#: builtin/describe.c:410 +#: builtin/describe.c:405 msgid "debug search strategy on stderr" msgstr "" -#: builtin/describe.c:411 +#: builtin/describe.c:406 msgid "use any ref" msgstr "" -#: builtin/describe.c:412 +#: builtin/describe.c:407 msgid "use any tag, even unannotated" msgstr "" -#: builtin/describe.c:413 +#: builtin/describe.c:408 msgid "always use long format" msgstr "" -#: builtin/describe.c:414 +#: builtin/describe.c:409 msgid "only follow first parent" msgstr "" -#: builtin/describe.c:417 +#: builtin/describe.c:412 msgid "only output exact matches" msgstr "" -#: builtin/describe.c:419 -#, fuzzy +#: builtin/describe.c:414 msgid "consider most recent tags (default: 10)" -msgstr "<брой>" +msgstr "да се търси само в този БРОЙ последни етикети (стандартно: 10)" -#: builtin/describe.c:421 +#: builtin/describe.c:416 msgid "only consider tags matching " msgstr "" -#: builtin/describe.c:423 builtin/name-rev.c:321 +#: builtin/describe.c:418 builtin/name-rev.c:321 msgid "show abbreviated commit object as fallback" msgstr "" -#: builtin/describe.c:424 +#: builtin/describe.c:419 msgid "mark" msgstr "" -#: builtin/describe.c:425 +#: builtin/describe.c:420 msgid "append on dirty working tree (default: \"-dirty\")" msgstr "" -#: builtin/describe.c:443 +#: builtin/describe.c:438 msgid "--long is incompatible with --abbrev=0" msgstr "" -#: builtin/describe.c:469 +#: builtin/describe.c:464 msgid "No names found, cannot describe anything." msgstr "" -#: builtin/describe.c:489 +#: builtin/describe.c:484 msgid "--dirty is incompatible with commit-ishes" -msgstr "" +msgstr "опцията „--dirty“ е несъвместима с указател към подаване" #: builtin/diff.c:85 #, c-format msgid "'%s': not a regular file or symlink" -msgstr "" +msgstr "„%s“: не е нито обикновен файл, нито символна връзка" #: builtin/diff.c:236 #, c-format msgid "invalid option: %s" -msgstr "" +msgstr "неправилна опция: %s" #: builtin/diff.c:357 msgid "Not a git repository" -msgstr "" +msgstr "Не е хранилище на Git" #: builtin/diff.c:400 #, c-format msgid "invalid object '%s' given." -msgstr "" +msgstr "зададен е неправилен обект „%s“." #: builtin/diff.c:409 #, c-format msgid "more than two blobs given: '%s'" -msgstr "" +msgstr "зададени са повече от 2 обекта: „%s“" #: builtin/diff.c:416 #, c-format msgid "unhandled object '%s' given." -msgstr "" +msgstr "зададен е неподдържан обект „%s“." #: builtin/fast-export.c:22 msgid "git fast-export [rev-list-opts]" msgstr "" #: builtin/fast-export.c:673 -#, fuzzy msgid "show progress after objects" -msgstr "<брой>" +msgstr "съобщение за напредъка на всеки такъв БРОЙ обекта" #: builtin/fast-export.c:675 msgid "select handling of signed tags" @@ -4865,165 +5058,168 @@ msgstr "" #: builtin/fetch.c:20 msgid "git fetch [] [ [...]]" -msgstr "" +msgstr "git fetch [ОПЦИИ] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]" #: builtin/fetch.c:21 msgid "git fetch [] " -msgstr "" +msgstr "git fetch [ОПЦИИ] ГРУПА" #: builtin/fetch.c:22 msgid "git fetch --multiple [] [( | )...]" -msgstr "" +msgstr "git fetch --multiple [ОПЦИИ] [(ХРАНИЛИЩЕ | ГРУПА)…]" #: builtin/fetch.c:23 msgid "git fetch --all []" -msgstr "" +msgstr "git fetch --all [ОПЦИИ]" #: builtin/fetch.c:75 msgid "fetch from all remotes" -msgstr "" +msgstr "доставяне от всички отдалечени хранилища" #: builtin/fetch.c:77 msgid "append to .git/FETCH_HEAD instead of overwriting" -msgstr "" +msgstr "добавяне към вместо замяна на „.git/FETCH_HEAD“" #: builtin/fetch.c:79 msgid "path to upload pack on remote end" -msgstr "" +msgstr "отдалечен път, където да се качи пакетът" #: builtin/fetch.c:80 msgid "force overwrite of local branch" -msgstr "" +msgstr "принудително презаписване на локалния клон" #: builtin/fetch.c:82 msgid "fetch from multiple remotes" -msgstr "" +msgstr "доставяне от множество отдалечени хранилища" #: builtin/fetch.c:84 msgid "fetch all tags and associated objects" -msgstr "" +msgstr "доставяне на всички етикети и принадлежащи обекти" #: builtin/fetch.c:86 msgid "do not fetch all tags (--no-tags)" -msgstr "" +msgstr "без доставянето на всички етикети „--no-tags“" #: builtin/fetch.c:88 msgid "prune remote-tracking branches no longer on remote" -msgstr "" +msgstr "окастряне на клоните следящи вече не съществуващи отдалечени клони" #: builtin/fetch.c:89 msgid "on-demand" -msgstr "" +msgstr "при нужда" #: builtin/fetch.c:90 msgid "control recursive fetching of submodules" -msgstr "" +msgstr "управление на рекурсивното доставяне на подмодулите" #: builtin/fetch.c:94 msgid "keep downloaded pack" -msgstr "" +msgstr "запазване на изтеглените пакети с обекти" #: builtin/fetch.c:96 msgid "allow updating of HEAD ref" -msgstr "" +msgstr "позволяване на обновяването на указателя „HEAD“" #: builtin/fetch.c:99 msgid "deepen history of shallow clone" -msgstr "" +msgstr "задълбочаване на историята на плитко хранилище" #: builtin/fetch.c:101 msgid "convert to a complete repository" -msgstr "" +msgstr "превръщане в пълно хранилище" #: builtin/fetch.c:103 builtin/log.c:1197 msgid "dir" -msgstr "" +msgstr "директория" #: builtin/fetch.c:104 msgid "prepend this to submodule path output" -msgstr "" +msgstr "добавяне на това пред пътя на подмодула" #: builtin/fetch.c:107 msgid "default mode for recursion" -msgstr "" +msgstr "стандартен режим на рекурсия" #: builtin/fetch.c:109 msgid "accept refs that update .git/shallow" -msgstr "" +msgstr "приемане на указатели, които обновяват „.git/shallow“" #: builtin/fetch.c:347 msgid "Couldn't find remote ref HEAD" -msgstr "" +msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит" #: builtin/fetch.c:411 #, c-format msgid "object %s not found" -msgstr "" +msgstr "обектът „%s“ липсва" #: builtin/fetch.c:416 msgid "[up to date]" -msgstr "" +msgstr "[актуализиран]" +# FIXME - the signs #: builtin/fetch.c:430 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" -msgstr "" +msgstr "! %-*s %-*s -> %s (в текущия клон не може да се доставя)" #: builtin/fetch.c:431 builtin/fetch.c:517 msgid "[rejected]" -msgstr "" +msgstr "[отхвърлен]" #: builtin/fetch.c:442 msgid "[tag update]" -msgstr "" +msgstr "[обновяване на етикетите]" #: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497 msgid " (unable to update local ref)" -msgstr "" +msgstr " (локалните указатели не могат да бъдат обновени)" #: builtin/fetch.c:462 msgid "[new tag]" -msgstr "" +msgstr "[нов етикет]" #: builtin/fetch.c:465 msgid "[new branch]" -msgstr "" +msgstr "[нов клон]" #: builtin/fetch.c:468 msgid "[new ref]" -msgstr "" +msgstr "[нов указател]" #: builtin/fetch.c:513 msgid "unable to update local ref" -msgstr "" +msgstr "локален указател не може да бъде обновен" #: builtin/fetch.c:513 msgid "forced update" -msgstr "" +msgstr "принудително обновяване" #: builtin/fetch.c:519 msgid "(non-fast-forward)" -msgstr "" +msgstr "(сливането не е тривиално)" #: builtin/fetch.c:552 builtin/fetch.c:785 #, c-format msgid "cannot open %s: %s\n" -msgstr "" +msgstr "файлът „%s“ не може да бъде отворен: %s\n" #: builtin/fetch.c:561 #, c-format msgid "%s did not send all necessary objects\n" -msgstr "" +msgstr "хранилището „%s“ не изпрати всички необходими обекти\n" #: builtin/fetch.c:579 #, c-format msgid "reject %s because shallow roots are not allowed to be updated" msgstr "" +"отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат " +"обновявани" #: builtin/fetch.c:667 builtin/fetch.c:750 #, c-format msgid "From %.*s\n" -msgstr "" +msgstr "От %.*s\n" #: builtin/fetch.c:678 #, c-format @@ -5031,20 +5227,23 @@ msgid "" "some local refs could not be updated; try running\n" " 'git remote prune %s' to remove any old, conflicting branches" msgstr "" +"някои локални указатели не могат да бъдат обновени. Изпълнете командата\n" +" „git remote prune %s“, за да премахнете остарелите клони, които " +"предизвикват конфликта" #: builtin/fetch.c:730 #, c-format msgid " (%s will become dangling)" -msgstr "" +msgstr " (обектът „%s“ ще се окаже извън клон)" #: builtin/fetch.c:731 #, c-format msgid " (%s has become dangling)" -msgstr "" +msgstr " (обектът „%s“ вече е извън клон)" #: builtin/fetch.c:755 msgid "[deleted]" -msgstr "" +msgstr "[изтрит]" #: builtin/fetch.c:756 builtin/remote.c:1050 msgid "(none)" @@ -5054,98 +5253,103 @@ msgstr "(нищо)" #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "" +"Не може да изтегляте в текущия клон „%s“, на хранилище, което не е голо" #: builtin/fetch.c:794 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" -msgstr "" +msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“" #: builtin/fetch.c:797 #, c-format msgid "Option \"%s\" is ignored for %s\n" -msgstr "" +msgstr "Опцията „%s“ се игнорира при „%s“\n" #: builtin/fetch.c:853 #, c-format msgid "Don't know how to fetch from %s" -msgstr "" +msgstr "Не се поддържа доставяне от „%s“" #: builtin/fetch.c:1015 #, c-format msgid "Fetching %s\n" -msgstr "" +msgstr "Доставяне на „%s“\n" #: builtin/fetch.c:1017 builtin/remote.c:90 #, c-format msgid "Could not fetch %s" msgstr "„%s“ не може да се достави" -#: builtin/fetch.c:1036 +#: builtin/fetch.c:1035 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." msgstr "" +"Не сте указали отдалечено хранилище. Задайте или адрес, или име\n" +"на отдалечено хранилище, от където да се доставят новите версии." #: builtin/fetch.c:1059 msgid "You need to specify a tag name." -msgstr "" +msgstr "Трябва да укажете име на етикет." #: builtin/fetch.c:1107 msgid "--depth and --unshallow cannot be used together" -msgstr "" +msgstr "опциите „--depth“ и „--unshallow“ са несъвместими" #: builtin/fetch.c:1109 msgid "--unshallow on a complete repository does not make sense" -msgstr "" +msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище" #: builtin/fetch.c:1132 msgid "fetch --all does not take a repository argument" -msgstr "" +msgstr "към „git fetch --all“ не можете да добавите хранилище аргумент" #: builtin/fetch.c:1134 msgid "fetch --all does not make sense with refspecs" msgstr "" +"към „git fetch --all“ не можете да добавите указател на версия за аргумент" #: builtin/fetch.c:1145 #, c-format msgid "No such remote or remote group: %s" -msgstr "" +msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“" #: builtin/fetch.c:1153 msgid "Fetching a group and specifying refspecs does not make sense" -msgstr "" +msgstr "Указването на група и указването на версия са несъвместими" #: builtin/fmt-merge-msg.c:13 -#, fuzzy msgid "git fmt-merge-msg [-m ] [--log[=]|--no-log] [--file ]" -msgstr "<брой>" +msgstr "git fmt-merge-msg [-m СЪОБЩЕНИЕ] [--log[=БРОЙ]|--no-log] [--file ФАЙЛ]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702 -#: builtin/merge.c:196 builtin/show-branch.c:654 builtin/show-ref.c:178 -#: builtin/tag.c:446 parse-options.h:135 parse-options.h:242 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:196 builtin/repack.c:175 builtin/repack.c:179 +#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:501 +#: parse-options.h:132 parse-options.h:239 msgid "n" -msgstr "брой" +msgstr "БРОЙ" #: builtin/fmt-merge-msg.c:664 -#, fuzzy msgid "populate log with at most entries from shortlog" -msgstr "<брой>" +msgstr "" +"вмъкване на журнал състоящ се от не повече от БРОЙ записа от съкратения " +"журнал" #: builtin/fmt-merge-msg.c:667 msgid "alias for --log (deprecated)" -msgstr "" +msgstr "синоним на „--log“ (остаряло)" #: builtin/fmt-merge-msg.c:670 msgid "text" -msgstr "" +msgstr "ТЕКСТ" #: builtin/fmt-merge-msg.c:671 msgid "use as start of message" -msgstr "" +msgstr "за начало на съобщението да се ползва ТЕКСТ" #: builtin/fmt-merge-msg.c:672 msgid "file to read from" -msgstr "" +msgstr "файл, от който да се чете" #: builtin/for-each-ref.c:1063 msgid "git for-each-ref [options] []" @@ -5168,17 +5372,16 @@ msgid "quote placeholders suitably for tcl" msgstr "" #: builtin/for-each-ref.c:1087 -#, fuzzy msgid "show only matched refs" -msgstr "<брой>" +msgstr "извеждане само на този БРОЙ напаснати указатели" #: builtin/for-each-ref.c:1088 builtin/replace.c:177 msgid "format" -msgstr "" +msgstr "ФОРМАТ" #: builtin/for-each-ref.c:1088 msgid "format to use for the output" -msgstr "" +msgstr "ФОРМАТ за изхода" #: builtin/for-each-ref.c:1089 msgid "key" @@ -5188,9 +5391,17 @@ msgstr "" msgid "field name to sort on" msgstr "" +#: builtin/fsck.c:147 builtin/prune.c:172 +msgid "Checking connectivity" +msgstr "Проверка на връзката" + +#: builtin/fsck.c:544 +msgid "Checking object directories" +msgstr "Проверка на директориите с обекти" + #: builtin/fsck.c:607 msgid "git fsck [options] [...]" -msgstr "git fsck [ОПЦИИ] [<ОБЕКТ>…]" +msgstr "git fsck [ОПЦИИ] [ОБЕКТ…]" #: builtin/fsck.c:613 msgid "show unreachable objects" @@ -5212,13 +5423,12 @@ msgstr "показване на кореновите възли" msgid "make index objects head nodes" msgstr "задаване на обекти от индекса да са коренови" +# FIXME bad message #: builtin/fsck.c:618 -#, fuzzy msgid "make reflogs head nodes (default)" msgstr "проследяване на указателите от журнала като глави (стандартно)" #: builtin/fsck.c:619 -#, fuzzy msgid "also consider packs and alternate objects" msgstr "допълнително да се проверяват пакетите и алтернативните обекти" @@ -5234,51 +5444,61 @@ msgstr "запазване на обектите извън клоните в д msgid "show progress" msgstr "показване на напредъка" +#: builtin/fsck.c:673 +msgid "Checking objects" +msgstr "Проверка на обектите" + #: builtin/gc.c:24 msgid "git gc [options]" msgstr "git gc [ОПЦИИ]" -#: builtin/gc.c:80 +#: builtin/gc.c:90 #, c-format msgid "Invalid %s: '%s'" msgstr "Неправилна стойност за „%s“: „%s“" -#: builtin/gc.c:107 +#: builtin/gc.c:117 #, c-format msgid "insanely long object directory %.*s" msgstr "прекалено дълга директория с обекти „%.*s“" -#: builtin/gc.c:262 +#: builtin/gc.c:273 msgid "prune unreferenced objects" msgstr "окастряне на обектите, към които нищо не сочи" -#: builtin/gc.c:264 +#: builtin/gc.c:275 msgid "be more thorough (increased runtime)" msgstr "изчерпателно търсене на боклука (за сметка на повече време работа)" -#: builtin/gc.c:265 +#: builtin/gc.c:276 msgid "enable auto-gc mode" msgstr "включване на автоматичното събиране на боклука (auto-gc)" -#: builtin/gc.c:266 +#: builtin/gc.c:277 msgid "force running gc even if there may be another gc running" msgstr "" "изрично стартиране на събирането на боклука, дори и ако вече работи друго " "събиране" -#: builtin/gc.c:306 +#: builtin/gc.c:318 #, c-format -msgid "" -"Auto packing the repository for optimum performance. You may also\n" -"run \"git gc\" manually. See \"git help gc\" for more information.\n" +msgid "Auto packing the repository in background for optimum performance.\n" msgstr "" -"Автоматично пакетиране на хранилището за най-добра производителност. Можете " -"и\n" -"ръчно да стартирате „git gc“. За подробности погледнете помощта: „git help " -"gc“.\n" +"Автоматично пакетиране на заден фон на хранилището за по-добра " +"производителност.\n" -#. be quiet on --auto -#: builtin/gc.c:316 +#: builtin/gc.c:320 +#, c-format +msgid "Auto packing the repository for optimum performance.\n" +msgstr "Автоматично пакетиране на хранилището за по-добра производителност.\n" + +#: builtin/gc.c:321 +#, c-format +msgid "See \"git help gc\" for manual housekeeping.\n" +msgstr "" +"Вижте ръководството за повече информация как да изпълните „git help gc“.\n" + +#: builtin/gc.c:336 #, c-format msgid "" "gc is already running on machine '%s' pid % (use --force if not)" @@ -5287,7 +5507,7 @@ msgstr "" "процеса: % (ако сте сигурни, че това не е вярно, това използвайте\n" "опцията „--force“)" -#: builtin/gc.c:341 +#: builtin/gc.c:361 msgid "" "There are too many unreachable loose objects; run 'git prune' to remove them." msgstr "" @@ -5297,236 +5517,248 @@ msgstr "" #: builtin/grep.c:23 msgid "git grep [options] [-e] [...] [[--] ...]" -msgstr "" +msgstr "git grep [ОПЦИИ] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]" #: builtin/grep.c:218 #, c-format msgid "grep: failed to create thread: %s" -msgstr "" +msgstr "grep: неуспешно създаване на нишка: %s" #: builtin/grep.c:365 #, c-format msgid "Failed to chdir: %s" -msgstr "" +msgstr "Неуспешна смяна на директория: %s" #: builtin/grep.c:443 builtin/grep.c:478 #, c-format msgid "unable to read tree (%s)" -msgstr "" +msgstr "дървото не може да бъде прочетено (%s)" #: builtin/grep.c:493 #, c-format msgid "unable to grep from object of type %s" -msgstr "" +msgstr "не може да се изпълни „grep“ от обект от вида %s" -#: builtin/grep.c:551 +#: builtin/grep.c:549 #, c-format msgid "switch `%c' expects a numerical value" -msgstr "" +msgstr "опцията „%c“ очаква число за аргумент" -#: builtin/grep.c:568 +#: builtin/grep.c:566 #, c-format msgid "cannot open '%s'" -msgstr "" +msgstr "„%s“ не може да бъде отворен" -#: builtin/grep.c:642 +#: builtin/grep.c:640 msgid "search in index instead of in the work tree" -msgstr "" +msgstr "търсене в индекса, а не в работното дърво" -#: builtin/grep.c:644 +#: builtin/grep.c:642 msgid "find in contents not managed by git" -msgstr "" +msgstr "търсене и във файловете, които не са под управлението на git" -#: builtin/grep.c:646 +#: builtin/grep.c:644 msgid "search in both tracked and untracked files" -msgstr "" +msgstr "търсене и в следените, и в неследените файлове" -#: builtin/grep.c:648 +#: builtin/grep.c:646 msgid "search also in ignored files" -msgstr "" +msgstr "търсене и в игнорираните файлове" -#: builtin/grep.c:651 +#: builtin/grep.c:649 msgid "show non-matching lines" -msgstr "" +msgstr "извеждане на редовете, които не съвпадат" -#: builtin/grep.c:653 +#: builtin/grep.c:651 msgid "case insensitive matching" -msgstr "" +msgstr "без значение на регистъра на буквите (главни/малки)" -#: builtin/grep.c:655 +#: builtin/grep.c:653 msgid "match patterns only at word boundaries" -msgstr "" +msgstr "напасване на шаблоните само по границите на думите" -#: builtin/grep.c:657 +#: builtin/grep.c:655 msgid "process binary files as text" -msgstr "" +msgstr "обработване на двоичните файлове като текстови" -#: builtin/grep.c:659 +#: builtin/grep.c:657 msgid "don't match patterns in binary files" -msgstr "" +msgstr "прескачане на двоичните файлове" -#: builtin/grep.c:662 +#: builtin/grep.c:660 msgid "process binary files with textconv filters" msgstr "" +"обработване на двоичните файлове чрез филтри за преобразуване към текст" -#: builtin/grep.c:664 +#: builtin/grep.c:662 msgid "descend at most levels" -msgstr "" +msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото" -#: builtin/grep.c:668 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" -msgstr "" +msgstr "разширени регулярни изрази по POSIX" -#: builtin/grep.c:671 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" -msgstr "" +msgstr "основни регулярни изрази по POSIX (стандартно)" -#: builtin/grep.c:674 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" -msgstr "" +msgstr "шаблоните са дословни низове" -#: builtin/grep.c:677 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" -msgstr "" +msgstr "регулярни изрази на Perl" -#: builtin/grep.c:680 +#: builtin/grep.c:678 msgid "show line numbers" -msgstr "" +msgstr "извеждане на номерата на редовете" -#: builtin/grep.c:681 +#: builtin/grep.c:679 msgid "don't show filenames" -msgstr "" +msgstr "без извеждане на имената на файловете" -#: builtin/grep.c:682 +#: builtin/grep.c:680 msgid "show filenames" -msgstr "" +msgstr "извеждане на имената на файловете" -#: builtin/grep.c:684 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "" +"извеждане на относителните имена на файловете спрямо основната директория на " +"хранилището" -#: builtin/grep.c:686 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" -msgstr "" +msgstr "извеждане само на имената на файловете без напасващите редове" -#: builtin/grep.c:688 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" -msgstr "" +msgstr "синоним на „--files-with-matches“" -#: builtin/grep.c:691 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "" +"извеждане само на имената на файловете, които не съдържат ред, напасващ на " +"шаблона" -#: builtin/grep.c:693 +#: builtin/grep.c:691 msgid "print NUL after filenames" -msgstr "" +msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл" -#: builtin/grep.c:695 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" -msgstr "" +msgstr "извеждане на броя на съвпаденията вместо напасващите редове" -#: builtin/grep.c:696 +#: builtin/grep.c:694 msgid "highlight matches" -msgstr "" +msgstr "оцветяване на напасванията" -#: builtin/grep.c:698 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" -msgstr "" +msgstr "извеждане на празен ред между напасванията от различни файлове" -#: builtin/grep.c:700 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "" +"извеждане на името на файла само веднъж за всички напасвания от този файл" -#: builtin/grep.c:703 -#, fuzzy +#: builtin/grep.c:701 msgid "show context lines before and after matches" -msgstr "<брой>" +msgstr "извеждане на такъв БРОЙ редове преди и след напасванията" -#: builtin/grep.c:706 -#, fuzzy +#: builtin/grep.c:704 msgid "show context lines before matches" -msgstr "<брой>" +msgstr "извеждане на такъв БРОЙ редове преди напасванията" -#: builtin/grep.c:708 -#, fuzzy +#: builtin/grep.c:706 msgid "show context lines after matches" -msgstr "<брой>" +msgstr "извеждане на такъв БРОЙ редове след напасванията" -#: builtin/grep.c:709 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" -msgstr "" +msgstr "синоним на „-C БРОЙ“" -#: builtin/grep.c:712 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" -msgstr "" +msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона" -#: builtin/grep.c:714 +#: builtin/grep.c:712 msgid "show the surrounding function" -msgstr "" +msgstr "извеждане на обхващащата функция" -#: builtin/grep.c:717 +#: builtin/grep.c:715 msgid "read patterns from file" -msgstr "" +msgstr "изчитане на шаблоните от файл" -#: builtin/grep.c:719 +#: builtin/grep.c:717 msgid "match " -msgstr "" +msgstr "напасване на ШАБЛОН" -#: builtin/grep.c:721 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" -msgstr "" +msgstr "комбиниране на шаблоните указани с опцията „-e“" -#: builtin/grep.c:733 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "" +"без извеждане на стандартния изход. Изходният код указва наличието на " +"напасване" -#: builtin/grep.c:735 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "" +"извеждане на редове само от файловете, които напасват на всички шаблони" -#: builtin/grep.c:737 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" -msgstr "" +msgstr "извеждане на дървото за анализ на регулярния израз" -#: builtin/grep.c:741 +#: builtin/grep.c:739 msgid "pager" -msgstr "" +msgstr "програма за обхождане" -#: builtin/grep.c:741 +#: builtin/grep.c:739 msgid "show matching files in the pager" -msgstr "" +msgstr "извеждане на съвпадащите файлове в програма за обхождане" -#: builtin/grep.c:744 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "" +"позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази " +"опция)" -#: builtin/grep.c:745 builtin/show-ref.c:187 +#: builtin/grep.c:743 builtin/show-ref.c:187 msgid "show usage" -msgstr "" +msgstr "извеждане на начина на употреба на командата" -#: builtin/grep.c:812 +#: builtin/grep.c:810 msgid "no pattern given." -msgstr "" +msgstr "липсва шаблон." -#: builtin/grep.c:870 +#: builtin/grep.c:868 msgid "--open-files-in-pager only works on the worktree" msgstr "" +"опцията „--open-files-in-pager“ е съвместима само с търсене в работното дърво" -#: builtin/grep.c:893 +#: builtin/grep.c:891 msgid "--cached or --untracked cannot be used with --no-index." -msgstr "" +msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“." -#: builtin/grep.c:898 +#: builtin/grep.c:896 msgid "--no-index or --untracked cannot be used with revs." msgstr "" +"опциите „--cached“ и „--untracked“ са несъвместими с търсене във версии." -#: builtin/grep.c:901 +#: builtin/grep.c:899 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "" +"опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени " +"файлове." -#: builtin/grep.c:909 +#: builtin/grep.c:907 msgid "both --cached and trees are given." -msgstr "" +msgstr "опцията „--cached“ е несъвместима със задаване на дърво." #: builtin/hash-object.c:60 msgid "" @@ -5538,7 +5770,7 @@ msgstr "" msgid "git hash-object --stdin-paths < " msgstr "" -#: builtin/hash-object.c:72 +#: builtin/hash-object.c:72 builtin/tag.c:521 msgid "type" msgstr "" @@ -5777,8 +6009,8 @@ msgstr "" msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "" -#: builtin/index-pack.c:669 builtin/pack-objects.c:171 -#: builtin/pack-objects.c:263 +#: builtin/index-pack.c:669 builtin/pack-objects.c:162 +#: builtin/pack-objects.c:254 #, c-format msgid "unable to read %s" msgstr "" @@ -5895,7 +6127,7 @@ msgstr "" #: builtin/index-pack.c:1325 msgid "cannot store index file" -msgstr "" +msgstr "файлът за индекса не може да бъде съхранен" #: builtin/index-pack.c:1358 #, c-format @@ -6044,424 +6276,435 @@ msgstr "" msgid "unable to move %s to %s" msgstr "" -#. -#. * TRANSLATORS: The first '%s' is either "Reinitialized -#. * existing" or "Initialized empty", the second " shared" or -#. * "", and the last '%s%s' is the verbatim directory name. -#. -#: builtin/init-db.c:420 +#. TRANSLATORS: The first '%s' is either "Reinitialized +#. existing" or "Initialized empty", the second " shared" or +#. "", and the last '%s%s' is the verbatim directory name. +#: builtin/init-db.c:418 #, c-format msgid "%s%s Git repository in %s%s\n" msgstr "" -#: builtin/init-db.c:421 +#: builtin/init-db.c:419 msgid "Reinitialized existing" msgstr "" -#: builtin/init-db.c:421 +#: builtin/init-db.c:419 msgid "Initialized empty" msgstr "" -#: builtin/init-db.c:422 +#: builtin/init-db.c:420 msgid " shared" msgstr "" -#: builtin/init-db.c:441 +#: builtin/init-db.c:439 msgid "cannot tell cwd" msgstr "" -#: builtin/init-db.c:467 +#: builtin/init-db.c:465 msgid "" "git init [-q | --quiet] [--bare] [--template=] [--" "shared[=]] [directory]" msgstr "" -#: builtin/init-db.c:490 +#: builtin/init-db.c:488 msgid "permissions" msgstr "" -#: builtin/init-db.c:491 +#: builtin/init-db.c:489 msgid "specify that the git repository is to be shared amongst several users" msgstr "" -#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155 +#: builtin/init-db.c:491 builtin/prune-packed.c:79 builtin/repack.c:168 msgid "be quiet" -msgstr "" +msgstr "без извеждане на информация" -#: builtin/init-db.c:522 builtin/init-db.c:529 +#: builtin/init-db.c:523 builtin/init-db.c:528 #, c-format msgid "cannot mkdir %s" msgstr "" -#: builtin/init-db.c:533 +#: builtin/init-db.c:532 #, c-format msgid "cannot chdir to %s" msgstr "" -#: builtin/init-db.c:555 +#: builtin/init-db.c:554 #, c-format msgid "" "%s (or --work-tree=) not allowed without specifying %s (or --git-" "dir=)" msgstr "" -#: builtin/init-db.c:579 +#: builtin/init-db.c:578 msgid "Cannot access current working directory" msgstr "" -#: builtin/init-db.c:586 +#: builtin/init-db.c:585 #, c-format msgid "Cannot access work tree '%s'" msgstr "" #: builtin/log.c:41 msgid "git log [] [] [[--] ...]\n" -msgstr "" +msgstr "git log [ОПЦИИ] [ДИАПАЗОН_НА_ВЕРСИИТЕ] [[--] ПЪТ…]\n" #: builtin/log.c:42 msgid " or: git show [options] ..." -msgstr "" +msgstr " или: git show [ОПЦИИ] ОБЕКТ…" #: builtin/log.c:125 msgid "suppress diff output" -msgstr "" +msgstr "без извеждане на разликите" #: builtin/log.c:126 msgid "show source" -msgstr "" +msgstr "извеждане на изходния код" #: builtin/log.c:127 msgid "Use mail map file" msgstr "" +"Използване на файл за съответствията на имената и адресите на е-поща („." +"mailmap“)" #: builtin/log.c:128 msgid "decorate options" -msgstr "" +msgstr "настройки на форма̀та на извежданата информация" #: builtin/log.c:231 #, c-format msgid "Final output: %d %s\n" -msgstr "" +msgstr "Резултат: %d %s\n" #: builtin/log.c:473 builtin/log.c:565 #, c-format msgid "Could not read object %s" -msgstr "" +msgstr "Обектът не може да бъде прочетен: %s" #: builtin/log.c:589 #, c-format msgid "Unknown type: %d" -msgstr "" +msgstr "Неизвестен вид: %d" #: builtin/log.c:689 msgid "format.headers without value" -msgstr "" +msgstr "не е зададена стойност на „format.headers“" #: builtin/log.c:771 msgid "name of output directory is too long" -msgstr "" +msgstr "прекалено дълго име на директорията за изходната информация" #: builtin/log.c:787 #, c-format msgid "Cannot open patch file %s" -msgstr "" +msgstr "Файлът-кръпка „%s“ не може да бъде отворен" #: builtin/log.c:801 msgid "Need exactly one range." -msgstr "" +msgstr "Трябва да зададете точно един диапазон." #: builtin/log.c:809 msgid "Not a range." -msgstr "" +msgstr "Не е диапазон." #: builtin/log.c:911 msgid "Cover letter needs email format" -msgstr "" +msgstr "Придружаващото писмо трябва да е форматирано като е-писмо" #: builtin/log.c:987 #, c-format msgid "insane in-reply-to: %s" -msgstr "" +msgstr "неправилен формат на заглавната част за отговор „in-reply-to“: %s" #: builtin/log.c:1015 msgid "git format-patch [options] [ | ]" -msgstr "" +msgstr "git format-patch [ОПЦИИ] [ОТ | ДИАПАЗОН_НА_ВЕРСИИТЕ]" +# FIXME message #: builtin/log.c:1060 msgid "Two output directories?" msgstr "" +"Можете да укажете максимум една директория за изход, а сте задали поне две." #: builtin/log.c:1175 msgid "use [PATCH n/m] even with a single patch" -msgstr "" +msgstr "номерация „[PATCH n/m]“ дори и при единствена кръпка" #: builtin/log.c:1178 msgid "use [PATCH] even with multiple patches" -msgstr "" +msgstr "номерация „[PATCH]“ дори и при множество кръпки" #: builtin/log.c:1182 msgid "print patches to standard out" -msgstr "" +msgstr "извеждане на кръпките на стандартния изход" #: builtin/log.c:1184 msgid "generate a cover letter" -msgstr "" +msgstr "създаване на придружаващо писмо" #: builtin/log.c:1186 msgid "use simple number sequence for output file names" -msgstr "" +msgstr "проста числова последователност за имената на файловете-кръпки" #: builtin/log.c:1187 msgid "sfx" -msgstr "" +msgstr "ЗНАЦИ" #: builtin/log.c:1188 msgid "use instead of '.patch'" -msgstr "" +msgstr "използване на тези ЗНАЦИ за суфикс вместо „.patch“" #: builtin/log.c:1190 -#, fuzzy msgid "start numbering patches at instead of 1" -msgstr "<брой>" +msgstr "номерирането на кръпките да започва от този БРОЙ, а не с 1" #: builtin/log.c:1192 msgid "mark the series as Nth re-roll" -msgstr "" +msgstr "отбелязване, че това е N-тата поредна редакция на поредицата от кръпки" #: builtin/log.c:1194 msgid "Use [] instead of [PATCH]" -msgstr "" +msgstr "Използване на този „[ПРЕФИКС]“ вместо „[PATCH]“" #: builtin/log.c:1197 msgid "store resulting files in " -msgstr "" +msgstr "запазване на изходните файлове в тази ДИРЕКТОРИЯ" #: builtin/log.c:1200 msgid "don't strip/add [PATCH]" -msgstr "" +msgstr "без добавяне/махане на префикса „[PATCH]“" #: builtin/log.c:1203 msgid "don't output binary diffs" -msgstr "" +msgstr "без извеждане на разлики между двоични файлове" #: builtin/log.c:1205 msgid "don't include a patch matching a commit upstream" -msgstr "" +msgstr "да не се включват кръпки, които присъстват в следения клон" #: builtin/log.c:1207 msgid "show patch format instead of default (patch + stat)" msgstr "" +"извеждане във формат за кръпки, а на в стандартния (кръпка и статистика)" #: builtin/log.c:1209 msgid "Messaging" -msgstr "" +msgstr "Опции при изпращане" #: builtin/log.c:1210 msgid "header" -msgstr "" +msgstr "ЗАГЛАВНА_ЧАСТ" #: builtin/log.c:1211 msgid "add email header" -msgstr "" +msgstr "добавяне на тази ЗАГЛАВНА_ЧАСТ" #: builtin/log.c:1212 builtin/log.c:1214 msgid "email" -msgstr "" +msgstr "Е-ПОЩА" #: builtin/log.c:1212 msgid "add To: header" -msgstr "" +msgstr "добавяне на заглавна част „To:“ (до)" #: builtin/log.c:1214 msgid "add Cc: header" -msgstr "" +msgstr "добавяне на заглавна част „Cc:“ (и до)" #: builtin/log.c:1216 msgid "ident" -msgstr "" +msgstr "ИДЕНТИЧНОСТ" #: builtin/log.c:1217 msgid "set From address to (or committer ident if absent)" msgstr "" +"задаване на адреса в заглавната част „From“ да е тази ИДЕНТИЧНОСТ. Ако не е " +"зададена такава, се взима адреса на подаващия" #: builtin/log.c:1219 msgid "message-id" -msgstr "" +msgstr "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ" #: builtin/log.c:1220 msgid "make first mail a reply to " msgstr "" +"първото съобщение да е в отговор на е-писмото с този " +"ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ" #: builtin/log.c:1221 builtin/log.c:1224 msgid "boundary" -msgstr "" +msgstr "граница" #: builtin/log.c:1222 msgid "attach the patch" -msgstr "" +msgstr "прикрепяне на кръпката" #: builtin/log.c:1225 msgid "inline the patch" -msgstr "" +msgstr "включване на кръпката в текста на писмата" #: builtin/log.c:1229 msgid "enable message threading, styles: shallow, deep" msgstr "" +"използване на нишки за съобщенията. Стилът е „shallow“ (плитък) или " +"„deep“ (дълбок)" #: builtin/log.c:1231 msgid "signature" -msgstr "" +msgstr "подпис" #: builtin/log.c:1232 msgid "add a signature" -msgstr "" +msgstr "добавяне на поле за подпис" #: builtin/log.c:1233 msgid "don't print the patch filenames" -msgstr "" +msgstr "без извеждане на имената на кръпките" #: builtin/log.c:1307 #, c-format msgid "invalid ident line: %s" -msgstr "" +msgstr "грешна идентичност: %s" #: builtin/log.c:1322 msgid "-n and -k are mutually exclusive." -msgstr "" +msgstr "опциите „-n“ и „-k“ са несъвместими." #: builtin/log.c:1324 msgid "--subject-prefix and -k are mutually exclusive." -msgstr "" +msgstr "опциите „--subject-prefix“ и „-k“ са несъвместими." #: builtin/log.c:1332 msgid "--name-only does not make sense" -msgstr "" +msgstr "опцията „--name-only“ е несъвместима с генерирането на кръпки" #: builtin/log.c:1334 msgid "--name-status does not make sense" -msgstr "" +msgstr "опцията „--name-status“ е несъвместима с генерирането на кръпки" #: builtin/log.c:1336 msgid "--check does not make sense" -msgstr "" +msgstr "опцията „--check“ е несъвместима с генерирането на кръпки" #: builtin/log.c:1359 msgid "standard output, or directory, which one?" msgstr "" +"изходът може да или стандартният, или да е в директория, но не и двете." #: builtin/log.c:1361 #, c-format msgid "Could not create directory '%s'" -msgstr "" +msgstr "Папката „%s“ не може да бъде създадена" #: builtin/log.c:1509 msgid "Failed to create output files" -msgstr "" +msgstr "Изходните файлове не могат да бъдат създадени" #: builtin/log.c:1558 msgid "git cherry [-v] [ [ []]]" -msgstr "" +msgstr "git cherry [-v] [ОТДАЛЕЧЕН_КЛОН [ВРЪХ [ПРЕДЕЛ]]]" #: builtin/log.c:1613 #, c-format msgid "" "Could not find a tracked remote branch, please specify manually.\n" msgstr "" +"Следеният отдалечен клон не бе открит, затова изрично задайте " +"ОТДАЛЕЧЕН_КЛОН.\n" #: builtin/log.c:1626 builtin/log.c:1628 builtin/log.c:1640 #, c-format msgid "Unknown commit %s" -msgstr "" +msgstr "Непознато подаване „%s“" -#: builtin/ls-files.c:398 +#: builtin/ls-files.c:401 msgid "git ls-files [options] [...]" msgstr "" -#: builtin/ls-files.c:455 +#: builtin/ls-files.c:458 msgid "identify the file status with tags" msgstr "" -#: builtin/ls-files.c:457 +#: builtin/ls-files.c:460 msgid "use lowercase letters for 'assume unchanged' files" msgstr "" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:462 msgid "show cached files in the output (default)" msgstr "" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:464 msgid "show deleted files in the output" msgstr "" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:466 msgid "show modified files in the output" msgstr "" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:468 msgid "show other files in the output" msgstr "" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:470 msgid "show ignored files in the output" msgstr "" -#: builtin/ls-files.c:470 +#: builtin/ls-files.c:473 msgid "show staged contents' object name in the output" msgstr "" -#: builtin/ls-files.c:472 +#: builtin/ls-files.c:475 msgid "show files on the filesystem that need to be removed" msgstr "" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:477 msgid "show 'other' directories' name only" msgstr "" -#: builtin/ls-files.c:477 +#: builtin/ls-files.c:480 msgid "don't show empty directories" msgstr "" -#: builtin/ls-files.c:480 +#: builtin/ls-files.c:483 msgid "show unmerged files in the output" msgstr "" -#: builtin/ls-files.c:482 +#: builtin/ls-files.c:485 msgid "show resolve-undo information" msgstr "" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:487 msgid "skip files matching pattern" msgstr "" -#: builtin/ls-files.c:487 +#: builtin/ls-files.c:490 msgid "exclude patterns are read from " msgstr "" -#: builtin/ls-files.c:490 +#: builtin/ls-files.c:493 msgid "read additional per-directory exclude patterns in " msgstr "" -#: builtin/ls-files.c:492 +#: builtin/ls-files.c:495 msgid "add the standard git exclusions" msgstr "" -#: builtin/ls-files.c:495 +#: builtin/ls-files.c:498 msgid "make the output relative to the project top directory" msgstr "" -#: builtin/ls-files.c:498 +#: builtin/ls-files.c:501 msgid "if any is not in the index, treat this as an error" msgstr "" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:502 msgid "tree-ish" msgstr "" -#: builtin/ls-files.c:500 +#: builtin/ls-files.c:503 msgid "pretend that paths removed since are still present" msgstr "" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:505 msgid "show debugging data" msgstr "" @@ -6483,7 +6726,7 @@ msgstr "" #: builtin/ls-tree.c:133 msgid "terminate entries with NUL byte" -msgstr "" +msgstr "разделяне на обектите с нулевия знак „NUL“" #: builtin/ls-tree.c:134 msgid "include object size" @@ -6545,9 +6788,10 @@ msgid "(synonym to --stat)" msgstr "" #: builtin/merge.c:197 -#, fuzzy msgid "add (at most ) entries from shortlog to merge commit message" -msgstr "<брой>" +msgstr "" +"добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението " +"за подаване" #: builtin/merge.c:200 msgid "create a single commit instead of doing a merge" @@ -6573,9 +6817,9 @@ msgstr "" msgid "Verify that the named commit has a valid GPG signature" msgstr "" -#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89 +#: builtin/merge.c:212 builtin/notes.c:742 builtin/revert.c:89 msgid "strategy" -msgstr "" +msgstr "стратегия" #: builtin/merge.c:213 msgid "merge strategy to use" @@ -6646,35 +6890,35 @@ msgstr "" msgid "Bad branch.%s.mergeoptions string: %s" msgstr "" -#: builtin/merge.c:650 +#: builtin/merge.c:653 msgid "git write-tree failed to write a tree" -msgstr "" +msgstr "Командата „git write-tree“ не успя да запише обект-дърво" -#: builtin/merge.c:678 +#: builtin/merge.c:681 msgid "Not handling anything other than two heads merge." msgstr "" -#: builtin/merge.c:692 +#: builtin/merge.c:695 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "" -#: builtin/merge.c:706 +#: builtin/merge.c:709 #, c-format msgid "unable to write %s" msgstr "" -#: builtin/merge.c:795 +#: builtin/merge.c:798 #, c-format msgid "Could not read from '%s'" msgstr "" -#: builtin/merge.c:804 +#: builtin/merge.c:807 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" -#: builtin/merge.c:810 +#: builtin/merge.c:813 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6684,157 +6928,162 @@ msgid "" "the commit.\n" msgstr "" -#: builtin/merge.c:834 +#: builtin/merge.c:837 msgid "Empty commit message." msgstr "" -#: builtin/merge.c:846 +#: builtin/merge.c:849 #, c-format msgid "Wonderful.\n" msgstr "" -#: builtin/merge.c:911 +#: builtin/merge.c:914 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" -#: builtin/merge.c:927 +#: builtin/merge.c:930 #, c-format msgid "'%s' is not a commit" msgstr "" -#: builtin/merge.c:968 +#: builtin/merge.c:971 msgid "No current branch." msgstr "" -#: builtin/merge.c:970 +#: builtin/merge.c:973 msgid "No remote for the current branch." msgstr "" -#: builtin/merge.c:972 +#: builtin/merge.c:975 msgid "No default upstream defined for the current branch." msgstr "" -#: builtin/merge.c:977 +#: builtin/merge.c:980 #, c-format msgid "No remote-tracking branch for %s from %s" msgstr "" -#: builtin/merge.c:1133 +#: builtin/merge.c:1136 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "" -#: builtin/merge.c:1149 git-pull.sh:31 +#: builtin/merge.c:1152 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" +"Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува).\n" +"Подайте промените си, преди да започнете ново сливане." -#: builtin/merge.c:1152 git-pull.sh:34 +#: builtin/merge.c:1155 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." -msgstr "" +msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)." -#: builtin/merge.c:1156 +#: builtin/merge.c:1159 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" +"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n" +"съществува). Подайте промените си, преди да започнете ново сливане." -#: builtin/merge.c:1159 +#: builtin/merge.c:1162 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "" +"Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n" +"съществува)." -#: builtin/merge.c:1168 +#: builtin/merge.c:1171 msgid "You cannot combine --squash with --no-ff." msgstr "" -#: builtin/merge.c:1177 +#: builtin/merge.c:1180 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "" -#: builtin/merge.c:1209 +#: builtin/merge.c:1212 msgid "Can merge only exactly one commit into empty head" msgstr "" -#: builtin/merge.c:1212 +#: builtin/merge.c:1215 msgid "Squash commit into empty head not supported yet" msgstr "" -#: builtin/merge.c:1214 +#: builtin/merge.c:1217 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "" -#: builtin/merge.c:1219 +#: builtin/merge.c:1222 #, c-format msgid "%s - not something we can merge" msgstr "" -#: builtin/merge.c:1270 +#: builtin/merge.c:1273 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" -#: builtin/merge.c:1273 +#: builtin/merge.c:1276 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "" -#. 'N' -#: builtin/merge.c:1276 +#: builtin/merge.c:1279 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "" -#: builtin/merge.c:1279 +#: builtin/merge.c:1282 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "" -#: builtin/merge.c:1363 +#: builtin/merge.c:1366 #, c-format msgid "Updating %s..%s\n" msgstr "" -#: builtin/merge.c:1402 +#: builtin/merge.c:1405 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "" -#: builtin/merge.c:1409 +#: builtin/merge.c:1412 #, c-format msgid "Nope.\n" msgstr "" -#: builtin/merge.c:1441 +#: builtin/merge.c:1444 msgid "Not possible to fast-forward, aborting." msgstr "" -#: builtin/merge.c:1464 builtin/merge.c:1543 +#: builtin/merge.c:1467 builtin/merge.c:1546 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "" -#: builtin/merge.c:1468 +#: builtin/merge.c:1471 #, c-format msgid "Trying merge strategy %s...\n" msgstr "" -#: builtin/merge.c:1534 +#: builtin/merge.c:1537 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "" -#: builtin/merge.c:1536 +#: builtin/merge.c:1539 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "" -#: builtin/merge.c:1545 +#: builtin/merge.c:1548 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "" -#: builtin/merge.c:1557 +#: builtin/merge.c:1560 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -6917,108 +7166,109 @@ msgstr "" msgid "set labels for file1/orig_file/file2" msgstr "" -#: builtin/mktree.c:67 +#: builtin/mktree.c:64 msgid "git mktree [-z] [--missing] [--batch]" -msgstr "" +msgstr "git mktree [-z] [--missing] [--batch]" -#: builtin/mktree.c:153 +#: builtin/mktree.c:150 msgid "input is NUL terminated" -msgstr "" +msgstr "входните записа са разделени с нулевия знак „NUL“" -#: builtin/mktree.c:154 builtin/write-tree.c:24 +#: builtin/mktree.c:151 builtin/write-tree.c:24 msgid "allow missing objects" -msgstr "" +msgstr "разрешаване на липсващи обекти" -#: builtin/mktree.c:155 +#: builtin/mktree.c:152 msgid "allow creation of more than one tree" -msgstr "" +msgstr "разрешаване на създаването на повече от едно дърво" #: builtin/mv.c:15 msgid "git mv [options] ... " -msgstr "" +msgstr "git mv [ОПЦИИ] ОБЕКТ… ЦЕЛ" #: builtin/mv.c:71 msgid "force move/rename even if target exists" -msgstr "" +msgstr "принудително преместване/преименуване дори целта да съществува" #: builtin/mv.c:72 msgid "skip move/rename errors" -msgstr "" +msgstr "прескачане на грешките при преместване/преименуване" #: builtin/mv.c:122 #, c-format msgid "Checking rename of '%s' to '%s'\n" -msgstr "" +msgstr "Проверка на преименуването на обект от „%s“ на „%s“\n" #: builtin/mv.c:126 msgid "bad source" -msgstr "" +msgstr "неправилен обект" #: builtin/mv.c:129 msgid "can not move directory into itself" -msgstr "" +msgstr "директория не може да се премести в себе си" #: builtin/mv.c:132 msgid "cannot move directory over file" -msgstr "" +msgstr "директория не може да се премести върху файл" +# FIXME message< #: builtin/mv.c:138 #, c-format msgid "Huh? Directory %s is in index and no submodule?" -msgstr "" +msgstr "Директорията „%s“ е в индекса, но не е подмодул" #: builtin/mv.c:140 builtin/rm.c:318 msgid "Please, stage your changes to .gitmodules or stash them to proceed" msgstr "" -"За да продължите или вкарайте промените по файла „.gitmodules“ в индекса, " -"или\n" -"ги скътайте" +"За да продължите или вкарайте промените по файла „.gitmodules“ в индекса,\n" +"или ги скатайте" +# FIXME message #: builtin/mv.c:156 #, c-format msgid "Huh? %.*s is in index?" -msgstr "" +msgstr "„%.*s“ вече е в индекса" -#: builtin/mv.c:168 +#: builtin/mv.c:169 msgid "source directory is empty" -msgstr "" +msgstr "първоначалната директория е празна" -#: builtin/mv.c:200 +#: builtin/mv.c:205 msgid "not under version control" -msgstr "" +msgstr "не е под контрола на Git" -#: builtin/mv.c:202 +#: builtin/mv.c:207 msgid "destination exists" -msgstr "" +msgstr "целта съществува" -#: builtin/mv.c:210 +#: builtin/mv.c:215 #, c-format msgid "overwriting '%s'" -msgstr "" +msgstr "презаписване на „%s“" -#: builtin/mv.c:213 +#: builtin/mv.c:218 msgid "Cannot overwrite" -msgstr "" +msgstr "Презаписването е невъзможно" -#: builtin/mv.c:216 +#: builtin/mv.c:221 msgid "multiple sources for the same target" -msgstr "" +msgstr "множество източници за една цел" -#: builtin/mv.c:218 +#: builtin/mv.c:223 msgid "destination directory does not exist" -msgstr "" +msgstr "целевата директория не съществува" -#: builtin/mv.c:233 +#: builtin/mv.c:243 #, c-format msgid "%s, source=%s, destination=%s" -msgstr "" +msgstr "%s, обект: „%s“, цел: „%s“" -#: builtin/mv.c:243 +#: builtin/mv.c:253 #, c-format msgid "Renaming %s to %s\n" -msgstr "" +msgstr "Преименуване на „%s“ на „%s“\n" -#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328 +#: builtin/mv.c:256 builtin/remote.c:726 builtin/repack.c:355 #, c-format msgid "renaming '%s' failed" msgstr "неуспешно преименуване на „%s“" @@ -7183,7 +7433,7 @@ msgstr "" msgid "failed to finish 'show' for object '%s'" msgstr "" -#: builtin/notes.c:167 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:373 #, c-format msgid "could not create file '%s'" msgstr "" @@ -7192,7 +7442,7 @@ msgstr "" msgid "Please supply the note contents using either -m or -F option" msgstr "" -#: builtin/notes.c:207 builtin/notes.c:844 +#: builtin/notes.c:207 builtin/notes.c:848 #, c-format msgid "Removing note for object %s\n" msgstr "" @@ -7206,20 +7456,20 @@ msgstr "" msgid "The note contents has been left in %s" msgstr "" -#: builtin/notes.c:248 builtin/tag.c:537 +#: builtin/notes.c:248 builtin/tag.c:604 #, c-format msgid "cannot read '%s'" msgstr "" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:250 builtin/tag.c:607 #, c-format msgid "could not open or read '%s'" msgstr "" -#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 -#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 -#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 -#: builtin/notes.c:839 builtin/tag.c:553 +#: builtin/notes.c:269 builtin/notes.c:320 builtin/notes.c:322 +#: builtin/notes.c:382 builtin/notes.c:436 builtin/notes.c:519 +#: builtin/notes.c:524 builtin/notes.c:599 builtin/notes.c:641 +#: builtin/notes.c:843 builtin/tag.c:620 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "" @@ -7229,355 +7479,391 @@ msgstr "" msgid "Failed to read object '%s'." msgstr "" -#: builtin/notes.c:312 +#: builtin/notes.c:276 +#, c-format +msgid "Cannot read note data from non-blob object '%s'." +msgstr "" + +#: builtin/notes.c:316 #, c-format msgid "Malformed input line: '%s'." msgstr "" -#: builtin/notes.c:327 +#: builtin/notes.c:331 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "" -#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 -#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 -#: builtin/notes.c:904 +#: builtin/notes.c:375 builtin/notes.c:429 builtin/notes.c:502 +#: builtin/notes.c:514 builtin/notes.c:587 builtin/notes.c:634 +#: builtin/notes.c:908 msgid "too many parameters" msgstr "" -#: builtin/notes.c:384 builtin/notes.c:643 +#: builtin/notes.c:388 builtin/notes.c:647 #, c-format msgid "No note found for object %s." msgstr "" -#: builtin/notes.c:406 builtin/notes.c:563 +#: builtin/notes.c:410 builtin/notes.c:567 msgid "note contents as a string" msgstr "" -#: builtin/notes.c:409 builtin/notes.c:566 +#: builtin/notes.c:413 builtin/notes.c:570 msgid "note contents in a file" msgstr "" -#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 -#: builtin/notes.c:571 builtin/tag.c:474 +#: builtin/notes.c:415 builtin/notes.c:418 builtin/notes.c:572 +#: builtin/notes.c:575 builtin/tag.c:539 msgid "object" msgstr "" -#: builtin/notes.c:412 builtin/notes.c:569 +#: builtin/notes.c:416 builtin/notes.c:573 msgid "reuse and edit specified note object" msgstr "" -#: builtin/notes.c:415 builtin/notes.c:572 +#: builtin/notes.c:419 builtin/notes.c:576 msgid "reuse specified note object" msgstr "" -#: builtin/notes.c:417 builtin/notes.c:485 +#: builtin/notes.c:421 builtin/notes.c:489 msgid "replace existing notes" msgstr "" -#: builtin/notes.c:451 +#: builtin/notes.c:455 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " "existing notes" msgstr "" -#: builtin/notes.c:456 builtin/notes.c:533 +#: builtin/notes.c:460 builtin/notes.c:537 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "" -#: builtin/notes.c:486 +#: builtin/notes.c:490 msgid "read objects from stdin" msgstr "" -#: builtin/notes.c:488 +#: builtin/notes.c:492 msgid "load rewriting config for (implies --stdin)" msgstr "" -#: builtin/notes.c:506 +#: builtin/notes.c:510 msgid "too few parameters" msgstr "" -#: builtin/notes.c:527 +#: builtin/notes.c:531 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " "existing notes" msgstr "" -#: builtin/notes.c:539 +#: builtin/notes.c:543 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "" -#: builtin/notes.c:588 +#: builtin/notes.c:592 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" "Please use 'git notes add -f -m/-F/-c/-C' instead.\n" msgstr "" -#: builtin/notes.c:735 +#: builtin/notes.c:739 msgid "General options" msgstr "" -#: builtin/notes.c:737 +#: builtin/notes.c:741 msgid "Merge options" msgstr "" -#: builtin/notes.c:739 +#: builtin/notes.c:743 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" msgstr "" -#: builtin/notes.c:741 +#: builtin/notes.c:745 msgid "Committing unmerged notes" msgstr "" -#: builtin/notes.c:743 +#: builtin/notes.c:747 msgid "finalize notes merge by committing unmerged notes" msgstr "" -#: builtin/notes.c:745 +#: builtin/notes.c:749 msgid "Aborting notes merge resolution" msgstr "" -#: builtin/notes.c:747 +#: builtin/notes.c:751 msgid "abort notes merge" msgstr "" -#: builtin/notes.c:842 +#: builtin/notes.c:846 #, c-format msgid "Object %s has no note\n" msgstr "" -#: builtin/notes.c:854 +#: builtin/notes.c:858 msgid "attempt to remove non-existent note is not an error" msgstr "" -#: builtin/notes.c:857 +#: builtin/notes.c:861 msgid "read object names from the standard input" msgstr "" -#: builtin/notes.c:938 -msgid "notes_ref" +#: builtin/notes.c:942 +msgid "notes-ref" msgstr "" -#: builtin/notes.c:939 +#: builtin/notes.c:943 msgid "use notes from " msgstr "" -#: builtin/notes.c:974 builtin/remote.c:1593 +#: builtin/notes.c:978 builtin/remote.c:1593 #, c-format msgid "Unknown subcommand: %s" msgstr "Непозната подкоманда: %s" -#: builtin/pack-objects.c:23 +#: builtin/pack-objects.c:25 msgid "git pack-objects --stdout [options...] [< ref-list | < object-list]" msgstr "" -#: builtin/pack-objects.c:24 +#: builtin/pack-objects.c:26 msgid "git pack-objects [options...] base-name [< ref-list | < object-list]" msgstr "" -#: builtin/pack-objects.c:184 builtin/pack-objects.c:187 +#: builtin/pack-objects.c:175 builtin/pack-objects.c:178 #, c-format msgid "deflate error (%d)" msgstr "" -#: builtin/pack-objects.c:2396 +#: builtin/pack-objects.c:771 +msgid "Writing objects" +msgstr "Записване на обектите" + +#: builtin/pack-objects.c:1012 +msgid "disabling bitmap writing, as some objects are not being packed" +msgstr "" + +#: builtin/pack-objects.c:2174 +msgid "Compressing objects" +msgstr "Компресиране на обектите" + +#: builtin/pack-objects.c:2530 #, c-format msgid "unsupported index version %s" msgstr "" -#: builtin/pack-objects.c:2400 +#: builtin/pack-objects.c:2534 #, c-format msgid "bad index version '%s'" msgstr "" -#: builtin/pack-objects.c:2423 +#: builtin/pack-objects.c:2557 #, c-format msgid "option %s does not accept negative form" msgstr "" -#: builtin/pack-objects.c:2427 +#: builtin/pack-objects.c:2561 #, c-format msgid "unable to parse value '%s' for option %s" msgstr "" -#: builtin/pack-objects.c:2446 +#: builtin/pack-objects.c:2580 msgid "do not show progress meter" msgstr "" -#: builtin/pack-objects.c:2448 +#: builtin/pack-objects.c:2582 msgid "show progress meter" msgstr "" -#: builtin/pack-objects.c:2450 +#: builtin/pack-objects.c:2584 msgid "show progress meter during object writing phase" msgstr "" -#: builtin/pack-objects.c:2453 +#: builtin/pack-objects.c:2587 msgid "similar to --all-progress when progress meter is shown" msgstr "" -#: builtin/pack-objects.c:2454 +#: builtin/pack-objects.c:2588 msgid "version[,offset]" msgstr "" -#: builtin/pack-objects.c:2455 +#: builtin/pack-objects.c:2589 msgid "write the pack index file in the specified idx format version" msgstr "" -#: builtin/pack-objects.c:2458 +#: builtin/pack-objects.c:2592 msgid "maximum size of each output pack file" msgstr "" -#: builtin/pack-objects.c:2460 +#: builtin/pack-objects.c:2594 msgid "ignore borrowed objects from alternate object store" msgstr "" -#: builtin/pack-objects.c:2462 +#: builtin/pack-objects.c:2596 msgid "ignore packed objects" msgstr "" -#: builtin/pack-objects.c:2464 +#: builtin/pack-objects.c:2598 msgid "limit pack window by objects" msgstr "" -#: builtin/pack-objects.c:2466 +#: builtin/pack-objects.c:2600 msgid "limit pack window by memory in addition to object limit" msgstr "" -#: builtin/pack-objects.c:2468 +#: builtin/pack-objects.c:2602 msgid "maximum length of delta chain allowed in the resulting pack" msgstr "" -#: builtin/pack-objects.c:2470 +#: builtin/pack-objects.c:2604 msgid "reuse existing deltas" msgstr "" -#: builtin/pack-objects.c:2472 +#: builtin/pack-objects.c:2606 msgid "reuse existing objects" msgstr "" -#: builtin/pack-objects.c:2474 +#: builtin/pack-objects.c:2608 msgid "use OFS_DELTA objects" msgstr "" -#: builtin/pack-objects.c:2476 +#: builtin/pack-objects.c:2610 msgid "use threads when searching for best delta matches" msgstr "" -#: builtin/pack-objects.c:2478 +#: builtin/pack-objects.c:2612 msgid "do not create an empty pack output" msgstr "" -#: builtin/pack-objects.c:2480 +#: builtin/pack-objects.c:2614 msgid "read revision arguments from standard input" msgstr "" -#: builtin/pack-objects.c:2482 +#: builtin/pack-objects.c:2616 msgid "limit the objects to those that are not yet packed" msgstr "" -#: builtin/pack-objects.c:2485 +#: builtin/pack-objects.c:2619 msgid "include objects reachable from any reference" msgstr "" -#: builtin/pack-objects.c:2488 +#: builtin/pack-objects.c:2622 msgid "include objects referred by reflog entries" msgstr "" -#: builtin/pack-objects.c:2491 +#: builtin/pack-objects.c:2625 msgid "output pack to stdout" msgstr "" -#: builtin/pack-objects.c:2493 +#: builtin/pack-objects.c:2627 msgid "include tag objects that refer to objects to be packed" msgstr "" -#: builtin/pack-objects.c:2495 +#: builtin/pack-objects.c:2629 msgid "keep unreachable objects" msgstr "" -#: builtin/pack-objects.c:2496 parse-options.h:143 +#: builtin/pack-objects.c:2630 parse-options.h:140 msgid "time" msgstr "време" -#: builtin/pack-objects.c:2497 +#: builtin/pack-objects.c:2631 msgid "unpack unreachable objects newer than