diff --git a/.gitattributes b/.gitattributes index 59cd41d..889d582 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,5 @@ git-gui.sh encoding=UTF-8 /po/*.po encoding=UTF-8 /GIT-VERSION-GEN eol=lf +Makefile whitespace=!indent,trail,space +meson.build whitespace=space diff --git a/.gitignore b/.gitignore index 6483b21..ff6e0be 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ config.mak Git Gui.app* git-gui.tcl +GIT-GUI-BUILD-OPTIONS GIT-VERSION-FILE -GIT-GUI-VARS git-gui lib/tclIndex diff --git a/GIT-GUI-BUILD-OPTIONS.in b/GIT-GUI-BUILD-OPTIONS.in new file mode 100644 index 0000000..5fd885c --- /dev/null +++ b/GIT-GUI-BUILD-OPTIONS.in @@ -0,0 +1,7 @@ +GITGUI_GITEXECDIR=@GITGUI_GITEXECDIR@ +GITGUI_LIBDIR=@GITGUI_LIBDIR@ +GITGUI_RELATIVE=@GITGUI_RELATIVE@ +SHELL_PATH=@SHELL_PATH@ +TCLTK_PATH=@TCLTK_PATH@ +TCL_PATH=@TCL_PATH@ +TKEXECUTABLE=@TKEXECUTABLE@ diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 92373d2..c2767b4 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,19 +1,33 @@ #!/bin/sh -GVF=GIT-VERSION-FILE DEF_VER=0.21.GITGUI LF=' ' +if test "$#" -ne 2 +then + echo >&2 "usage: $0 " + exit 1 +fi + +SOURCE_DIR="$1" +OUTPUT="$2" + +# Protect us from reading Git version information outside of the Git directory +# in case it is not a repository itself, but embedded in an unrelated +# repository. +GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.." +export GIT_CEILING_DIRECTORIES + tree_search () { head=$1 tree=$2 - for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null) + for p in $(git -C "$SOURCE_DIR" rev-list --parents --max-count=1 $head 2>/dev/null) do - test $tree = $(git rev-parse $p^{tree} 2>/dev/null) && - vn=$(git describe --abbrev=4 $p 2>/dev/null) && + test $tree = $(git -C "$SOURCE_DIR" rev-parse $p^{tree} 2>/dev/null) && + vn=$(git -C "$SOURCE_DIR" describe --abbrev=4 $p 2>/dev/null) && case "$vn" in gitgui-[0-9]*) echo $vn; break;; esac @@ -34,14 +48,14 @@ tree_search () # If we are at the toplevel or the merge assumption fails # try looking for a gitgui-* tag. -if test -f version && - VN=$(cat version) +if test -f "$SOURCE_DIR"/version && + VN=$(cat "$SOURCE_DIR"/version) then : happy -elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" +elif prefix="$(git -C "$SOURCE_DIR" rev-parse --show-prefix 2>/dev/null)" test -n "$prefix" && - head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null) && - tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null) && + head=$(git -C "$SOURCE_DIR" rev-list --max-count=1 HEAD -- . 2>/dev/null) && + tree=$(git -C "$SOURCE_DIR" rev-parse --verify "HEAD:$prefix" 2>/dev/null) && VN=$(tree_search $head $tree) case "$VN" in gitgui-[0-9]*) : happy ;; @@ -49,7 +63,7 @@ elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" esac then VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); -elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) && +elif VN=$(git -C "$SOURCE_DIR" describe --abbrev=4 HEAD 2>/dev/null) && case "$VN" in gitgui-[0-9]*) : happy ;; *) (exit 1) ;; @@ -60,7 +74,7 @@ else VN="$DEF_VER" fi -dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty= +dirty=$(git -C "$SOURCE_DIR" diff-index --name-only HEAD 2>/dev/null) || dirty= case "$dirty" in '') ;; @@ -68,13 +82,13 @@ case "$dirty" in VN="$VN-dirty" ;; esac -if test -r $GVF +if test -r "$OUTPUT" then - VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF) + VC=$(sed -e 's/^GITGUI_VERSION=//' <"$OUTPUT") else VC=unset fi test "$VN" = "$VC" || { - echo >&2 "GITGUI_VERSION = $VN" - echo "GITGUI_VERSION = $VN" >$GVF + echo >&2 "GITGUI_VERSION=$VN" + echo "GITGUI_VERSION=$VN" >"$OUTPUT" } diff --git a/Makefile b/Makefile index d529cab..8e89140 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,7 @@ all:: # GIT-VERSION-FILE: FORCE - @$(SHELL_PATH) ./GIT-VERSION-GEN --include GIT-VERSION-FILE + @$(SHELL_PATH) ./GIT-VERSION-GEN . $@ uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') @@ -73,7 +72,6 @@ ifndef V QUIET_INDEX = $(QUIET)echo ' ' INDEX $(dir $@) && QUIET_MSGFMT0 = $(QUIET)printf ' MSGFMT %12s ' $@ && v=` QUIET_MSGFMT1 = 2>&1` && echo "$$v" | sed -e 's/fuzzy translations/fuzzy/' | sed -e 's/ messages*//g' - QUIET_2DEVNULL = 2>/dev/null INSTALL_D0 = dir= INSTALL_D1 = && echo ' ' DEST $$dir && $(INSTALL) -d -m 755 "$$dir" @@ -105,16 +103,17 @@ endif ifeq ($(uname_S),Darwin) TKFRAMEWORK = /Library/Frameworks/Tk.framework/Resources/Wish.app - ifeq ($(shell echo "$(uname_R)" | awk -F. '{if ($$1 >= 9) print "y"}')_$(shell test -d $(TKFRAMEWORK) || echo n),y_n) + ifeq ($(shell echo "$(uname_R)" | awk -F. '{if ($$1 >= 9) print "y"}')_$(shell test -d $(TKFRAMEWORK) || echo n),y_n) TKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish.app - ifeq ($(shell test -d $(TKFRAMEWORK) || echo n),n) + ifeq ($(shell test -d $(TKFRAMEWORK) || echo n),n) TKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish\ Shell.app - endif - endif - TKEXECUTABLE = $(shell basename "$(TKFRAMEWORK)" .app) + endif + endif + TKEXECUTABLE = $(TKFRAMEWORK)/Contents/MacOS/$(shell basename "$(TKFRAMEWORK)" .app) + TKEXECUTABLE_SQ = $(subst ','\'',$(TKEXECUTABLE)) endif -ifeq ($(findstring $(MAKEFLAGS),s),s) +ifeq ($(findstring $(firstword -$(MAKEFLAGS)),s),s) QUIET_GEN = endif @@ -125,40 +124,21 @@ gitexecdir_SQ = $(subst ','\'',$(gitexecdir)) SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) TCL_PATH_SQ = $(subst ','\'',$(TCL_PATH)) TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH)) -TCLTK_PATH_SED = $(subst ','\'',$(subst \,\\,$(TCLTK_PATH))) gg_libdir ?= $(sharedir)/git-gui/lib libdir_SQ = $(subst ','\'',$(gg_libdir)) -libdir_SED = $(subst ','\'',$(subst \,\\,$(gg_libdir_sed_in))) exedir = $(dir $(gitexecdir))share/git-gui/lib -GITGUI_SCRIPT := $$0 GITGUI_RELATIVE := GITGUI_MACOSXAPP := -ifeq ($(uname_O),Cygwin) - GITGUI_SCRIPT := `cygpath --windows --absolute "$(GITGUI_SCRIPT)"` - - # Is this a Cygwin Tcl/Tk binary? If so it knows how to do - # POSIX path translation just like cygpath does and we must - # keep libdir in POSIX format so Cygwin packages of git-gui - # work no matter where the user installs them. - # - ifeq ($(shell echo 'puts [file normalize /]' | '$(TCL_PATH_SQ)'),$(shell cygpath --mixed --absolute /)) - gg_libdir_sed_in := $(gg_libdir) - else - gg_libdir_sed_in := $(shell cygpath --windows --absolute "$(gg_libdir)") - endif -else - ifeq ($(exedir),$(gg_libdir)) - GITGUI_RELATIVE := 1 - endif - gg_libdir_sed_in := $(gg_libdir) +ifeq ($(exedir),$(gg_libdir)) + GITGUI_RELATIVE := 1 endif ifeq ($(uname_S),Darwin) - ifeq ($(shell test -d $(TKFRAMEWORK) && echo y),y) + ifeq ($(shell test -d $(TKFRAMEWORK) && echo y),y) GITGUI_MACOSXAPP := YesPlease - endif + endif endif ifneq (,$(findstring MINGW,$(uname_S))) ifeq ($(shell expr "$(uname_R)" : '1\.'),2) @@ -171,41 +151,15 @@ endif ifdef GITGUI_MACOSXAPP GITGUI_MAIN := git-gui.tcl -git-gui: GIT-VERSION-FILE GIT-GUI-VARS - $(QUIET_GEN)rm -f $@ $@+ && \ - echo '#!$(SHELL_PATH_SQ)' >$@+ && \ - echo 'if test "z$$*" = zversion ||' >>$@+ && \ - echo ' test "z$$*" = z--version' >>$@+ && \ - echo then >>$@+ && \ - echo ' 'echo \'git-gui version '$(GITGUI_VERSION)'\' >>$@+ && \ - echo else >>$@+ && \ - echo ' libdir="$${GIT_GUI_LIB_DIR:-$(libdir_SQ)}"' >>$@+ && \ - echo ' 'exec \"'$$libdir/Git Gui.app/Contents/MacOS/$(subst \,,$(TKEXECUTABLE))'\" \ - '"$$0" "$$@"' >>$@+ && \ - echo fi >>$@+ && \ - chmod +x $@+ && \ - mv $@+ $@ - -Git\ Gui.app: GIT-VERSION-FILE GIT-GUI-VARS \ +git-gui: generate-macos-wrapper.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS + $(QUIET_GEN)$(SHELL_PATH) generate-macos-wrapper.sh "$@" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE + +Git\ Gui.app: GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS \ macosx/Info.plist \ macosx/git-gui.icns \ macosx/AppMain.tcl \ - $(TKFRAMEWORK)/Contents/MacOS/$(TKEXECUTABLE) - $(QUIET_GEN)rm -rf '$@' '$@'+ && \ - mkdir -p '$@'+/Contents/MacOS && \ - mkdir -p '$@'+/Contents/Resources/Scripts && \ - cp '$(subst ','\'',$(subst \,,$(TKFRAMEWORK)/Contents/MacOS/$(TKEXECUTABLE)))' \ - '$@'+/Contents/MacOS && \ - cp macosx/git-gui.icns '$@'+/Contents/Resources && \ - sed -e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \ - -e 's/@@GITGUI_TKEXECUTABLE@@/$(TKEXECUTABLE)/g' \ - macosx/Info.plist \ - >'$@'+/Contents/Info.plist && \ - sed -e 's|@@gitexecdir@@|$(gitexecdir_SQ)|' \ - -e 's|@@GITGUI_LIBDIR@@|$(libdir_SED)|' \ - macosx/AppMain.tcl \ - >'$@'+/Contents/Resources/Scripts/AppMain.tcl && \ - mv '$@'+ '$@' + $(TKEXECUTABLE) + $(QUIET_GEN)$(SHELL_PATH) generate-macos-app.sh . "$@" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE endif ifdef GITGUI_WINDOWS_WRAPPER @@ -215,27 +169,17 @@ git-gui: windows/git-gui.sh cp $< $@ endif -$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-VARS - $(QUIET_GEN)rm -f $@ $@+ && \ - sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ - -e 's|@@SHELL_PATH@@|$(SHELL_PATH_SQ)|' \ - -e '1,30s|^ argv0=$$0| argv0=$(GITGUI_SCRIPT)|' \ - -e '1,30s|^ exec wish | exec '\''$(TCLTK_PATH_SED)'\'' |' \ - -e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \ - -e 's|@@GITGUI_RELATIVE@@|$(GITGUI_RELATIVE)|' \ - -e '$(GITGUI_RELATIVE)s|@@GITGUI_LIBDIR@@|$(libdir_SED)|' \ - git-gui.sh >$@+ && \ - chmod +x $@+ && \ - mv $@+ $@ +$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS + $(QUIET_GEN)$(SHELL_PATH) generate-git-gui.sh "$<" "$@" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE XGETTEXT ?= xgettext ifdef NO_MSGFMT MSGFMT ?= $(TCL_PATH) po/po2msg.sh else MSGFMT ?= msgfmt - ifneq ($(shell $(MSGFMT) --tcl -l C -d . /dev/null 2>/dev/null; echo $$?),0) + ifneq ($(shell $(MSGFMT) --tcl -l C -d . /dev/null 2>/dev/null; echo $$?),0) MSGFMT := $(TCL_PATH) po/po2msg.sh - endif + endif endif msgsdir = $(gg_libdir)/msgs @@ -251,35 +195,21 @@ update-po:: $(PO_TEMPLATE) $(ALL_MSGFILES): %.msg : %.po $(QUIET_MSGFMT0)$(MSGFMT) --statistics --tcl -l $(basename $(notdir $<)) -d $(dir $@) $< $(QUIET_MSGFMT1) -lib/tclIndex: $(ALL_LIBFILES) GIT-GUI-VARS - $(QUIET_INDEX)if echo \ - $(foreach p,$(PRELOAD_FILES),source $p\;) \ - auto_mkindex lib $(patsubst lib/%,%,$(sort $(ALL_LIBFILES))) \ - | $(TCL_PATH) $(QUIET_2DEVNULL); then : ok; \ - else \ - echo >&2 " * $(TCL_PATH) failed; using unoptimized loading"; \ - rm -f $@ ; \ - echo '# Autogenerated by git-gui Makefile' >$@ && \ - echo >>$@ && \ - $(foreach p,$(PRELOAD_FILES) $(sort $(ALL_LIBFILES)),echo '$(subst lib/,,$p)' >>$@ &&) \ - echo >>$@ ; \ - fi - -TRACK_VARS = \ - $(subst ','\'',SHELL_PATH='$(SHELL_PATH_SQ)') \ - $(subst ','\'',TCL_PATH='$(TCL_PATH_SQ)') \ - $(subst ','\'',TCLTK_PATH='$(TCLTK_PATH_SQ)') \ - $(subst ','\'',gitexecdir='$(gitexecdir_SQ)') \ - $(subst ','\'',gg_libdir='$(libdir_SQ)') \ - GITGUI_MACOSXAPP=$(GITGUI_MACOSXAPP) \ -#end TRACK_VARS - -GIT-GUI-VARS: FORCE - @VARS='$(TRACK_VARS)'; \ - if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \ - echo >&2 " * new locations or Tcl/Tk interpreter"; \ - echo >$@ "$$VARS"; \ - fi +lib/tclIndex: $(ALL_LIBFILES) generate-tclindex.sh GIT-GUI-BUILD-OPTIONS + $(QUIET_INDEX)$(SHELL_PATH) generate-tclindex.sh . ./GIT-GUI-BUILD-OPTIONS $(ALL_LIBFILES) + +GIT-GUI-BUILD-OPTIONS: FORCE + @sed \ + -e 's|@GITGUI_GITEXECDIR@|$(gitexecdir_SQ)|' \ + -e 's|@GITGUI_LIBDIR@|$(libdir_SQ)|' \ + -e 's|@GITGUI_RELATIVE@|$(GITGUI_RELATIVE)|' \ + -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \ + -e 's|@TCLTK_PATH@|$(TCLTK_PATH_SQ)|' \ + -e 's|@TCL_PATH@|$(TCL_PATH_SQ)|' \ + -e 's|@TKEXECUTABLE@|$(TKEXECUTABLE_SQ)|' \ + $@.in >$@+ + @if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi + @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi ifdef GITGUI_MACOSXAPP all:: git-gui Git\ Gui.app @@ -331,13 +261,13 @@ endif $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(REMOVE_D1) $(QUIET)$(REMOVE_D0)`dirname '$(DESTDIR_SQ)$(libdir_SQ)'` $(REMOVE_D1) -dist-version: +dist-version: GIT-VERSION-FILE @mkdir -p $(TARDIR) - @echo $(GITGUI_VERSION) > $(TARDIR)/version + @sed 's|^GITGUI_VERSION=||' $(TARDIR)/version clean:: - $(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg - $(RM_RF) GIT-VERSION-FILE GIT-GUI-VARS + $(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE) + $(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS ifdef GITGUI_MACOSXAPP $(RM_RF) 'Git Gui.app'* git-gui endif diff --git a/README.md b/README.md new file mode 100644 index 0000000..948e925 --- /dev/null +++ b/README.md @@ -0,0 +1,174 @@ +# Git GUI - A graphical user interface for Git + +Git GUI allows you to use the [Git source control management +tools](https://git-scm.com/) via a GUI. This includes staging, committing, +adding, pushing, etc. It can also be used as a blame viewer, a tree browser, +and a citool (make exactly one commit before exiting and returning to shell). +More details about Git GUI can be found in its manual page by either running +`man git-gui`, or by visiting the [online manual +page](https://git-scm.com/docs/git-gui). + +Git GUI was initially written by Shawn O. Pearce, and is distributed with the +standard Git installation. + +# Building and installing + +You need to have the following dependencies installed before you begin: + +- Git +- Tcl +- Tk +- wish +- Gitk (needed for browsing history) +- msgfmt + +Most of Git GUI is written in Tcl, so there is no compilation involved. Still, +some things do need to be done (mostly some substitutions), so you do need to +"build" it. + +You can build Git GUI using: + +``` +make +``` + +And then install it using: + +``` +make install +``` + +You probably need to have root/admin permissions to install. + +# Contributing + +The project is currently maintained by Johannes Sixt at +https://github.com/j6t/git-gui. Even though the project is hosted at +GitHub, the development does not happen over GitHub Issues and Pull Requests. +Instead, an email based workflow is used. The Git mailing list +[git@vger.kernel.org](mailto:git@vger.kernel.org) is where the patches are +discussed and reviewed. + +More information about the Git mailing list and instructions to subscribe can +be found [here](https://git.wiki.kernel.org/index.php/GitCommunity). + +## Sending your changes + +Since the development happens over email, you need to send in your commits in +text format. Commits can be converted to emails via the two tools provided by +Git: `git-send-email` and `git-format-patch`. + +You can use `git-format-patch` to generate patches in mbox format from your +commits that can then be sent via email. Let's say you are working on a branch +called 'foo' that was created on top of 'master'. You can run: + +``` +git format-patch -o output_dir master..foo +``` + +to convert all the extra commits in 'foo' into a set of patches saved in the +folder `output_dir`. + +If you are sending multiple patches, it is recommended to include a cover +letter. A cover letter is an email explaining in brief what the series is +supposed to do. A cover letter template can be generated by passing +`--cover-letter` to `git-format-patch`. + +After you send your patches, you might get a review suggesting some changes. +Make those changes, and re-send your patch(es) in reply to the first patch of +your initial version. Also please mention the version of the patch. This can be +done by passing `-v X` to `git-format-patch`, where 'X' is the version number +of the patch(es). + +### Using git-send-email + +You can use `git-send-email` to send patches generated via `git-format-patch`. +While you can directly send patches via `git-send-email`, it is recommended +that you first use `git-format-patch` to generate the emails, audit them, and +then send them via `git-send-email`. + +A pretty good guide to configuring and using `git-send-email` can be found +[here](https://www.freedesktop.org/wiki/Software/PulseAudio/HowToUseGitSendEmail/). + +### Using your email client + +If your email client supports sending mbox format emails, you can use +`git-format-patch` to get an mbox file for each commit, and then send them. If +there is more than one patch in the series, then all patches after the first +patch (or the cover letter) need to be sent as replies to the first. +`git-send-email` does this by default. + +### Using GitGitGadget + +Since some people prefer a GitHub pull request based workflow, they can use +[GitGitGadget](https://gitgitgadget.github.io/) to send in patches. The tool +was originally written for sending patches to the Git project, but it now also +supports sending patches for git-gui. + +Instructions for using GitGitGadget to send git-gui patches, courtesy of +Johannes Schindelin: + +If you don't already have a fork of the [git/git](https://github.com/git/git) +repo, you need to make one. Then clone your fork: + +``` +git clone https://github.com//git +``` + +Then add GitGitGadget as a remote: + +``` +git remote add gitgitgadget https://github.com/gitgitgadget/git +``` + +Then fetch the git-gui branch: + +``` +git fetch gitgitgadget git-gui/master +``` + +Then create a new branch based on git-gui/master: + +``` +git checkout -b git-gui/master +``` + +Make whatever commits you need to, push them to your fork, and then head over +to https://github.com/gitgitgadget/git/pulls and open a Pull Request targeting +git-gui/master. + +GitGitGadget will welcome you with a (hopefully) helpful message. + +## Signing off + +You need to sign off your commits before sending them to the list. You can do +that by passing the `-s` option to `git-commit`. You can also use the "Sign +Off" option in Git GUI. + +A sign-off is a simple 'Signed-off-by: A U Thor \' line at +the end of the commit message, after your explanation of the commit. + +A sign-off means that you are legally allowed to send the code, and it serves +as a certificate of origin. More information can be found at +[developercertificate.org](https://developercertificate.org/). + +## Responding to review comments + +It is quite likely your patches will get review comments. Those comments are +sent on the Git mailing list as replies to your patch, and you will usually be +Cc'ed in those replies. + +You are expected to respond by either explaining your code further to convince +the reviewer what you are doing is correct, or acknowledge the comments and +re-send the patches with those comments addressed. + +Some tips for those not familiar with communication on a mailing list: + +- Use only plain text emails. No HTML at all. +- Wrap lines at around 75 characters. +- Do not send attachments. If you do need to send some files, consider using a + hosting service, and paste the link in your email. +- Do not [top post](http://www.idallen.com/topposting.html). +- Always "reply all". Keep all correspondents and the list in Cc. If you reply + directly to a reviewer, and not Cc the list, other people would not be able + to chime in. diff --git a/generate-git-gui.sh b/generate-git-gui.sh new file mode 100755 index 0000000..39dfafd --- /dev/null +++ b/generate-git-gui.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +set -e + +if test "$#" -ne 4 +then + echo >&2 "usage: $0 " + exit 1 +fi + +INPUT="$1" +OUTPUT="$2" +BUILD_OPTIONS="$3" +VERSION_FILE="$4" + +. "${BUILD_OPTIONS}" +. "${VERSION_FILE}" + +rm -f "$OUTPUT" "$OUTPUT+" +sed \ + -e "1s|#!.*/sh|#!$SHELL_PATH|" \ + -e "s|@@SHELL_PATH@@|$SHELL_PATH|" \ + -e "1,30s|^ exec wish | exec '$TCLTK_PATH' |" \ + -e "s|@@GITGUI_VERSION@@|$GITGUI_VERSION|g" \ + -e "s|@@GITGUI_RELATIVE@@|$GITGUI_RELATIVE|" \ + -e "${GITGUI_RELATIVE}s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|" \ + "$INPUT" >"$OUTPUT"+ +chmod +x "$OUTPUT"+ +mv "$OUTPUT"+ "$OUTPUT" diff --git a/generate-macos-app.sh b/generate-macos-app.sh new file mode 100755 index 0000000..71b9fa6 --- /dev/null +++ b/generate-macos-app.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +set -e + +SOURCE_DIR="$1" +OUTPUT="$2" +BUILD_OPTIONS="$3" +VERSION_FILE="$4" + +. "$BUILD_OPTIONS" +. "$VERSION_FILE" + +rm -rf "$OUTPUT" "$OUTPUT+" + +mkdir -p "$OUTPUT+/Contents/MacOS" +mkdir -p "$OUTPUT+/Contents/Resources/Scripts" + +cp "$TKEXECUTABLE" "$OUTPUT+/Contents/MacOS" +cp "$SOURCE_DIR/macosx/git-gui.icns" "$OUTPUT+/Contents/Resources" +sed \ + -e "s/@@GITGUI_VERSION@@/$GITGUI_VERSION/g" \ + -e "s/@@GITGUI_TKEXECUTABLE@@/$(basename "$TKEXECUTABLE")/g" \ + "$SOURCE_DIR/macosx/Info.plist" \ + >"$OUTPUT+/Contents/Info.plist" +sed \ + -e "s|@@gitexecdir@@|$GITGUI_GITEXECDIR|" \ + -e "s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|" \ + "$SOURCE_DIR/macosx/AppMain.tcl" \ + >"$OUTPUT+/Contents/Resources/Scripts/AppMain.tcl" +mv "$OUTPUT+" "$OUTPUT" diff --git a/generate-macos-wrapper.sh b/generate-macos-wrapper.sh new file mode 100755 index 0000000..0304937 --- /dev/null +++ b/generate-macos-wrapper.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +if test "$#" -ne 3 +then + echo >&2 "usage: $0 " + exit 1 +fi + +OUTPUT="$1" +BUILD_OPTIONS="$2" +VERSION_FILE="$3" + +. "$BUILD_OPTIONS" + +rm -f "$OUTPUT" "$OUTPUT+" + +( + echo "#!$SHELL_PATH" + cat "$BUILD_OPTIONS" "$VERSION_FILE" + cat <<-'EOF' + if test "z$*" = zversion || + test "z$*" = z--version + then + echo "git-gui version $GITGUI_VERSION" + else + libdir="${GIT_GUI_LIB_DIR:-$GITGUI_LIBDIR}" + exec "$libdir/Git Gui.app/Contents/MacOS/$(basename "$TKEXECUTABLE")" "$0" "$@" + fi + EOF +) >"$OUTPUT+" + +chmod +x "$OUTPUT+" +mv "$OUTPUT+" "$OUTPUT" diff --git a/generate-tclindex.sh b/generate-tclindex.sh new file mode 100755 index 0000000..0b031d8 --- /dev/null +++ b/generate-tclindex.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +if test "$#" -lt 3 +then + echo >&2 "usage: $0 [...]" + exit 1 +fi + +BUILD_DIR="$1" +BUILD_OPTIONS="$2" +shift 2 +LIBFILES="$(echo "$@" | sort | sed 's|lib/||g')" + +. "$BUILD_OPTIONS" + +cd "$BUILD_DIR" + +if { + echo "source lib/class.tcl;" + echo "auto_mkindex lib $LIBFILES" +} | "$TCL_PATH" +then + : ok +else + echo >&2 " * $TCL_PATH failed; using unoptimized loading" + rm -f lib/tclIndex + echo '# Autogenerated by git-gui Makefile' >lib/tclIndex + echo >>lib/tclIndex + echo "class.tcl" >>lib/tclIndex + printf "%s\n" $LIBFILES >>lib/tclIndex + echo >>lib/tclIndex +fi diff --git a/git-gui--askpass b/git-gui--askpass index 4277f30..71a536d 100755 --- a/git-gui--askpass +++ b/git-gui--askpass @@ -26,8 +26,21 @@ pack .m -side top -fill x -padx 20 -pady 20 -expand 1 entry .e -textvariable answer -width 50 pack .e -side top -fill x -padx 10 -pady 10 +proc on_show_input_changed {args} { + global show_input + if {$show_input} { + .e configure -show "" + } else { + .e configure -show "*" + } +} +trace add variable show_input write "on_show_input_changed" + +set show_input 0 + if {!$yesno} { - .e configure -show "*" + checkbutton .cb_show -text "Show input" -variable show_input + pack .cb_show -side top -anchor nw } frame .b @@ -56,6 +69,11 @@ proc finish {} { } } + # On Windows, force the encoding to UTF-8: it is what `git.exe` expects + if {$::tcl_platform(platform) eq {windows}} { + set ::answer [encoding convertto utf-8 $::answer] + } + puts $::answer set ::rc 0 } diff --git a/git-gui--askyesno b/git-gui--askyesno index c0c82e7..9f084ce 100755 --- a/git-gui--askyesno +++ b/git-gui--askyesno @@ -6,12 +6,6 @@ exec wish "$0" -- "$@" # which is injected into the git commandline by git gui # in case a yesno question needs to be answered. -set NS {} -set use_ttk [package vsatisfies [package provide Tk] 8.5] -if {$use_ttk} { - set NS ttk -} - set title "Question?" if {$argc < 1} { puts stderr "Usage: $argv0 " @@ -24,34 +18,7 @@ if {$argc < 1} { set prompt [join $argv " "] } -${NS}::frame .t -${NS}::label .t.m -text $prompt -justify center -width 400px -.t.m configure -wraplength 400px -pack .t.m -side top -fill x -padx 20 -pady 20 -expand 1 -pack .t -side top -fill x -ipadx 20 -ipady 20 -expand 1 - -${NS}::frame .b -${NS}::frame .b.left -width 200 -${NS}::button .b.yes -text Yes -command yes -${NS}::button .b.no -text No -command no - - -pack .b.left -side left -expand 1 -fill x -pack .b.yes -side left -expand 1 -pack .b.no -side right -expand 1 -ipadx 5 -pack .b -side bottom -fill x -ipadx 20 -ipady 15 - -bind . {exit 0} -bind . {exit 1} - -proc no {} { - exit 1 -} - -proc yes {} { - exit 0 -} - +set dicon {question} if {$::tcl_platform(platform) eq {windows}} { set icopath [file dirname [file normalize $argv0]] if {[file tail $icopath] eq {git-core}} { @@ -60,9 +27,10 @@ if {$::tcl_platform(platform) eq {windows}} { set icopath [file dirname $icopath] set icopath [file join $icopath share git git-for-windows.ico] if {[file exists $icopath]} { - wm iconbitmap . -default $icopath + set dicon $iconpath } } -wm title . $title -tk::PlaceWindow . +wm withdraw . +set ans [tk_dialog .d $title $prompt $dicon 1 "Yes" "No"] +exit $ans diff --git a/git-gui.sh b/git-gui.sh index 0d6feb1..66f148e 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -24,15 +24,13 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, see .}] +along with this program; if not, see .}] ###################################################################### ## ## Tcl/Tk sanity check -if {[catch {package require Tcl 8.4} err] - || [catch {package require Tk 8.4} err] -} { +if {[catch {package require Tcl 8.6-8.8} err]} { catch {wm withdraw .} tk_messageBox \ -icon error \ @@ -44,6 +42,203 @@ if {[catch {package require Tcl 8.4} err] catch {rename send {}} ; # What an evil concept... +###################################################################### +## +## Enabling platform-specific code paths + +proc is_MacOSX {} { + if {[tk windowingsystem] eq {aqua}} { + return 1 + } + return 0 +} + +proc is_Windows {} { + if {$::tcl_platform(platform) eq {windows}} { + return 1 + } + return 0 +} + +set _iscygwin {} +proc is_Cygwin {} { + global _iscygwin + if {$_iscygwin eq {}} { + if {[string match "CYGWIN_*" $::tcl_platform(os)]} { + set _iscygwin 1 + } else { + set _iscygwin 0 + } + } + return $_iscygwin +} + +###################################################################### +## +## PATH lookup. Sanitize $PATH, assure exec/open use only that + +if {[is_Windows]} { + set _path_sep {;} +} else { + set _path_sep {:} +} + +set _search_path {} +set _path_seen [dict create] +foreach p [split $env(PATH) $_path_sep] { + # Keep only absolute paths, getting rid of ., empty, etc. + if {[file pathtype $p] ne {absolute}} { + continue + } + # Keep only the first occurence of any duplicates. + set norm_p [file normalize $p] + if {[dict exists $_path_seen $norm_p]} { + continue + } + dict set _path_seen $norm_p 1 + lappend _search_path $norm_p +} +unset _path_seen + +set env(PATH) [join $_search_path $_path_sep] + +if {[is_Windows]} { + proc _which {what args} { + global _search_path + + if {[lsearch -exact $args -script] >= 0} { + set suffix {} + } elseif {[string match *.exe [string tolower $what]]} { + # The search string already has the file extension + set suffix {} + } else { + set suffix .exe + } + + foreach p $_search_path { + set p [file join $p $what$suffix] + if {[file exists $p]} { + return [file normalize $p] + } + } + return {} + } + + proc sanitize_command_line {command_line from_index} { + set i $from_index + while {$i < [llength $command_line]} { + set cmd [lindex $command_line $i] + if {[llength [file split $cmd]] < 2} { + set fullpath [_which $cmd] + if {$fullpath eq ""} { + throw {NOT-FOUND} "$cmd not found in PATH" + } + lset command_line $i $fullpath + } + + # handle piped commands, e.g. `exec A | B` + for {incr i} {$i < [llength $command_line]} {incr i} { + if {[lindex $command_line $i] eq "|"} { + incr i + break + } + } + } + return $command_line + } + + # Override `exec` to avoid unsafe PATH lookup + + rename exec real_exec + + proc exec {args} { + # skip options + for {set i 0} {$i < [llength $args]} {incr i} { + set arg [lindex $args $i] + if {$arg eq "--"} { + incr i + break + } + if {[string range $arg 0 0] ne "-"} { + break + } + } + set args [sanitize_command_line $args $i] + uplevel 1 real_exec $args + } + + # Override `open` to avoid unsafe PATH lookup + + rename open real_open + + proc open {args} { + set arg0 [lindex $args 0] + if {[string range $arg0 0 0] eq "|"} { + set command_line [string trim [string range $arg0 1 end]] + lset args 0 "| [sanitize_command_line $command_line 0]" + } + uplevel 1 real_open $args + } + +} else { + # On non-Windows platforms, auto_execok, exec, and open are safe, and will + # use the sanitized search path. But, we need _which for these. + + proc _which {what args} { + return [lindex [auto_execok $what] 0] + } +} + +# Wrap exec/open to sanitize arguments + +# unsafe arguments begin with redirections or the pipe or background operators +proc is_arg_unsafe {arg} { + regexp {^([<|>&]|2>)} $arg +} + +proc make_arg_safe {arg} { + if {[is_arg_unsafe $arg]} { + set arg [file join . $arg] + } + return $arg +} + +proc make_arglist_safe {arglist} { + set res {} + foreach arg $arglist { + lappend res [make_arg_safe $arg] + } + return $res +} + +# executes one command +# no redirections or pipelines are possible +# cmd is a list that specifies the command and its arguments +# calls `exec` and returns its value +proc safe_exec {cmd} { + eval exec [make_arglist_safe $cmd] +} + +# executes one command in the background +# no redirections or pipelines are possible +# cmd is a list that specifies the command and its arguments +# calls `exec` and returns its value +proc safe_exec_bg {cmd} { + eval exec [make_arglist_safe $cmd] & +} + +proc safe_open_file {filename flags} { + # a file name starting with "|" would attempt to run a process + # but such a file name must be treated as a relative path + # hide the "|" behind "./" + if {[string index $filename 0] eq "|"} { + set filename [file join . $filename] + } + open $filename $flags +} + +# End exec/open wrappers + ###################################################################### ## ## locate our library @@ -144,11 +339,11 @@ unset oguimsg if {[tk windowingsystem] eq "aqua"} { catch { - exec osascript -e [format { + safe_exec [list osascript -e [format { tell application "System Events" set frontmost of processes whose unix id is %d to true end tell - } [pid]] + } [pid]]] } } @@ -160,11 +355,8 @@ set _appname {Git Gui} set _gitdir {} set _gitworktree {} set _isbare {} -set _gitexec {} set _githtmldir {} set _reponame {} -set _iscygwin {} -set _search_path {} set _shellpath {@@SHELL_PATH@@} set _trace [lsearch -exact $argv --trace] @@ -180,15 +372,37 @@ if {$_trace >= 0} { # branches). set _last_merged_branch {} -proc shellpath {} { - global _shellpath env - if {[string match @@* $_shellpath]} { - if {[info exists env(SHELL)]} { - return $env(SHELL) - } else { - return /bin/sh - } +# for testing, allow unconfigured _shellpath +if {[string match @@* $_shellpath]} { + if {[info exists env(SHELL)]} { + set _shellpath $env(SHELL) + } else { + set _shellpath /bin/sh } +} + +if {[is_Windows]} { + set _shellpath [safe_exec [list cygpath -m $_shellpath]] +} + +if {![file executable $_shellpath] || \ + !([file pathtype $_shellpath] eq {absolute})} { + set errmsg "The defined shell ('$_shellpath') is not usable, \ + it must be an absolute path to an executable." + puts stderr $errmsg + + catch {wm withdraw .} + tk_messageBox \ + -icon error \ + -type ok \ + -title "git-gui: configuration error" \ + -message $errmsg + exit 1 +} + + +proc shellpath {} { + global _shellpath return $_shellpath } @@ -205,27 +419,6 @@ proc gitdir {args} { return [eval [list file join $_gitdir] $args] } -proc gitexec {args} { - global _gitexec - if {$_gitexec eq {}} { - if {[catch {set _gitexec [git --exec-path]} err]} { - error "Git not installed?\n\n$err" - } - if {[is_Cygwin]} { - set _gitexec [exec cygpath \ - --windows \ - --absolute \ - $_gitexec] - } else { - set _gitexec [file normalize $_gitexec] - } - } - if {$args eq {}} { - return $_gitexec - } - return [eval [list file join $_gitexec] $args] -} - proc githtmldir {args} { global _githtmldir if {$_githtmldir eq {}} { @@ -233,14 +426,7 @@ proc githtmldir {args} { # Git not installed or option not yet supported return {} } - if {[is_Cygwin]} { - set _githtmldir [exec cygpath \ - --windows \ - --absolute \ - $_githtmldir] - } else { - set _githtmldir [file normalize $_githtmldir] - } + set _githtmldir [file normalize $_githtmldir] } if {$args eq {}} { return $_githtmldir @@ -252,40 +438,6 @@ proc reponame {} { return $::_reponame } -proc is_MacOSX {} { - if {[tk windowingsystem] eq {aqua}} { - return 1 - } - return 0 -} - -proc is_Windows {} { - if {$::tcl_platform(platform) eq {windows}} { - return 1 - } - return 0 -} - -proc is_Cygwin {} { - global _iscygwin - if {$_iscygwin eq {}} { - if {$::tcl_platform(platform) eq {windows}} { - if {[catch {set p [exec cygpath --windir]} err]} { - set _iscygwin 0 - } else { - set _iscygwin 1 - # Handle MSys2 which is only cygwin when MSYSTEM is MSYS. - if {[info exists ::env(MSYSTEM)] && $::env(MSYSTEM) ne "MSYS"} { - set _iscygwin 0 - } - } - } else { - set _iscygwin 0 - } - } - return $_iscygwin -} - proc is_enabled {option} { global enabled_options if {[catch {set on $enabled_options($option)}]} {return 0} @@ -399,119 +551,13 @@ proc _trace_exec {cmd} { #'" fix poor old emacs font-lock mode -proc _git_cmd {name} { - global _git_cmd_path - - if {[catch {set v $_git_cmd_path($name)}]} { - switch -- $name { - version - - --version - - --exec-path { return [list $::_git $name] } - } - - set p [gitexec git-$name$::_search_exe] - if {[file exists $p]} { - set v [list $p] - } elseif {[is_Windows] && [file exists [gitexec git-$name]]} { - # Try to determine what sort of magic will make - # git-$name go and do its thing, because native - # Tcl on Windows doesn't know it. - # - set p [gitexec git-$name] - set f [open $p r] - set s [gets $f] - close $f - - switch -glob -- [lindex $s 0] { - #!*sh { set i sh } - #!*perl { set i perl } - #!*python { set i python } - default { error "git-$name is not supported: $s" } - } - - upvar #0 _$i interp - if {![info exists interp]} { - set interp [_which $i] - } - if {$interp eq {}} { - error "git-$name requires $i (not in PATH)" - } - set v [concat [list $interp] [lrange $s 1 end] [list $p]] - } else { - # Assume it is builtin to git somehow and we - # aren't actually able to see a file for it. - # - set v [list $::_git $name] - } - set _git_cmd_path($name) $v - } - return $v -} - -proc _which {what args} { - global env _search_exe _search_path - - if {$_search_path eq {}} { - if {[is_Cygwin] && [regexp {^(/|\.:)} $env(PATH)]} { - set _search_path [split [exec cygpath \ - --windows \ - --path \ - --absolute \ - $env(PATH)] {;}] - set _search_exe .exe - } elseif {[is_Windows]} { - set gitguidir [file dirname [info script]] - regsub -all ";" $gitguidir "\\;" gitguidir - set env(PATH) "$gitguidir;$env(PATH)" - set _search_path [split $env(PATH) {;}] - set _search_exe .exe - } else { - set _search_path [split $env(PATH) :] - set _search_exe {} - } - } - - if {[is_Windows] && [lsearch -exact $args -script] >= 0} { - set suffix {} - } else { - set suffix $_search_exe - } - - foreach p $_search_path { - set p [file join $p $what$suffix] - if {[file exists $p]} { - return [file normalize $p] - } - } - return {} -} - -# Test a file for a hashbang to identify executable scripts on Windows. -proc is_shellscript {filename} { - if {![file exists $filename]} {return 0} - set f [open $filename r] - fconfigure $f -encoding binary - set magic [read $f 2] - close $f - return [expr {$magic eq "#!"}] -} - -# Run a command connected via pipes on stdout. # This is for use with textconv filters and uses sh -c "..." to allow it to -# contain a command with arguments. On windows we must check for shell -# scripts specifically otherwise just call the filter command. +# contain a command with arguments. We presume this +# to be a shellscript that the configured shell (/bin/sh by default) knows +# how to run. proc open_cmd_pipe {cmd path} { - global env - if {![file executable [shellpath]]} { - set exe [auto_execok [lindex $cmd 0]] - if {[is_shellscript [lindex $exe 0]]} { - set run [linsert [auto_execok sh] end -c "$cmd \"\$0\"" $path] - } else { - set run [concat $exe [lrange $cmd 1 end] $path] - } - } else { - set run [list [shellpath] -c "$cmd \"\$0\"" $path] - } + set run [list [shellpath] -c "$cmd \"\$0\"" $path] + set run [make_arglist_safe $run] return [open |$run r] } @@ -521,9 +567,7 @@ proc _lappend_nice {cmd_var} { if {![info exists _nice]} { set _nice [_which nice] - if {[catch {exec $_nice git version}]} { - set _nice {} - } elseif {[is_Windows] && [file dirname $_nice] ne [file dirname $::_git]} { + if {[catch {safe_exec [list $_nice git version]}]} { set _nice {} } } @@ -533,7 +577,11 @@ proc _lappend_nice {cmd_var} { } proc git {args} { - set fd [eval [list git_read] $args] + git_redir $args {} +} + +proc git_redir {cmd redir} { + set fd [git_read $cmd $redir] fconfigure $fd -translation binary -encoding utf-8 set result [string trimright [read $fd] "\n"] close $fd @@ -543,111 +591,47 @@ proc git {args} { return $result } -proc _open_stdout_stderr {cmd} { - _trace_exec $cmd +proc safe_open_command {cmd {redir {}}} { + set cmd [make_arglist_safe $cmd] + _trace_exec [concat $cmd $redir] if {[catch { - set fd [open [concat [list | ] $cmd] r] - } err]} { - if { [lindex $cmd end] eq {2>@1} - && $err eq {can not find channel named "1"} - } { - # Older versions of Tcl 8.4 don't have this 2>@1 IO - # redirect operator. Fallback to |& cat for those. - # The command was not actually started, so its safe - # to try to start it a second time. - # - set fd [open [concat \ - [list | ] \ - [lrange $cmd 0 end-1] \ - [list |& cat] \ - ] r] - } else { - error $err - } + set fd [open [concat [list | ] $cmd $redir] r] + } err]} { + error $err } fconfigure $fd -eofchar {} return $fd } -proc git_read {args} { - set opt [list] - - while {1} { - switch -- [lindex $args 0] { - --nice { - _lappend_nice opt - } - - --stderr { - lappend args 2>@1 - } +proc git_read {cmd {redir {}}} { + global _git + set cmdp [concat [list $_git] $cmd] - default { - break - } - - } - - set args [lrange $args 1 end] - } - - set cmdp [_git_cmd [lindex $args 0]] - set args [lrange $args 1 end] - - return [_open_stdout_stderr [concat $opt $cmdp $args]] + return [safe_open_command $cmdp $redir] } -proc git_write {args} { +proc git_read_nice {cmd} { + global _git set opt [list] - while {1} { - switch -- [lindex $args 0] { - --nice { - _lappend_nice opt - } + _lappend_nice opt - default { - break - } + set cmdp [concat [list $_git] $cmd] - } - - set args [lrange $args 1 end] - } + return [safe_open_command [concat $opt $cmdp]] +} - set cmdp [_git_cmd [lindex $args 0]] - set args [lrange $args 1 end] +proc git_write {cmd} { + global _git + set cmd [make_arglist_safe $cmd] + set cmdp [concat [list $_git] $cmd] - _trace_exec [concat $opt $cmdp $args] - return [open [concat [list | ] $opt $cmdp $args] w] + _trace_exec $cmdp + return [open [concat [list | ] $cmdp] w] } proc githook_read {hook_name args} { - set pchook [gitdir hooks $hook_name] - lappend args 2>@1 - - # On Windows [file executable] might lie so we need to ask - # the shell if the hook is executable. Yes that's annoying. - # - if {[is_Windows]} { - upvar #0 _sh interp - if {![info exists interp]} { - set interp [_which sh] - } - if {$interp eq {}} { - error "hook execution requires sh (not in PATH)" - } - - set scr {if test -x "$1";then exec "$@";fi} - set sh_c [list $interp -c $scr $interp $pchook] - return [_open_stdout_stderr [concat $sh_c $args]] - } - - if {[file executable $pchook]} { - return [_open_stdout_stderr [concat [list $pchook] $args]] - } - - return {} + git_read [concat [list hook run --ignore-missing $hook_name --] $args] [list 2>@1] } proc kill_file_process {fd} { @@ -655,9 +639,9 @@ proc kill_file_process {fd} { catch { if {[is_Windows]} { - exec taskkill /pid $process + safe_exec [list taskkill /pid $process] } else { - exec kill $process + safe_exec [list kill $process] } } } @@ -683,26 +667,8 @@ proc sq {value} { proc load_current_branch {} { global current_branch is_detached - set fd [open [gitdir HEAD] r] - if {[gets $fd ref] < 1} { - set ref {} - } - close $fd - - set pfx {ref: refs/heads/} - set len [string length $pfx] - if {[string equal -length $len $pfx $ref]} { - # We're on a branch. It might not exist. But - # HEAD looks good enough to be a branch. - # - set current_branch [string range $ref $len end] - set is_detached 0 - } else { - # Assume this is a detached head. - # - set current_branch HEAD - set is_detached 1 - } + set current_branch [git branch --show-current] + set is_detached [expr [string length $current_branch] == 0] } auto_load tk_optionMenu @@ -719,7 +685,6 @@ proc rmsel_tag {text} { -background [$text cget -background] \ -foreground [$text cget -foreground] \ -borderwidth 0 - $text tag conf in_sel -background lightgray bind $text break return $text } @@ -853,16 +818,14 @@ proc apply_config {} { font configure ${font}italic -slant italic } - global use_ttk NS - set use_ttk 0 - set NS {} - if {$repo_config(gui.usettk)} { - set use_ttk [package vsatisfies [package provide Tk] 8.5] - if {$use_ttk} { - set NS ttk - bind [winfo class .] <> [list InitTheme] - pave_toplevel . - } + bind [winfo class .] <> [list InitTheme] + pave_toplevel . + color::sync_with_theme + + global comment_string + set comment_string [get_config core.commentstring] + if {$comment_string eq {}} { + set comment_string [get_config core.commentchar] } } @@ -874,6 +837,8 @@ set default_config(merge.summary) false set default_config(merge.verbosity) 2 set default_config(user.name) {} set default_config(user.email) {} +set default_config(core.commentchar) "#" +set default_config(core.commentstring) {} set default_config(gui.encoding) [encoding system] set default_config(gui.matchtrackingbranch) false @@ -922,6 +887,8 @@ if {$_git eq {}} { ## ## version check +set MIN_GIT_VERSION 2.36 + if {[catch {set _git_version [git --version]} err]} { catch {wm withdraw .} tk_messageBox \ @@ -932,9 +899,10 @@ if {[catch {set _git_version [git --version]} err]} { $err -[appname] requires Git 1.5.0 or later." +[appname] requires Git $MIN_GIT_VERSION or later." exit 1 } + if {![regsub {^git version } $_git_version {} _git_version]} { catch {wm withdraw .} tk_messageBox \ @@ -946,105 +914,41 @@ if {![regsub {^git version } $_git_version {} _git_version]} { } proc get_trimmed_version {s} { - set r {} - foreach x [split $s -._] { - if {[string is integer -strict $x]} { - lappend r $x - } else { - break - } - } - return [join $r .] + set r {} + foreach x [split $s -._] { + if {[string is integer -strict $x]} { + lappend r $x + } else { + break + } + } + return [join $r .] } set _real_git_version $_git_version set _git_version [get_trimmed_version $_git_version] -if {![regexp {^[1-9]+(\.[0-9]+)+$} $_git_version]} { - catch {wm withdraw .} - if {[tk_messageBox \ - -icon warning \ - -type yesno \ - -default no \ - -title "[appname]: warning" \ - -message [mc "Git version cannot be determined. - -%s claims it is version '%s'. - -%s requires at least Git 1.5.0 or later. +if {[catch {set vcheck [package vcompare $_git_version $MIN_GIT_VERSION]}] || + [expr $vcheck < 0] } { -Assume '%s' is version 1.5.0? -" $_git $_real_git_version [appname] $_real_git_version]] eq {yes}} { - set _git_version 1.5.0 - } else { - exit 1 - } -} -unset _real_git_version - -proc git-version {args} { - global _git_version - - switch [llength $args] { - 0 { - return $_git_version - } - - 2 { - set op [lindex $args 0] - set vr [lindex $args 1] - set cm [package vcompare $_git_version $vr] - return [expr $cm $op 0] - } - - 4 { - set type [lindex $args 0] - set name [lindex $args 1] - set parm [lindex $args 2] - set body [lindex $args 3] - - if {($type ne {proc} && $type ne {method})} { - error "Invalid arguments to git-version" - } - if {[llength $body] < 2 || [lindex $body end-1] ne {default}} { - error "Last arm of $type $name must be default" - } - - foreach {op vr cb} [lrange $body 0 end-2] { - if {[git-version $op $vr]} { - return [uplevel [list $type $name $parm $cb]] - } - } - - return [uplevel [list $type $name $parm [lindex $body end]]] - } - - default { - error "git-version >= x" - } - - } -} - -if {[git-version < 1.5]} { + set msg1 [mc "Insufficient git version, require: "] + set msg2 [mc "git returned:"] + set message "$msg1 $MIN_GIT_VERSION\n$msg2 $_real_git_version" catch {wm withdraw .} tk_messageBox \ -icon error \ -type ok \ -title [mc "git-gui: fatal error"] \ - -message "[appname] requires Git 1.5.0 or later. - -You are using [git-version]: - -[git --version]" + -message $message exit 1 } +unset _real_git_version ###################################################################### ## ## configure our library set idx [file join $oguilib tclIndex] -if {[catch {set fd [open $idx r]} err]} { +if {[catch {set fd [safe_open_file $idx r]} err]} { catch {wm withdraw .} tk_messageBox \ -icon error \ @@ -1082,53 +986,30 @@ unset -nocomplain idx fd ## ## config file parsing -git-version proc _parse_config {arr_name args} { - >= 1.5.3 { - upvar $arr_name arr - array unset arr - set buf {} - catch { - set fd_rc [eval \ - [list git_read config] \ - $args \ - [list --null --list]] - fconfigure $fd_rc -translation binary -encoding utf-8 - set buf [read $fd_rc] - close $fd_rc - } - foreach line [split $buf "\0"] { - if {[regexp {^([^\n]+)\n(.*)$} $line line name value]} { - if {[is_many_config $name]} { - lappend arr($name) $value - } else { - set arr($name) $value - } - } elseif {[regexp {^([^\n]+)$} $line line name]} { - # no value given, but interpreting them as - # boolean will be handled as true - set arr($name) {} - } - } - } - default { - upvar $arr_name arr - array unset arr - catch { - set fd_rc [eval [list git_read config --list] $args] - while {[gets $fd_rc line] >= 0} { - if {[regexp {^([^=]+)=(.*)$} $line line name value]} { - if {[is_many_config $name]} { - lappend arr($name) $value - } else { - set arr($name) $value - } - } elseif {[regexp {^([^=]+)$} $line line name]} { - # no value given, but interpreting them as - # boolean will be handled as true - set arr($name) {} - } +proc _parse_config {arr_name args} { + upvar $arr_name arr + array unset arr + set buf {} + catch { + set fd_rc [git_read \ + [concat config \ + $args \ + --null --list]] + fconfigure $fd_rc -translation binary -encoding utf-8 + set buf [read $fd_rc] + close $fd_rc + } + foreach line [split $buf "\0"] { + if {[regexp {^([^\n]+)\n(.*)$} $line line name value]} { + if {[is_many_config $name]} { + lappend arr($name) $value + } else { + set arr($name) $value } - close $fd_rc + } elseif {[regexp {^([^\n]+)$} $line line name]} { + # no value given, but interpreting them as + # boolean will be handled as true + set arr($name) {} } } } @@ -1223,11 +1104,9 @@ citool { ## ## execution environment -set have_tk85 [expr {[package vcompare $tk_version "8.5"] >= 0}] - # Suggest our implementation of askpass, if none is set if {![info exists env(SSH_ASKPASS)]} { - set env(SSH_ASKPASS) [gitexec git-gui--askpass] + set env(SSH_ASKPASS) [file join [git --exec-path] git-gui--askpass] } if {![info exists env(GIT_ASKPASS)]} { set env(GIT_ASKPASS) [gitexec git-gui--askpass] @@ -1254,9 +1133,23 @@ if {[catch { load_config 1 apply_config choose_repository::pick + if {![file isdirectory $_gitdir]} { + exit 1 + } set picked 1 } +# Use object format as hash algorithm (either "sha1" or "sha256") +set hashalgorithm [git rev-parse --show-object-format] +if {$hashalgorithm eq "sha1"} { + set hashlength 40 +} elseif {$hashalgorithm eq "sha256"} { + set hashlength 64 +} else { + puts stderr "Unknown hash algorithm: $hashalgorithm" + exit 1 +} + # we expand the _gitdir when it's just a single dot (i.e. when we're being # run from the .git dir itself) lest the routines to find the worktree # get confused @@ -1264,9 +1157,6 @@ if {$_gitdir eq "."} { set _gitdir [pwd] } -if {![file isdirectory $_gitdir] && [is_Cygwin]} { - catch {set _gitdir [exec cygpath --windows $_gitdir]} -} if {![file isdirectory $_gitdir]} { catch {wm withdraw .} error_popup [strcat [mc "Git directory not found:"] "\n\n$_gitdir"] @@ -1276,24 +1166,7 @@ if {![file isdirectory $_gitdir]} { load_config 0 apply_config -# v1.7.0 introduced --show-toplevel to return the canonical work-tree -if {[package vcompare $_git_version 1.7.0] >= 0} { - if { [is_Cygwin] } { - catch {set _gitworktree [exec cygpath --windows [git rev-parse --show-toplevel]]} - } else { - set _gitworktree [git rev-parse --show-toplevel] - } -} else { - # try to set work tree from environment, core.worktree or use - # cdup to obtain a relative path to the top of the worktree. If - # run from the top, the ./ prefix ensures normalize expands pwd. - if {[catch { set _gitworktree $env(GIT_WORK_TREE) }]} { - set _gitworktree [get_config core.worktree] - if {$_gitworktree eq ""} { - set _gitworktree [file normalize ./[git rev-parse --show-cdup]] - } - } -} +set _gitworktree [git rev-parse --show-toplevel] if {$_prefix ne {}} { if {$_gitworktree eq {}} { @@ -1354,12 +1227,11 @@ set current_diff_path {} set is_3way_diff 0 set is_submodule_diff 0 set is_conflict_diff 0 -set diff_empty_count 0 set last_revert {} set last_revert_enc {} -set nullid "0000000000000000000000000000000000000000" -set nullid2 "0000000000000000000000000000000000000001" +set nullid [string repeat 0 $hashlength] +set nullid2 "[string repeat 0 [expr $hashlength - 1]]1" ###################################################################### ## @@ -1417,7 +1289,7 @@ proc repository_state {ctvar hdvar mhvar} { set merge_head [gitdir MERGE_HEAD] if {[file exists $merge_head]} { set ct merge - set fd_mh [open $merge_head r] + set fd_mh [safe_open_file $merge_head r] while {[gets $fd_mh line] >= 0} { lappend mh $line } @@ -1436,7 +1308,7 @@ proc PARENT {} { return $p } if {$empty_tree eq {}} { - set empty_tree [git mktree << {}] + set empty_tree [git_redir [list mktree] [list << {}]] } return $empty_tree } @@ -1484,6 +1356,7 @@ proc rescan {after {honor_trustmtime 1}} { } elseif {[run_prepare_commit_msg_hook]} { } elseif {[load_message MERGE_MSG]} { } elseif {[load_message SQUASH_MSG]} { + } elseif {[load_message [get_config commit.template]]} { } $ui_comm edit reset $ui_comm edit modified false @@ -1494,36 +1367,20 @@ proc rescan {after {honor_trustmtime 1}} { } else { set rescan_active 1 ui_status [mc "Refreshing file status..."] - set fd_rf [git_read update-index \ + set fd_rf [git_read [list update-index \ -q \ --unmerged \ --ignore-missing \ --refresh \ - ] + ]] fconfigure $fd_rf -blocking 0 -translation binary fileevent $fd_rf readable \ [list rescan_stage2 $fd_rf $after] } } -if {[is_Cygwin]} { - set is_git_info_exclude {} - proc have_info_exclude {} { - global is_git_info_exclude - - if {$is_git_info_exclude eq {}} { - if {[catch {exec test -f [gitdir info exclude]}]} { - set is_git_info_exclude 0 - } else { - set is_git_info_exclude 1 - } - } - return $is_git_info_exclude - } -} else { - proc have_info_exclude {} { - return [file readable [gitdir info exclude]] - } +proc have_info_exclude {} { + return [file readable [gitdir info exclude]] } proc rescan_stage2 {fd after} { @@ -1535,18 +1392,7 @@ proc rescan_stage2 {fd after} { close $fd } - if {[package vcompare $::_git_version 1.6.3] >= 0} { - set ls_others [list --exclude-standard] - } else { - set ls_others [list --exclude-per-directory=.gitignore] - if {[have_info_exclude]} { - lappend ls_others "--exclude-from=[gitdir info exclude]" - } - set user_exclude [get_config core.excludesfile] - if {$user_exclude ne {} && [file readable $user_exclude]} { - lappend ls_others "--exclude-from=[file normalize $user_exclude]" - } - } + set ls_others [list --exclude-standard] set buf_rdi {} set buf_rdf {} @@ -1554,12 +1400,8 @@ proc rescan_stage2 {fd after} { set rescan_active 2 ui_status [mc "Scanning for modified files ..."] - if {[git-version >= "1.7.2"]} { - set fd_di [git_read diff-index --cached --ignore-submodules=dirty -z [PARENT]] - } else { - set fd_di [git_read diff-index --cached -z [PARENT]] - } - set fd_df [git_read diff-files -z] + set fd_di [git_read [list diff-index --cached --ignore-submodules=dirty -z [PARENT]]] + set fd_df [git_read [list diff-files -z]] fconfigure $fd_di -blocking 0 -translation binary -encoding binary fconfigure $fd_df -blocking 0 -translation binary -encoding binary @@ -1568,7 +1410,7 @@ proc rescan_stage2 {fd after} { fileevent $fd_df readable [list read_diff_files $fd_df $after] if {[is_config_true gui.displayuntracked]} { - set fd_lo [eval git_read ls-files --others -z $ls_others] + set fd_lo [git_read [concat ls-files --others -z $ls_others]] fconfigure $fd_lo -blocking 0 -translation binary -encoding binary fileevent $fd_lo readable [list read_ls_others $fd_lo $after] incr rescan_active @@ -1580,7 +1422,7 @@ proc load_message {file {encoding {}}} { set f [gitdir $file] if {[file isfile $f]} { - if {[catch {set fd [open $f r]}]} { + if {[catch {set fd [safe_open_file $f r]}]} { return 0 } fconfigure $fd -eofchar {} @@ -1604,17 +1446,23 @@ proc run_prepare_commit_msg_hook {} { # it will be .git/MERGE_MSG (merge), .git/SQUASH_MSG (squash), or an # empty file but existent file. - set fd_pcm [open [gitdir PREPARE_COMMIT_MSG] a] + set fd_pcm [safe_open_file [gitdir PREPARE_COMMIT_MSG] a] if {[file isfile [gitdir MERGE_MSG]]} { set pcm_source "merge" - set fd_mm [open [gitdir MERGE_MSG] r] + set fd_mm [safe_open_file [gitdir MERGE_MSG] r] fconfigure $fd_mm -encoding utf-8 puts -nonewline $fd_pcm [read $fd_mm] close $fd_mm } elseif {[file isfile [gitdir SQUASH_MSG]]} { set pcm_source "squash" - set fd_sm [open [gitdir SQUASH_MSG] r] + set fd_sm [safe_open_file [gitdir SQUASH_MSG] r] + fconfigure $fd_sm -encoding utf-8 + puts -nonewline $fd_pcm [read $fd_sm] + close $fd_sm + } elseif {[file isfile [get_config commit.template]]} { + set pcm_source "template" + set fd_sm [safe_open_file [get_config commit.template] r] fconfigure $fd_sm -encoding utf-8 puts -nonewline $fd_pcm [read $fd_sm] close $fd_sm @@ -1658,7 +1506,7 @@ proc prepare_commit_msg_hook_wait {fd_ph} { set pch_error {} catch {file delete [gitdir PREPARE_COMMIT_MSG]} return - } + } fconfigure $fd_ph -blocking 0 catch {file delete [gitdir PREPARE_COMMIT_MSG]} } @@ -1803,10 +1651,10 @@ proc ui_status {msg} { } } -proc ui_ready {{test {}}} { +proc ui_ready {} { global main_status if {[info exists main_status]} { - $main_status show [mc "Ready."] $test + $main_status show [mc "Ready."] } } @@ -1821,10 +1669,9 @@ proc short_path {path} { } set next_icon_id 0 -set null_sha1 [string repeat 0 40] proc merge_state {path new_state {head_info {}} {index_info {}}} { - global file_states next_icon_id null_sha1 + global file_states next_icon_id nullid set s0 [string index $new_state 0] set s1 [string index $new_state 1] @@ -1846,7 +1693,7 @@ proc merge_state {path new_state {head_info {}} {index_info {}}} { elseif {$s1 eq {_}} {set s1 _} if {$s0 eq {A} && $s1 eq {_} && $head_info eq {}} { - set head_info [list 0 $null_sha1] + set head_info [list 0 $nullid] } elseif {$s0 ne {_} && [string index $state 0] eq {_} && $head_info eq {}} { set head_info $index_info @@ -2006,72 +1853,72 @@ set filemask { #define mask_width 14 #define mask_height 15 static unsigned char mask_bits[] = { - 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, - 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, - 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f}; + 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, + 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f, + 0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x1f}; } image create bitmap file_plain -background white -foreground black -data { #define plain_width 14 #define plain_height 15 static unsigned char plain_bits[] = { - 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10, - 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, - 0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10, + 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, + 0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask image create bitmap file_mod -background white -foreground blue -data { #define mod_width 14 #define mod_height 15 static unsigned char mod_bits[] = { - 0xfe, 0x01, 0x02, 0x03, 0x7a, 0x05, 0x02, 0x09, 0x7a, 0x1f, 0x02, 0x10, - 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, - 0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x03, 0x7a, 0x05, 0x02, 0x09, 0x7a, 0x1f, 0x02, 0x10, + 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, + 0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask image create bitmap file_fulltick -background white -foreground "#007000" -data { #define file_fulltick_width 14 #define file_fulltick_height 15 static unsigned char file_fulltick_bits[] = { - 0xfe, 0x01, 0x02, 0x1a, 0x02, 0x0c, 0x02, 0x0c, 0x02, 0x16, 0x02, 0x16, - 0x02, 0x13, 0x00, 0x13, 0x86, 0x11, 0x8c, 0x11, 0xd8, 0x10, 0xf2, 0x10, - 0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x1a, 0x02, 0x0c, 0x02, 0x0c, 0x02, 0x16, 0x02, 0x16, + 0x02, 0x13, 0x00, 0x13, 0x86, 0x11, 0x8c, 0x11, 0xd8, 0x10, 0xf2, 0x10, + 0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask image create bitmap file_question -background white -foreground black -data { #define file_question_width 14 #define file_question_height 15 static unsigned char file_question_bits[] = { - 0xfe, 0x01, 0x02, 0x02, 0xe2, 0x04, 0xf2, 0x09, 0x1a, 0x1b, 0x0a, 0x13, - 0x82, 0x11, 0xc2, 0x10, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, 0x62, 0x10, - 0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x02, 0xe2, 0x04, 0xf2, 0x09, 0x1a, 0x1b, 0x0a, 0x13, + 0x82, 0x11, 0xc2, 0x10, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, 0x62, 0x10, + 0x62, 0x10, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask image create bitmap file_removed -background white -foreground red -data { #define file_removed_width 14 #define file_removed_height 15 static unsigned char file_removed_bits[] = { - 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10, - 0x1a, 0x16, 0x32, 0x13, 0xe2, 0x11, 0xc2, 0x10, 0xe2, 0x11, 0x32, 0x13, - 0x1a, 0x16, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x02, 0x10, + 0x1a, 0x16, 0x32, 0x13, 0xe2, 0x11, 0xc2, 0x10, 0xe2, 0x11, 0x32, 0x13, + 0x1a, 0x16, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask image create bitmap file_merge -background white -foreground blue -data { #define file_merge_width 14 #define file_merge_height 15 static unsigned char file_merge_bits[] = { - 0xfe, 0x01, 0x02, 0x03, 0x62, 0x05, 0x62, 0x09, 0x62, 0x1f, 0x62, 0x10, - 0xfa, 0x11, 0xf2, 0x10, 0x62, 0x10, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, - 0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x03, 0x62, 0x05, 0x62, 0x09, 0x62, 0x1f, 0x62, 0x10, + 0xfa, 0x11, 0xf2, 0x10, 0x62, 0x10, 0x02, 0x10, 0xfa, 0x17, 0x02, 0x10, + 0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask image create bitmap file_statechange -background white -foreground green -data { #define file_statechange_width 14 #define file_statechange_height 15 static unsigned char file_statechange_bits[] = { - 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x62, 0x10, - 0x62, 0x10, 0xba, 0x11, 0xba, 0x11, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, - 0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f}; + 0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x62, 0x10, + 0x62, 0x10, 0xba, 0x11, 0xba, 0x11, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10, + 0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f}; } -maskdata $filemask set ui_index .vpane.files.index.list @@ -2156,8 +2003,6 @@ proc incr_font_size {font {amt 1}} { ## ## ui commands -set starting_gitk_msg [mc "Starting gitk... please wait..."] - proc do_gitk {revs {is_submodule false}} { global current_diff_path file_states current_diff_side ui_index global _gitdir _gitworktree @@ -2206,15 +2051,18 @@ proc do_gitk {revs {is_submodule false}} { unset env(GIT_DIR) unset env(GIT_WORK_TREE) } - eval exec $cmd $revs "--" "--" & + safe_exec_bg [concat $cmd $revs "--" "--"] set env(GIT_DIR) $_gitdir set env(GIT_WORK_TREE) $_gitworktree cd $pwd - ui_status $::starting_gitk_msg - after 10000 { - ui_ready $starting_gitk_msg + if {[info exists main_status]} { + set status_operation [$::main_status \ + start \ + [mc "Starting %s... please wait..." "gitk"]] + + after 3500 [list $status_operation stop] } } } @@ -2240,23 +2088,25 @@ proc do_git_gui {} { set pwd [pwd] cd $current_diff_path - eval exec $exe gui & + safe_exec_bg [concat $exe gui] set env(GIT_DIR) $_gitdir set env(GIT_WORK_TREE) $_gitworktree cd $pwd - ui_status $::starting_gitk_msg - after 10000 { - ui_ready $starting_gitk_msg - } + set status_operation [$::main_status \ + start \ + [mc "Starting %s... please wait..." "git-gui"]] + + after 3500 [list $status_operation stop] } } -proc do_explore {} { - global _gitworktree - set explorer {} - if {[is_Cygwin] || [is_Windows]} { +# Get the system-specific explorer app/command. +proc get_explorer {} { + if {[is_Cygwin]} { + set explorer "/bin/cygstart.exe --explore" + } elseif {[is_Windows]} { set explorer "explorer.exe" } elseif {[is_MacOSX]} { set explorer "open" @@ -2264,7 +2114,23 @@ proc do_explore {} { # freedesktop.org-conforming system is our best shot set explorer "xdg-open" } - eval exec $explorer [list [file nativename $_gitworktree]] & + return $explorer +} + +proc do_explore {} { + global _gitworktree + set cmd [get_explorer] + lappend cmd [file nativename $_gitworktree] + safe_exec_bg $cmd +} + +# Open file relative to the working tree by the default associated app. +proc do_file_open {file} { + global _gitworktree + set cmd [get_explorer] + set full_file_path [file join $_gitworktree $file] + lappend cmd [file nativename $full_file_path] + safe_exec_bg $cmd } set is_quitting 0 @@ -2280,7 +2146,7 @@ proc do_quit {{rc {1}}} { global ui_comm is_quitting repo_config commit_type global GITGUI_BCK_exists GITGUI_BCK_i global ui_comm_spell - global ret_code use_ttk + global ret_code if {$is_quitting} return set is_quitting 1 @@ -2290,16 +2156,15 @@ proc do_quit {{rc {1}}} { # set save [gitdir GITGUI_MSG] if {$GITGUI_BCK_exists && ![$ui_comm edit modified]} { - file rename -force [gitdir GITGUI_BCK] $save + catch { file rename -force [gitdir GITGUI_BCK] $save } set GITGUI_BCK_exists 0 - } else { + } elseif {[$ui_comm edit modified]} { set msg [string trim [$ui_comm get 0.0 end]] regsub -all -line {[ \r\t]+$} $msg {} msg - if {(![string match amend* $commit_type] - || [$ui_comm edit modified]) + if {![string match amend* $commit_type] && $msg ne {}} { catch { - set fd [open $save w] + set fd [safe_open_file $save w] fconfigure $fd -encoding utf-8 puts -nonewline $fd $msg close $fd @@ -2339,13 +2204,8 @@ proc do_quit {{rc {1}}} { } set cfg_geometry [list] lappend cfg_geometry [wm geometry .] - if {$use_ttk} { - lappend cfg_geometry [.vpane sashpos 0] - lappend cfg_geometry [.vpane.files sashpos 0] - } else { - lappend cfg_geometry [lindex [.vpane sash coord 0] 0] - lappend cfg_geometry [lindex [.vpane.files sash coord 0] 1] - } + lappend cfg_geometry [.vpane sashpos 0] + lappend cfg_geometry [.vpane.files sashpos 0] if {[catch {set rc_geometry $repo_config(gui.geometry)}]} { set rc_geometry {} } @@ -2357,7 +2217,7 @@ proc do_quit {{rc {1}}} { set ret_code $rc # Briefly enable send again, working around Tk bug - # http://sourceforge.net/tracker/?func=detail&atid=112997&aid=1821174&group_id=12997 + # https://sourceforge.net/p/tktoolkit/bugs/2343/ tk appname [appname] destroy . @@ -2590,12 +2450,12 @@ proc toggle_or_diff {mode w args} { update_indexinfo \ "Unstaging [short_path $path] from commit" \ [list $path] \ - [concat $after [list ui_ready]] + [concat $after {ui_ready;}] } elseif {$w eq $ui_workdir} { update_index \ "Adding [short_path $path]" \ [list $path] \ - [concat $after [list ui_ready]] + [concat $after {ui_ready;}] } } else { set selected_paths($path) 1 @@ -2742,10 +2602,17 @@ if {![is_bare]} { } if {[is_Windows]} { + # Use /git-bash.exe if available + set _git_bash [safe_exec [list cygpath -m /git-bash.exe]] + if {[file executable $_git_bash]} { + set _bash_cmdline [list "Git Bash" $_git_bash] + } else { + set _bash_cmdline [list "Git Bash" bash --login -l] + } .mbar.repository add command \ -label [mc "Git Bash"] \ - -command {eval exec [auto_execok start] \ - [list "Git Bash" bash --login -l &]} + -command {safe_exec_bg [concat [list [_which cmd] /c start] $_bash_cmdline]} + unset _git_bash } if {[is_Windows] || ![is_bare]} { @@ -3029,16 +2896,12 @@ if {[is_MacOSX]} { set doc_path [githtmldir] if {$doc_path ne {}} { set doc_path [file join $doc_path index.html] - - if {[is_Cygwin]} { - set doc_path [exec cygpath --mixed $doc_path] - } } if {[file isfile $doc_path]} { set doc_url "file:$doc_path" } else { - set doc_url {http://www.kernel.org/pub/software/scm/git/docs/} + set doc_url {https://www.kernel.org/pub/software/scm/git/docs/} } proc start_browser {url} { @@ -3158,7 +3021,7 @@ blame { if {$head eq {}} { load_current_branch } else { - if {[regexp {^[0-9a-f]{1,39}$} $head]} { + if {[regexp [string map "@@ [expr $hashlength - 1]" {^[0-9a-f]{1,@@}$}] $head]} { if {[catch { set head [git rev-parse --verify $head] } err]} { @@ -3224,13 +3087,12 @@ default { # -- Branch Control # -${NS}::frame .branch -if {!$use_ttk} {.branch configure -borderwidth 1 -relief sunken} -${NS}::label .branch.l1 \ +ttk::frame .branch +ttk::label .branch.l1 \ -text [mc "Current Branch:"] \ -anchor w \ -justify left -${NS}::label .branch.cb \ +ttk::label .branch.cb \ -textvariable current_branch \ -anchor w \ -justify left @@ -3240,13 +3102,9 @@ pack .branch -side top -fill x # -- Main Window Layout # -${NS}::panedwindow .vpane -orient horizontal -${NS}::panedwindow .vpane.files -orient vertical -if {$use_ttk} { - .vpane add .vpane.files -} else { - .vpane add .vpane.files -sticky nsew -height 100 -width 200 -} +ttk::panedwindow .vpane -orient horizontal +ttk::panedwindow .vpane.files -orient vertical +.vpane add .vpane.files pack .vpane -anchor n -side top -fill both -expand 1 # -- Working Directory File List @@ -3254,7 +3112,7 @@ pack .vpane -anchor n -side top -fill both -expand 1 textframe .vpane.files.workdir -height 100 -width 200 tlabel .vpane.files.workdir.title -text [mc "Unstaged Changes"] \ -background lightsalmon -foreground black -ttext $ui_workdir -background white -foreground black \ +ttext $ui_workdir \ -borderwidth 0 \ -width 20 -height 10 \ -wrap none \ @@ -3263,8 +3121,8 @@ ttext $ui_workdir -background white -foreground black \ -xscrollcommand {.vpane.files.workdir.sx set} \ -yscrollcommand {.vpane.files.workdir.sy set} \ -state disabled -${NS}::scrollbar .vpane.files.workdir.sx -orient h -command [list $ui_workdir xview] -${NS}::scrollbar .vpane.files.workdir.sy -orient v -command [list $ui_workdir yview] +ttk::scrollbar .vpane.files.workdir.sx -orient h -command [list $ui_workdir xview] +ttk::scrollbar .vpane.files.workdir.sy -orient v -command [list $ui_workdir yview] pack .vpane.files.workdir.title -side top -fill x pack .vpane.files.workdir.sx -side bottom -fill x pack .vpane.files.workdir.sy -side right -fill y @@ -3276,7 +3134,7 @@ textframe .vpane.files.index -height 100 -width 200 tlabel .vpane.files.index.title \ -text [mc "Staged Changes (Will Commit)"] \ -background lightgreen -foreground black -ttext $ui_index -background white -foreground black \ +ttext $ui_index \ -borderwidth 0 \ -width 20 -height 10 \ -wrap none \ @@ -3285,8 +3143,8 @@ ttext $ui_index -background white -foreground black \ -xscrollcommand {.vpane.files.index.sx set} \ -yscrollcommand {.vpane.files.index.sy set} \ -state disabled -${NS}::scrollbar .vpane.files.index.sx -orient h -command [list $ui_index xview] -${NS}::scrollbar .vpane.files.index.sy -orient v -command [list $ui_index yview] +ttk::scrollbar .vpane.files.index.sx -orient h -command [list $ui_index xview] +ttk::scrollbar .vpane.files.index.sy -orient v -command [list $ui_index yview] pack .vpane.files.index.title -side top -fill x pack .vpane.files.index.sx -side bottom -fill x pack .vpane.files.index.sy -side right -fill y @@ -3296,91 +3154,83 @@ pack $ui_index -side left -fill both -expand 1 # .vpane.files add .vpane.files.workdir .vpane.files add .vpane.files.index -if {!$use_ttk} { - .vpane.files paneconfigure .vpane.files.workdir -sticky news - .vpane.files paneconfigure .vpane.files.index -sticky news + +proc set_selection_colors {w has_focus} { + foreach tag [list in_diff in_sel] { + $w tag conf $tag \ + -background [expr {$has_focus ? $color::select_bg : $color::inactive_select_bg}] \ + -foreground [expr {$has_focus ? $color::select_fg : $color::inactive_select_fg}] + } } foreach i [list $ui_index $ui_workdir] { rmsel_tag $i - $i tag conf in_diff -background [$i tag cget in_sel -background] + + set_selection_colors $i 0 + bind $i { set_selection_colors %W 1 } + bind $i { set_selection_colors %W 0 } } unset i # -- Diff and Commit Area # -if {$have_tk85} { - ${NS}::panedwindow .vpane.lower -orient vertical - ${NS}::frame .vpane.lower.commarea - ${NS}::frame .vpane.lower.diff -relief sunken -borderwidth 1 -height 500 - .vpane.lower add .vpane.lower.diff - .vpane.lower add .vpane.lower.commarea - .vpane add .vpane.lower - if {$use_ttk} { - .vpane.lower pane .vpane.lower.diff -weight 1 - .vpane.lower pane .vpane.lower.commarea -weight 0 - } else { - .vpane.lower paneconfigure .vpane.lower.diff -stretch always - .vpane.lower paneconfigure .vpane.lower.commarea -stretch never - } -} else { - frame .vpane.lower -height 300 -width 400 - frame .vpane.lower.commarea - frame .vpane.lower.diff -relief sunken -borderwidth 1 - pack .vpane.lower.diff -fill both -expand 1 - pack .vpane.lower.commarea -side bottom -fill x - .vpane add .vpane.lower - .vpane paneconfigure .vpane.lower -sticky nsew -} +ttk::panedwindow .vpane.lower -orient vertical +ttk::frame .vpane.lower.commarea +ttk::frame .vpane.lower.diff -relief sunken -borderwidth 1 -height 500 +.vpane.lower add .vpane.lower.diff +.vpane.lower add .vpane.lower.commarea +.vpane add .vpane.lower +.vpane.lower pane .vpane.lower.diff -weight 1 +.vpane.lower pane .vpane.lower.commarea -weight 0 # -- Commit Area Buttons # -${NS}::frame .vpane.lower.commarea.buttons -${NS}::label .vpane.lower.commarea.buttons.l -text {} \ +ttk::frame .vpane.lower.commarea.buttons +ttk::label .vpane.lower.commarea.buttons.l -text {} \ -anchor w \ -justify left pack .vpane.lower.commarea.buttons.l -side top -fill x pack .vpane.lower.commarea.buttons -side left -fill y -${NS}::button .vpane.lower.commarea.buttons.rescan -text [mc Rescan] \ +ttk::button .vpane.lower.commarea.buttons.rescan -text [mc Rescan] \ -command ui_do_rescan pack .vpane.lower.commarea.buttons.rescan -side top -fill x lappend disable_on_lock \ {.vpane.lower.commarea.buttons.rescan conf -state} -${NS}::button .vpane.lower.commarea.buttons.incall -text [mc "Stage Changed"] \ +ttk::button .vpane.lower.commarea.buttons.incall -text [mc "Stage Changed"] \ -command do_add_all pack .vpane.lower.commarea.buttons.incall -side top -fill x lappend disable_on_lock \ {.vpane.lower.commarea.buttons.incall conf -state} if {![is_enabled nocommitmsg]} { - ${NS}::button .vpane.lower.commarea.buttons.signoff -text [mc "Sign Off"] \ + ttk::button .vpane.lower.commarea.buttons.signoff -text [mc "Sign Off"] \ -command do_signoff pack .vpane.lower.commarea.buttons.signoff -side top -fill x } -${NS}::button .vpane.lower.commarea.buttons.commit -text [commit_btn_caption] \ +ttk::button .vpane.lower.commarea.buttons.commit -text [commit_btn_caption] \ -command do_commit pack .vpane.lower.commarea.buttons.commit -side top -fill x lappend disable_on_lock \ {.vpane.lower.commarea.buttons.commit conf -state} if {![is_enabled nocommit]} { - ${NS}::button .vpane.lower.commarea.buttons.push -text [mc Push] \ + ttk::button .vpane.lower.commarea.buttons.push -text [mc Push] \ -command do_push_anywhere pack .vpane.lower.commarea.buttons.push -side top -fill x } # -- Commit Message Buffer # -${NS}::frame .vpane.lower.commarea.buffer -${NS}::frame .vpane.lower.commarea.buffer.header +ttk::frame .vpane.lower.commarea.buffer +ttk::frame .vpane.lower.commarea.buffer.header set ui_comm .vpane.lower.commarea.buffer.frame.t set ui_coml .vpane.lower.commarea.buffer.header.l if {![is_enabled nocommit]} { - ${NS}::checkbutton .vpane.lower.commarea.buffer.header.amend \ + ttk::checkbutton .vpane.lower.commarea.buffer.header.amend \ -text [mc "Amend Last Commit"] \ -variable commit_type_is_amend \ -command do_select_commit_type @@ -3388,7 +3238,7 @@ if {![is_enabled nocommit]} { [list .vpane.lower.commarea.buffer.header.amend conf -state] } -${NS}::label $ui_coml \ +ttk::label $ui_coml \ -anchor w \ -justify left proc trace_commit_type {varname args} { @@ -3411,7 +3261,7 @@ if {![is_enabled nocommit]} { } textframe .vpane.lower.commarea.buffer.frame -ttext $ui_comm -background white -foreground black \ +ttext $ui_comm \ -borderwidth 1 \ -undo true \ -maxundo 20 \ @@ -3423,10 +3273,10 @@ ttext $ui_comm -background white -foreground black \ -font font_diff \ -xscrollcommand {.vpane.lower.commarea.buffer.frame.sbx set} \ -yscrollcommand {.vpane.lower.commarea.buffer.frame.sby set} -${NS}::scrollbar .vpane.lower.commarea.buffer.frame.sbx \ +ttk::scrollbar .vpane.lower.commarea.buffer.frame.sbx \ -orient horizontal \ -command [list $ui_comm xview] -${NS}::scrollbar .vpane.lower.commarea.buffer.frame.sby \ +ttk::scrollbar .vpane.lower.commarea.buffer.frame.sby \ -orient vertical \ -command [list $ui_comm yview] @@ -3510,9 +3360,11 @@ tlabel .vpane.lower.diff.header.file \ -justify left tlabel .vpane.lower.diff.header.path \ -background gold \ - -foreground black \ + -foreground blue \ -anchor w \ - -justify left + -justify left \ + -font [eval font create [font configure font_ui] -underline 1] \ + -cursor hand2 pack .vpane.lower.diff.header.status -side left pack .vpane.lower.diff.header.file -side left pack .vpane.lower.diff.header.path -fill x @@ -3527,14 +3379,18 @@ $ctxm add command \ -type STRING \ -- $current_diff_path } +$ctxm add command \ + -label [mc Open] \ + -command {do_file_open $current_diff_path} lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state] bind_button3 .vpane.lower.diff.header.path "tk_popup $ctxm %X %Y" +bind .vpane.lower.diff.header.path {do_file_open $current_diff_path} # -- Diff Body # textframe .vpane.lower.diff.body set ui_diff .vpane.lower.diff.body.t -ttext $ui_diff -background white -foreground black \ +ttext $ui_diff \ -borderwidth 0 \ -width 80 -height 5 -wrap none \ -font font_diff \ @@ -3543,9 +3399,9 @@ ttext $ui_diff -background white -foreground black \ -yscrollcommand {.vpane.lower.diff.body.sby set} \ -state disabled catch {$ui_diff configure -tabstyle wordprocessor} -${NS}::scrollbar .vpane.lower.diff.body.sbx -orient horizontal \ +ttk::scrollbar .vpane.lower.diff.body.sbx -orient horizontal \ -command [list $ui_diff xview] -${NS}::scrollbar .vpane.lower.diff.body.sby -orient vertical \ +ttk::scrollbar .vpane.lower.diff.body.sby -orient vertical \ -command [list $ui_diff yview] pack .vpane.lower.diff.body.sbx -side bottom -fill x pack .vpane.lower.diff.body.sby -side right -fill y @@ -3563,6 +3419,8 @@ $ui_diff tag configure clr1 -font font_diffbold $ui_diff tag configure clr4 -underline 1 $ui_diff tag conf d_info -foreground blue -font font_diffbold +$ui_diff tag conf d_rescan -foreground blue -underline 1 -font font_diffbold +$ui_diff tag bind d_rescan { clear_diff; rescan ui_ready 0 } $ui_diff tag conf d_cr -elide true $ui_diff tag conf d_@ -font font_diffbold @@ -3587,6 +3445,9 @@ $ui_diff tag conf d_s- \ $ui_diff tag conf d< \ -foreground orange \ -font font_diffbold +$ui_diff tag conf d| \ + -foreground orange \ + -font font_diffbold $ui_diff tag conf d= \ -foreground orange \ -font font_diffbold @@ -3841,29 +3702,14 @@ proc on_ttk_pane_mapped {w pane pos} { bind $w {} after 0 [list after idle [list $w sashpos $pane $pos]] } -proc on_tk_pane_mapped {w pane x y} { - bind $w {} - after 0 [list after idle [list $w sash place $pane $x $y]] -} proc on_application_mapped {} { - global repo_config use_ttk + global repo_config bind . {} set gm $repo_config(gui.geometry) - if {$use_ttk} { - bind .vpane \ - [list on_ttk_pane_mapped %W 0 [lindex $gm 1]] - bind .vpane.files \ - [list on_ttk_pane_mapped %W 0 [lindex $gm 2]] - } else { - bind .vpane \ - [list on_tk_pane_mapped %W 0 \ - [lindex $gm 1] \ - [lindex [.vpane sash coord 0] 1]] - bind .vpane.files \ - [list on_tk_pane_mapped %W 0 \ - [lindex [.vpane.files sash coord 0] 0] \ - [lindex $gm 2]] - } + bind .vpane \ + [list on_ttk_pane_mapped %W 0 [lindex $gm 1]] + bind .vpane.files \ + [list on_ttk_pane_mapped %W 0 [lindex $gm 2]] wm geometry . [lindex $gm 0] } if {[info exists repo_config(gui.geometry)]} { @@ -3901,6 +3747,8 @@ bind $ui_comm <$M1B-Key-KP_Subtract> {show_less_context;break} bind $ui_comm <$M1B-Key-equal> {show_more_context;break} bind $ui_comm <$M1B-Key-plus> {show_more_context;break} bind $ui_comm <$M1B-Key-KP_Add> {show_more_context;break} +bind $ui_comm <$M1B-Key-BackSpace> {event generate %W ;break} +bind $ui_comm <$M1B-Key-Delete> {event generate %W ;break} bind $ui_diff <$M1B-Key-x> {tk_textCopy %W;break} bind $ui_diff <$M1B-Key-X> {tk_textCopy %W;break} @@ -3982,60 +3830,6 @@ set file_lists($ui_workdir) [list] wm title . "[appname] ([reponame]) [file normalize $_gitworktree]" focus -force $ui_comm -# -- Warn the user about environmental problems. Cygwin's Tcl -# does *not* pass its env array onto any processes it spawns. -# This means that git processes get none of our environment. -# -if {[is_Cygwin]} { - set ignored_env 0 - set suggest_user {} - set msg [mc "Possible environment issues exist. - -The following environment variables are probably -going to be ignored by any Git subprocess run -by %s: - -" [appname]] - foreach name [array names env] { - switch -regexp -- $name { - {^GIT_INDEX_FILE$} - - {^GIT_OBJECT_DIRECTORY$} - - {^GIT_ALTERNATE_OBJECT_DIRECTORIES$} - - {^GIT_DIFF_OPTS$} - - {^GIT_EXTERNAL_DIFF$} - - {^GIT_PAGER$} - - {^GIT_TRACE$} - - {^GIT_CONFIG$} - - {^GIT_(AUTHOR|COMMITTER)_DATE$} { - append msg " - $name\n" - incr ignored_env - } - {^GIT_(AUTHOR|COMMITTER)_(NAME|EMAIL)$} { - append msg " - $name\n" - incr ignored_env - set suggest_user $name - } - } - } - if {$ignored_env > 0} { - append msg [mc " -This is due to a known issue with the -Tcl binary distributed by Cygwin."] - - if {$suggest_user ne {}} { - append msg [mc " - -A good replacement for %s -is placing values for the user.name and -user.email settings into your personal -~/.gitconfig file. -" $suggest_user] - } - warn_popup $msg - } - unset ignored_env msg suggest_user name -} - # -- Only initialize complex UI if we are going to stay running. # if {[is_enabled transport]} { @@ -4088,7 +3882,7 @@ if {[winfo exists $ui_comm]} { } } elseif {$m} { catch { - set fd [open [gitdir GITGUI_BCK] w] + set fd [safe_open_file [gitdir GITGUI_BCK] w] fconfigure $fd -encoding utf-8 puts -nonewline $fd $msg close $fd @@ -4154,6 +3948,9 @@ if {$picked && [is_config_true gui.autoexplore]} { do_explore } +# Clear "Initializing..." status +after 500 {$main_status show ""} + # Local variables: # mode: tcl # indent-tabs-mode: t diff --git a/lib/about.tcl b/lib/about.tcl index cfa50fc..122ebfb 100644 --- a/lib/about.tcl +++ b/lib/about.tcl @@ -4,19 +4,19 @@ proc do_about {} { global appvers copyright oguilib global tcl_patchLevel tk_patchLevel - global ui_comm_spell NS use_ttk + global ui_comm_spell set w .about_dialog Dialog $w wm geometry $w "+[winfo rootx .]+[winfo rooty .]" pack [git_logo $w.git_logo] -side left -fill y -padx 10 -pady 10 - ${NS}::label $w.header -text [mc "About %s" [appname]] \ + ttk::label $w.header -text [mc "About %s" [appname]] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.close -text {Close} \ + ttk::frame $w.buttons + ttk::button $w.buttons.close -text {Close} \ -default active \ -command [list destroy $w] pack $w.buttons.close -side right @@ -44,7 +44,7 @@ proc do_about {} { set d {} append d "git wrapper: $::_git\n" - append d "git exec dir: [gitexec]\n" + append d "git exec dir: [git --exec-path]\n" append d "git-gui lib: $oguilib" paddedlabel $w.vers -text $v diff --git a/lib/blame.tcl b/lib/blame.tcl index a1aeb8b..9d4d1ac 100644 --- a/lib/blame.tcl +++ b/lib/blame.tcl @@ -24,6 +24,7 @@ field w_cviewer ; # pane showing commit message field finder ; # find mini-dialog frame field gotoline ; # line goto mini-dialog frame field status ; # status mega-widget instance +field status_operation ; # operation displayed by status mega-widget field old_height ; # last known height of $w.file_pane @@ -62,7 +63,7 @@ field tooltip_timer {} ; # Current timer event for our tooltip field tooltip_commit {} ; # Commit(s) in tooltip constructor new {i_commit i_path i_jump} { - global cursor_ptr M1B M1T have_tk85 use_ttk NS + global cursor_ptr M1B M1T variable active_color variable group_colors @@ -202,18 +203,17 @@ constructor new {i_commit i_path i_jump} { -width 80 \ -xscrollcommand [list $w.file_pane.out.sbx set] \ -font font_diff - if {$have_tk85} { $w_file configure -inactiveselectbackground darkblue - } + $w_file tag conf found \ -background yellow set w_columns [list $w_amov $w_asim $w_line $w_file] - ${NS}::scrollbar $w.file_pane.out.sbx \ + ttk::scrollbar $w.file_pane.out.sbx \ -orient h \ -command [list $w_file xview] - ${NS}::scrollbar $w.file_pane.out.sby \ + ttk::scrollbar $w.file_pane.out.sby \ -orient v \ -command [list scrollbar2many $w_columns yview] eval grid $w_columns $w.file_pane.out.sby -sticky nsew @@ -263,10 +263,10 @@ constructor new {i_commit i_path i_jump} { -background $active_color \ -font font_ui $w_cviewer tag raise sel - ${NS}::scrollbar $w.file_pane.cm.sbx \ + ttk::scrollbar $w.file_pane.cm.sbx \ -orient h \ -command [list $w_cviewer xview] - ${NS}::scrollbar $w.file_pane.cm.sby \ + ttk::scrollbar $w.file_pane.cm.sby \ -orient v \ -command [list $w_cviewer yview] pack $w.file_pane.cm.sby -side right -fill y @@ -274,6 +274,7 @@ constructor new {i_commit i_path i_jump} { pack $w_cviewer -expand 1 -fill both set status [::status_bar::new $w.status] + set status_operation {} menu $w.ctxm -tearoff 0 $w.ctxm add command \ @@ -326,6 +327,7 @@ constructor new {i_commit i_path i_jump} { bind $i [cb _show_tooltip $i @%x,%y] bind $i [cb _hide_tooltip] bind $i [cb _hide_tooltip] + bind $i [cb _hide_tooltip] bind_button3 $i " [cb _hide_tooltip] set cursorX %x @@ -423,6 +425,7 @@ method _kill {} { method _load {jump} { variable group_colors + global hashlength _hide_tooltip $this @@ -433,7 +436,7 @@ method _load {jump} { $i conf -state normal $i delete 0.0 end foreach g [$i tag names] { - if {[regexp {^g[0-9a-f]{40}$} $g]} { + if {[regexp [string map "@@ $hashlength" {^g[0-9a-f]{@@}$}] $g]} { $i tag delete $g } } @@ -467,7 +470,7 @@ method _load {jump} { $w_path conf -text [escape_path $path] set do_textconv 0 - if {![is_config_false gui.textconv] && [git-version >= 1.7.2]} { + if {![is_config_false gui.textconv]} { set filter [gitattr $path diff set] set textconv [get_config [join [list diff $filter textconv] .]] if {$filter ne {set} && $textconv ne {}} { @@ -478,14 +481,14 @@ method _load {jump} { if {$do_textconv ne 0} { set fd [open_cmd_pipe $textconv $path] } else { - set fd [open $path r] + set fd [safe_open_file $path r] } fconfigure $fd -eofchar {} } else { if {$do_textconv ne 0} { - set fd [git_read cat-file --textconv "$commit:$path"] + set fd [git_read [list cat-file --textconv "$commit:$path"]] } else { - set fd [git_read cat-file blob "$commit:$path"] + set fd [git_read [list cat-file blob "$commit:$path"]] } } fconfigure $fd \ @@ -497,6 +500,8 @@ method _load {jump} { } method _history_menu {} { + global hashlength + set m $w.backmenu if {[winfo exists $m]} { $m delete 0 end @@ -510,7 +515,7 @@ method _history_menu {} { set c [lindex $e 0] set f [lindex $e 1] - if {[regexp {^[0-9a-f]{40}$} $c]} { + if {[regexp [string map "@@ $hashlength" {^[0-9a-f]{@@}$}] $c]} { set t [string range $c 0 8]... } elseif {$c eq {}} { set t {Working Directory} @@ -602,21 +607,29 @@ method _exec_blame {cur_w cur_d options cur_s} { } else { lappend options $commit } + + # We may recurse in from another call to _exec_blame and already have + # a status operation. + if {$status_operation == {}} { + set status_operation [$status start \ + $cur_s \ + [mc "lines annotated"]] + } else { + $status_operation restart $cur_s + } + lappend options -- $path - set fd [eval git_read --nice blame $options] + set fd [git_read_nice [concat blame $options]] fconfigure $fd -blocking 0 -translation lf -encoding utf-8 fileevent $fd readable [cb _read_blame $fd $cur_w $cur_d] set current_fd $fd set blame_lines 0 - - $status start \ - $cur_s \ - [mc "lines annotated"] } method _read_blame {fd cur_w cur_d} { upvar #0 $cur_d line_data variable group_colors + global hashlength nullid if {$fd ne $current_fd} { catch {close $fd} @@ -625,7 +638,7 @@ method _read_blame {fd cur_w cur_d} { $cur_w conf -state normal while {[gets $fd line] >= 0} { - if {[regexp {^([a-z0-9]{40}) (\d+) (\d+) (\d+)$} $line line \ + if {[regexp [string map "@@ $hashlength" {^([a-z0-9]{@@}) (\d+) (\d+) (\d+)$}] $line line \ cmit original_line final_line line_count]} { set r_commit $cmit set r_orig_line $original_line @@ -638,7 +651,7 @@ method _read_blame {fd cur_w cur_d} { set oln $r_orig_line set cmit $r_commit - if {[regexp {^0{40}$} $cmit]} { + if {$cmit eq $nullid} { set commit_abbr work set commit_type curr_commit } elseif {$cmit eq $commit} { @@ -797,19 +810,18 @@ method _read_blame {fd cur_w cur_d} { # thorough copy search; insert before the threshold set original_options [linsert $original_options 0 -C] } - if {[git-version >= 1.5.3]} { - lappend original_options -w ; # ignore indentation changes - } + lappend original_options -w ; # ignore indentation changes _exec_blame $this $w_amov @amov_data \ $original_options \ [mc "Loading original location annotations..."] } else { set current_fd {} - $status stop [mc "Annotation complete."] + $status_operation stop [mc "Annotation complete."] + set status_operation {} } } else { - $status update $blame_lines $total_lines + $status_operation update $blame_lines $total_lines } } ifdeleted { catch {close $fd} } @@ -846,9 +858,7 @@ method _fullcopyblame {} { set threshold [get_config gui.copyblamethreshold] set original_options [list -C -C "-C$threshold"] - if {[git-version >= 1.5.3]} { - lappend original_options -w ; # ignore indentation changes - } + lappend original_options -w ; # ignore indentation changes # Find the line range set pos @$::cursorX,$::cursorY @@ -975,7 +985,7 @@ method _showcommit {cur_w lno} { if {[catch {set msg $header($cmit,message)}]} { set msg {} catch { - set fd [git_read cat-file commit $cmit] + set fd [git_read [list cat-file commit $cmit]] fconfigure $fd -encoding binary -translation lf # By default commits are assumed to be in utf-8 set enc utf-8 @@ -1123,8 +1133,8 @@ method _blameparent {} { } else { set diffcmd [list diff-tree --unified=0 $cparent $cmit -- $new_path] } - if {[catch {set fd [eval git_read $diffcmd]} err]} { - $status stop [mc "Unable to display parent"] + if {[catch {set fd [git_read $diffcmd]} err]} { + $status_operation stop [mc "Unable to display parent"] error_popup [strcat [mc "Error loading diff:"] "\n\n$err"] return } @@ -1287,7 +1297,7 @@ method _open_tooltip {cur_w} { # On MacOS raising a window causes it to acquire focus. # Tk 8.5 on MacOS seems to properly support wm transient, # so we can safely counter the effect there. - if {$::have_tk85 && [is_MacOSX]} { + if {[is_MacOSX]} { update if {$w eq {}} { raise . diff --git a/lib/branch.tcl b/lib/branch.tcl index 777eeb7..39e0f2d 100644 --- a/lib/branch.tcl +++ b/lib/branch.tcl @@ -7,7 +7,8 @@ proc load_all_heads {} { set rh refs/heads set rh_len [expr {[string length $rh] + 1}] set all_heads [list] - set fd [git_read for-each-ref --format=%(refname) $rh] + set fd [git_read [list for-each-ref --format=%(refname) $rh]] + fconfigure $fd -translation binary -encoding utf-8 while {[gets $fd line] > 0} { if {!$some_heads_tracking || ![is_tracking_branch $line]} { lappend all_heads [string range $line $rh_len end] @@ -20,10 +21,11 @@ proc load_all_heads {} { proc load_all_tags {} { set all_tags [list] - set fd [git_read for-each-ref \ + set fd [git_read [list for-each-ref \ --sort=-taggerdate \ --format=%(refname) \ - refs/tags] + refs/tags]] + fconfigure $fd -translation binary -encoding utf-8 while {[gets $fd line] > 0} { if {![regsub ^refs/tags/ $line {} name]} continue lappend all_tags $name diff --git a/lib/branch_checkout.tcl b/lib/branch_checkout.tcl index d06037d..1e6b757 100644 --- a/lib/branch_checkout.tcl +++ b/lib/branch_checkout.tcl @@ -10,7 +10,6 @@ field opt_fetch 1; # refetch tracking branch if used? field opt_detach 0; # force a detached head case? constructor dialog {} { - global use_ttk NS make_dialog top w wm withdraw $w wm title $top [mc "%s (%s): Checkout Branch" [appname] [reponame]] @@ -18,16 +17,16 @@ constructor dialog {} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } - ${NS}::label $w.header -text [mc "Checkout Branch"] \ + ttk::label $w.header -text [mc "Checkout Branch"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.create -text [mc Checkout] \ + ttk::frame $w.buttons + ttk::button $w.buttons.create -text [mc Checkout] \ -default active \ -command [cb _checkout] pack $w.buttons.create -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 @@ -36,14 +35,14 @@ constructor dialog {} { $w_rev bind_listbox [cb _checkout] pack $w.rev -anchor nw -fill both -expand 1 -pady 5 -padx 5 - ${NS}::labelframe $w.options -text [mc Options] + ttk::labelframe $w.options -text [mc Options] - ${NS}::checkbutton $w.options.fetch \ + ttk::checkbutton $w.options.fetch \ -text [mc "Fetch Tracking Branch"] \ -variable @opt_fetch pack $w.options.fetch -anchor nw - ${NS}::checkbutton $w.options.detach \ + ttk::checkbutton $w.options.detach \ -text [mc "Detach From Local Branch"] \ -variable @opt_detach pack $w.options.detach -anchor nw diff --git a/lib/branch_create.tcl b/lib/branch_create.tcl index ba367d5..9fded28 100644 --- a/lib/branch_create.tcl +++ b/lib/branch_create.tcl @@ -16,7 +16,7 @@ field opt_fetch 1; # refetch tracking branch if used? field reset_ok 0; # did the user agree to reset? constructor dialog {} { - global repo_config use_ttk NS + global repo_config make_dialog top w wm withdraw $w @@ -25,39 +25,37 @@ constructor dialog {} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } - ${NS}::label $w.header -text [mc "Create New Branch"] \ + ttk::label $w.header -text [mc "Create New Branch"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.create -text [mc Create] \ + ttk::frame $w.buttons + ttk::button $w.buttons.create -text [mc Create] \ -default active \ -command [cb _create] pack $w.buttons.create -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.desc -text [mc "Branch Name"] - ${NS}::radiobutton $w.desc.name_r \ + ttk::labelframe $w.desc -text [mc "Branch Name"] + ttk::radiobutton $w.desc.name_r \ -text [mc "Name:"] \ -value user \ -variable @name_type - if {!$use_ttk} {$w.desc.name_r configure -anchor w} set w_name $w.desc.name_t - ${NS}::entry $w_name \ + ttk::entry $w_name \ -width 40 \ -textvariable @name \ -validate key \ -validatecommand [cb _validate %d %S] grid $w.desc.name_r $w_name -sticky we -padx {0 5} - ${NS}::radiobutton $w.desc.match_r \ + ttk::radiobutton $w.desc.match_r \ -text [mc "Match Tracking Branch Name"] \ -value match \ -variable @name_type - if {!$use_ttk} {$w.desc.match_r configure -anchor w} grid $w.desc.match_r -sticky we -padx {0 5} -columnspan 2 grid columnconfigure $w.desc 1 -weight 1 @@ -66,34 +64,34 @@ constructor dialog {} { set w_rev [::choose_rev::new $w.rev [mc "Starting Revision"]] pack $w.rev -anchor nw -fill both -expand 1 -pady 5 -padx 5 - ${NS}::labelframe $w.options -text [mc Options] + ttk::labelframe $w.options -text [mc Options] - ${NS}::frame $w.options.merge - ${NS}::label $w.options.merge.l -text [mc "Update Existing Branch:"] + ttk::frame $w.options.merge + ttk::label $w.options.merge.l -text [mc "Update Existing Branch:"] pack $w.options.merge.l -side left - ${NS}::radiobutton $w.options.merge.no \ + ttk::radiobutton $w.options.merge.no \ -text [mc No] \ -value none \ -variable @opt_merge pack $w.options.merge.no -side left - ${NS}::radiobutton $w.options.merge.ff \ + ttk::radiobutton $w.options.merge.ff \ -text [mc "Fast Forward Only"] \ -value ff \ -variable @opt_merge pack $w.options.merge.ff -side left - ${NS}::radiobutton $w.options.merge.reset \ + ttk::radiobutton $w.options.merge.reset \ -text [mc Reset] \ -value reset \ -variable @opt_merge pack $w.options.merge.reset -side left pack $w.options.merge -anchor nw - ${NS}::checkbutton $w.options.fetch \ + ttk::checkbutton $w.options.fetch \ -text [mc "Fetch Tracking Branch"] \ -variable @opt_fetch pack $w.options.fetch -anchor nw - ${NS}::checkbutton $w.options.checkout \ + ttk::checkbutton $w.options.checkout \ -text [mc "Checkout After Creation"] \ -variable @opt_checkout pack $w.options.checkout -anchor nw diff --git a/lib/branch_delete.tcl b/lib/branch_delete.tcl index a505163..deac74a 100644 --- a/lib/branch_delete.tcl +++ b/lib/branch_delete.tcl @@ -9,7 +9,7 @@ field w_check ; # revision picker for merge test field w_delete ; # delete button constructor dialog {} { - global current_branch use_ttk NS + global current_branch make_dialog top w wm withdraw $w @@ -18,25 +18,25 @@ constructor dialog {} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } - ${NS}::label $w.header -text [mc "Delete Local Branch"] \ + ttk::label $w.header -text [mc "Delete Local Branch"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons + ttk::frame $w.buttons set w_delete $w.buttons.delete - ${NS}::button $w_delete \ + ttk::button $w_delete \ -text [mc Delete] \ -default active \ -state disabled \ -command [cb _delete] pack $w_delete -side right - ${NS}::button $w.buttons.cancel \ + ttk::button $w.buttons.cancel \ -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.list -text [mc "Local Branches"] + ttk::labelframe $w.list -text [mc "Local Branches"] set w_heads $w.list.l slistbox $w_heads \ -height 10 \ diff --git a/lib/branch_rename.tcl b/lib/branch_rename.tcl index 3a2d79a..7a3b39d 100644 --- a/lib/branch_rename.tcl +++ b/lib/branch_rename.tcl @@ -8,7 +8,7 @@ field oldname field newname constructor dialog {} { - global current_branch use_ttk NS + global current_branch make_dialog top w wm withdraw $w @@ -20,31 +20,27 @@ constructor dialog {} { set oldname $current_branch set newname [get_config gui.newbranchtemplate] - ${NS}::label $w.header -text [mc "Rename Branch"]\ + ttk::label $w.header -text [mc "Rename Branch"]\ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.rename -text [mc Rename] \ + ttk::frame $w.buttons + ttk::button $w.buttons.rename -text [mc Rename] \ -default active \ -command [cb _rename] pack $w.buttons.rename -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::frame $w.rename - ${NS}::label $w.rename.oldname_l -text [mc "Branch:"] - if {$use_ttk} { - ttk::combobox $w.rename.oldname_m -textvariable @oldname \ - -values [load_all_heads] -state readonly - } else { - eval tk_optionMenu $w.rename.oldname_m @oldname [load_all_heads] - } + ttk::frame $w.rename + ttk::label $w.rename.oldname_l -text [mc "Branch:"] + ttk::combobox $w.rename.oldname_m -textvariable @oldname \ + -values [load_all_heads] -state readonly - ${NS}::label $w.rename.newname_l -text [mc "New Name:"] - ${NS}::entry $w.rename.newname_t \ + ttk::label $w.rename.newname_l -text [mc "New Name:"] + ttk::entry $w.rename.newname_t \ -width 40 \ -textvariable @newname \ -validate key \ diff --git a/lib/browser.tcl b/lib/browser.tcl index a982983..f53eb95 100644 --- a/lib/browser.tcl +++ b/lib/browser.tcl @@ -21,7 +21,7 @@ field browser_busy 1 field ls_buf {}; # Buffered record output from ls-tree constructor new {commit {path {}}} { - global cursor_ptr M1B use_ttk NS + global cursor_ptr M1B make_dialog top w wm withdraw $top wm title $top [mc "%s (%s): File Browser" [appname] [reponame]] @@ -35,15 +35,14 @@ constructor new {commit {path {}}} { set browser_commit $commit set browser_path "$browser_commit:[escape_path $path]" - ${NS}::label $w.path \ + ttk::label $w.path \ -textvariable @browser_path \ -anchor w \ -justify left \ -font font_uibold - if {!$use_ttk} { $w.path configure -borderwidth 1 -relief sunken} pack $w.path -anchor w -side top -fill x - ${NS}::frame $w.list + ttk::frame $w.list set w_list $w.list.l text $w_list -background white -foreground black \ -borderwidth 0 \ @@ -55,18 +54,17 @@ constructor new {commit {path {}}} { -xscrollcommand [list $w.list.sbx set] \ -yscrollcommand [list $w.list.sby set] rmsel_tag $w_list - ${NS}::scrollbar $w.list.sbx -orient h -command [list $w_list xview] - ${NS}::scrollbar $w.list.sby -orient v -command [list $w_list yview] + ttk::scrollbar $w.list.sbx -orient h -command [list $w_list xview] + ttk::scrollbar $w.list.sby -orient v -command [list $w_list yview] pack $w.list.sbx -side bottom -fill x pack $w.list.sby -side right -fill y pack $w_list -side left -fill both -expand 1 pack $w.list -side top -fill both -expand 1 - ${NS}::label $w.status \ + ttk::label $w.status \ -textvariable @browser_status \ -anchor w \ -justify left - if {!$use_ttk} { $w.status configure -borderwidth 1 -relief sunken} pack $w.status -anchor w -side bottom -fill x bind $w_list "[cb _click 0 @%x,%y];break" @@ -196,7 +194,7 @@ method _ls {tree_id {name {}}} { lappend browser_stack [list $tree_id $name] $w conf -state disabled - set fd [git_read ls-tree -z $tree_id] + set fd [git_read [list ls-tree -z $tree_id]] fconfigure $fd -blocking 0 -translation binary -encoding utf-8 fileevent $fd readable [cb _read $fd] } @@ -269,7 +267,6 @@ field w ; # widget path field w_rev ; # mega-widget to pick the initial revision constructor dialog {} { - global use_ttk NS make_dialog top w wm withdraw $top wm title $top [mc "%s (%s): Browse Branch Files" [appname] [reponame]] @@ -278,18 +275,18 @@ constructor dialog {} { wm transient $top . } - ${NS}::label $w.header \ + ttk::label $w.header \ -text [mc "Browse Branch Files"] \ -font font_uibold \ -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.browse -text [mc Browse] \ + ttk::frame $w.buttons + ttk::button $w.buttons.browse -text [mc Browse] \ -default active \ -command [cb _open] pack $w.buttons.browse -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 diff --git a/lib/checkout_op.tcl b/lib/checkout_op.tcl index a522829..987486a 100644 --- a/lib/checkout_op.tcl +++ b/lib/checkout_op.tcl @@ -151,7 +151,7 @@ method _finish_fetch {ok} { } method _update_ref {} { - global null_sha1 current_branch repo_config + global nullid current_branch repo_config set ref $new_ref set new $new_hash @@ -177,7 +177,7 @@ method _update_ref {} { } set reflog_msg "branch: Created from $new_expr" - set cur $null_sha1 + set cur $nullid if {($repo_config(branch.autosetupmerge) eq {true} || $repo_config(branch.autosetupmerge) eq {always}) @@ -304,12 +304,12 @@ The rescan will be automatically started now. _readtree $this } else { ui_status [mc "Refreshing file status..."] - set fd [git_read update-index \ + set fd [git_read [list update-index \ -q \ --unmerged \ --ignore-missing \ --refresh \ - ] + ]] fconfigure $fd -blocking 0 -translation binary fileevent $fd readable [cb _refresh_wait $fd] } @@ -341,39 +341,41 @@ method _readtree {} { global HEAD set readtree_d {} - $::main_status start \ + set status_bar_operation [$::main_status start \ [mc "Updating working directory to '%s'..." [_name $this]] \ - [mc "files checked out"] + [mc "files checked out"]] - set fd [git_read --stderr read-tree \ + set fd [git_read [list read-tree \ -m \ -u \ -v \ --exclude-per-directory=.gitignore \ $HEAD \ $new_hash \ - ] + ] \ + [list 2>@1]] fconfigure $fd -blocking 0 -translation binary - fileevent $fd readable [cb _readtree_wait $fd] + fileevent $fd readable [cb _readtree_wait $fd $status_bar_operation] } -method _readtree_wait {fd} { +method _readtree_wait {fd status_bar_operation} { global current_branch set buf [read $fd] - $::main_status update_meter $buf + $status_bar_operation update_meter $buf append readtree_d $buf fconfigure $fd -blocking 1 if {![eof $fd]} { fconfigure $fd -blocking 0 + $status_bar_operation stop return } if {[catch {close $fd}]} { set err $readtree_d regsub {^fatal: } $err {} err - $::main_status stop [mc "Aborted checkout of '%s' (file level merging is required)." [_name $this]] + $status_bar_operation stop [mc "Aborted checkout of '%s' (file level merging is required)." [_name $this]] warn_popup [strcat [mc "File level merge required."] " $err @@ -384,7 +386,7 @@ $err return } - $::main_status stop + $status_bar_operation stop _after_readtree $this } @@ -509,18 +511,8 @@ method _update_repo_state {} { delete_this } -git-version proc _detach_HEAD {log new} { - >= 1.5.3 { - git update-ref --no-deref -m $log HEAD $new - } - default { - set p [gitdir HEAD] - file delete $p - set fd [open $p w] - fconfigure $fd -translation lf -encoding utf-8 - puts $fd $new - close $fd - } +proc _detach_HEAD {log new} { + git update-ref --no-deref -m $log HEAD $new } method _confirm_reset {cur} { @@ -581,7 +573,7 @@ method _confirm_reset {cur} { pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - set fd [git_read rev-list --pretty=oneline $cur ^$new_hash] + set fd [git_read [list rev-list --pretty=oneline $cur ^$new_hash]] while {[gets $fd line] > 0} { set abbr [string range $line 0 7] set subj [string range $line 41 end] diff --git a/lib/choose_font.tcl b/lib/choose_font.tcl index ebe50bd..a90908a 100644 --- a/lib/choose_font.tcl +++ b/lib/choose_font.tcl @@ -17,7 +17,6 @@ variable all_families [list] ; # All fonts known to Tk constructor pick {path title a_family a_size} { variable all_families - global use_ttk NS set v_family $a_family set v_size $a_size @@ -33,25 +32,25 @@ constructor pick {path title a_family a_size} { wm title $top "[appname] ([reponame]): $title" wm geometry $top "+[winfo rootx $path]+[winfo rooty $path]" - ${NS}::label $w.header -text $title -font font_uibold -anchor center + ttk::label $w.header -text $title -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.select \ + ttk::frame $w.buttons + ttk::button $w.buttons.select \ -text [mc Select] \ -default active \ -command [cb _select] - ${NS}::button $w.buttons.cancel \ + ttk::button $w.buttons.cancel \ -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.select -side right pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::frame $w.inner + ttk::frame $w.inner - ${NS}::frame $w.inner.family - ${NS}::label $w.inner.family.l \ + ttk::frame $w.inner.family + ttk::label $w.inner.family.l \ -text [mc "Font Family"] \ -anchor w set w_family $w.inner.family.v @@ -66,13 +65,13 @@ constructor pick {path title a_family a_size} { -height 10 \ -yscrollcommand [list $w.inner.family.sby set] rmsel_tag $w_family - ${NS}::scrollbar $w.inner.family.sby -command [list $w_family yview] + ttk::scrollbar $w.inner.family.sby -command [list $w_family yview] pack $w.inner.family.l -side top -fill x pack $w.inner.family.sby -side right -fill y pack $w_family -fill both -expand 1 - ${NS}::frame $w.inner.size - ${NS}::label $w.inner.size.l \ + ttk::frame $w.inner.size + ttk::label $w.inner.size.l \ -text [mc "Font Size"] \ -anchor w tspinbox $w.inner.size.v \ @@ -88,8 +87,8 @@ constructor pick {path title a_family a_size} { grid columnconfigure $w.inner 0 -weight 1 pack $w.inner -fill both -expand 1 -padx 5 -pady 5 - ${NS}::frame $w.example - ${NS}::label $w.example.l \ + ttk::frame $w.example + ttk::label $w.example.l \ -text [mc "Font Example"] \ -anchor w set w_example $w.example.t diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl index 80f5a59..7e1462a 100644 --- a/lib/choose_repository.tcl +++ b/lib/choose_repository.tcl @@ -9,11 +9,13 @@ field w_body ; # Widget holding the center content field w_next ; # Next button field w_quit ; # Quit button field o_cons ; # Console object (if active) + field w_types ; # List of type buttons in clone field w_recentlist ; # Listbox containing recent repositories field w_localpath ; # Entry widget bound to local_path field done 0 ; # Finished picking the repository? +field clone_ok false ; # clone succeeeded field local_path {} ; # Where this repository is locally field origin_url {} ; # Where we are cloning from field origin_name origin ; # What we shall call 'origin' @@ -23,7 +25,7 @@ field readtree_err ; # Error output from read-tree (if any) field sorted_recent ; # recent repositories (sorted) constructor pick {} { - global M1T M1B use_ttk NS + global M1T M1B if {[set maxrecent [get_config gui.maxrecentrepo]] eq {}} { set maxrecent 10 @@ -76,7 +78,7 @@ constructor pick {} { set w_body $w.body set opts $w_body.options - ${NS}::frame $w_body + ttk::frame $w_body text $opts \ -cursor $::cursor_ptr \ -relief flat \ @@ -146,8 +148,8 @@ constructor pick {} { set lenrecent $maxrecent } - ${NS}::label $w_body.space - ${NS}::label $w_body.recentlabel \ + ttk::label $w_body.space + ttk::label $w_body.recentlabel \ -anchor w \ -text [mc "Open Recent Repository:"] set w_recentlist $w_body.recentlist @@ -162,9 +164,6 @@ constructor pick {} { -foreground blue \ -underline 1 set home $::env(HOME) - if {[is_Cygwin]} { - set home [exec cygpath --windows --absolute $home] - } set home "[file normalize $home]/" set hlen [string length $home] foreach p $sorted_recent { @@ -190,10 +189,10 @@ constructor pick {} { } pack $w_body -fill x -padx 10 -pady 10 - ${NS}::frame $w.buttons + ttk::frame $w.buttons set w_next $w.buttons.next set w_quit $w.buttons.quit - ${NS}::button $w_quit \ + ttk::button $w_quit \ -text [mc "Quit"] \ -command exit pack $w_quit -side right -padx 5 @@ -294,10 +293,9 @@ method _open_recent_path {p} { } method _next {action} { - global NS destroy $w_body if {![winfo exists $w_next]} { - ${NS}::button $w_next -default active + ttk::button $w_next -default active set pos -before if {[tk windowingsystem] eq "win32"} { set pos -after } pack $w_next -side right -padx 5 $pos $w_quit @@ -314,7 +312,7 @@ method _write_local_path {args} { } method _git_init {} { - if {[catch {file mkdir $local_path} err]} { + if {[catch {git init $local_path} err]} { error_popup [strcat \ [mc "Failed to create repository %s:" $local_path] \ "\n\n$err"] @@ -328,13 +326,6 @@ method _git_init {} { return 0 } - if {[catch {git init} err]} { - error_popup [strcat \ - [mc "Failed to create repository %s:" $local_path] \ - "\n\n$err"] - return 0 - } - _append_recentrepos [pwd] set ::_gitdir .git set ::_prefix {} @@ -345,57 +336,10 @@ proc _is_git {path {outdir_var ""}} { if {$outdir_var ne ""} { upvar 1 $outdir_var outdir } - if {[file isfile $path]} { - set fp [open $path r] - gets $fp line - close $fp - if {[regexp "^gitdir: (.+)$" $line line link_target]} { - set path [file join [file dirname $path] $link_target] - set path [file normalize $path] - } - } - - if {[file exists [file join $path HEAD]] - && [file exists [file join $path objects]] - && [file exists [file join $path config]]} { - set outdir $path - return 1 - } - if {[is_Cygwin]} { - if {[file exists [file join $path HEAD]] - && [file exists [file join $path objects.lnk]] - && [file exists [file join $path config.lnk]]} { - set outdir $path - return 1 - } - } - return 0 -} - -proc _objdir {path} { - set objdir [file join $path .git objects] - if {[file isdirectory $objdir]} { - return $objdir - } - - set objdir [file join $path objects] - if {[file isdirectory $objdir]} { - return $objdir - } - - if {[is_Cygwin]} { - set objdir [file join $path .git objects.lnk] - if {[file isfile $objdir]} { - return [win32_read_lnk $objdir] - } - - set objdir [file join $path objects.lnk] - if {[file isfile $objdir]} { - return [win32_read_lnk $objdir] - } + if {[catch {set outdir [git rev-parse --resolve-git-dir $path]}]} { + return 0 } - - return {} + return 1 } ###################################################################### @@ -403,25 +347,24 @@ proc _objdir {path} { ## Create New Repository method _do_new {} { - global use_ttk NS $w_next conf \ -state disabled \ -command [cb _do_new2] \ -text [mc "Create"] - ${NS}::frame $w_body - ${NS}::label $w_body.h \ + ttk::frame $w_body + ttk::label $w_body.h \ -font font_uibold -anchor center \ -text [mc "Create New Repository"] pack $w_body.h -side top -fill x -pady 10 pack $w_body -fill x -padx 10 - ${NS}::frame $w_body.where - ${NS}::label $w_body.where.l -text [mc "Directory:"] - ${NS}::entry $w_body.where.t \ + ttk::frame $w_body.where + ttk::label $w_body.where.l -text [mc "Directory:"] + ttk::entry $w_body.where.t \ -textvariable @local_path \ -width 50 - ${NS}::button $w_body.where.b \ + ttk::button $w_body.where.b \ -text [mc "Browse"] \ -command [cb _new_local_path] set w_localpath $w_body.where.t @@ -487,56 +430,55 @@ proc _new_ok {p} { ## Clone Existing Repository method _do_clone {} { - global use_ttk NS $w_next conf \ -state disabled \ -command [cb _do_clone2] \ -text [mc "Clone"] - ${NS}::frame $w_body - ${NS}::label $w_body.h \ + ttk::frame $w_body + ttk::label $w_body.h \ -font font_uibold -anchor center \ -text [mc "Clone Existing Repository"] pack $w_body.h -side top -fill x -pady 10 pack $w_body -fill x -padx 10 set args $w_body.args - ${NS}::frame $w_body.args + ttk::frame $w_body.args pack $args -fill both - ${NS}::label $args.origin_l -text [mc "Source Location:"] - ${NS}::entry $args.origin_t \ + ttk::label $args.origin_l -text [mc "Source Location:"] + ttk::entry $args.origin_t \ -textvariable @origin_url \ -width 50 - ${NS}::button $args.origin_b \ + ttk::button $args.origin_b \ -text [mc "Browse"] \ -command [cb _open_origin] grid $args.origin_l $args.origin_t $args.origin_b -sticky ew - ${NS}::label $args.where_l -text [mc "Target Directory:"] - ${NS}::entry $args.where_t \ + ttk::label $args.where_l -text [mc "Target Directory:"] + ttk::entry $args.where_t \ -textvariable @local_path \ -width 50 - ${NS}::button $args.where_b \ + ttk::button $args.where_b \ -text [mc "Browse"] \ -command [cb _new_local_path] grid $args.where_l $args.where_t $args.where_b -sticky ew set w_localpath $args.where_t - ${NS}::label $args.type_l -text [mc "Clone Type:"] - ${NS}::frame $args.type_f + ttk::label $args.type_l -text [mc "Clone Type:"] + ttk::frame $args.type_f set w_types [list] - lappend w_types [${NS}::radiobutton $args.type_f.hardlink \ + lappend w_types [ttk::radiobutton $args.type_f.hardlink \ -state disabled \ -text [mc "Standard (Fast, Semi-Redundant, Hardlinks)"] \ -variable @clone_type \ -value hardlink] - lappend w_types [${NS}::radiobutton $args.type_f.full \ + lappend w_types [ttk::radiobutton $args.type_f.full \ -state disabled \ -text [mc "Full Copy (Slower, Redundant Backup)"] \ -variable @clone_type \ -value full] - lappend w_types [${NS}::radiobutton $args.type_f.shared \ + lappend w_types [ttk::radiobutton $args.type_f.shared \ -state disabled \ -text [mc "Shared (Fastest, Not Recommended, No Backup)"] \ -variable @clone_type \ @@ -544,7 +486,7 @@ method _do_clone {} { foreach r $w_types { pack $r -anchor w } - ${NS}::checkbutton $args.type_f.recursive \ + ttk::checkbutton $args.type_f.recursive \ -text [mc "Recursively clone submodules too"] \ -variable @recursive \ -onvalue true -offvalue false @@ -612,6 +554,25 @@ method _update_clone {args} { method _do_clone2 {} { if {[file isdirectory $origin_url]} { set origin_url [file normalize $origin_url] + if {$clone_type eq {hardlink}} { + # cannot use hardlinks if this is a linked worktree (.gitfile or git-new-workdir) + if {[git -C $origin_url rev-parse --is-inside-work-tree] == {true}} { + set islink 0 + set dotgit [file join $origin_url .git] + if {[file isfile $dotgit]} { + set islink 1 + } else { + set objdir [file join $dotgit objects] + if {[file exists $objdir] && [file type $objdir] == {link}} { + set islink 1 + } + } + if {$islink} { + info_popup [mc "Hardlinks are unavailable. Falling back to copying."] + set clone_type full + } + } + } } if {$clone_type eq {hardlink} && ![file isdirectory $origin_url]} { @@ -623,457 +584,93 @@ method _do_clone2 {} { return } - if {$clone_type eq {hardlink} || $clone_type eq {shared}} { - set objdir [_objdir $origin_url] - if {$objdir eq {}} { - error_popup [mc "Not a Git repository: %s" [file tail $origin_url]] - return - } - } - set giturl $origin_url - if {[is_Cygwin] && [file isdirectory $giturl]} { - set giturl [exec cygpath --unix --absolute $giturl] - if {$clone_type eq {shared}} { - set objdir [exec cygpath --unix --absolute $objdir] - } - } if {[file exists $local_path]} { error_popup [mc "Location %s already exists." $local_path] return } - if {![_git_init $this]} return - set local_path [pwd] - - if {[catch { - git config remote.$origin_name.url $giturl - git config remote.$origin_name.fetch +refs/heads/*:refs/remotes/$origin_name/* - } err]} { - error_popup [strcat [mc "Failed to configure origin"] "\n\n$err"] - return + set clone_options {--progress} + if {$recursive} { + append clone_options { --recurse-submodules} } destroy $w_body $w_next switch -exact -- $clone_type { - hardlink { - set o_cons [status_bar::two_line $w_body] - pack $w_body -fill x -padx 10 -pady 10 - - $o_cons start \ - [mc "Counting objects"] \ - [mc "buckets"] - update - - if {[file exists [file join $objdir info alternates]]} { - set pwd [pwd] - if {[catch { - file mkdir [gitdir objects info] - set f_in [open [file join $objdir info alternates] r] - set f_cp [open [gitdir objects info alternates] w] - fconfigure $f_in -translation binary -encoding binary - fconfigure $f_cp -translation binary -encoding binary - cd $objdir - while {[gets $f_in line] >= 0} { - if {[is_Cygwin]} { - puts $f_cp [exec cygpath --unix --absolute $line] - } else { - puts $f_cp [file normalize $line] - } - } - close $f_in - close $f_cp - cd $pwd - } err]} { - catch {cd $pwd} - _clone_failed $this [mc "Unable to copy objects/info/alternates: %s" $err] - return - } - } - - set tolink [list] - set buckets [glob \ - -tails \ - -nocomplain \ - -directory [file join $objdir] ??] - set bcnt [expr {[llength $buckets] + 2}] - set bcur 1 - $o_cons update $bcur $bcnt - update - - file mkdir [file join .git objects pack] - foreach i [glob -tails -nocomplain \ - -directory [file join $objdir pack] *] { - lappend tolink [file join pack $i] - } - $o_cons update [incr bcur] $bcnt - update - - foreach i $buckets { - file mkdir [file join .git objects $i] - foreach j [glob -tails -nocomplain \ - -directory [file join $objdir $i] *] { - lappend tolink [file join $i $j] - } - $o_cons update [incr bcur] $bcnt - update + full { + append clone_options { --no-hardlinks --no-local} } - $o_cons stop - - if {$tolink eq {}} { - info_popup [strcat \ - [mc "Nothing to clone from %s." $origin_url] \ - "\n" \ - [mc "The 'master' branch has not been initialized."] \ - ] - destroy $w_body - set done 1 - return + shared { + append clone_options { --shared} } - - set i [lindex $tolink 0] - if {[catch { - file link -hard \ - [file join .git objects $i] \ - [file join $objdir $i] - } err]} { - info_popup [mc "Hardlinks are unavailable. Falling back to copying."] - set i [_copy_files $this $objdir $tolink] - } else { - set i [_link_files $this $objdir [lrange $tolink 1 end]] - } - if {!$i} return - - destroy $w_body } - full { + + if {[catch { set o_cons [console::embed \ $w_body \ [mc "Cloning from %s" $origin_url]] pack $w_body -fill both -expand 1 -padx 10 $o_cons exec \ - [list git fetch --no-tags -k $origin_name] \ - [cb _do_clone_tags] - } - shared { - set fd [open [gitdir objects info alternates] w] - fconfigure $fd -translation binary - puts $fd $objdir - close $fd - } - } - - if {$clone_type eq {hardlink} || $clone_type eq {shared}} { - if {![_clone_refs $this]} return - set pwd [pwd] - if {[catch { - cd $origin_url - set HEAD [git rev-parse --verify HEAD^0] - } err]} { - _clone_failed $this [mc "Not a Git repository: %s" [file tail $origin_url]] - return 0 - } - cd $pwd - _do_clone_checkout $this $HEAD - } -} - -method _copy_files {objdir tocopy} { - $o_cons start \ - [mc "Copying objects"] \ - [mc "KiB"] - set tot 0 - set cmp 0 - foreach p $tocopy { - incr tot [file size [file join $objdir $p]] - } - foreach p $tocopy { - if {[catch { - set f_in [open [file join $objdir $p] r] - set f_cp [open [file join .git objects $p] w] - fconfigure $f_in -translation binary -encoding binary - fconfigure $f_cp -translation binary -encoding binary - - while {![eof $f_in]} { - incr cmp [fcopy $f_in $f_cp -size 16384] - $o_cons update \ - [expr {$cmp / 1024}] \ - [expr {$tot / 1024}] - update - } - - close $f_in - close $f_cp - } err]} { - _clone_failed $this [mc "Unable to copy object: %s" $err] - return 0 - } - } - return 1 -} - -method _link_files {objdir tolink} { - set total [llength $tolink] - $o_cons start \ - [mc "Linking objects"] \ - [mc "objects"] - for {set i 0} {$i < $total} {} { - set p [lindex $tolink $i] - if {[catch { - file link -hard \ - [file join .git objects $p] \ - [file join $objdir $p] - } err]} { - _clone_failed $this [mc "Unable to hardlink object: %s" $err] - return 0 - } - - incr i - if {$i % 5 == 0} { - $o_cons update $i $total - update - } - } - return 1 -} - -method _clone_refs {} { - set pwd [pwd] - if {[catch {cd $origin_url} err]} { - error_popup [mc "Not a Git repository: %s" [file tail $origin_url]] - return 0 - } - set fd_in [git_read for-each-ref \ - --tcl \ - {--format=list %(refname) %(objectname) %(*objectname)}] - cd $pwd - - set fd [open [gitdir packed-refs] w] - fconfigure $fd -translation binary - puts $fd "# pack-refs with: peeled" - while {[gets $fd_in line] >= 0} { - set line [eval $line] - set refn [lindex $line 0] - set robj [lindex $line 1] - set tobj [lindex $line 2] - - if {[regsub ^refs/heads/ $refn \ - "refs/remotes/$origin_name/" refn]} { - puts $fd "$robj $refn" - } elseif {[string match refs/tags/* $refn]} { - puts $fd "$robj $refn" - if {$tobj ne {}} { - puts $fd "^$tobj" - } - } - } - close $fd_in - close $fd - return 1 -} - -method _do_clone_tags {ok} { - if {$ok} { - $o_cons exec \ - [list git fetch --tags -k $origin_name] \ - [cb _do_clone_HEAD] - } else { - $o_cons done $ok - _clone_failed $this [mc "Cannot fetch branches and objects. See console output for details."] + [list git clone {*}$clone_options $origin_url $local_path] \ + [cb _do_clone2_done] + } err]} { + error_popup [strcat [mc "Clone failed."] "\n" $err] + return } -} -method _do_clone_HEAD {ok} { - if {$ok} { - $o_cons exec \ - [list git fetch $origin_name HEAD] \ - [cb _do_clone_full_end] - } else { - $o_cons done $ok - _clone_failed $this [mc "Cannot fetch tags. See console output for details."] + tkwait variable @done + if {!$clone_ok} { + error_popup [mc "Clone failed."] + return } } -method _do_clone_full_end {ok} { +method _do_clone2_done {ok} { $o_cons done $ok - if {$ok} { - destroy $w_body - - set HEAD {} - if {[file exists [gitdir FETCH_HEAD]]} { - set fd [open [gitdir FETCH_HEAD] r] - while {[gets $fd line] >= 0} { - if {[regexp "^(.{40})\t\t" $line line HEAD]} { - break - } - } - close $fd - } - - catch {git pack-refs} - _do_clone_checkout $this $HEAD - } else { - _clone_failed $this [mc "Cannot determine HEAD. See console output for details."] - } -} - -method _clone_failed {{why {}}} { - if {[catch {file delete -force $local_path} err]} { - set why [strcat \ - $why \ - "\n\n" \ - [mc "Unable to cleanup %s" $local_path] \ - "\n\n" \ - $err] - } - if {$why ne {}} { - update - error_popup [strcat [mc "Clone failed."] "\n" $why] - } -} - -method _do_clone_checkout {HEAD} { - if {$HEAD eq {}} { - info_popup [strcat \ - [mc "No default branch obtained."] \ - "\n" \ - [mc "The 'master' branch has not been initialized."] \ - ] - set done 1 - return - } - if {[catch { - git update-ref HEAD $HEAD^0 + if {[catch { + cd $local_path + set ::_gitdir .git + set ::_prefix {} + _append_recentrepos [pwd] } err]} { - info_popup [strcat \ - [mc "Cannot resolve %s as a commit." $HEAD^0] \ - "\n $err" \ - "\n" \ - [mc "The 'master' branch has not been initialized."] \ - ] - set done 1 - return - } - - set o_cons [status_bar::two_line $w_body] - pack $w_body -fill x -padx 10 -pady 10 - $o_cons start \ - [mc "Creating working directory"] \ - [mc "files"] - - set readtree_err {} - set fd [git_read --stderr read-tree \ - -m \ - -u \ - -v \ - HEAD \ - HEAD \ - ] - fconfigure $fd -blocking 0 -translation binary - fileevent $fd readable [cb _readtree_wait $fd] -} - -method _do_validate_submodule_cloning {ok} { - if {$ok} { - $o_cons done $ok - set done 1 - } else { - _clone_failed $this [mc "Cannot clone submodules."] - } -} - -method _do_clone_submodules {} { - if {$recursive eq {true}} { - destroy $w_body - set o_cons [console::embed \ - $w_body \ - [mc "Cloning submodules"]] - pack $w_body -fill both -expand 1 -padx 10 - $o_cons exec \ - [list git submodule update --init --recursive] \ - [cb _do_validate_submodule_cloning] - } else { - set done 1 - } -} - -method _readtree_wait {fd} { - set buf [read $fd] - $o_cons update_meter $buf - append readtree_err $buf - - fconfigure $fd -blocking 1 - if {![eof $fd]} { - fconfigure $fd -blocking 0 - return - } - - if {[catch {close $fd}]} { - set err $readtree_err - regsub {^fatal: } $err {} err - error_popup [strcat \ - [mc "Initial file checkout failed."] \ - "\n\n$err"] - return + set ok 0 + } } - - # -- Run the post-checkout hook. - # - set fd_ph [githook_read post-checkout [string repeat 0 40] \ - [git rev-parse HEAD] 1] - if {$fd_ph ne {}} { - global pch_error - set pch_error {} - fconfigure $fd_ph -blocking 0 -translation binary -eofchar {} - fileevent $fd_ph readable [cb _postcheckout_wait $fd_ph] - } else { - _do_clone_submodules $this + if {!$ok} { + set ::_gitdir {} + set ::_prefix {} } + set clone_ok $ok + set done 1 } -method _postcheckout_wait {fd_ph} { - global pch_error - - append pch_error [read $fd_ph] - fconfigure $fd_ph -blocking 1 - if {[eof $fd_ph]} { - if {[catch {close $fd_ph}]} { - hook_failed_popup post-checkout $pch_error 0 - } - unset pch_error - _do_clone_submodules $this - return - } - fconfigure $fd_ph -blocking 0 -} ###################################################################### ## ## Open Existing Repository method _do_open {} { - global NS $w_next conf \ -state disabled \ -command [cb _do_open2] \ -text [mc "Open"] - ${NS}::frame $w_body - ${NS}::label $w_body.h \ + ttk::frame $w_body + ttk::label $w_body.h \ -font font_uibold -anchor center \ -text [mc "Open Existing Repository"] pack $w_body.h -side top -fill x -pady 10 pack $w_body -fill x -padx 10 - ${NS}::frame $w_body.where - ${NS}::label $w_body.where.l -text [mc "Repository:"] - ${NS}::entry $w_body.where.t \ + ttk::frame $w_body.where + ttk::label $w_body.where.l -text [mc "Repository:"] + ttk::entry $w_body.where.t \ -textvariable @local_path \ -width 50 - ${NS}::button $w_body.where.b \ + ttk::button $w_body.where.b \ -text [mc "Browse"] \ -command [cb _open_local_path] diff --git a/lib/choose_rev.tcl b/lib/choose_rev.tcl index 6dae793..7a9e3c8 100644 --- a/lib/choose_rev.tcl +++ b/lib/choose_rev.tcl @@ -32,7 +32,7 @@ proc new_unmerged {path {title {}}} { } constructor _new {path unmerged_only title} { - global current_branch is_detached use_ttk NS + global current_branch is_detached if {![info exists ::all_remotes]} { load_all_remotes @@ -41,65 +41,60 @@ constructor _new {path unmerged_only title} { set w $path if {$title ne {}} { - ${NS}::labelframe $w -text $title + ttk::labelframe $w -text $title } else { - ${NS}::frame $w + ttk::frame $w } bind $w [cb _delete %W] if {$is_detached} { - ${NS}::radiobutton $w.detachedhead_r \ + ttk::radiobutton $w.detachedhead_r \ -text [mc "This Detached Checkout"] \ -value HEAD \ -variable @revtype - if {!$use_ttk} {$w.detachedhead_r configure -anchor w} grid $w.detachedhead_r -sticky we -padx {0 5} -columnspan 2 } - ${NS}::radiobutton $w.expr_r \ + ttk::radiobutton $w.expr_r \ -text [mc "Revision Expression:"] \ -value expr \ -variable @revtype - ${NS}::entry $w.expr_t \ + ttk::entry $w.expr_t \ -width 50 \ -textvariable @c_expr \ -validate key \ -validatecommand [cb _validate %d %S] grid $w.expr_r $w.expr_t -sticky we -padx {0 5} - ${NS}::frame $w.types - ${NS}::radiobutton $w.types.head_r \ + ttk::frame $w.types + ttk::radiobutton $w.types.head_r \ -text [mc "Local Branch"] \ -value head \ -variable @revtype pack $w.types.head_r -side left - ${NS}::radiobutton $w.types.trck_r \ + ttk::radiobutton $w.types.trck_r \ -text [mc "Tracking Branch"] \ -value trck \ -variable @revtype pack $w.types.trck_r -side left - ${NS}::radiobutton $w.types.tag_r \ + ttk::radiobutton $w.types.tag_r \ -text [mc "Tag"] \ -value tag \ -variable @revtype pack $w.types.tag_r -side left set w_filter $w.types.filter - ${NS}::entry $w_filter \ + ttk::entry $w_filter \ -width 12 \ -textvariable @filter \ -validate key \ -validatecommand [cb _filter %P] pack $w_filter -side right - pack [${NS}::label $w.types.filter_icon \ + pack [ttk::label $w.types.filter_icon \ -image ::choose_rev::img_find \ ] -side right grid $w.types -sticky we -padx {0 5} -columnspan 2 - if {$use_ttk} { - ttk::frame $w.list -style SListbox.TFrame -padding 2 - } else { - frame $w.list - } + ttk::frame $w.list -style SListbox.TFrame -padding 2 set w_list $w.list.l listbox $w_list \ -font font_diff \ @@ -109,9 +104,7 @@ constructor _new {path unmerged_only title} { -exportselection false \ -xscrollcommand [cb _sb_set $w.list.sbx h] \ -yscrollcommand [cb _sb_set $w.list.sby v] - if {$use_ttk} { - $w_list configure -relief flat -highlightthickness 0 -borderwidth 0 - } + $w_list configure -relief flat -highlightthickness 0 -borderwidth 0 pack $w_list -fill both -expand 1 grid $w.list -sticky nswe -padx {20 5} -columnspan 2 bind $w_list [cb _show_tooltip @%x,%y] @@ -146,14 +139,14 @@ constructor _new {path unmerged_only title} { append fmt { %(*subject)} append fmt {]} set all_refn [list] - set fr_fd [git_read for-each-ref \ + set fr_fd [git_read [list for-each-ref \ --tcl \ --sort=-taggerdate \ --format=$fmt \ refs/heads \ refs/remotes \ refs/tags \ - ] + ]] fconfigure $fr_fd -translation lf -encoding utf-8 while {[gets $fr_fd line] > 0} { set line [eval $line] @@ -176,7 +169,7 @@ constructor _new {path unmerged_only title} { close $fr_fd if {$unmerged_only} { - set fr_fd [git_read rev-list --all ^$::HEAD] + set fr_fd [git_read [list rev-list --all ^$::HEAD]] while {[gets $fr_fd sha1] > 0} { if {[catch {set rlst $cmt_refn($sha1)}]} continue foreach refn $rlst { @@ -238,12 +231,10 @@ constructor _new {path unmerged_only title} { } method none {text} { - global NS use_ttk if {![winfo exists $w.none_r]} { - ${NS}::radiobutton $w.none_r \ + ttk::radiobutton $w.none_r \ -value none \ -variable @revtype - if {!$use_ttk} {$w.none_r configure -anchor w} grid $w.none_r -sticky we -padx {0 5} -columnspan 2 } $w.none_r configure -text $text @@ -429,7 +420,6 @@ method _delete {current} { } method _sb_set {sb orient first last} { - global NS set old_focus [focus -lastfor $w] if {$first == 0 && $last == 1} { @@ -445,10 +435,10 @@ method _sb_set {sb orient first last} { if {![winfo exists $sb]} { if {$orient eq {h}} { - ${NS}::scrollbar $sb -orient h -command [list $w_list xview] + ttk::scrollbar $sb -orient h -command [list $w_list xview] pack $sb -fill x -side bottom -before $w_list } else { - ${NS}::scrollbar $sb -orient v -command [list $w_list yview] + ttk::scrollbar $sb -orient v -command [list $w_list yview] pack $sb -fill y -side right -before $w_list } if {$old_focus ne {}} { @@ -579,7 +569,7 @@ method _reflog_last {name} { set last {} if {[catch {set last [file mtime [gitdir $name]]}] - && ![catch {set g [open [gitdir logs $name] r]}]} { + && ![catch {set g [safe_open_file [gitdir logs $name] r]}]} { fconfigure $g -translation binary while {[gets $g line] >= 0} { if {[regexp {> ([1-9][0-9]*) } $line line when]} { diff --git a/lib/chord.tcl b/lib/chord.tcl new file mode 100644 index 0000000..e21e7d3 --- /dev/null +++ b/lib/chord.tcl @@ -0,0 +1,158 @@ +# Simple Chord for Tcl +# +# A "chord" is a method with more than one entrypoint and only one body, such +# that the body runs only once all the entrypoints have been called by +# different asynchronous tasks. In this implementation, the chord is defined +# dynamically for each invocation. A SimpleChord object is created, supplying +# body script to be run when the chord is completed, and then one or more notes +# are added to the chord. Each note can be called like a proc, and returns +# immediately if the chord isn't yet complete. When the last remaining note is +# called, the body runs before the note returns. +# +# The SimpleChord class has a constructor that takes the body script, and a +# method add_note that returns a note object. Since the body script does not +# run in the context of the procedure that defined it, a mechanism is provided +# for injecting variables into the chord for use by the body script. The +# activation of a note is idempotent; multiple calls have the same effect as +# a simple call. +# +# If you are invoking asynchronous operations with chord notes as completion +# callbacks, and there is a possibility that earlier operations could complete +# before later ones are started, it is a good practice to create a "common" +# note on the chord that prevents it from being complete until you're certain +# you've added all the notes you need. +# +# Example: +# +# # Turn off the UI while running a couple of async operations. +# lock_ui +# +# set chord [SimpleChord::new { +# unlock_ui +# # Note: $notice here is not referenced in the calling scope +# if {$notice} { info_popup $notice } +# } +# +# # Configure a note to keep the chord from completing until +# # all operations have been initiated. +# set common_note [$chord add_note] +# +# # Activate notes in 'after' callbacks to other operations +# set newnote [$chord add_note] +# async_operation $args [list $newnote activate] +# +# # Communicate with the chord body +# if {$condition} { +# # This sets $notice in the same context that the chord body runs in. +# $chord eval { set notice "Something interesting" } +# } +# +# # Activate the common note, making the chord eligible to complete +# $common_note activate +# +# At this point, the chord will complete at some unknown point in the future. +# The common note might have been the first note activated, or the async +# operations might have completed synchronously and the common note is the +# last one, completing the chord before this code finishes, or anything in +# between. The purpose of the chord is to not have to worry about the order. + +# SimpleChord class: +# Represents a procedure that conceptually has multiple entrypoints that must +# all be called before the procedure executes. Each entrypoint is called a +# "note". The chord is only "completed" when all the notes are "activated". +class SimpleChord { + field notes + field body + field is_completed + field eval_ns + + # Constructor: + # set chord [SimpleChord::new {body}] + # Creates a new chord object with the specified body script. The + # body script is evaluated at most once, when a note is activated + # and the chord has no other non-activated notes. + constructor new {i_body} { + set notes [list] + set body $i_body + set is_completed 0 + set eval_ns "[namespace qualifiers $this]::eval" + return $this + } + + # Method: + # $chord eval {script} + # Runs the specified script in the same context (namespace) in which + # the chord body will be evaluated. This can be used to set variable + # values for the chord body to use. + method eval {script} { + namespace eval $eval_ns $script + } + + # Method: + # set note [$chord add_note] + # Adds a new note to the chord, an instance of ChordNote. Raises an + # error if the chord is already completed, otherwise the chord is + # updated so that the new note must also be activated before the + # body is evaluated. + method add_note {} { + if {$is_completed} { error "Cannot add a note to a completed chord" } + + set note [ChordNote::new $this] + + lappend notes $note + + return $note + } + + # This method is for internal use only and is intentionally undocumented. + method notify_note_activation {} { + if {!$is_completed} { + foreach note $notes { + if {![$note is_activated]} { return } + } + + set is_completed 1 + + namespace eval $eval_ns $body + delete_this + } + } +} + +# ChordNote class: +# Represents a note within a chord, providing a way to activate it. When the +# final note of the chord is activated (this can be any note in the chord, +# with all other notes already previously activated in any order), the chord's +# body is evaluated. +class ChordNote { + field chord + field is_activated + + # Constructor: + # Instances of ChordNote are created internally by calling add_note on + # SimpleChord objects. + constructor new {c} { + set chord $c + set is_activated 0 + return $this + } + + # Method: + # [$note is_activated] + # Returns true if this note has already been activated. + method is_activated {} { + return $is_activated + } + + # Method: + # $note activate + # Activates the note, if it has not already been activated, and + # completes the chord if there are no other notes awaiting + # activation. Subsequent calls will have no further effect. + method activate {} { + if {!$is_activated} { + set is_activated 1 + $chord notify_note_activation + } + } +} diff --git a/lib/class.tcl b/lib/class.tcl index f08506f..0b1e671 100644 --- a/lib/class.tcl +++ b/lib/class.tcl @@ -136,7 +136,6 @@ proc delete_this {{t {}}} { proc make_dialog {t w args} { upvar $t top $w pfx this this - global use_ttk uplevel [linsert $args 0 make_toplevel $t $w] catch {wm attributes $top -type dialog} pave_toplevel $pfx diff --git a/lib/commit.tcl b/lib/commit.tcl index b516aa2..2fd57a5 100644 --- a/lib/commit.tcl +++ b/lib/commit.tcl @@ -27,7 +27,7 @@ You are currently in the middle of a merge that has not been fully completed. Y if {[catch { set name "" set email "" - set fd [git_read cat-file commit $curHEAD] + set fd [git_read [list cat-file commit $curHEAD]] fconfigure $fd -encoding binary -translation lf # By default commits are assumed to be in utf-8 set enc utf-8 @@ -207,8 +207,17 @@ You must stage at least 1 file before you can commit. # -- A message is required. # - set msg [string trim [$ui_comm get 1.0 end]] + set msg [$ui_comm get 1.0 end] + # Strip trailing whitespace regsub -all -line {[ \t\r]+$} $msg {} msg + # Strip comment lines + global comment_string + set cmt_rx [strcat {(^|\n)} [regsub -all {\W} $comment_string {\\&}] {[^\n]*}] + regsub -all $cmt_rx $msg {\1} msg + # Strip leading and trailing empty lines (puts adds one \n) + set msg [string trim $msg \n] + # Compress consecutive empty lines + regsub -all {\n{3,}} $msg "\n\n" msg if {$msg eq {}} { error_popup [mc "Please supply a commit message. @@ -225,7 +234,7 @@ A good commit message has the following format: # -- Build the message file. # set msg_p [gitdir GITGUI_EDITMSG] - set msg_wt [open $msg_p w] + set msg_wt [safe_open_file $msg_p w] fconfigure $msg_wt -translation lf setup_commit_encoding $msg_wt puts $msg_wt $msg @@ -325,7 +334,7 @@ proc commit_commitmsg_wait {fd_ph curHEAD msg_p} { proc commit_writetree {curHEAD msg_p} { ui_status [mc "Committing changes..."] - set fd_wt [git_read write-tree] + set fd_wt [git_read [list write-tree]] fileevent $fd_wt readable \ [list commit_committree $fd_wt $curHEAD $msg_p] } @@ -337,6 +346,7 @@ proc commit_committree {fd_wt curHEAD msg_p} { global file_states selected_paths rescan_active global repo_config global env + global hashlength gets $fd_wt tree_id if {[catch {close $fd_wt} err]} { @@ -350,13 +360,13 @@ proc commit_committree {fd_wt curHEAD msg_p} { # -- Verify this wasn't an empty change. # if {$commit_type eq {normal}} { - set fd_ot [git_read cat-file commit $PARENT] + set fd_ot [git_read [list cat-file commit $PARENT]] fconfigure $fd_ot -encoding binary -translation lf set old_tree [gets $fd_ot] close $fd_ot if {[string equal -length 5 {tree } $old_tree] - && [string length $old_tree] == 45} { + && [string length $old_tree] == [expr {$hashlength + 5}]} { set old_tree [string range $old_tree 5 end] } else { error [mc "Commit %s appears to be corrupt" $PARENT] @@ -388,8 +398,8 @@ A rescan will be automatically started now. foreach p [concat $PARENT $MERGE_HEAD] { lappend cmd -p $p } - lappend cmd <$msg_p - if {[catch {set cmt_id [eval git $cmd]} err]} { + set msgtxt [list <$msg_p] + if {[catch {set cmt_id [git_redir $cmd $msgtxt]} err]} { catch {file delete $msg_p} error_popup [strcat [mc "commit-tree failed:"] "\n\n$err"] ui_status [mc "Commit failed."] @@ -409,7 +419,7 @@ A rescan will be automatically started now. if {$commit_type ne {normal}} { append reflogm " ($commit_type)" } - set msg_fd [open $msg_p r] + set msg_fd [safe_open_file $msg_p r] setup_commit_encoding $msg_fd 1 gets $msg_fd subject close $msg_fd @@ -456,6 +466,7 @@ A rescan will be automatically started now. } $ui_comm delete 0.0 end + load_message [get_config commit.template] $ui_comm edit reset $ui_comm edit modified false if {$::GITGUI_BCK_exists} { diff --git a/lib/console.tcl b/lib/console.tcl index 1f3248f..2676994 100644 --- a/lib/console.tcl +++ b/lib/console.tcl @@ -27,20 +27,20 @@ constructor embed {path title} { } method _init {} { - global M1B use_ttk NS + global M1B if {$is_toplevel} { make_dialog top w -autodelete 0 wm title $top "[appname] ([reponame]): $t_short" } else { - ${NS}::frame $w + ttk::frame $w } set console_cr 1.0 set w_t $w.m.t - ${NS}::frame $w.m - ${NS}::label $w.m.l1 \ + ttk::frame $w.m + ttk::label $w.m.l1 \ -textvariable @t_long \ -anchor w \ -justify left \ @@ -78,7 +78,7 @@ method _init {} { " if {$is_toplevel} { - ${NS}::button $w.ok -text [mc "Close"] \ + ttk::button $w.ok -text [mc "Close"] \ -state disabled \ -command [list destroy $w] pack $w.ok -side bottom -anchor e -pady 10 -padx 10 @@ -92,12 +92,11 @@ method _init {} { method exec {cmd {after {}}} { if {[lindex $cmd 0] eq {git}} { - set fd_f [eval git_read --stderr [lrange $cmd 1 end]] + set fd_f [git_read [lrange $cmd 1 end] [list 2>@1]] } else { - lappend cmd 2>@1 - set fd_f [_open_stdout_stderr $cmd] + set fd_f [safe_open_command $cmd [list 2>@1]] } - fconfigure $fd_f -blocking 0 -translation binary + fconfigure $fd_f -blocking 0 -translation binary -encoding [encoding system] fileevent $fd_f readable [cb _read $fd_f $after] } @@ -203,17 +202,18 @@ method done {ok} { focus $w.ok } } + + bind $w "destroy $w;break" } method _sb_set {sb orient first last} { - global NS if {![winfo exists $sb]} { if {$first == $last || ($first == 0 && $last == 1)} return if {$orient eq {h}} { - ${NS}::scrollbar $sb -orient h -command [list $w_t xview] + ttk::scrollbar $sb -orient h -command [list $w_t xview] pack $sb -fill x -side bottom -before $w_t } else { - ${NS}::scrollbar $sb -orient v -command [list $w_t yview] + ttk::scrollbar $sb -orient v -command [list $w_t yview] pack $sb -fill y -side right -before $w_t } } diff --git a/lib/database.tcl b/lib/database.tcl index 8578308..78732d8 100644 --- a/lib/database.tcl +++ b/lib/database.tcl @@ -2,8 +2,7 @@ # Copyright (C) 2006, 2007 Shawn Pearce proc do_stats {} { - global use_ttk NS - set fd [git_read count-objects -v] + set fd [git_read [list count-objects -v]] while {[gets $fd line] > 0} { if {[regexp {^([^:]+): (\d+)$} $line _ name value]} { set stats($name) $value @@ -26,18 +25,18 @@ proc do_stats {} { wm withdraw $w wm geometry $w "+[winfo rootx .]+[winfo rooty .]" - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.close -text [mc Close] \ + ttk::frame $w.buttons + ttk::button $w.buttons.close -text [mc Close] \ -default active \ -command [list destroy $w] - ${NS}::button $w.buttons.gc -text [mc "Compress Database"] \ + ttk::button $w.buttons.gc -text [mc "Compress Database"] \ -default normal \ -command "destroy $w;do_gc" pack $w.buttons.close -side right pack $w.buttons.gc -side left pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.stat -text [mc "Database Statistics"] + ttk::labelframe $w.stat -text [mc "Database Statistics"] foreach s { {count {mc "Number of loose objects"}} {size {mc "Disk space used by loose objects"} { KiB}} @@ -54,8 +53,8 @@ proc do_stats {} { set value "$value[lindex $s 2]" } - ${NS}::label $w.stat.l_$name -text [mc "%s:" $label] -anchor w - ${NS}::label $w.stat.v_$name -text $value -anchor w + ttk::label $w.stat.l_$name -text [mc "%s:" $label] -anchor w + ttk::label $w.stat.v_$name -text $value -anchor w grid $w.stat.l_$name $w.stat.v_$name -sticky we -padx {0 5} } pack $w.stat -pady 10 -padx 10 diff --git a/lib/diff.tcl b/lib/diff.tcl index 958a0fa..1acd37b 100644 --- a/lib/diff.tcl +++ b/lib/diff.tcl @@ -2,15 +2,13 @@ # Copyright (C) 2006, 2007 Shawn Pearce proc apply_tab_size {{firsttab {}}} { - global have_tk85 repo_config ui_diff + global repo_config ui_diff set w [font measure font_diff "0"] - if {$have_tk85 && $firsttab != 0} { + if {$firsttab != 0} { $ui_diff configure -tabs [list [expr {$firsttab * $w}] [expr {($firsttab + $repo_config(gui.tabsize)) * $w}]] - } elseif {$have_tk85 || $repo_config(gui.tabsize) != 8} { - $ui_diff configure -tabs [expr {$repo_config(gui.tabsize) * $w}] } else { - $ui_diff configure -tabs {} + $ui_diff configure -tabs [expr {$repo_config(gui.tabsize) * $w}] } } @@ -63,28 +61,17 @@ proc force_diff_encoding {enc} { } proc handle_empty_diff {} { - global current_diff_path file_states file_lists - global diff_empty_count + global current_diff_path file_states + global ui_diff set path $current_diff_path set s $file_states($path) if {[lindex $s 0] ne {_M} || [has_textconv $path]} return - # Prevent infinite rescan loops - incr diff_empty_count - if {$diff_empty_count > 1} return - - info_popup [mc "No differences detected. - -%s has no changes. - -The modification date of this file was updated by another application, but the content within the file was not changed. - -A rescan will be automatically started to find other files which may have the same state." [short_path $path]] - - clear_diff - display_file $path __ - rescan ui_ready 0 + $ui_diff conf -state normal + $ui_diff insert end [mc "* No differences detected; stage the file to de-list it from Unstaged Changes.\n"] d_info + $ui_diff insert end [mc "* Click to find other files that may have the same state.\n"] d_rescan + $ui_diff conf -state disabled } proc show_diff {path w {lno {}} {scroll_pos {}} {callback {}}} { @@ -202,7 +189,7 @@ proc show_other_diff {path w m cont_info} { set sz [string length $content] } file { - set fd [open $path r] + set fd [safe_open_file $path r] fconfigure $fd \ -eofchar {} \ -encoding [get_path_encoding $path] @@ -226,7 +213,7 @@ proc show_other_diff {path w m cont_info} { $ui_diff insert end \ "* [mc "Git Repository (subproject)"]\n" \ d_info - } elseif {![catch {set type [exec file $path]}]} { + } elseif {![catch {set type [safe_exec [list file $path]]}]} { set n [string length $path] if {[string equal -length $n $path $type]} { set type [string range $type $n end] @@ -270,19 +257,6 @@ proc show_other_diff {path w m cont_info} { } } -proc get_conflict_marker_size {path} { - set size 7 - catch { - set fd_rc [eval [list git_read check-attr "conflict-marker-size" -- $path]] - set ret [gets $fd_rc line] - close $fd_rc - if {$ret > 0} { - regexp {.*: conflict-marker-size: (\d+)$} $line line size - } - } - return $size -} - proc start_show_diff {cont_info {add_opts {}}} { global file_states file_lists global is_3way_diff is_submodule_diff diff_active repo_config @@ -298,15 +272,13 @@ proc start_show_diff {cont_info {add_opts {}}} { set is_submodule_diff 0 set diff_active 1 set current_diff_header {} - set conflict_size [get_conflict_marker_size $path] + set conflict_size [gitattr $path conflict-marker-size 7] set cmd [list] if {$w eq $ui_index} { lappend cmd diff-index lappend cmd --cached - if {[git-version >= "1.7.2"]} { - lappend cmd --ignore-submodules=dirty - } + lappend cmd --ignore-submodules=dirty } elseif {$w eq $ui_workdir} { if {[string first {U} $m] >= 0} { lappend cmd diff @@ -314,17 +286,14 @@ proc start_show_diff {cont_info {add_opts {}}} { lappend cmd diff-files } } - if {![is_config_false gui.textconv] && [git-version >= 1.6.1]} { + if {![is_config_false gui.textconv]} { lappend cmd --textconv } if {[string match {160000 *} [lindex $s 2]] || [string match {160000 *} [lindex $s 3]]} { set is_submodule_diff 1 - - if {[git-version >= "1.6.6"]} { - lappend cmd --submodule - } + lappend cmd --submodule } lappend cmd -p @@ -343,15 +312,7 @@ proc start_show_diff {cont_info {add_opts {}}} { lappend cmd $path } - if {$is_submodule_diff && [git-version < "1.6.6"]} { - if {$w eq $ui_index} { - set cmd [list submodule summary --cached -- $path] - } else { - set cmd [list submodule summary --files -- $path] - } - } - - if {[catch {set fd [eval git_read --nice $cmd]} err]} { + if {[catch {set fd [git_read_nice $cmd]} err]} { set diff_active 0 unlock_index ui_status [mc "Unable to display %s" [escape_path $path]] @@ -360,6 +321,10 @@ proc start_show_diff {cont_info {add_opts {}}} { } set ::current_diff_inheader 1 + # Detect pre-image lines of the diff3 conflict-style. They are just + # '++' lines which is not bijective. Thus, we need to maintain a state + # across lines. + set ::conflict_in_pre_image 0 fconfigure $fd \ -blocking 0 \ -encoding [get_path_encoding $path] \ @@ -396,7 +361,6 @@ proc read_diff {fd conflict_size cont_info} { global ui_diff diff_active is_submodule_diff global is_3way_diff is_conflict_diff current_diff_header global current_diff_queue - global diff_empty_count $ui_diff conf -state normal while {[gets $fd line] >= 0} { @@ -462,11 +426,23 @@ proc read_diff {fd conflict_size cont_info} { {--} {set tags d_--} {++} { set regexp [string map [list %conflict_size $conflict_size]\ - {^\+\+([<>=]){%conflict_size}(?: |$)}] + {^\+\+([<>=|]){%conflict_size}(?: |$)}] if {[regexp $regexp $line _g op]} { set is_conflict_diff 1 set line [string replace $line 0 1 { }] set tags d$op + + # The ||| conflict-marker marks the start of the pre-image. + # All those lines are also prefixed with '++'. Thus we need + # to maintain this state. + set ::conflict_in_pre_image [expr {$op eq {|}}] + } elseif {$::conflict_in_pre_image} { + # This is a pre-image line. It is the one which both sides + # are based on. As it has also the '++' line start, it is + # normally shown as 'added'. Invert this to '--' to make + # it a 'removed' line. + set line [string replace $line 0 1 {--}] + set tags d_-- } else { set tags d_++ } @@ -556,8 +532,6 @@ proc read_diff {fd conflict_size cont_info} { if {[$ui_diff index end] eq {2.0}} { handle_empty_diff - } else { - set diff_empty_count 0 } set callback [lindex $cont_info 1] @@ -614,7 +588,7 @@ proc apply_or_revert_hunk {x y revert} { if {[catch { set enc [get_path_encoding $current_diff_path] - set p [eval git_write $apply_cmd] + set p [git_write $apply_cmd] fconfigure $p -translation binary -encoding $enc puts -nonewline $p $wholepatch close $p} err]} { @@ -850,7 +824,7 @@ proc apply_or_revert_range_or_line {x y revert} { if {[catch { set enc [get_path_encoding $current_diff_path] - set p [eval git_write $apply_cmd] + set p [git_write $apply_cmd] fconfigure $p -translation binary -encoding $enc puts -nonewline $p $current_diff_header puts -nonewline $p $wholepatch @@ -887,7 +861,7 @@ proc undo_last_revert {} { if {[catch { set enc $last_revert_enc - set p [eval git_write $apply_cmd] + set p [git_write $apply_cmd] fconfigure $p -translation binary -encoding $enc puts -nonewline $p $last_revert close $p} err]} { diff --git a/lib/encoding.tcl b/lib/encoding.tcl index 32668fc..d2e0fa6 100644 --- a/lib/encoding.tcl +++ b/lib/encoding.tcl @@ -3,7 +3,7 @@ # (Copied from gitk, commit fd8ccbec4f0161) # This list of encoding names and aliases is distilled from -# http://www.iana.org/assignments/character-sets. +# https://www.iana.org/assignments/character-sets. # Not all of them are supported by Tcl. set encoding_aliases { { ANSI_X3.4-1968 iso-ir-6 ANSI_X3.4-1986 ISO_646.irv:1991 ASCII diff --git a/lib/error.tcl b/lib/error.tcl index 8968a57..fc0b5ad 100644 --- a/lib/error.tcl +++ b/lib/error.tcl @@ -71,13 +71,12 @@ proc ask_popup {msg} { } proc hook_failed_popup {hook msg {is_fatal 1}} { - global use_ttk NS set w .hookfail Dialog $w wm withdraw $w - ${NS}::frame $w.m - ${NS}::label $w.m.l1 -text [mc "%s hook failed:" $hook] \ + ttk::frame $w.m + ttk::label $w.m.l1 -text [mc "%s hook failed:" $hook] \ -anchor w \ -justify left \ -font font_uibold @@ -89,10 +88,10 @@ proc hook_failed_popup {hook msg {is_fatal 1}} { -width 80 -height 10 \ -font font_diff \ -yscrollcommand [list $w.m.sby set] - ${NS}::scrollbar $w.m.sby -command [list $w.m.t yview] + ttk::scrollbar $w.m.sby -command [list $w.m.t yview] pack $w.m.l1 -side top -fill x if {$is_fatal} { - ${NS}::label $w.m.l2 \ + ttk::label $w.m.l2 \ -text [mc "You must correct the above errors before committing."] \ -anchor w \ -justify left \ @@ -106,7 +105,7 @@ proc hook_failed_popup {hook msg {is_fatal 1}} { $w.m.t insert 1.0 $msg $w.m.t conf -state disabled - ${NS}::button $w.ok -text OK \ + ttk::button $w.ok -text OK \ -width 15 \ -command "destroy $w" pack $w.ok -side bottom -anchor e -pady 10 -padx 10 diff --git a/lib/index.tcl b/lib/index.tcl index e07b7a3..3775470 100644 --- a/lib/index.tcl +++ b/lib/index.tcl @@ -7,68 +7,73 @@ proc _delete_indexlock {} { } } -proc _close_updateindex {fd after} { - global use_ttk NS - fconfigure $fd -blocking 1 - if {[catch {close $fd} err]} { - set w .indexfried - Dialog $w - wm withdraw $w - wm title $w [strcat "[appname] ([reponame]): " [mc "Index Error"]] - wm geometry $w "+[winfo rootx .]+[winfo rooty .]" - set s [mc "Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui."] - text $w.msg -yscrollcommand [list $w.vs set] \ - -width [string length $s] -relief flat \ - -borderwidth 0 -highlightthickness 0 \ - -background [get_bg_color $w] - $w.msg tag configure bold -font font_uibold -justify center - ${NS}::scrollbar $w.vs -command [list $w.msg yview] - $w.msg insert end $s bold \n\n$err {} - $w.msg configure -state disabled - - ${NS}::button $w.continue \ - -text [mc "Continue"] \ - -command [list destroy $w] - ${NS}::button $w.unlock \ - -text [mc "Unlock Index"] \ - -command "destroy $w; _delete_indexlock" - grid $w.msg - $w.vs -sticky news - grid $w.unlock $w.continue - -sticky se -padx 2 -pady 2 - grid columnconfigure $w 0 -weight 1 - grid rowconfigure $w 0 -weight 1 - - wm protocol $w WM_DELETE_WINDOW update - bind $w.continue " - grab $w - focus %W - " - wm deiconify $w - tkwait window $w - - $::main_status stop +proc close_and_unlock_index {fd after} { + if {![catch {_close_updateindex $fd} err]} { unlock_index - rescan $after 0 - return + uplevel #0 $after + } else { + rescan_on_error $err $after } +} - $::main_status stop +proc _close_updateindex {fd} { + fconfigure $fd -blocking 1 + close $fd +} + +proc rescan_on_error {err {after {}}} { + set w .indexfried + Dialog $w + wm withdraw $w + wm title $w [strcat "[appname] ([reponame]): " [mc "Index Error"]] + wm geometry $w "+[winfo rootx .]+[winfo rooty .]" + set s [mc "Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui."] + text $w.msg -yscrollcommand [list $w.vs set] \ + -width [string length $s] -relief flat \ + -borderwidth 0 -highlightthickness 0 \ + -background [get_bg_color $w] + $w.msg tag configure bold -font font_uibold -justify center + ttk::scrollbar $w.vs -command [list $w.msg yview] + $w.msg insert end $s bold \n\n$err {} + $w.msg configure -state disabled + + ttk::button $w.continue \ + -text [mc "Continue"] \ + -command [list destroy $w] + ttk::button $w.unlock \ + -text [mc "Unlock Index"] \ + -command "destroy $w; _delete_indexlock" + grid $w.msg - $w.vs -sticky news + grid $w.unlock $w.continue - -sticky se -padx 2 -pady 2 + grid columnconfigure $w 0 -weight 1 + grid rowconfigure $w 0 -weight 1 + + wm protocol $w WM_DELETE_WINDOW update + bind $w.continue " + grab $w + focus %W + " + wm deiconify $w + tkwait window $w + + $::main_status stop_all unlock_index - uplevel #0 $after + rescan [concat $after {ui_ready;}] 0 } -proc update_indexinfo {msg pathList after} { +proc update_indexinfo {msg path_list after} { global update_index_cp if {![lock_index update]} return set update_index_cp 0 - set pathList [lsort $pathList] - set totalCnt [llength $pathList] - set batch [expr {int($totalCnt * .01) + 1}] + set path_list [lsort $path_list] + set total_cnt [llength $path_list] + set batch [expr {int($total_cnt * .01) + 1}] if {$batch > 25} {set batch 25} - $::main_status start $msg [mc "files"] - set fd [git_write update-index -z --index-info] + set status_bar_operation [$::main_status start $msg [mc "files"]] + set fd [git_write [list update-index -z --index-info]] fconfigure $fd \ -blocking 0 \ -buffering full \ @@ -78,26 +83,29 @@ proc update_indexinfo {msg pathList after} { fileevent $fd writable [list \ write_update_indexinfo \ $fd \ - $pathList \ - $totalCnt \ + $path_list \ + $total_cnt \ $batch \ + $status_bar_operation \ $after \ ] } -proc write_update_indexinfo {fd pathList totalCnt batch after} { +proc write_update_indexinfo {fd path_list total_cnt batch status_bar_operation \ + after} { global update_index_cp global file_states current_diff_path - if {$update_index_cp >= $totalCnt} { - _close_updateindex $fd $after + if {$update_index_cp >= $total_cnt} { + $status_bar_operation stop + close_and_unlock_index $fd $after return } for {set i $batch} \ - {$update_index_cp < $totalCnt && $i > 0} \ + {$update_index_cp < $total_cnt && $i > 0} \ {incr i -1} { - set path [lindex $pathList $update_index_cp] + set path [lindex $path_list $update_index_cp] incr update_index_cp set s $file_states($path) @@ -119,22 +127,22 @@ proc write_update_indexinfo {fd pathList totalCnt batch after} { display_file $path $new } - $::main_status update $update_index_cp $totalCnt + $status_bar_operation update $update_index_cp $total_cnt } -proc update_index {msg pathList after} { +proc update_index {msg path_list after} { global update_index_cp if {![lock_index update]} return set update_index_cp 0 - set pathList [lsort $pathList] - set totalCnt [llength $pathList] - set batch [expr {int($totalCnt * .01) + 1}] + set path_list [lsort $path_list] + set total_cnt [llength $path_list] + set batch [expr {int($total_cnt * .01) + 1}] if {$batch > 25} {set batch 25} - $::main_status start $msg [mc "files"] - set fd [git_write update-index --add --remove -z --stdin] + set status_bar_operation [$::main_status start $msg [mc "files"]] + set fd [git_write [list update-index --add --remove -z --stdin]] fconfigure $fd \ -blocking 0 \ -buffering full \ @@ -144,26 +152,29 @@ proc update_index {msg pathList after} { fileevent $fd writable [list \ write_update_index \ $fd \ - $pathList \ - $totalCnt \ + $path_list \ + $total_cnt \ $batch \ + $status_bar_operation \ $after \ ] } -proc write_update_index {fd pathList totalCnt batch after} { +proc write_update_index {fd path_list total_cnt batch status_bar_operation \ + after} { global update_index_cp global file_states current_diff_path - if {$update_index_cp >= $totalCnt} { - _close_updateindex $fd $after + if {$update_index_cp >= $total_cnt} { + $status_bar_operation stop + close_and_unlock_index $fd $after return } for {set i $batch} \ - {$update_index_cp < $totalCnt && $i > 0} \ + {$update_index_cp < $total_cnt && $i > 0} \ {incr i -1} { - set path [lindex $pathList $update_index_cp] + set path [lindex $path_list $update_index_cp] incr update_index_cp switch -glob -- [lindex $file_states($path) 0] { @@ -190,28 +201,28 @@ proc write_update_index {fd pathList totalCnt batch after} { display_file $path $new } - $::main_status update $update_index_cp $totalCnt + $status_bar_operation update $update_index_cp $total_cnt } -proc checkout_index {msg pathList after} { +proc checkout_index {msg path_list after capture_error} { global update_index_cp if {![lock_index update]} return set update_index_cp 0 - set pathList [lsort $pathList] - set totalCnt [llength $pathList] - set batch [expr {int($totalCnt * .01) + 1}] + set path_list [lsort $path_list] + set total_cnt [llength $path_list] + set batch [expr {int($total_cnt * .01) + 1}] if {$batch > 25} {set batch 25} - $::main_status start $msg [mc "files"] - set fd [git_write checkout-index \ + set status_bar_operation [$::main_status start $msg [mc "files"]] + set fd [git_write [list checkout-index \ --index \ --quiet \ --force \ -z \ --stdin \ - ] + ]] fconfigure $fd \ -blocking 0 \ -buffering full \ @@ -221,26 +232,45 @@ proc checkout_index {msg pathList after} { fileevent $fd writable [list \ write_checkout_index \ $fd \ - $pathList \ - $totalCnt \ + $path_list \ + $total_cnt \ $batch \ + $status_bar_operation \ $after \ + $capture_error \ ] } -proc write_checkout_index {fd pathList totalCnt batch after} { +proc write_checkout_index {fd path_list total_cnt batch status_bar_operation \ + after capture_error} { global update_index_cp global file_states current_diff_path - if {$update_index_cp >= $totalCnt} { - _close_updateindex $fd $after + if {$update_index_cp >= $total_cnt} { + $status_bar_operation stop + + # We do not unlock the index directly here because this + # operation expects to potentially run in parallel with file + # deletions scheduled by revert_helper. We're done with the + # update index, so we close it, but actually unlocking the index + # and dealing with potential errors is deferred to the chord + # body that runs when all async operations are completed. + # + # (See after_chord in revert_helper.) + + if {[catch {_close_updateindex $fd} err]} { + uplevel #0 $capture_error [list $err] + } + + uplevel #0 $after + return } for {set i $batch} \ - {$update_index_cp < $totalCnt && $i > 0} \ + {$update_index_cp < $total_cnt && $i > 0} \ {incr i -1} { - set path [lindex $pathList $update_index_cp] + set path [lindex $path_list $update_index_cp] incr update_index_cp switch -glob -- [lindex $file_states($path) 0] { U? {continue} @@ -253,7 +283,7 @@ proc write_checkout_index {fd pathList totalCnt batch after} { } } - $::main_status update $update_index_cp $totalCnt + $status_bar_operation update $update_index_cp $total_cnt } proc unstage_helper {txt paths} { @@ -261,7 +291,7 @@ proc unstage_helper {txt paths} { if {![lock_index begin-update]} return - set pathList [list] + set path_list [list] set after {} foreach path $paths { switch -glob -- [lindex $file_states($path) 0] { @@ -269,20 +299,20 @@ proc unstage_helper {txt paths} { M? - T? - D? { - lappend pathList $path + lappend path_list $path if {$path eq $current_diff_path} { set after {reshow_diff;} } } } } - if {$pathList eq {}} { + if {$path_list eq {}} { unlock_index } else { update_indexinfo \ $txt \ - $pathList \ - [concat $after [list ui_ready]] + $path_list \ + [concat $after {ui_ready;}] } } @@ -305,7 +335,7 @@ proc add_helper {txt paths} { if {![lock_index begin-update]} return - set pathList [list] + set path_list [list] set after {} foreach path $paths { switch -glob -- [lindex $file_states($path) 0] { @@ -321,20 +351,20 @@ proc add_helper {txt paths} { ?M - ?D - ?T { - lappend pathList $path + lappend path_list $path if {$path eq $current_diff_path} { set after {reshow_diff;} } } } } - if {$pathList eq {}} { + if {$path_list eq {}} { unlock_index } else { update_index \ $txt \ - $pathList \ - [concat $after {ui_status [mc "Ready to commit."]}] + $path_list \ + [concat $after {ui_status [mc "Ready to commit."];}] } } @@ -388,66 +418,303 @@ proc do_add_all {} { add_helper [mc "Adding all changed files"] $paths } +# Copied from TclLib package "lambda". +proc lambda {arguments body args} { + return [list ::apply [list $arguments $body] {*}$args] +} + proc revert_helper {txt paths} { global file_states current_diff_path if {![lock_index begin-update]} return - set pathList [list] - set after {} + # Common "after" functionality that waits until multiple asynchronous + # operations are complete (by waiting for them to activate their notes + # on the chord). + # + # The asynchronous operations are each indicated below by a comment + # before the code block that starts the async operation. + set after_chord [SimpleChord::new { + if {[string trim $err] != ""} { + rescan_on_error $err + } else { + unlock_index + if {$should_reshow_diff} { reshow_diff } + ui_ready + } + }] + + $after_chord eval { set should_reshow_diff 0 } + + # This function captures an error for processing when after_chord is + # completed. (The chord is curried into the lambda function.) + set capture_error [lambda \ + {chord error} \ + { $chord eval [list set err $error] } \ + $after_chord] + + # We don't know how many notes we're going to create (it's dynamic based + # on conditional paths below), so create a common note that will delay + # the chord's completion until we activate it, and then activate it + # after all the other notes have been created. + set after_common_note [$after_chord add_note] + + set path_list [list] + set untracked_list [list] + foreach path $paths { switch -glob -- [lindex $file_states($path) 0] { U? {continue} + ?O { + lappend untracked_list $path + } ?M - ?T - ?D { - lappend pathList $path + lappend path_list $path if {$path eq $current_diff_path} { - set after {reshow_diff;} + $after_chord eval { set should_reshow_diff 1 } } } } } + set path_cnt [llength $path_list] + set untracked_cnt [llength $untracked_list] + + # Asynchronous operation: revert changes by checking them out afresh + # from the index. + if {$path_cnt > 0} { + # Split question between singular and plural cases, because + # such distinction is needed in some languages. Previously, the + # code used "Revert changes in" for both, but that can't work + # in languages where 'in' must be combined with word from + # rest of string (in different way for both cases of course). + # + # FIXME: Unfortunately, even that isn't enough in some languages + # as they have quite complex plural-form rules. Unfortunately, + # msgcat doesn't seem to support that kind of string + # translation. + # + if {$path_cnt == 1} { + set query [mc \ + "Revert changes in file %s?" \ + [short_path [lindex $path_list]] \ + ] + } else { + set query [mc \ + "Revert changes in these %i files?" \ + $path_cnt] + } - # Split question between singular and plural cases, because - # such distinction is needed in some languages. Previously, the - # code used "Revert changes in" for both, but that can't work - # in languages where 'in' must be combined with word from - # rest of string (in different way for both cases of course). - # - # FIXME: Unfortunately, even that isn't enough in some languages - # as they have quite complex plural-form rules. Unfortunately, - # msgcat doesn't seem to support that kind of string translation. - # - set n [llength $pathList] - if {$n == 0} { - unlock_index - return - } elseif {$n == 1} { - set query [mc "Revert changes in file %s?" [short_path [lindex $pathList]]] - } else { - set query [mc "Revert changes in these %i files?" $n] + set reply [tk_dialog \ + .confirm_revert \ + "[appname] ([reponame])" \ + "$query + +[mc "Any unstaged changes will be permanently lost by the revert."]" \ + question \ + 1 \ + [mc "Do Nothing"] \ + [mc "Revert Changes"] \ + ] + + if {$reply == 1} { + set note [$after_chord add_note] + checkout_index \ + $txt \ + $path_list \ + [list $note activate] \ + $capture_error + } } - set reply [tk_dialog \ - .confirm_revert \ - "[appname] ([reponame])" \ - "$query + # Asynchronous operation: Deletion of untracked files. + if {$untracked_cnt > 0} { + # Split question between singular and plural cases, because + # such distinction is needed in some languages. + # + # FIXME: Unfortunately, even that isn't enough in some languages + # as they have quite complex plural-form rules. Unfortunately, + # msgcat doesn't seem to support that kind of string + # translation. + # + if {$untracked_cnt == 1} { + set query [mc \ + "Delete untracked file %s?" \ + [short_path [lindex $untracked_list]] \ + ] + } else { + set query [mc \ + "Delete these %i untracked files?" \ + $untracked_cnt \ + ] + } -[mc "Any unstaged changes will be permanently lost by the revert."]" \ - question \ - 1 \ - [mc "Do Nothing"] \ - [mc "Revert Changes"] \ - ] - if {$reply == 1} { - checkout_index \ - $txt \ - $pathList \ - [concat $after [list ui_ready]] + set reply [tk_dialog \ + .confirm_revert \ + "[appname] ([reponame])" \ + "$query + +[mc "Files will be permanently deleted."]" \ + question \ + 1 \ + [mc "Do Nothing"] \ + [mc "Delete Files"] \ + ] + + if {$reply == 1} { + $after_chord eval { set should_reshow_diff 1 } + + set note [$after_chord add_note] + delete_files $untracked_list [list $note activate] + } + } + + # Activate the common note. If no other notes were created, this + # completes the chord. If other notes were created, then this common + # note prevents a race condition where the chord might complete early. + $after_common_note activate +} + +# Delete all of the specified files, performing deletion in batches to allow the +# UI to remain responsive and updated. +proc delete_files {path_list after} { + # Enable progress bar status updates + set status_bar_operation [$::main_status \ + start \ + [mc "Deleting"] \ + [mc "files"]] + + set path_index 0 + set deletion_errors [list] + set batch_size 50 + + delete_helper \ + $path_list \ + $path_index \ + $deletion_errors \ + $batch_size \ + $status_bar_operation \ + $after +} + +# Helper function to delete a list of files in batches. Each call deletes one +# batch of files, and then schedules a call for the next batch after any UI +# messages have been processed. +proc delete_helper {path_list path_index deletion_errors batch_size \ + status_bar_operation after} { + global file_states + + set path_cnt [llength $path_list] + + set batch_remaining $batch_size + + while {$batch_remaining > 0} { + if {$path_index >= $path_cnt} { break } + + set path [lindex $path_list $path_index] + + set deletion_failed [catch {file delete -- $path} deletion_error] + + if {$deletion_failed} { + lappend deletion_errors [list "$deletion_error"] + } else { + remove_empty_directories [file dirname $path] + + # Don't assume the deletion worked. Remove the file from + # the UI, but only if it no longer exists. + if {![path_exists $path]} { + unset file_states($path) + display_file $path __ + } + } + + incr path_index 1 + incr batch_remaining -1 + } + + # Update the progress bar to indicate that this batch has been + # completed. The update will be visible when this procedure returns + # and allows the UI thread to process messages. + $status_bar_operation update $path_index $path_cnt + + if {$path_index < $path_cnt} { + # The Tcler's Wiki lists this as the best practice for keeping + # a UI active and processing messages during a long-running + # operation. + + after idle [list after 0 [list \ + delete_helper \ + $path_list \ + $path_index \ + $deletion_errors \ + $batch_size \ + $status_bar_operation \ + $after + ]] } else { - unlock_index + # Finish the status bar operation. + $status_bar_operation stop + + # Report error, if any, based on how many deletions failed. + set deletion_error_cnt [llength $deletion_errors] + + if {($deletion_error_cnt > 0) + && ($deletion_error_cnt <= [MAX_VERBOSE_FILES_IN_DELETION_ERROR])} { + set error_text [mc "Encountered errors deleting files:\n"] + + foreach deletion_error $deletion_errors { + append error_text "* [lindex $deletion_error 0]\n" + } + + error_popup $error_text + } elseif {$deletion_error_cnt == $path_cnt} { + error_popup [mc \ + "None of the %d selected files could be deleted." \ + $path_cnt \ + ] + } elseif {$deletion_error_cnt > 1} { + error_popup [mc \ + "%d of the %d selected files could not be deleted." \ + $deletion_error_cnt \ + $path_cnt \ + ] + } + + uplevel #0 $after + } +} + +proc MAX_VERBOSE_FILES_IN_DELETION_ERROR {} { return 10; } + +# This function is from the TCL documentation: +# +# https://wiki.tcl-lang.org/page/file+exists +# +# [file exists] returns false if the path does exist but is a symlink to a path +# that doesn't exist. This proc returns true if the path exists, regardless of +# whether it is a symlink and whether it is broken. +proc path_exists {name} { + expr {![catch {file lstat $name finfo}]} +} + +# Remove as many empty directories as we can starting at the specified path, +# walking up the directory tree. If we encounter a directory that is not +# empty, or if a directory deletion fails, then we stop the operation and +# return to the caller. Even if this procedure fails to delete any +# directories at all, it does not report failure. +proc remove_empty_directories {directory_path} { + set parent_path [file dirname $directory_path] + + while {$parent_path != $directory_path} { + set contents [glob -nocomplain -dir $directory_path *] + + if {[llength $contents] > 0} { break } + if {[catch {file delete -- $directory_path}]} { break } + + set directory_path $parent_path + set parent_path [file dirname $directory_path] } } diff --git a/lib/line.tcl b/lib/line.tcl index a026de9..5980ae8 100644 --- a/lib/line.tcl +++ b/lib/line.tcl @@ -9,18 +9,17 @@ field ctext field linenum {} constructor new {i_w i_text args} { - global use_ttk NS set w $i_w set ctext $i_text - ${NS}::frame $w - ${NS}::label $w.l -text [mc "Goto Line:"] + ttk::frame $w + ttk::label $w.l -text [mc "Goto Line:"] tentry $w.ent \ -textvariable ${__this}::linenum \ -background lightgreen \ -validate key \ -validatecommand [cb _validate %P] - ${NS}::button $w.bn -text [mc Go] -command [cb _goto] + ttk::button $w.bn -text [mc Go] -command [cb _goto] pack $w.l -side left pack $w.bn -side right diff --git a/lib/merge.tcl b/lib/merge.tcl index 9f253db..3490bed 100644 --- a/lib/merge.tcl +++ b/lib/merge.tcl @@ -93,7 +93,7 @@ method _start {} { set spec [$w_rev get_tracking_branch] set cmit [$w_rev get_commit] - set fh [open [gitdir FETCH_HEAD] w] + set fh [safe_open_file [gitdir FETCH_HEAD] w] fconfigure $fh -translation lf if {$spec eq {}} { set remote . @@ -112,16 +112,7 @@ method _start {} { close $fh set _last_merged_branch $branch - if {[git-version >= "2.5.0"]} { - set cmd [list git merge --strategy=recursive FETCH_HEAD] - } else { - set cmd [list git] - lappend cmd merge - lappend cmd --strategy=recursive - lappend cmd [git fmt-merge-msg <[gitdir FETCH_HEAD]] - lappend cmd HEAD - lappend cmd $name - } + set cmd [list git merge --strategy=recursive FETCH_HEAD] ui_status [mc "Merging %s and %s..." $current_branch $stitle] set cons [console::new [mc "Merge"] "merge $stitle"] @@ -145,7 +136,7 @@ method _finish {cons ok} { constructor dialog {} { global current_branch - global M1B use_ttk NS + global M1B if {![_can_merge $this]} { delete_this @@ -160,21 +151,21 @@ constructor dialog {} { set _start [cb _start] - ${NS}::label $w.header \ + ttk::label $w.header \ -text [mc "Merge Into %s" $current_branch] \ -font font_uibold pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.visualize \ + ttk::frame $w.buttons + ttk::button $w.buttons.visualize \ -text [mc Visualize] \ -command [cb _visualize] pack $w.buttons.visualize -side left - ${NS}::button $w.buttons.merge \ + ttk::button $w.buttons.merge \ -text [mc Merge] \ -command $_start pack $w.buttons.merge -side right - ${NS}::button $w.buttons.cancel \ + ttk::button $w.buttons.cancel \ -text [mc "Cancel"] \ -command [cb _cancel] pack $w.buttons.cancel -side right -padx 5 @@ -239,25 +230,29 @@ Continue with resetting the current changes?"] } if {[ask_popup $op_question] eq {yes}} { - set fd [git_read --stderr read-tree --reset -u -v HEAD] + set fd [git_read [list read-tree --reset -u -v HEAD] [list 2>@1]] fconfigure $fd -blocking 0 -translation binary - fileevent $fd readable [namespace code [list _reset_wait $fd]] - $::main_status start [mc "Aborting"] [mc "files reset"] + set status_bar_operation [$::main_status \ + start \ + [mc "Aborting"] \ + [mc "files reset"]] + fileevent $fd readable [namespace code [list \ + _reset_wait $fd $status_bar_operation]] } else { unlock_index } } -proc _reset_wait {fd} { +proc _reset_wait {fd status_bar_operation} { global ui_comm - $::main_status update_meter [read $fd] + $status_bar_operation update_meter [read $fd] fconfigure $fd -blocking 1 if {[eof $fd]} { set fail [catch {close $fd} err] - $::main_status stop unlock_index + $status_bar_operation stop $ui_comm delete 0.0 end $ui_comm edit modified false diff --git a/lib/mergetool.tcl b/lib/mergetool.tcl index 120bc40..2c9bb3a 100644 --- a/lib/mergetool.tcl +++ b/lib/mergetool.tcl @@ -59,7 +59,7 @@ proc merge_add_resolution {path} { update_index \ [mc "Adding resolution for %s" [short_path $path]] \ [list $path] \ - [concat $after [list ui_ready]] + [concat $after {ui_ready;}] } proc merge_force_stage {stage} { @@ -88,7 +88,7 @@ proc merge_load_stages {path cont} { set merge_stages(3) {} set merge_stages_buf {} - set merge_stages_fd [eval git_read ls-files -u -z -- {$path}] + set merge_stages_fd [git_read [list ls-files -u -z -- $path]] fconfigure $merge_stages_fd -blocking 0 -translation binary -encoding binary fileevent $merge_stages_fd readable [list read_merge_stages $merge_stages_fd $cont] @@ -272,8 +272,25 @@ proc merge_resolve_tool2 {} { } } default { - error_popup [mc "Unsupported merge tool '%s'" $tool] - return + set tool_cmd [get_config mergetool.$tool.cmd] + if {$tool_cmd ne {}} { + if {([string first {[} $tool_cmd] != -1) || ([string first {]} $tool_cmd] != -1)} { + error_popup [mc "Unable to process square brackets in \"mergetool.%s.cmd\" configuration option. + +Please remove the square brackets." $tool] + return + } else { + set cmdline {} + foreach command_part $tool_cmd { + lappend cmdline [subst -nobackslashes -nocommands $command_part] + } + } + } else { + error_popup [mc "Unsupported merge tool '%s'. + +To use this tool, configure \"mergetool.%s.cmd\" as shown in the git-config manual page." $tool $tool] + return + } } } @@ -293,7 +310,7 @@ proc merge_tool_get_stages {target stages} { foreach fname $stages { if {$merge_stages($i) eq {}} { file delete $fname - catch { close [open $fname w] } + catch { close [safe_open_file $fname w] } } else { # A hack to support autocrlf properly git checkout-index -f --stage=$i -- $target @@ -343,9 +360,9 @@ proc merge_tool_start {cmdline target backup stages} { # Force redirection to avoid interpreting output on stderr # as an error, and launch the tool - lappend cmdline {2>@1} + set redir [list {2>@1}] - if {[catch { set mtool_fd [_open_stdout_stderr $cmdline] } err]} { + if {[catch { set mtool_fd [safe_open_command $cmdline $redir] } err]} { delete_temp_files $mtool_tmpfiles error_popup [mc "Could not start the merge tool:\n\n%s" $err] return diff --git a/lib/meson.build b/lib/meson.build new file mode 100644 index 0000000..4b9efab --- /dev/null +++ b/lib/meson.build @@ -0,0 +1,74 @@ +libfiles = [ + 'about.tcl', + 'blame.tcl', + 'branch_checkout.tcl', + 'branch_create.tcl', + 'branch_delete.tcl', + 'branch_rename.tcl', + 'branch.tcl', + 'browser.tcl', + 'checkout_op.tcl', + 'choose_font.tcl', + 'choose_repository.tcl', + 'choose_rev.tcl', + 'chord.tcl', + 'class.tcl', + 'commit.tcl', + 'console.tcl', + 'database.tcl', + 'date.tcl', + 'diff.tcl', + 'encoding.tcl', + 'error.tcl', + 'index.tcl', + 'line.tcl', + 'logo.tcl', + 'merge.tcl', + 'mergetool.tcl', + 'option.tcl', + 'remote_add.tcl', + 'remote_branch_delete.tcl', + 'remote.tcl', + 'search.tcl', + 'shortcut.tcl', + 'spellcheck.tcl', + 'sshkey.tcl', + 'status_bar.tcl', + 'themed.tcl', + 'tools_dlg.tcl', + 'tools.tcl', + 'transport.tcl', + 'win32.tcl', +] + +nontcl_libfiles = [ + 'git-gui.ico', + 'win32_shortcut.js', +] + +foreach file : libfiles + nontcl_libfiles + configure_file( + input: file, + output: file, + copy: true, + install: true, + install_dir: get_option('datadir') / 'git-gui/lib', + ) +endforeach + +custom_target( + output: 'tclIndex', + command: [ + shell, + meson.project_source_root() / 'generate-tclindex.sh', + meson.project_build_root(), + meson.project_build_root() / 'GIT-GUI-BUILD-OPTIONS', + libfiles, + ], + depend_files: [ + libfiles, + build_options, + ], + install: true, + install_dir: get_option('datadir') / 'git-gui/lib', +) diff --git a/lib/option.tcl b/lib/option.tcl index e43971b..487d706 100644 --- a/lib/option.tcl +++ b/lib/option.tcl @@ -91,7 +91,7 @@ proc save_config {} { proc do_options {} { global repo_config global_config font_descs global repo_config_new global_config_new - global ui_comm_spell use_ttk NS + global ui_comm_spell array unset repo_config_new array unset global_config_new @@ -115,23 +115,23 @@ proc do_options {} { wm transient $w [winfo parent $w] wm geometry $w "+[winfo rootx .]+[winfo rooty .]" - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.restore -text [mc "Restore Defaults"] \ + ttk::frame $w.buttons + ttk::button $w.buttons.restore -text [mc "Restore Defaults"] \ -default normal \ -command do_restore_defaults pack $w.buttons.restore -side left - ${NS}::button $w.buttons.save -text [mc Save] \ + ttk::button $w.buttons.save -text [mc Save] \ -default active \ -command [list do_save_config $w] pack $w.buttons.save -side right - ${NS}::button $w.buttons.cancel -text [mc "Cancel"] \ + ttk::button $w.buttons.cancel -text [mc "Cancel"] \ -default normal \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.repo -text [mc "%s Repository" [reponame]] - ${NS}::labelframe $w.global -text [mc "Global (All Repositories)"] + ttk::labelframe $w.repo -text [mc "%s Repository" [reponame]] + ttk::labelframe $w.global -text [mc "Global (All Repositories)"] pack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5 pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5 @@ -170,7 +170,7 @@ proc do_options {} { foreach f {repo global} { switch -glob -- $type { b { - ${NS}::checkbutton $w.$f.$optid -text $text \ + ttk::checkbutton $w.$f.$optid -text $text \ -variable ${f}_config_new($name) \ -onvalue true \ -offvalue false @@ -178,8 +178,8 @@ proc do_options {} { } i-* { regexp -- {-(\d+)\.\.(\d+)$} $type _junk min max - ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text [mc "%s:" $text] + ttk::frame $w.$f.$optid + ttk::label $w.$f.$optid.l -text [mc "%s:" $text] pack $w.$f.$optid.l -side left -anchor w -fill x tspinbox $w.$f.$optid.v \ -textvariable ${f}_config_new($name) \ @@ -193,9 +193,9 @@ proc do_options {} { } c - t { - ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text [mc "%s:" $text] - ${NS}::entry $w.$f.$optid.v \ + ttk::frame $w.$f.$optid + ttk::label $w.$f.$optid.l -text [mc "%s:" $text] + ttk::entry $w.$f.$optid.v \ -width 20 \ -textvariable ${f}_config_new($name) pack $w.$f.$optid.l -side left -anchor w @@ -206,7 +206,7 @@ proc do_options {} { menu $w.$f.$optid.m build_encoding_menu $w.$f.$optid.m \ [list set ${f}_config_new($name)] 1 - ${NS}::button $w.$f.$optid.b \ + ttk::button $w.$f.$optid.b \ -text [mc "Change"] \ -command [list popup_btn_menu \ $w.$f.$optid.m $w.$f.$optid.b] @@ -216,17 +216,11 @@ proc do_options {} { } s { set opts [eval [lindex $option 3]] - ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text [mc "%s:" $text] - if {$use_ttk} { - ttk::combobox $w.$f.$optid.v \ - -textvariable ${f}_config_new($name) \ - -values $opts -state readonly - } else { - eval tk_optionMenu $w.$f.$optid.v \ - ${f}_config_new($name) \ - $opts - } + ttk::frame $w.$f.$optid + ttk::label $w.$f.$optid.l -text [mc "%s:" $text] + ttk::combobox $w.$f.$optid.v \ + -textvariable ${f}_config_new($name) \ + -values $opts -state readonly pack $w.$f.$optid.l -side left -anchor w -fill x pack $w.$f.$optid.v -side right -anchor e -padx 5 pack $w.$f.$optid -side top -anchor w -fill x @@ -250,17 +244,11 @@ proc do_options {} { set ${f}_config_new(gui.spellingdictionary) $value } - ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text [mc "Spelling Dictionary:"] - if {$use_ttk} { - ttk::combobox $w.$f.$optid.v \ - -textvariable ${f}_config_new(gui.spellingdictionary) \ - -values $all_dicts -state readonly - } else { - eval tk_optionMenu $w.$f.$optid.v \ - ${f}_config_new(gui.spellingdictionary) \ - $all_dicts - } + ttk::frame $w.$f.$optid + ttk::label $w.$f.$optid.l -text [mc "Spelling Dictionary:"] + ttk::combobox $w.$f.$optid.v \ + -textvariable ${f}_config_new(gui.spellingdictionary) \ + -values $all_dicts -state readonly pack $w.$f.$optid.l -side left -anchor w -fill x pack $w.$f.$optid.v -side right -anchor e -padx 5 pack $w.$f.$optid -side top -anchor w -fill x @@ -278,9 +266,9 @@ proc do_options {} { set global_config_new(gui.$font^^size) \ [font configure $font -size] - ${NS}::frame $w.global.$name - ${NS}::label $w.global.$name.l -text [mc "%s:" $text] - ${NS}::button $w.global.$name.b \ + ttk::frame $w.global.$name + ttk::label $w.global.$name.l -text [mc "%s:" $text] + ttk::button $w.global.$name.b \ -text [mc "Change Font"] \ -command [list \ tchoosefont \ @@ -289,9 +277,9 @@ proc do_options {} { global_config_new(gui.$font^^family) \ global_config_new(gui.$font^^size) \ ] - ${NS}::label $w.global.$name.f -textvariable global_config_new(gui.$font^^family) - ${NS}::label $w.global.$name.s -textvariable global_config_new(gui.$font^^size) - ${NS}::label $w.global.$name.pt -text [mc "pt."] + ttk::label $w.global.$name.f -textvariable global_config_new(gui.$font^^family) + ttk::label $w.global.$name.s -textvariable global_config_new(gui.$font^^size) + ttk::label $w.global.$name.pt -text [mc "pt."] pack $w.global.$name.l -side left -anchor w pack $w.global.$name.b -side right -anchor e pack $w.global.$name.pt -side right -anchor w diff --git a/lib/remote.tcl b/lib/remote.tcl index ef77ed7..9b49b6e 100644 --- a/lib/remote.tcl +++ b/lib/remote.tcl @@ -32,7 +32,7 @@ proc all_tracking_branches {} { } if {$pat ne {}} { - set fd [eval git_read for-each-ref --format=%(refname) $cmd] + set fd [git_read [concat for-each-ref --format=%(refname) $cmd]] while {[gets $fd n] > 0} { foreach spec $pat { set dst [string range [lindex $spec 0] 0 end-2] @@ -75,7 +75,7 @@ proc load_all_remotes {} { foreach name $all_remotes { catch { - set fd [open [file join $rm_dir $name] r] + set fd [safe_open_file [file join $rm_dir $name] r] while {[gets $fd line] >= 0} { if {[regexp {^URL:[ ]*(.+)$} $line line url]} { set remote_url($name) $url @@ -145,7 +145,7 @@ proc add_fetch_entry {r} { } } else { catch { - set fd [open [gitdir remotes $r] r] + set fd [safe_open_file [gitdir remotes $r] r] while {[gets $fd n] >= 0} { if {[regexp {^Pull:[ \t]*([^:]+):} $n]} { set enable 1 @@ -182,7 +182,7 @@ proc add_push_entry {r} { } } else { catch { - set fd [open [gitdir remotes $r] r] + set fd [safe_open_file [gitdir remotes $r] r] while {[gets $fd n] >= 0} { if {[regexp {^Push:[ \t]*([^:]+):} $n]} { set enable 1 @@ -233,8 +233,6 @@ proc make_sure_remote_submenues_exist {remote_m} { proc update_all_remotes_menu_entry {} { global all_remotes - if {[git-version < 1.6.6]} { return } - set have_remote 0 foreach r $all_remotes { incr have_remote diff --git a/lib/remote_add.tcl b/lib/remote_add.tcl index 480a6b3..bff1376 100644 --- a/lib/remote_add.tcl +++ b/lib/remote_add.tcl @@ -13,7 +13,7 @@ field location {}; # location of the remote the user has chosen field opt_action fetch; # action to do after registering the remote locally constructor dialog {} { - global repo_config use_ttk NS + global repo_config make_dialog top w wm withdraw $top @@ -22,34 +22,34 @@ constructor dialog {} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } - ${NS}::label $w.header -text [mc "Add New Remote"] \ + ttk::label $w.header -text [mc "Add New Remote"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.create -text [mc Add] \ + ttk::frame $w.buttons + ttk::button $w.buttons.create -text [mc Add] \ -default active \ -command [cb _add] pack $w.buttons.create -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.desc -text [mc "Remote Details"] + ttk::labelframe $w.desc -text [mc "Remote Details"] - ${NS}::label $w.desc.name_l -text [mc "Name:"] + ttk::label $w.desc.name_l -text [mc "Name:"] set w_name $w.desc.name_t - ${NS}::entry $w_name \ + ttk::entry $w_name \ -width 40 \ -textvariable @name \ -validate key \ -validatecommand [cb _validate_name %d %S] grid $w.desc.name_l $w_name -sticky we -padx {0 5} - ${NS}::label $w.desc.loc_l -text [mc "Location:"] + ttk::label $w.desc.loc_l -text [mc "Location:"] set w_loc $w.desc.loc_t - ${NS}::entry $w_loc \ + ttk::entry $w_loc \ -width 40 \ -textvariable @location grid $w.desc.loc_l $w_loc -sticky we -padx {0 5} @@ -57,21 +57,21 @@ constructor dialog {} { grid columnconfigure $w.desc 1 -weight 1 pack $w.desc -anchor nw -fill x -pady 5 -padx 5 - ${NS}::labelframe $w.action -text [mc "Further Action"] + ttk::labelframe $w.action -text [mc "Further Action"] - ${NS}::radiobutton $w.action.fetch \ + ttk::radiobutton $w.action.fetch \ -text [mc "Fetch Immediately"] \ -value fetch \ -variable @opt_action pack $w.action.fetch -anchor nw - ${NS}::radiobutton $w.action.push \ + ttk::radiobutton $w.action.push \ -text [mc "Initialize Remote Repository and Push"] \ -value push \ -variable @opt_action pack $w.action.push -anchor nw - ${NS}::radiobutton $w.action.none \ + ttk::radiobutton $w.action.none \ -text [mc "Do Nothing Else Now"] \ -value none \ -variable @opt_action diff --git a/lib/remote_branch_delete.tcl b/lib/remote_branch_delete.tcl index 5ba9fca..349d31e 100644 --- a/lib/remote_branch_delete.tcl +++ b/lib/remote_branch_delete.tcl @@ -23,7 +23,7 @@ field full_cache field cached constructor dialog {} { - global all_remotes M1B use_ttk NS + global all_remotes M1B make_dialog top w wm title $top [mc "%s (%s): Delete Branch Remotely" [appname] [reponame]] @@ -31,32 +31,28 @@ constructor dialog {} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } - ${NS}::label $w.header -text [mc "Delete Branch Remotely"] \ + ttk::label $w.header -text [mc "Delete Branch Remotely"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.delete -text [mc Delete] \ + ttk::frame $w.buttons + ttk::button $w.buttons.delete -text [mc Delete] \ -default active \ -command [cb _delete] pack $w.buttons.delete -side right - ${NS}::button $w.buttons.cancel -text [mc "Cancel"] \ + ttk::button $w.buttons.cancel -text [mc "Cancel"] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.dest -text [mc "From Repository"] + ttk::labelframe $w.dest -text [mc "From Repository"] if {$all_remotes ne {}} { - ${NS}::radiobutton $w.dest.remote_r \ + ttk::radiobutton $w.dest.remote_r \ -text [mc "Remote:"] \ -value remote \ -variable @urltype - if {$use_ttk} { - ttk::combobox $w.dest.remote_m -textvariable @remote \ - -values $all_remotes -state readonly - } else { - eval tk_optionMenu $w.dest.remote_m @remote $all_remotes - } + ttk::combobox $w.dest.remote_m -textvariable @remote \ + -values $all_remotes -state readonly grid $w.dest.remote_r $w.dest.remote_m -sticky w if {[lsearch -sorted -exact $all_remotes origin] != -1} { set remote origin @@ -68,11 +64,11 @@ constructor dialog {} { } else { set urltype url } - ${NS}::radiobutton $w.dest.url_r \ + ttk::radiobutton $w.dest.url_r \ -text [mc "Arbitrary Location:"] \ -value url \ -variable @urltype - ${NS}::entry $w.dest.url_t \ + ttk::entry $w.dest.url_t \ -width 50 \ -textvariable @url \ -validate key \ @@ -85,19 +81,19 @@ constructor dialog {} { grid columnconfigure $w.dest 1 -weight 1 pack $w.dest -anchor nw -fill x -pady 5 -padx 5 - ${NS}::labelframe $w.heads -text [mc "Branches"] + ttk::labelframe $w.heads -text [mc "Branches"] slistbox $w.heads.l \ -height 10 \ -width 70 \ -listvariable @head_list \ -selectmode extended - ${NS}::frame $w.heads.footer - ${NS}::label $w.heads.footer.status \ + ttk::frame $w.heads.footer + ttk::label $w.heads.footer.status \ -textvariable @status \ -anchor w \ -justify left - ${NS}::button $w.heads.footer.rescan \ + ttk::button $w.heads.footer.rescan \ -text [mc "Rescan"] \ -command [cb _rescan] pack $w.heads.footer.status -side left -fill x @@ -107,8 +103,8 @@ constructor dialog {} { pack $w.heads.l -side left -fill both -expand 1 pack $w.heads -fill both -expand 1 -pady 5 -padx 5 - ${NS}::labelframe $w.validate -text [mc "Delete Only If"] - ${NS}::radiobutton $w.validate.head_r \ + ttk::labelframe $w.validate -text [mc "Delete Only If"] + ttk::radiobutton $w.validate.head_r \ -text [mc "Merged Into:"] \ -value head \ -variable @checktype @@ -116,7 +112,7 @@ constructor dialog {} { trace add variable @head_list write [cb _write_head_list] trace add variable @check_head write [cb _write_check_head] grid $w.validate.head_r $w.validate.head_m -sticky w - ${NS}::radiobutton $w.validate.always_r \ + ttk::radiobutton $w.validate.always_r \ -text [mc "Always (Do not perform merge checks)"] \ -value always \ -variable @checktype @@ -308,7 +304,7 @@ method _load {cache uri} { set full_list [list] set head_cache($cache) [list] set full_cache($cache) [list] - set active_ls [git_read ls-remote $uri] + set active_ls [git_read [list ls-remote $uri]] fconfigure $active_ls \ -blocking 0 \ -translation lf \ @@ -323,6 +319,8 @@ method _load {cache uri} { } method _read {cache fd} { + global hashlength + if {$fd ne $active_ls} { catch {close $fd} return @@ -330,7 +328,7 @@ method _read {cache fd} { while {[gets $fd line] >= 0} { if {[string match {*^{}} $line]} continue - if {[regexp {^([0-9a-f]{40}) (.*)$} $line _junk obj ref]} { + if {[regexp [string map "@@ $hashlength" {^([0-9a-f]{@@}) (.*)$}] $line _junk obj ref]} { if {[regsub ^refs/heads/ $ref {} abr]} { lappend head_list $abr lappend head_cache($cache) $abr diff --git a/lib/search.tcl b/lib/search.tcl index ef1e555..47a0d8c 100644 --- a/lib/search.tcl +++ b/lib/search.tcl @@ -21,7 +21,6 @@ field smarktop field smarkbot constructor new {i_w i_text args} { - global use_ttk NS set w $i_w set ctext $i_text @@ -44,14 +43,14 @@ constructor new {i_w i_text args} { set history [list] - ${NS}::frame $w - ${NS}::label $w.l -text [mc Find:] + ttk::frame $w + ttk::label $w.l -text [mc Find:] tentry $w.ent -textvariable ${__this}::searchstring -background lightgreen - ${NS}::button $w.bn -text [mc Next] -command [cb find_next] - ${NS}::button $w.bp -text [mc Prev] -command [cb find_prev] - ${NS}::checkbutton $w.re -text [mc RegExp] \ + ttk::button $w.bn -text [mc Next] -command [cb find_next] + ttk::button $w.bp -text [mc Prev] -command [cb find_prev] + ttk::checkbutton $w.re -text [mc RegExp] \ -variable ${__this}::regexpsearch -command [cb _incrsearch] - ${NS}::checkbutton $w.cs -text [mc Case] \ + ttk::checkbutton $w.cs -text [mc Case] \ -variable ${__this}::casesensitive -command [cb _incrsearch] pack $w.l -side left pack $w.cs -side right diff --git a/lib/shortcut.tcl b/lib/shortcut.tcl index 97d1d7a..4316650 100644 --- a/lib/shortcut.tcl +++ b/lib/shortcut.tcl @@ -3,38 +3,49 @@ proc do_windows_shortcut {} { global _gitworktree - set fn [tk_getSaveFile \ - -parent . \ - -title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ - -initialfile "Git [reponame].lnk"] - if {$fn != {}} { - if {[file extension $fn] ne {.lnk}} { - set fn ${fn}.lnk - } - # Use git-gui.exe if available (ie: git-for-windows) - set cmdLine [auto_execok git-gui.exe] - if {$cmdLine eq {}} { - set cmdLine [list [info nameofexecutable] \ - [file normalize $::argv0]] - } - if {[catch { - win32_create_lnk $fn $cmdLine \ - [file normalize $_gitworktree] - } err]} { - error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"] + + set desktop [safe_exec [list cygpath -mD]] + set link_file "Git [reponame].lnk" + set link_path [file normalize [file join $desktop $link_file]] + + # on Windows, tk_getSaveFile dereferences .lnk files, so no simple + # filename chooser is available. Use the default or quit. + if {[file exists $link_path]} { + set answer [tk_messageBox \ + -type yesno \ + -title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ + -default yes \ + -message [mc "Replace existing shortcut: %s?" $link_file]] + if {$answer == no} { + return } } + + # Use git-gui.exe if found, fall back to wish + launcher + set link_arguments {} + set link_target [safe_exec [list cygpath -m /cmd/git-gui.exe]] + if {![file executable $link_target]} { + set link_target [_which git-gui] + } + if {![file executable $link_target]} { + set link_target [file normalize [info nameofexecutable]] + set link_arguments [file normalize $::argv0] + } + set cmdLine [list $link_target $link_arguments] + if {[catch { + win32_create_lnk $link_path $cmdLine \ + [file normalize $_gitworktree] + } err]} { + error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"] + } } proc do_cygwin_shortcut {} { - global argv0 _gitworktree + global argv0 _gitworktree oguilib if {[catch { - set desktop [exec cygpath \ - --windows \ - --absolute \ - --long-name \ - --desktop] + set desktop [safe_exec [list cygpath \ + --desktop]] }]} { set desktop . } @@ -48,19 +59,19 @@ proc do_cygwin_shortcut {} { set fn ${fn}.lnk } if {[catch { - set sh [exec cygpath \ - --windows \ - --absolute \ + set repodir [file normalize $_gitworktree] + set shargs {-c \ + "CHERE_INVOKING=1 \ + source /etc/profile; \ + git gui"} + safe_exec [list /bin/mkshortcut.exe \ + --arguments $shargs \ + --desc "git-gui on $repodir" \ + --icon $oguilib/git-gui.ico \ + --name $fn \ + --show min \ + --workingdir $repodir \ /bin/sh.exe] - set me [exec cygpath \ - --unix \ - --absolute \ - $argv0] - win32_create_lnk $fn [list \ - $sh -c \ - "CHERE_INVOKING=1 source /etc/profile;[sq $me] &" \ - ] \ - [file normalize $_gitworktree] } err]} { error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"] } @@ -86,7 +97,7 @@ proc do_macosx_app {} { file mkdir $MacOS - set fd [open [file join $Contents Info.plist] w] + set fd [safe_open_file [file join $Contents Info.plist] w] puts $fd { @@ -111,7 +122,7 @@ proc do_macosx_app {} { } close $fd - set fd [open $exe w] + set fd [safe_open_file $exe w] puts $fd "#!/bin/sh" foreach name [lsort [array names env]] { set value $env($name) diff --git a/lib/sshkey.tcl b/lib/sshkey.tcl index 589ff8f..7a6526d 100644 --- a/lib/sshkey.tcl +++ b/lib/sshkey.tcl @@ -7,7 +7,7 @@ proc find_ssh_key {} { ~/.ssh/id_rsa.pub ~/.ssh/identity.pub } { if {[file exists $name]} { - set fh [open $name r] + set fh [safe_open_file $name r] set cont [read $fh] close $fh return [list $name $cont] @@ -18,7 +18,7 @@ proc find_ssh_key {} { } proc do_ssh_key {} { - global sshkey_title have_tk85 sshkey_fd use_ttk NS + global sshkey_title sshkey_fd set w .sshkey_dialog if {[winfo exists $w]} { @@ -38,9 +38,9 @@ proc do_ssh_key {} { set gen_state disabled } - ${NS}::frame $w.header - ${NS}::label $w.header.lbl -textvariable sshkey_title -anchor w - ${NS}::button $w.header.gen -text [mc "Generate Key"] \ + ttk::frame $w.header + ttk::label $w.header.lbl -textvariable sshkey_title -anchor w + ttk::button $w.header.gen -text [mc "Generate Key"] \ -command [list make_ssh_key $w] -state $gen_state pack $w.header.lbl -side left -expand 1 -fill x pack $w.header.gen -side right @@ -48,17 +48,14 @@ proc do_ssh_key {} { text $w.contents -width 60 -height 10 -wrap char -relief sunken pack $w.contents -fill both -expand 1 - if {$have_tk85} { - set clr darkblue - if {$use_ttk} { set clr [ttk::style lookup . -selectbackground] } - $w.contents configure -inactiveselectbackground $clr - } + set clr [ttk::style lookup . -selectbackground] + $w.contents configure -inactiveselectbackground $clr - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.close -text [mc Close] \ + ttk::frame $w.buttons + ttk::button $w.buttons.close -text [mc Close] \ -default active -command [list destroy $w] pack $w.buttons.close -side right - ${NS}::button $w.buttons.copy -text [mc "Copy To Clipboard"] \ + ttk::button $w.buttons.copy -text [mc "Copy To Clipboard"] \ -command [list tk_textCopy $w.contents] pack $w.buttons.copy -side left pack $w.buttons -side bottom -fill x -pady 5 -padx 5 @@ -83,9 +80,10 @@ proc make_ssh_key {w} { set sshkey_title [mc "Generating..."] $w.header.gen configure -state disabled - set cmdline [list sh -c {echo | ssh-keygen -q -t rsa -f ~/.ssh/id_rsa 2>&1}] + set cmdline [list [shellpath] -c \ + {echo | ssh-keygen -q -t rsa -f ~/.ssh/id_rsa 2>&1}] - if {[catch { set sshkey_fd [_open_stdout_stderr $cmdline] } err]} { + if {[catch { set sshkey_fd [safe_open_command $cmdline] } err]} { error_popup [mc "Could not start ssh-keygen:\n\n%s" $err] return } diff --git a/lib/status_bar.tcl b/lib/status_bar.tcl index 02111a1..f5c0204 100644 --- a/lib/status_bar.tcl +++ b/lib/status_bar.tcl @@ -1,29 +1,58 @@ # git-gui status bar mega-widget # Copyright (C) 2007 Shawn Pearce +# The status_bar class manages the entire status bar. It is possible for +# multiple overlapping asynchronous operations to want to display status +# simultaneously. Each one receives a status_bar_operation when it calls the +# start method, and the status bar combines all active operations into the +# line of text it displays. Most of the time, there will be at most one +# ongoing operation. +# +# Note that the entire status bar can be either in single-line or two-line +# mode, depending on the constructor. Multiple active operations are only +# supported for single-line status bars. + class status_bar { +field allow_multiple ; # configured at construction + field w ; # our own window path field w_l ; # text widget we draw messages into field w_c ; # canvas we draw a progress bar into field c_pack ; # script to pack the canvas with -field status {}; # single line of text we show -field prefix {}; # text we format into status -field units {}; # unit of progress -field meter {}; # current core git progress meter (if active) + +field baseline_text ; # text to show if there are no operations +field status_bar_text ; # combined text for all operations + +field operations ; # list of current ongoing operations + +# The status bar can display a progress bar, updated when consumers call the +# update method on their status_bar_operation. When there are multiple +# operations, the status bar shows the combined status of all operations. +# +# When an overlapping operation completes, the progress bar is going to +# abruptly have one fewer operation in the calculation, causing a discontinuity. +# Therefore, whenever an operation completes, if it is not the last operation, +# this counter is increased, and the progress bar is calculated as though there +# were still another operation at 100%. When the last operation completes, this +# is reset to 0. +field completed_operation_count constructor new {path} { - global use_ttk NS set w $path set w_l $w.l set w_c $w.c - ${NS}::frame $w - if {!$use_ttk} { - $w configure -borderwidth 1 -relief sunken - } - ${NS}::label $w_l \ - -textvariable @status \ + # Standard single-line status bar: Permit overlapping operations + set allow_multiple 1 + + set baseline_text "" + set operations [list] + set completed_operation_count 0 + + ttk::frame $w + ttk::label $w_l \ + -textvariable @status_bar_text \ -anchor w \ -justify left pack $w_l -side left @@ -39,14 +68,20 @@ method _oneline_pack {} { } constructor two_line {path} { - global NS set w $path set w_l $w.l set w_c $w.c - ${NS}::frame $w - ${NS}::label $w_l \ - -textvariable @status \ + # Two-line status bar: Only one ongoing operation permitted. + set allow_multiple 0 + + set baseline_text "" + set operations [list] + set completed_operation_count 0 + + ttk::frame $w + ttk::label $w_l \ + -textvariable @status_bar_text \ -anchor w \ -justify left pack $w_l -anchor w -fill x @@ -56,7 +91,7 @@ constructor two_line {path} { return $this } -method start {msg uds} { +method ensure_canvas {} { if {[winfo exists $w_c]} { $w_c coords bar 0 0 0 20 } else { @@ -68,31 +103,170 @@ method start {msg uds} { $w_c create rectangle 0 0 0 20 -tags bar -fill navy eval $c_pack } +} + +method show {msg} { + $this ensure_canvas + set baseline_text $msg + $this refresh +} + +method start {msg {uds {}}} { + set baseline_text "" + + if {!$allow_multiple && [llength $operations]} { + return [lindex $operations 0] + } + + $this ensure_canvas + + set operation [status_bar_operation::new $this $msg $uds] + + lappend operations $operation + + $this refresh + + return $operation +} + +method refresh {} { + set new_text "" + + set total [expr $completed_operation_count * 100] + set have $total + + foreach operation $operations { + if {$new_text != ""} { + append new_text " / " + } + + append new_text [$operation get_status] + + set total [expr $total + 100] + set have [expr $have + [$operation get_progress]] + } + + if {$new_text == ""} { + set new_text $baseline_text + } + + set status_bar_text $new_text + + if {[winfo exists $w_c]} { + set pixel_width 0 + if {$have > 0} { + set pixel_width [expr {[winfo width $w_c] * $have / $total}] + } + + $w_c coords bar 0 0 $pixel_width 20 + } +} + +method stop {operation stop_msg} { + set idx [lsearch $operations $operation] + + if {$idx >= 0} { + set operations [lreplace $operations $idx $idx] + set completed_operation_count [expr \ + $completed_operation_count + 1] + + if {[llength $operations] == 0} { + set completed_operation_count 0 + + destroy $w_c + if {$stop_msg ne {}} { + set baseline_text $stop_msg + } + } + + $this refresh + } +} + +method stop_all {{stop_msg {}}} { + # This makes the operation's call to stop a no-op. + set operations_copy $operations + set operations [list] + + foreach operation $operations_copy { + $operation stop + } + + if {$stop_msg ne {}} { + set baseline_text $stop_msg + } + + $this refresh +} + +method _delete {current} { + if {$current eq $w} { + delete_this + } +} + +} + +# The status_bar_operation class tracks a single consumer's ongoing status bar +# activity, with the context that there are a few situations where multiple +# overlapping asynchronous operations might want to display status information +# simultaneously. Instances of status_bar_operation are created by calling +# start on the status_bar, and when the caller is done with its stauts bar +# operation, it calls stop on the operation. + +class status_bar_operation { + +field status_bar; # reference back to the status_bar that owns this object + +field is_active; + +field status {}; # single line of text we show +field progress {}; # current progress (0 to 100) +field prefix {}; # text we format into status +field units {}; # unit of progress +field meter {}; # current core git progress meter (if active) + +constructor new {owner msg uds} { + set status_bar $owner set status $msg + set progress 0 set prefix $msg set units $uds set meter {} + + set is_active 1 + + return $this } +method get_is_active {} { return $is_active } +method get_status {} { return $status } +method get_progress {} { return $progress } + method update {have total} { - set pdone 0 - set cdone 0 + if {!$is_active} { return } + + set progress 0 + if {$total > 0} { - set pdone [expr {100 * $have / $total}] - set cdone [expr {[winfo width $w_c] * $have / $total}] + set progress [expr {100 * $have / $total}] } set prec [string length [format %i $total]] + set status [mc "%s ... %*i of %*i %s (%3i%%)" \ $prefix \ $prec $have \ $prec $total \ - $units $pdone] - $w_c coords bar 0 0 $cdone 20 + $units $progress] + + $status_bar refresh } method update_meter {buf} { + if {!$is_active} { return } + append meter $buf set r [string last "\r" $meter] if {$r == -1} { @@ -109,23 +283,25 @@ method update_meter {buf} { } } -method stop {{msg {}}} { - destroy $w_c - if {$msg ne {}} { - set status $msg +method stop {{stop_msg {}}} { + if {$is_active} { + set is_active 0 + $status_bar stop $this $stop_msg } } -method show {msg {test {}}} { - if {$test eq {} || $status eq $test} { - set status $msg - } +method restart {msg} { + if {!$is_active} { return } + + set status $msg + set prefix $msg + set meter {} + $status_bar refresh } -method _delete {current} { - if {$current eq $w} { - delete_this - } +method _delete {} { + stop + delete_this } } diff --git a/lib/themed.tcl b/lib/themed.tcl index 88b3119..8c4a0c2 100644 --- a/lib/themed.tcl +++ b/lib/themed.tcl @@ -1,6 +1,61 @@ # Functions for supporting the use of themed Tk widgets in git-gui. # Copyright (C) 2009 Pat Thoyts + +namespace eval color { + # Variable colors + # Preffered way to set widget colors is using add_option. + # In some cases, like with tags in_diff/in_sel, we use these colors. + variable select_bg lightgray + variable select_fg black + variable inactive_select_bg lightgray + variable inactive_select_fg black + + proc sync_with_theme {} { + set base_bg [ttk::style lookup . -background] + set base_fg [ttk::style lookup . -foreground] + set text_bg [ttk::style lookup Treeview -background] + set text_fg [ttk::style lookup Treeview -foreground] + set select_bg [ttk::style lookup Default -selectbackground] + set select_fg [ttk::style lookup Default -selectforeground] + set inactive_select_bg [convert_rgb_to_gray $select_bg] + set inactive_select_fg $select_fg + + set color::select_bg $select_bg + set color::select_fg $select_fg + set color::inactive_select_bg $inactive_select_bg + set color::inactive_select_fg $inactive_select_fg + + proc add_option {key val} { + option add $key $val widgetDefault + } + # Add options for plain Tk widgets + # Using `option add` instead of tk_setPalette to avoid unintended + # consequences. + if {![is_MacOSX]} { + add_option *Menu.Background $base_bg + add_option *Menu.Foreground $base_fg + add_option *Menu.activeBackground $select_bg + add_option *Menu.activeForeground $select_fg + } + add_option *Text.Background $text_bg + add_option *Text.Foreground $text_fg + add_option *Text.selectBackground $select_bg + add_option *Text.selectForeground $select_fg + add_option *Text.inactiveSelectBackground $inactive_select_bg + add_option *Text.inactiveSelectForeground $inactive_select_fg + } +} + +proc convert_rgb_to_gray {rgb} { + # Simply take the average of red, green and blue. This wouldn't be good + # enough for, say, converting a photo to grayscale, but for this simple + # purpose of approximating the brightness of a color it's good enough. + lassign [winfo rgb . $rgb] r g b + set gray [expr {($r / 256 + $g / 256 + $b / 256) / 3}] + return [format "#%2.2X%2.2X%2.2X" $gray $gray $gray] +} + proc ttk_get_current_theme {} { # Handle either current Tk or older versions of 8.5 if {[catch {set theme [ttk::style theme use]}]} { @@ -135,8 +190,7 @@ proc InitEntryFrame {} { } proc gold_frame {w args} { - global use_ttk - if {$use_ttk} { + if {![is_MacOSX]} { eval [linsert $args 0 ttk::frame $w -style Gold.TFrame] } else { eval [linsert $args 0 frame $w -background gold] @@ -144,8 +198,7 @@ proc gold_frame {w args} { } proc tlabel {w args} { - global use_ttk - if {$use_ttk} { + if {![is_MacOSX]} { set cmd [list ttk::label $w -style Color.TLabel] foreach {k v} $args { switch -glob -- $k { @@ -161,17 +214,7 @@ proc tlabel {w args} { # The padded label gets used in the about class. proc paddedlabel {w args} { - global use_ttk - if {$use_ttk} { - eval [linsert $args 0 ttk::label $w -style Padded.TLabel] - } else { - eval [linsert $args 0 label $w \ - -padx 5 -pady 5 \ - -justify left \ - -anchor w \ - -borderwidth 1 \ - -relief solid] - } + eval [linsert $args 0 ttk::label $w -style Padded.TLabel] } # Create a toplevel for use as a dialog. @@ -187,8 +230,7 @@ proc Dialog {w args} { # Tk toplevels are not themed - so pave it over with a themed frame to get # the base color correct per theme. proc pave_toplevel {w} { - global use_ttk - if {$use_ttk && ![winfo exists $w.!paving]} { + if {![winfo exists $w.!paving]} { set paving [ttk::frame $w.!paving] place $paving -x 0 -y 0 -relwidth 1 -relheight 1 lower $paving @@ -199,20 +241,11 @@ proc pave_toplevel {w} { # On many themes the border for a scrolled listbox needs to go around the # listbox and the scrollbar. proc slistbox {w args} { - global use_ttk NS - if {$use_ttk} { - set f [ttk::frame $w -style SListbox.TFrame -padding 2] - } else { - set f [frame $w -relief flat] - } + set f [ttk::frame $w -style SListbox.TFrame -padding 2] if {[catch { - if {$use_ttk} { - eval [linsert $args 0 listbox $f.list -relief flat \ - -highlightthickness 0 -borderwidth 0] - } else { - eval [linsert $args 0 listbox $f.list] - } - ${NS}::scrollbar $f.vs -command [list $f.list yview] + eval [linsert $args 0 listbox $f.list -relief flat \ + -highlightthickness 0 -borderwidth 0] + ttk::scrollbar $f.vs -command [list $f.list yview] $f.list configure -yscrollcommand [list $f.vs set] grid $f.list $f.vs -sticky news grid rowconfigure $f 0 -weight 1 @@ -230,67 +263,42 @@ proc slistbox {w args} { # fetch the background color from a widget. proc get_bg_color {w} { - global use_ttk - if {$use_ttk} { - set bg [ttk::style lookup [winfo class $w] -background] - } else { - set bg [$w cget -background] - } + set bg [ttk::style lookup [winfo class $w] -background] return $bg } -# ttk::spinbox didn't get added until 8.6 +# ttk::spinbox proc tspinbox {w args} { - global use_ttk - if {$use_ttk && [llength [info commands ttk::spinbox]] > 0} { - eval [linsert $args 0 ttk::spinbox $w] - } else { - eval [linsert $args 0 spinbox $w] - } + eval [linsert $args 0 ttk::spinbox $w] } # Create a text widget with any theme specific properties. proc ttext {w args} { - global use_ttk - if {$use_ttk} { - switch -- [ttk_get_current_theme] { - "vista" - "xpnative" { - lappend args -highlightthickness 0 -borderwidth 0 - } + switch -- [ttk_get_current_theme] { + "vista" - "xpnative" { + lappend args -highlightthickness 0 -borderwidth 0 } } set w [eval [linsert $args 0 text $w]] - if {$use_ttk} { - if {[winfo class [winfo parent $w]] eq "EntryFrame"} { - bind $w {[winfo parent %W] state focus} - bind $w {[winfo parent %W] state !focus} - } + if {[winfo class [winfo parent $w]] eq "EntryFrame"} { + bind $w {[winfo parent %W] state focus} + bind $w {[winfo parent %W] state !focus} } return $w } # themed frame suitable for surrounding a text field. proc textframe {w args} { - global use_ttk - if {$use_ttk} { - if {[catch {ttk::style layout EntryFrame}]} { - InitEntryFrame - } - eval [linsert $args 0 ttk::frame $w -class EntryFrame -style EntryFrame] - } else { - eval [linsert $args 0 frame $w] + if {[catch {ttk::style layout EntryFrame}]} { + InitEntryFrame } + eval [linsert $args 0 ttk::frame $w -class EntryFrame -style EntryFrame] return $w } proc tentry {w args} { - global use_ttk - if {$use_ttk} { - InitTheme - ttk::entry $w -style Edged.Entry - } else { - entry $w - } + InitTheme + ttk::entry $w -style Edged.Entry rename $w _$w interp alias {} $w {} tentry_widgetproc $w @@ -298,25 +306,14 @@ proc tentry {w args} { return $w } proc tentry_widgetproc {w cmd args} { - global use_ttk switch -- $cmd { state { - if {$use_ttk} { - return [uplevel 1 [list _$w $cmd] $args] - } else { - if {[lsearch -exact $args pressed] != -1} { - _$w configure -background lightpink - } else { - _$w configure -background lightgreen - } - } + return [uplevel 1 [list _$w $cmd] $args] } configure { - if {$use_ttk} { - if {[set n [lsearch -exact $args -background]] != -1} { - set args [lreplace $args $n [incr n]] - if {[llength $args] == 0} {return} - } + if {[set n [lsearch -exact $args -background]] != -1} { + set args [lreplace $args $n [incr n]] + if {[llength $args] == 0} {return} } return [uplevel 1 [list _$w $cmd] $args] } diff --git a/lib/tools.tcl b/lib/tools.tcl index 413f1a1..48fddfd 100644 --- a/lib/tools.tcl +++ b/lib/tools.tcl @@ -110,14 +110,14 @@ proc tools_exec {fullname} { set cmdline $repo_config(guitool.$fullname.cmd) if {[is_config_true "guitool.$fullname.noconsole"]} { - tools_run_silent [list sh -c $cmdline] \ + tools_run_silent [list [shellpath] -c $cmdline] \ [list tools_complete $fullname {}] } else { regsub {/} $fullname { / } title set w [console::new \ [mc "Tool: %s" $title] \ [mc "Running: %s" $cmdline]] - console::exec $w [list sh -c $cmdline] \ + console::exec $w [list [shellpath] -c $cmdline] \ [list tools_complete $fullname $w] } @@ -130,8 +130,7 @@ proc tools_exec {fullname} { } proc tools_run_silent {cmd after} { - lappend cmd 2>@1 - set fd [_open_stdout_stderr $cmd] + set fd [safe_open_command $cmd [list 2>@1]] fconfigure $fd -blocking 0 -translation binary fileevent $fd readable [list tools_consume_input $fd $after] diff --git a/lib/tools_dlg.tcl b/lib/tools_dlg.tcl index c05413c..7323621 100644 --- a/lib/tools_dlg.tcl +++ b/lib/tools_dlg.tcl @@ -16,7 +16,7 @@ field ask_branch 0; # ask for a revision field ask_args 0; # ask for additional args constructor dialog {} { - global repo_config use_ttk NS + global repo_config make_dialog top w wm title $top [mc "%s (%s): Add Tool" [appname] [reponame]] @@ -25,41 +25,41 @@ constructor dialog {} { wm transient $top . } - ${NS}::label $w.header -text [mc "Add New Tool Command"] \ + ttk::label $w.header -text [mc "Add New Tool Command"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::checkbutton $w.buttons.global \ + ttk::frame $w.buttons + ttk::checkbutton $w.buttons.global \ -text [mc "Add globally"] \ -variable @add_global pack $w.buttons.global -side left -padx 5 - ${NS}::button $w.buttons.create -text [mc Add] \ + ttk::button $w.buttons.create -text [mc Add] \ -default active \ -command [cb _add] pack $w.buttons.create -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.desc -text [mc "Tool Details"] + ttk::labelframe $w.desc -text [mc "Tool Details"] - ${NS}::label $w.desc.name_cmnt -anchor w\ + ttk::label $w.desc.name_cmnt -anchor w\ -text [mc "Use '/' separators to create a submenu tree:"] grid x $w.desc.name_cmnt -sticky we -padx {0 5} -pady {0 2} - ${NS}::label $w.desc.name_l -text [mc "Name:"] + ttk::label $w.desc.name_l -text [mc "Name:"] set w_name $w.desc.name_t - ${NS}::entry $w_name \ + ttk::entry $w_name \ -width 40 \ -textvariable @name \ -validate key \ -validatecommand [cb _validate_name %d %S] grid $w.desc.name_l $w_name -sticky we -padx {0 5} - ${NS}::label $w.desc.cmd_l -text [mc "Command:"] + ttk::label $w.desc.cmd_l -text [mc "Command:"] set w_cmd $w.desc.cmd_t - ${NS}::entry $w_cmd \ + ttk::entry $w_cmd \ -width 40 \ -textvariable @command grid $w.desc.cmd_l $w_cmd -sticky we -padx {0 5} -pady {0 3} @@ -67,30 +67,30 @@ constructor dialog {} { grid columnconfigure $w.desc 1 -weight 1 pack $w.desc -anchor nw -fill x -pady 5 -padx 5 - ${NS}::checkbutton $w.confirm \ + ttk::checkbutton $w.confirm \ -text [mc "Show a dialog before running"] \ -variable @confirm -command [cb _check_enable_dlg] - ${NS}::labelframe $w.dlg -labelwidget $w.confirm + ttk::labelframe $w.dlg -labelwidget $w.confirm - ${NS}::checkbutton $w.dlg.askbranch \ + ttk::checkbutton $w.dlg.askbranch \ -text [mc "Ask the user to select a revision (sets \$REVISION)"] \ -variable @ask_branch -state disabled pack $w.dlg.askbranch -anchor w -padx 15 - ${NS}::checkbutton $w.dlg.askargs \ + ttk::checkbutton $w.dlg.askargs \ -text [mc "Ask the user for additional arguments (sets \$ARGS)"] \ -variable @ask_args -state disabled pack $w.dlg.askargs -anchor w -padx 15 pack $w.dlg -anchor nw -fill x -pady {0 8} -padx 5 - ${NS}::checkbutton $w.noconsole \ + ttk::checkbutton $w.noconsole \ -text [mc "Don't show the command output window"] \ -variable @no_console pack $w.noconsole -anchor w -padx 5 - ${NS}::checkbutton $w.needsfile \ + ttk::checkbutton $w.needsfile \ -text [mc "Run only if a diff is selected (\$FILENAME not empty)"] \ -variable @needs_file pack $w.needsfile -anchor w -padx 5 @@ -179,7 +179,7 @@ field w ; # widget path field w_names ; # name list constructor dialog {} { - global repo_config global_config system_config use_ttk NS + global repo_config global_config system_config load_config 1 @@ -190,21 +190,21 @@ constructor dialog {} { wm transient $top . } - ${NS}::label $w.header -text [mc "Remove Tool Commands"] \ + ttk::label $w.header -text [mc "Remove Tool Commands"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.create -text [mc Remove] \ + ttk::frame $w.buttons + ttk::button $w.buttons.create -text [mc Remove] \ -default active \ -command [cb _remove] pack $w.buttons.create -side right - ${NS}::button $w.buttons.cancel -text [mc Cancel] \ + ttk::button $w.buttons.cancel -text [mc Cancel] \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::frame $w.list + ttk::frame $w.list set w_names $w.list.l slistbox $w_names \ -height 10 \ @@ -227,7 +227,7 @@ constructor dialog {} { } if {$local_cnt > 0} { - ${NS}::label $w.colorlbl -foreground blue \ + ttk::label $w.colorlbl -foreground blue \ -text [mc "(Blue denotes repository-local tools)"] pack $w.colorlbl -fill x -pady 5 -padx 5 } @@ -272,7 +272,7 @@ field is_ok 0; # ok to start field argstr {}; # arguments constructor dialog {fullname} { - global M1B use_ttk NS + global M1B set title [get_config "guitool.$fullname.title"] if {$title eq {}} { @@ -292,7 +292,7 @@ constructor dialog {fullname} { set prompt [mc "Run Command: %s" $command] } - ${NS}::label $w.header -text $prompt -font font_uibold -anchor center + ttk::label $w.header -text $prompt -font font_uibold -anchor center pack $w.header -side top -fill x set argprompt [get_config "guitool.$fullname.argprompt"] @@ -306,10 +306,10 @@ constructor dialog {fullname} { set argprompt [mc "Arguments"] } - ${NS}::labelframe $w.arg -text $argprompt + ttk::labelframe $w.arg -text $argprompt set w_args $w.arg.txt - ${NS}::entry $w_args \ + ttk::entry $w_args \ -width 40 \ -textvariable @argstr pack $w_args -padx 5 -pady 5 -fill both @@ -330,18 +330,18 @@ constructor dialog {fullname} { pack $w.rev -anchor nw -fill both -expand 1 -pady 5 -padx 5 } - ${NS}::frame $w.buttons + ttk::frame $w.buttons if {$is_ask_revs} { - ${NS}::button $w.buttons.visualize \ + ttk::button $w.buttons.visualize \ -text [mc Visualize] \ -command [cb _visualize] pack $w.buttons.visualize -side left } - ${NS}::button $w.buttons.ok \ + ttk::button $w.buttons.ok \ -text [mc OK] \ -command [cb _start] pack $w.buttons.ok -side right - ${NS}::button $w.buttons.cancel \ + ttk::button $w.buttons.cancel \ -text [mc "Cancel"] \ -command [cb _cancel] pack $w.buttons.cancel -side right -padx 5 diff --git a/lib/transport.tcl b/lib/transport.tcl index a1a424a..020d09e 100644 --- a/lib/transport.tcl +++ b/lib/transport.tcl @@ -120,7 +120,7 @@ trace add variable push_remote write \ proc do_push_anywhere {} { global all_remotes current_branch global push_urltype push_remote push_url push_thin push_tags - global push_force use_ttk NS + global push_force set w .push_setup toplevel $w @@ -129,22 +129,22 @@ proc do_push_anywhere {} { wm geometry $w "+[winfo rootx .]+[winfo rooty .]" pave_toplevel $w - ${NS}::label $w.header -text [mc "Push Branches"] \ + ttk::label $w.header -text [mc "Push Branches"] \ -font font_uibold -anchor center pack $w.header -side top -fill x - ${NS}::frame $w.buttons - ${NS}::button $w.buttons.create -text [mc Push] \ + ttk::frame $w.buttons + ttk::button $w.buttons.create -text [mc Push] \ -default active \ -command [list start_push_anywhere_action $w] pack $w.buttons.create -side right - ${NS}::button $w.buttons.cancel -text [mc "Cancel"] \ + ttk::button $w.buttons.cancel -text [mc "Cancel"] \ -default normal \ -command [list destroy $w] pack $w.buttons.cancel -side right -padx 5 pack $w.buttons -side bottom -fill x -pady 10 -padx 10 - ${NS}::labelframe $w.source -text [mc "Source Branches"] + ttk::labelframe $w.source -text [mc "Source Branches"] slistbox $w.source.l \ -height 10 \ -width 70 \ @@ -159,20 +159,16 @@ proc do_push_anywhere {} { pack $w.source.l -side left -fill both -expand 1 pack $w.source -fill both -expand 1 -pady 5 -padx 5 - ${NS}::labelframe $w.dest -text [mc "Destination Repository"] + ttk::labelframe $w.dest -text [mc "Destination Repository"] if {$all_remotes ne {}} { - ${NS}::radiobutton $w.dest.remote_r \ + ttk::radiobutton $w.dest.remote_r \ -text [mc "Remote:"] \ -value remote \ -variable push_urltype - if {$use_ttk} { - ttk::combobox $w.dest.remote_m -state readonly \ - -exportselection false \ - -textvariable push_remote \ - -values $all_remotes - } else { - eval tk_optionMenu $w.dest.remote_m push_remote $all_remotes - } + ttk::combobox $w.dest.remote_m -state readonly \ + -exportselection false \ + -textvariable push_remote \ + -values $all_remotes grid $w.dest.remote_r $w.dest.remote_m -sticky w if {[lsearch -sorted -exact $all_remotes origin] != -1} { set push_remote origin @@ -183,11 +179,11 @@ proc do_push_anywhere {} { } else { set push_urltype url } - ${NS}::radiobutton $w.dest.url_r \ + ttk::radiobutton $w.dest.url_r \ -text [mc "Arbitrary Location:"] \ -value url \ -variable push_urltype - ${NS}::entry $w.dest.url_t \ + ttk::entry $w.dest.url_t \ -width 50 \ -textvariable push_url \ -validate key \ @@ -202,16 +198,16 @@ proc do_push_anywhere {} { grid columnconfigure $w.dest 1 -weight 1 pack $w.dest -anchor nw -fill x -pady 5 -padx 5 - ${NS}::labelframe $w.options -text [mc "Transfer Options"] - ${NS}::checkbutton $w.options.force \ + ttk::labelframe $w.options -text [mc "Transfer Options"] + ttk::checkbutton $w.options.force \ -text [mc "Force overwrite existing branch (may discard changes)"] \ -variable push_force grid $w.options.force -columnspan 2 -sticky w - ${NS}::checkbutton $w.options.thin \ + ttk::checkbutton $w.options.thin \ -text [mc "Use thin pack (for slow network connections)"] \ -variable push_thin grid $w.options.thin -columnspan 2 -sticky w - ${NS}::checkbutton $w.options.tags \ + ttk::checkbutton $w.options.tags \ -text [mc "Include tags"] \ -variable push_tags grid $w.options.tags -columnspan 2 -sticky w diff --git a/lib/win32.tcl b/lib/win32.tcl index db91ab8..3aedae2 100644 --- a/lib/win32.tcl +++ b/lib/win32.tcl @@ -2,11 +2,11 @@ # Copyright (C) 2007 Shawn Pearce proc win32_read_lnk {lnk_path} { - return [exec cscript.exe \ + return [safe_exec [list cscript.exe \ /E:jscript \ /nologo \ [file join $::oguilib win32_shortcut.js] \ - $lnk_path] + $lnk_path]] } proc win32_create_lnk {lnk_path lnk_exec lnk_dir} { @@ -15,12 +15,13 @@ proc win32_create_lnk {lnk_path lnk_exec lnk_dir} { set lnk_args [lrange $lnk_exec 1 end] set lnk_exec [lindex $lnk_exec 0] - eval [list exec wscript.exe \ + set cmd [list wscript.exe \ /E:jscript \ /nologo \ [file nativename [file join $oguilib win32_shortcut.js]] \ $lnk_path \ [file nativename [file join $oguilib git-gui.ico]] \ $lnk_dir \ - $lnk_exec] $lnk_args + $lnk_exec] + safe_exec [concat $cmd $lnk_args] } diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..cdae85e --- /dev/null +++ b/meson.build @@ -0,0 +1,148 @@ +project('git-gui', + meson_version: '>=0.61.0', +) + +fs = import('fs') + +shell = find_program('sh') +tclsh = find_program('tclsh') +wish = find_program('wish') + +build_options_config = configuration_data() +if target_machine.system() == 'windows' + build_options_config.set('GITGUI_RELATIVE', '1') +else + build_options_config.set('GITGUI_RELATIVE', '') +endif +build_options_config.set_quoted('GITGUI_GITEXECDIR', get_option('prefix') / get_option('libexecdir') / 'git-core') +build_options_config.set_quoted('GITGUI_LIBDIR', get_option('prefix') / get_option('datadir') / 'git-gui/lib') +build_options_config.set_quoted('SHELL_PATH', fs.as_posix(shell.full_path())) +build_options_config.set_quoted('TCLTK_PATH', fs.as_posix(wish.full_path())) +build_options_config.set_quoted('TCL_PATH', fs.as_posix(tclsh.full_path())) +if target_machine.system() == 'darwin' + tkexecutables = [ + '/Library/Frameworks/Tk.framework/Resources/Wish.app/Contents/MacOS/Wish', + '/System/Library/Frameworks/Tk.framework/Resources/Wish.app/Contents/MacOS/Wish', + '/System/Library/Frameworks/Tk.framework/Resources/Wish Shell.app/Contents/MacOS/Wish Shell', + ] + tkexecutable = find_program(tkexecutables) + build_options_config.set_quoted('TKEXECUTABLE', tkexecutable.full_path()) +else + build_options_config.set('TKEXECUTABLE', '') +endif + +build_options = configure_file( + input: 'GIT-GUI-BUILD-OPTIONS.in', + output: 'GIT-GUI-BUILD-OPTIONS', + configuration: build_options_config, +) + +version_file = custom_target( + input: 'GIT-VERSION-GEN', + output: 'GIT-VERSION-FILE', + command: [ + shell, + '@INPUT@', + meson.current_source_dir(), + '@OUTPUT@', + ], + build_always_stale: true, +) + +configure_file( + input: 'git-gui--askpass', + output: 'git-gui--askpass', + copy: true, + install: true, + install_dir: get_option('libexecdir') / 'git-core', +) + +gitgui_main = 'git-gui' +gitgui_main_install_dir = get_option('libexecdir') / 'git-core' + +if target_machine.system() == 'windows' + gitgui_main = 'git-gui.tcl' + + configure_file( + input: 'windows/git-gui.sh', + output: 'git-gui', + copy: true, + install: true, + install_dir: get_option('libexecdir') / 'git-core', + ) +elif target_machine.system() == 'darwin' + gitgui_main = 'git-gui.tcl' + gitgui_main_install_dir = get_option('datadir') / 'git-gui/lib' + + custom_target( + output: 'git-gui', + command: [ + shell, + meson.current_source_dir() / 'generate-macos-wrapper.sh', + '@OUTPUT@', + meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS', + meson.current_build_dir() / 'GIT-VERSION-FILE', + ], + depends: [ + version_file, + ], + depend_files: [ + build_options, + ], + install: true, + install_dir: get_option('libexecdir') / 'git-core', + ) + + custom_target( + output: 'Git Gui.app', + command: [ + shell, + meson.current_source_dir() / 'generate-macos-app.sh', + meson.current_source_dir(), + meson.current_build_dir() / 'Git Gui.app', + meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS', + meson.current_build_dir() / 'GIT-VERSION-FILE', + ], + depends: [ + version_file, + ], + depend_files: [ + build_options, + 'macosx/AppMain.tcl', + 'macosx/Info.plist', + 'macosx/git-gui.icns', + ], + build_by_default: true, + install: true, + install_dir: get_option('datadir') / 'git-gui/lib', + ) +endif + +custom_target( + input: 'git-gui.sh', + output: gitgui_main, + command: [ + shell, + meson.current_source_dir() / 'generate-git-gui.sh', + '@INPUT@', + '@OUTPUT@', + meson.current_build_dir() / 'GIT-GUI-BUILD-OPTIONS', + meson.current_build_dir() / 'GIT-VERSION-FILE', + ], + depends: [ + version_file, + ], + depend_files: [ + build_options, + ], + install: true, + install_dir: gitgui_main_install_dir, +) + +install_symlink('git-citool', + install_dir: get_option('libexecdir') / 'git-core', + pointing_to: 'git-gui', +) + +subdir('lib') +subdir('po') diff --git a/po/.gitignore b/po/.gitignore index a89cf44..b900bb9 100644 --- a/po/.gitignore +++ b/po/.gitignore @@ -1,2 +1,3 @@ *.msg *~ +/git-gui.pot diff --git a/po/README b/po/README index 2514bc2..4a1aa79 100644 --- a/po/README +++ b/po/README @@ -21,8 +21,8 @@ them. You would then need to clone the git-gui project repository and create a feature branch to begin working: - $ git clone git://repo.or.cz/git-gui.git - $ cd git-gui.git + $ git clone https://github.com/j6t/git-gui + $ cd git-gui $ git checkout -b my-translation The "git checkout" command creates a new branch to keep your work @@ -39,7 +39,7 @@ in your language? If you do not know what your language should be named, you need to find it. This currently follows ISO 639-1 two letter codes: - http://www.loc.gov/standards/iso639-2/php/code_list.php + https://www.loc.gov/standards/iso639-2/php/code_list.php For example, if you are preparing a translation for Afrikaans, the language code is "af". If there already is a translation for your @@ -47,6 +47,10 @@ language, you do not have to perform any step in this section, but keep reading, because we are covering the basics. If you did not find your language, you would need to start one yourself. +Generate po/git-gui.pot using + + $ make po/git-gui.pot + Copy po/git-gui.pot file to po/af.po (replace "af" with the code for your language). Edit the first several lines to match existing *.po files to make it clear this is a translation table for git-gui project, @@ -153,7 +157,7 @@ your patch series to the maintainer and the Git mailing list: $ git add po/af.po $ git commit -s -m 'git-gui: added Afrikaans translation.' $ git send-email --to 'git@vger.kernel.org' \ - --cc 'Pat Thoyts ' \ + --cc 'Johannes Sixt ' \ --subject 'git-gui: Afrikaans translation' \ master.. @@ -169,18 +173,7 @@ In any case, make sure you are up to date before starting your work: $ git checkout master $ git pull - -In the former case, you will edit po/af.po (again, replace "af" with -your language code), and after testing and updating the Last-Translator: -and PO-Revision-Date: lines, "add/commit/push" as in the previous -section. - -By comparing "POT-Creation-Date:" line in po/git-gui.pot file and -po/af.po file, you can tell if there are new messages that need to be -translated. You would need the GNU gettext package to perform this -step. - - $ msgmerge -U po/af.po po/git-gui.pot + $ make ALL_POFILES=po/af.po update-po This updates po/af.po (again, replace "af" with your language code) so that it contains msgid lines (i.e. the original) that @@ -200,52 +193,5 @@ watch out for: - New messages added to the software will have msgstr lines with empty strings. You would need to translate them. -The po/git-gui.pot file is updated by the internationalization -coordinator from time to time. You _could_ update it yourself, but -translators are discouraged from doing so because we would want all -language teams to be working off of the same version of git-gui.pot. - -**************************************************************** - -This section is a note to the internationalization coordinator, and -translators do not have to worry about it too much. - -The message template file po/git-gui.pot needs to be kept up to date -relative to the software the translations apply to, and it is the -responsibility of the internationalization coordinator. - -When updating po/git-gui.pot file, however, _never_ run "msgmerge -U -po/xx.po" for individual language translations, unless you are absolutely -sure that there is no outstanding work on translation for language xx. -Doing so will create unnecessary merge conflicts and force needless -re-translation on translators. The translator however may not have access -to the msgmerge tool, in which case the coordinator may run it for the -translator as a service. - -But mistakes do happen. Suppose a translation was based on an older -version X, the POT file was updated at version Y and then msgmerge was run -at version Z for the language, and the translator sent in a patch based on -version X: - - ? translated - / - ---X---Y---Z (master) - -The coordinator could recover from such a mistake by first applying the -patch to X, replace the translated file in Z, and then running msgmerge -again based on the updated POT file and commit the result. The sequence -would look like this: - - $ git checkout X - $ git am -s xx.patch - $ git checkout master - $ git checkout HEAD@{1} po/xx.po - $ msgmerge -U po/xx.po po/git-gui.pot - $ git commit -c HEAD@{1} po/xx.po - -State in the message that the translated messages are based on a slightly -older version, and msgmerge was run to incorporate changes to message -templates from the updated POT file. The result needs to be further -translated, but at least the messages that were updated by the patch that -were not changed by the POT update will survive the process and do not -need to be re-translated. +After testing and updating the Last-Translator: and PO-Revision-Date: +lines, "add/commit/push" as in the previous section. diff --git a/po/bg.po b/po/bg.po index 5af78f1..70ab2b4 100644 --- a/po/bg.po +++ b/po/bg.po @@ -1,15 +1,15 @@ # Bulgarian translation of git-gui po-file. -# Copyright (C) 2012, 2013, 2014, 2015, 2016 Alexander Shopov . +# Copyright (C) 2012, 2013, 2014, 2015, 2016, 2024, 2025 Alexander Shopov . # This file is distributed under the same license as the git package. -# Alexander Shopov , 2012, 2013, 2014, 2015, 2016. +# Alexander Shopov , 2012, 2013, 2014, 2015, 2016, 2024, 2025. # # msgid "" msgstr "" "Project-Id-Version: git-gui master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-13 15:16+0300\n" -"PO-Revision-Date: 2016-10-13 15:16+0300\n" +"POT-Creation-Date: 2025-04-20 09:27+0200\n" +"PO-Revision-Date: 2025-05-29 13:37+0200\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -18,33 +18,33 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: git-gui.sh:865 +#: git-gui.sh:861 #, tcl-format msgid "Invalid font specified in %s:" msgstr "Указан е неправилен шрифт в „%s“:" -#: git-gui.sh:919 +#: git-gui.sh:924 msgid "Main Font" msgstr "Основен шрифт" -#: git-gui.sh:920 +#: git-gui.sh:925 msgid "Diff/Console Font" msgstr "Шрифт за разликите/конзолата" -#: git-gui.sh:935 git-gui.sh:949 git-gui.sh:962 git-gui.sh:1052 git-gui.sh:1071 -#: git-gui.sh:3147 +#: git-gui.sh:940 git-gui.sh:954 git-gui.sh:967 git-gui.sh:1057 git-gui.sh:1076 +#: git-gui.sh:3217 msgid "git-gui: fatal error" msgstr "git-gui: фатална грешка" -#: git-gui.sh:936 +#: git-gui.sh:941 msgid "Cannot find git in PATH." msgstr "Командата git липсва в пътя (PATH)." -#: git-gui.sh:963 +#: git-gui.sh:968 msgid "Cannot parse Git version string:" -msgstr "Низът с версията на Git не може да бъде интерпретиран:" +msgstr "Низът с версията на Git не може да се анализира:" -#: git-gui.sh:988 +#: git-gui.sh:993 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -55,7 +55,7 @@ msgid "" "\n" "Assume '%s' is version 1.5.0?\n" msgstr "" -"Версията на Git не може да бъде определена.\n" +"Версията на Git не може да се определи.\n" "\n" "Версията на „%s“ изглежда, че е „%s“.\n" "\n" @@ -63,19 +63,19 @@ msgstr "" "\n" "Да се приеме ли, че „%s“ е версия „1.5.0“?\n" -#: git-gui.sh:1285 +#: git-gui.sh:1287 msgid "Git directory not found:" msgstr "Директорията на Git не е открита:" -#: git-gui.sh:1319 +#: git-gui.sh:1317 msgid "Cannot move to top of working directory:" -msgstr "Не може да се премине към родителската директория." +msgstr "Не може да се премине към родителската директория." -#: git-gui.sh:1327 +#: git-gui.sh:1325 msgid "Cannot use bare repository:" msgstr "Голо хранилище не може да се използва:" -#: git-gui.sh:1335 +#: git-gui.sh:1333 msgid "No working directory" msgstr "Работната директория липсва" @@ -83,571 +83,544 @@ msgstr "Работната директория липсва" msgid "Refreshing file status..." msgstr "Обновяване на състоянието на файла…" -#: git-gui.sh:1567 +#: git-gui.sh:1551 msgid "Scanning for modified files ..." msgstr "Проверка за променени файлове…" -#: git-gui.sh:1645 +#: git-gui.sh:1635 msgid "Calling prepare-commit-msg hook..." msgstr "Куката „prepare-commit-msg“ се изпълнява в момента…" -#: git-gui.sh:1662 +#: git-gui.sh:1652 msgid "Commit declined by prepare-commit-msg hook." msgstr "Подаването е отхвърлено от куката „prepare-commit-msg“." -#: git-gui.sh:1820 lib/browser.tcl:252 +#: git-gui.sh:1810 lib/browser.tcl:252 msgid "Ready." msgstr "Готово." -#: git-gui.sh:1984 +#: git-gui.sh:1974 #, tcl-format msgid "" "Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." msgstr "" -"Достигнат е максималният размер на списъка за извеждане(gui." -"maxfilesdisplayed = %s), съответно не са показани всички %s файла." +"Достигнат е максималният размер на списъка за " +"извеждане(gui.maxfilesdisplayed = %s), съответно не са показани всички %s " +"файла." -#: git-gui.sh:2107 +#: git-gui.sh:2097 msgid "Unmodified" msgstr "Непроменен" -#: git-gui.sh:2109 +#: git-gui.sh:2099 msgid "Modified, not staged" msgstr "Променен, но не е в индекса" -#: git-gui.sh:2110 git-gui.sh:2122 +#: git-gui.sh:2100 git-gui.sh:2112 msgid "Staged for commit" msgstr "В индекса за подаване" -#: git-gui.sh:2111 git-gui.sh:2123 +#: git-gui.sh:2101 git-gui.sh:2113 msgid "Portions staged for commit" msgstr "Части са в индекса за подаване" -#: git-gui.sh:2112 git-gui.sh:2124 +#: git-gui.sh:2102 git-gui.sh:2114 msgid "Staged for commit, missing" msgstr "В индекса за подаване, но липсва" -#: git-gui.sh:2114 +#: git-gui.sh:2104 msgid "File type changed, not staged" msgstr "Видът на файла е сменен, но не е в индекса" -#: git-gui.sh:2115 git-gui.sh:2116 +#: git-gui.sh:2105 git-gui.sh:2106 msgid "File type changed, old type staged for commit" msgstr "Видът на файла е сменен, но новият вид не е в индекса" -#: git-gui.sh:2117 +#: git-gui.sh:2107 msgid "File type changed, staged" msgstr "Видът на файла е сменен и е в индекса" -#: git-gui.sh:2118 +#: git-gui.sh:2108 msgid "File type change staged, modification not staged" msgstr "Видът на файла е сменен в индекса, но не и съдържанието" -#: git-gui.sh:2119 +#: git-gui.sh:2109 msgid "File type change staged, file missing" msgstr "Видът на файла е сменен в индекса, но файлът липсва" -#: git-gui.sh:2121 +#: git-gui.sh:2111 msgid "Untracked, not staged" msgstr "Неследен" -#: git-gui.sh:2126 +#: git-gui.sh:2116 msgid "Missing" msgstr "Липсващ" -#: git-gui.sh:2127 +#: git-gui.sh:2117 msgid "Staged for removal" msgstr "В индекса за изтриване" -#: git-gui.sh:2128 +#: git-gui.sh:2118 msgid "Staged for removal, still present" msgstr "В индекса за изтриване, но още го има" -#: git-gui.sh:2130 git-gui.sh:2131 git-gui.sh:2132 git-gui.sh:2133 -#: git-gui.sh:2134 git-gui.sh:2135 +#: git-gui.sh:2120 git-gui.sh:2121 git-gui.sh:2122 git-gui.sh:2123 +#: git-gui.sh:2124 git-gui.sh:2125 msgid "Requires merge resolution" msgstr "Изисква коригиране при сливане" #: git-gui.sh:2170 -msgid "Starting gitk... please wait..." -msgstr "Стартиране на „gitk“…, изчакайте…" - -#: git-gui.sh:2182 msgid "Couldn't find gitk in PATH" msgstr "Командата „gitk“ липсва в пътищата, определени от променливата PATH." -#: git-gui.sh:2241 +#: git-gui.sh:2217 git-gui.sh:2253 +#, tcl-format +msgid "Starting %s... please wait..." +msgstr "Стартиране на „%s“…, изчакайте…" + +#: git-gui.sh:2232 msgid "Couldn't find git gui in PATH" msgstr "" "Командата „git gui“ липсва в пътищата, определени от променливата PATH." -#: git-gui.sh:2676 lib/choose_repository.tcl:41 +#: git-gui.sh:2735 lib/choose_repository.tcl:53 msgid "Repository" msgstr "Хранилище" -#: git-gui.sh:2677 +#: git-gui.sh:2736 msgid "Edit" msgstr "Редактиране" -#: git-gui.sh:2679 lib/choose_rev.tcl:567 +#: git-gui.sh:2738 lib/choose_rev.tcl:567 msgid "Branch" msgstr "Клон" -#: git-gui.sh:2682 lib/choose_rev.tcl:554 +#: git-gui.sh:2741 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "Подаване" -#: git-gui.sh:2685 lib/merge.tcl:127 lib/merge.tcl:174 +#: git-gui.sh:2744 lib/merge.tcl:127 lib/merge.tcl:174 msgid "Merge" msgstr "Сливане" -#: git-gui.sh:2686 lib/choose_rev.tcl:563 +#: git-gui.sh:2745 lib/choose_rev.tcl:563 msgid "Remote" msgstr "Отдалечено хранилище" -#: git-gui.sh:2689 +#: git-gui.sh:2748 msgid "Tools" msgstr "Команди" -#: git-gui.sh:2698 +#: git-gui.sh:2757 msgid "Explore Working Copy" msgstr "Разглеждане на работното копие" -#: git-gui.sh:2704 +#: git-gui.sh:2772 msgid "Git Bash" msgstr "Bash за Git" -#: git-gui.sh:2714 +#: git-gui.sh:2781 msgid "Browse Current Branch's Files" msgstr "Разглеждане на файловете в текущия клон" -#: git-gui.sh:2718 +#: git-gui.sh:2785 msgid "Browse Branch Files..." msgstr "Разглеждане на текущия клон…" -#: git-gui.sh:2723 +#: git-gui.sh:2790 msgid "Visualize Current Branch's History" msgstr "Визуализация на историята на текущия клон" -#: git-gui.sh:2727 +#: git-gui.sh:2794 msgid "Visualize All Branch History" msgstr "Визуализация на историята на всички клонове" -#: git-gui.sh:2734 +#: git-gui.sh:2801 #, tcl-format msgid "Browse %s's Files" msgstr "Разглеждане на файловете в „%s“" -#: git-gui.sh:2736 +#: git-gui.sh:2803 #, tcl-format msgid "Visualize %s's History" msgstr "Визуализация на историята на „%s“" -#: git-gui.sh:2741 lib/database.tcl:40 +#: git-gui.sh:2808 lib/database.tcl:40 msgid "Database Statistics" msgstr "Статистика на базата от данни" -#: git-gui.sh:2744 lib/database.tcl:33 +#: git-gui.sh:2811 lib/database.tcl:33 msgid "Compress Database" msgstr "Компресиране на базата от данни" -#: git-gui.sh:2747 +#: git-gui.sh:2814 msgid "Verify Database" msgstr "Проверка на базата от данни" -#: git-gui.sh:2754 git-gui.sh:2758 git-gui.sh:2762 +#: git-gui.sh:2821 git-gui.sh:2825 git-gui.sh:2829 msgid "Create Desktop Icon" msgstr "Добавяне на икона на работния плот" -#: git-gui.sh:2770 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 +#: git-gui.sh:2837 lib/choose_repository.tcl:206 lib/choose_repository.tcl:214 msgid "Quit" msgstr "Спиране на програмата" -#: git-gui.sh:2778 +#: git-gui.sh:2845 msgid "Undo" msgstr "Отмяна" -#: git-gui.sh:2781 +#: git-gui.sh:2848 msgid "Redo" msgstr "Повторение" -#: git-gui.sh:2785 git-gui.sh:3399 +#: git-gui.sh:2852 git-gui.sh:3477 msgid "Cut" msgstr "Отрязване" -#: git-gui.sh:2788 git-gui.sh:3402 git-gui.sh:3476 git-gui.sh:3562 +#: git-gui.sh:2855 git-gui.sh:3480 git-gui.sh:3556 git-gui.sh:3651 #: lib/console.tcl:69 msgid "Copy" msgstr "Копиране" -#: git-gui.sh:2791 git-gui.sh:3405 +#: git-gui.sh:2858 git-gui.sh:3483 msgid "Paste" msgstr "Поставяне" -#: git-gui.sh:2794 git-gui.sh:3408 lib/branch_delete.tcl:28 +#: git-gui.sh:2861 git-gui.sh:3486 lib/branch_delete.tcl:28 #: lib/remote_branch_delete.tcl:39 msgid "Delete" msgstr "Изтриване" -#: git-gui.sh:2798 git-gui.sh:3412 git-gui.sh:3566 lib/console.tcl:71 +#: git-gui.sh:2865 git-gui.sh:3490 git-gui.sh:3655 lib/console.tcl:71 msgid "Select All" msgstr "Избиране на всичко" -#: git-gui.sh:2807 +#: git-gui.sh:2874 msgid "Create..." msgstr "Създаване…" -#: git-gui.sh:2813 +#: git-gui.sh:2880 msgid "Checkout..." msgstr "Изтегляне…" -#: git-gui.sh:2819 +#: git-gui.sh:2886 msgid "Rename..." msgstr "Преименуване…" -#: git-gui.sh:2824 +#: git-gui.sh:2891 msgid "Delete..." msgstr "Изтриване…" -#: git-gui.sh:2829 +#: git-gui.sh:2896 msgid "Reset..." msgstr "Отмяна на промените…" -#: git-gui.sh:2839 +#: git-gui.sh:2906 msgid "Done" msgstr "Готово" -#: git-gui.sh:2841 +#: git-gui.sh:2908 msgid "Commit@@verb" msgstr "Подаване" -#: git-gui.sh:2850 git-gui.sh:3335 -msgid "New Commit" -msgstr "Ново подаване" - -#: git-gui.sh:2858 git-gui.sh:3342 +#: git-gui.sh:2917 git-gui.sh:3416 msgid "Amend Last Commit" msgstr "Поправяне на последното подаване" -#: git-gui.sh:2868 git-gui.sh:3296 lib/remote_branch_delete.tcl:101 +#: git-gui.sh:2927 git-gui.sh:3377 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "Обновяване" -#: git-gui.sh:2874 +#: git-gui.sh:2933 msgid "Stage To Commit" msgstr "Към индекса за подаване" -#: git-gui.sh:2880 +#: git-gui.sh:2939 msgid "Stage Changed Files To Commit" msgstr "Всички променени файлове към индекса за подаване" -#: git-gui.sh:2886 +#: git-gui.sh:2945 msgid "Unstage From Commit" msgstr "Изваждане от индекса за подаване" -#: git-gui.sh:2892 lib/index.tcl:442 +#: git-gui.sh:2951 lib/index.tcl:521 msgid "Revert Changes" msgstr "Връщане на оригинала" -#: git-gui.sh:2900 git-gui.sh:3613 git-gui.sh:3644 +#: git-gui.sh:2959 git-gui.sh:3718 git-gui.sh:3749 msgid "Show Less Context" msgstr "По-малко контекст" -#: git-gui.sh:2904 git-gui.sh:3617 git-gui.sh:3648 +#: git-gui.sh:2963 git-gui.sh:3722 git-gui.sh:3753 msgid "Show More Context" msgstr "Повече контекст" -#: git-gui.sh:2911 git-gui.sh:3309 git-gui.sh:3423 +#: git-gui.sh:2970 git-gui.sh:3390 git-gui.sh:3501 msgid "Sign Off" msgstr "Подписване" -#: git-gui.sh:2927 +#: git-gui.sh:2986 msgid "Local Merge..." msgstr "Локално сливане…" -#: git-gui.sh:2932 +#: git-gui.sh:2991 msgid "Abort Merge..." msgstr "Преустановяване на сливане…" -#: git-gui.sh:2944 git-gui.sh:2972 +#: git-gui.sh:3003 git-gui.sh:3031 msgid "Add..." msgstr "Добавяне…" -#: git-gui.sh:2948 +#: git-gui.sh:3007 msgid "Push..." msgstr "Изтласкване…" -#: git-gui.sh:2952 +#: git-gui.sh:3011 msgid "Delete Branch..." msgstr "Изтриване на клон…" -#: git-gui.sh:2962 git-gui.sh:3595 +#: git-gui.sh:3021 git-gui.sh:3684 msgid "Options..." msgstr "Опции…" -#: git-gui.sh:2973 +#: git-gui.sh:3032 msgid "Remove..." msgstr "Премахване…" -#: git-gui.sh:2982 lib/choose_repository.tcl:55 +#: git-gui.sh:3041 lib/choose_repository.tcl:67 msgid "Help" msgstr "Помощ" -#: git-gui.sh:2986 git-gui.sh:2990 lib/about.tcl:14 -#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58 +#: git-gui.sh:3045 git-gui.sh:3049 lib/about.tcl:14 +#: lib/choose_repository.tcl:61 lib/choose_repository.tcl:70 #, tcl-format msgid "About %s" -msgstr "Относно %s" +msgstr "Относно „%s“" -#: git-gui.sh:3014 +#: git-gui.sh:3069 msgid "Online Documentation" msgstr "Документация в Интернет" -#: git-gui.sh:3017 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 +#: git-gui.sh:3072 lib/choose_repository.tcl:64 lib/choose_repository.tcl:73 msgid "Show SSH Key" msgstr "Показване на ключа за SSH" -#: git-gui.sh:3032 git-gui.sh:3164 +#: git-gui.sh:3102 git-gui.sh:3234 msgid "usage:" msgstr "употреба:" -#: git-gui.sh:3036 git-gui.sh:3168 +#: git-gui.sh:3106 git-gui.sh:3238 msgid "Usage" msgstr "Употреба" -#: git-gui.sh:3117 lib/blame.tcl:573 +#: git-gui.sh:3187 lib/blame.tcl:576 msgid "Error" msgstr "Грешка" -#: git-gui.sh:3148 +#: git-gui.sh:3218 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" -msgstr "" -"ФАТАЛНА ГРЕШКА: пътят %s не може да бъде открит: такъв файл или директория " -"няма" +msgstr "ФАТАЛНА ГРЕШКА: пътят „%s“ липсва: такъв файл или директория няма" -#: git-gui.sh:3181 +#: git-gui.sh:3251 msgid "Current Branch:" msgstr "Текущ клон:" -#: git-gui.sh:3206 +#: git-gui.sh:3276 msgid "Unstaged Changes" msgstr "Промени извън индекса" -#: git-gui.sh:3228 +#: git-gui.sh:3298 msgid "Staged Changes (Will Commit)" msgstr "Промени в индекса (за подаване)" -#: git-gui.sh:3302 +#: git-gui.sh:3383 msgid "Stage Changed" msgstr "Индексът е променен" -#: git-gui.sh:3321 lib/transport.tcl:137 +#: git-gui.sh:3402 lib/transport.tcl:137 msgid "Push" msgstr "Изтласкване" -#: git-gui.sh:3356 +#: git-gui.sh:3429 msgid "Initial Commit Message:" msgstr "Първоначално съобщение при подаване:" -#: git-gui.sh:3357 +#: git-gui.sh:3430 msgid "Amended Commit Message:" msgstr "Поправено съобщение при подаване:" -#: git-gui.sh:3358 +#: git-gui.sh:3431 msgid "Amended Initial Commit Message:" msgstr "Поправено първоначално съобщение при подаване:" -#: git-gui.sh:3359 +#: git-gui.sh:3432 msgid "Amended Merge Commit Message:" msgstr "Поправено съобщение при подаване със сливане:" -#: git-gui.sh:3360 +#: git-gui.sh:3433 msgid "Merge Commit Message:" msgstr "Съобщение при подаване със сливане:" -#: git-gui.sh:3361 +#: git-gui.sh:3434 msgid "Commit Message:" msgstr "Съобщение при подаване:" -#: git-gui.sh:3415 git-gui.sh:3570 lib/console.tcl:73 +#: git-gui.sh:3493 git-gui.sh:3659 lib/console.tcl:73 msgid "Copy All" msgstr "Копиране на всичко" -#: git-gui.sh:3439 lib/blame.tcl:105 +#: git-gui.sh:3517 lib/blame.tcl:106 msgid "File:" msgstr "Файл:" -#: git-gui.sh:3558 +#: git-gui.sh:3565 lib/choose_repository.tcl:1054 +msgid "Open" +msgstr "Отваряне" + +#: git-gui.sh:3647 msgid "Refresh" msgstr "Обновяване" -#: git-gui.sh:3579 +#: git-gui.sh:3668 msgid "Decrease Font Size" -msgstr "По-едър шрифт" +msgstr "По-дребен шрифт" -#: git-gui.sh:3583 +#: git-gui.sh:3672 msgid "Increase Font Size" -msgstr "По-дребен шрифт" +msgstr "По-едър шрифт" -#: git-gui.sh:3591 lib/blame.tcl:294 +#: git-gui.sh:3680 lib/blame.tcl:296 msgid "Encoding" msgstr "Кодиране" -#: git-gui.sh:3602 +#: git-gui.sh:3691 msgid "Apply/Reverse Hunk" msgstr "Прилагане/връщане на парче" -#: git-gui.sh:3607 +#: git-gui.sh:3696 msgid "Apply/Reverse Line" msgstr "Прилагане/връщане на ред" -#: git-gui.sh:3626 +#: git-gui.sh:3702 git-gui.sh:3812 git-gui.sh:3823 +msgid "Revert Hunk" +msgstr "Връщане на парче" + +#: git-gui.sh:3707 git-gui.sh:3819 git-gui.sh:3830 +msgid "Revert Line" +msgstr "Връщане на ред" + +#: git-gui.sh:3712 git-gui.sh:3809 +msgid "Undo Last Revert" +msgstr "Отмяна на последното връщане" + +#: git-gui.sh:3731 msgid "Run Merge Tool" msgstr "Изпълнение на програмата за сливане" -#: git-gui.sh:3631 +#: git-gui.sh:3736 msgid "Use Remote Version" msgstr "Версия от отдалеченото хранилище" -#: git-gui.sh:3635 +#: git-gui.sh:3740 msgid "Use Local Version" msgstr "Локална версия" -#: git-gui.sh:3639 +#: git-gui.sh:3744 msgid "Revert To Base" msgstr "Връщане към родителската версия" -#: git-gui.sh:3657 +#: git-gui.sh:3762 msgid "Visualize These Changes In The Submodule" msgstr "Визуализиране на промените в подмодула" -#: git-gui.sh:3661 +#: git-gui.sh:3766 msgid "Visualize Current Branch History In The Submodule" msgstr "Визуализация на историята на текущия клон в историята за подмодула" -#: git-gui.sh:3665 +#: git-gui.sh:3770 msgid "Visualize All Branch History In The Submodule" msgstr "Визуализация на историята на всички клони в историята за подмодула" -#: git-gui.sh:3670 +#: git-gui.sh:3775 msgid "Start git gui In The Submodule" msgstr "Стартиране на „git gui“ за подмодула" -#: git-gui.sh:3705 +#: git-gui.sh:3811 msgid "Unstage Hunk From Commit" msgstr "Изваждане на парчето от подаването" -#: git-gui.sh:3707 +#: git-gui.sh:3815 msgid "Unstage Lines From Commit" msgstr "Изваждане на редовете от подаването" -#: git-gui.sh:3709 +#: git-gui.sh:3816 git-gui.sh:3827 +msgid "Revert Lines" +msgstr "Връщане на редовете" + +#: git-gui.sh:3818 msgid "Unstage Line From Commit" msgstr "Изваждане на реда от подаването" -#: git-gui.sh:3712 +#: git-gui.sh:3822 msgid "Stage Hunk For Commit" msgstr "Добавяне на парчето за подаване" -#: git-gui.sh:3714 +#: git-gui.sh:3826 msgid "Stage Lines For Commit" msgstr "Добавяне на редовете за подаване" -#: git-gui.sh:3716 +#: git-gui.sh:3829 msgid "Stage Line For Commit" msgstr "Добавяне на реда за подаване" -#: git-gui.sh:3741 +#: git-gui.sh:3879 msgid "Initializing..." msgstr "Инициализиране…" -#: git-gui.sh:3886 -#, tcl-format -msgid "" -"Possible environment issues exist.\n" -"\n" -"The following environment variables are probably\n" -"going to be ignored by any Git subprocess run\n" -"by %s:\n" -"\n" -msgstr "" -"Възможно е да има проблем със средата.\n" -"\n" -"Най-вероятно следните променливи няма да бъдат\n" -"взети под внимание от подпроцесите на Git\n" -"от %s:\n" -"\n" - -#: git-gui.sh:3915 -msgid "" -"\n" -"This is due to a known issue with the\n" -"Tcl binary distributed by Cygwin." -msgstr "" -"\n" -"Това е познат проблем и се дължи на\n" -"версията на Tcl включена в Cygwin." - -#: git-gui.sh:3920 -#, tcl-format -msgid "" -"\n" -"\n" -"A good replacement for %s\n" -"is placing values for the user.name and\n" -"user.email settings into your personal\n" -"~/.gitconfig file.\n" -msgstr "" -"\n" -"\n" -"Добър заместител на „%s“\n" -"е да поставите настройките „user.name“ и\n" -"„user.email“ в личния си файл „~/.gitconfig“.\n" - #: lib/about.tcl:26 msgid "git-gui - a graphical user interface for Git." msgstr "git-gui — графичен интерфейс за Git." -#: lib/blame.tcl:73 +#: lib/blame.tcl:74 #, tcl-format msgid "%s (%s): File Viewer" msgstr "%s (%s): Преглед на файлове" -#: lib/blame.tcl:79 +#: lib/blame.tcl:80 msgid "Commit:" msgstr "Подаване:" -#: lib/blame.tcl:280 +#: lib/blame.tcl:282 msgid "Copy Commit" msgstr "Копиране на подаване" -#: lib/blame.tcl:284 +#: lib/blame.tcl:286 msgid "Find Text..." msgstr "Търсене на текст…" -#: lib/blame.tcl:288 +#: lib/blame.tcl:290 msgid "Goto Line..." msgstr "Към ред…" -#: lib/blame.tcl:297 +#: lib/blame.tcl:299 msgid "Do Full Copy Detection" msgstr "Пълно търсене на копиране" -#: lib/blame.tcl:301 +#: lib/blame.tcl:303 msgid "Show History Context" msgstr "Показване на контекста от историята" -#: lib/blame.tcl:304 +#: lib/blame.tcl:306 msgid "Blame Parent Commit" msgstr "Анотиране на родителското подаване" -#: lib/blame.tcl:466 +#: lib/blame.tcl:469 #, tcl-format msgid "Reading %s..." msgstr "Чете се „%s“…" -#: lib/blame.tcl:594 +#: lib/blame.tcl:597 msgid "Loading copy/move tracking annotations..." msgstr "Зареждане на анотациите за проследяване на копирането/преместването…" @@ -655,67 +628,67 @@ msgstr "Зареждане на анотациите за проследяван msgid "lines annotated" msgstr "реда анотирани" -#: lib/blame.tcl:806 +#: lib/blame.tcl:816 msgid "Loading original location annotations..." msgstr "Зареждане на анотациите за първоначалното местоположение…" -#: lib/blame.tcl:809 +#: lib/blame.tcl:819 msgid "Annotation complete." msgstr "Анотирането завърши." -#: lib/blame.tcl:839 +#: lib/blame.tcl:850 msgid "Busy" msgstr "Операцията не е завършила" -#: lib/blame.tcl:840 +#: lib/blame.tcl:851 msgid "Annotation process is already running." msgstr "В момента тече процес на анотиране." -#: lib/blame.tcl:879 +#: lib/blame.tcl:890 msgid "Running thorough copy detection..." msgstr "Изпълнява се цялостен процес на откриване на копиране…" -#: lib/blame.tcl:947 +#: lib/blame.tcl:958 msgid "Loading annotation..." msgstr "Зареждане на анотации…" -#: lib/blame.tcl:1000 +#: lib/blame.tcl:1011 msgid "Author:" msgstr "Автор:" -#: lib/blame.tcl:1004 +#: lib/blame.tcl:1015 msgid "Committer:" msgstr "Подал:" -#: lib/blame.tcl:1009 +#: lib/blame.tcl:1020 msgid "Original File:" msgstr "Първоначален файл:" -#: lib/blame.tcl:1057 +#: lib/blame.tcl:1068 msgid "Cannot find HEAD commit:" msgstr "Подаването за връх „HEAD“ не може да се открие:" -#: lib/blame.tcl:1112 +#: lib/blame.tcl:1123 msgid "Cannot find parent commit:" -msgstr "Родителското подаване не може да бъде открито" +msgstr "Родителското подаване не може да се открие" -#: lib/blame.tcl:1127 +#: lib/blame.tcl:1138 msgid "Unable to display parent" -msgstr "Родителят не може да бъде показан" +msgstr "Родителят не може да се покаже" -#: lib/blame.tcl:1128 lib/diff.tcl:358 +#: lib/blame.tcl:1139 lib/diff.tcl:334 msgid "Error loading diff:" msgstr "Грешка при зареждане на разлика:" -#: lib/blame.tcl:1269 +#: lib/blame.tcl:1280 msgid "Originally By:" msgstr "Първоначално от:" -#: lib/blame.tcl:1275 +#: lib/blame.tcl:1286 msgid "In File:" msgstr "Във файл:" -#: lib/blame.tcl:1280 +#: lib/blame.tcl:1291 msgid "Copied Or Moved Here By:" msgstr "Копирано или преместено тук от:" @@ -733,7 +706,7 @@ msgid "Checkout" msgstr "Изтегляне" #: lib/branch_checkout.tcl:30 lib/branch_create.tcl:37 lib/branch_delete.tcl:34 -#: lib/branch_rename.tcl:32 lib/browser.tcl:292 lib/checkout_op.tcl:579 +#: lib/branch_rename.tcl:32 lib/browser.tcl:292 lib/checkout_op.tcl:580 #: lib/choose_font.tcl:45 lib/merge.tcl:178 lib/option.tcl:127 #: lib/remote_add.tcl:34 lib/remote_branch_delete.tcl:43 lib/tools_dlg.tcl:41 #: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/transport.tcl:141 @@ -765,7 +738,7 @@ msgstr "%s (%s): Създаване на клон" msgid "Create New Branch" msgstr "Създаване на нов клон" -#: lib/branch_create.tcl:33 lib/choose_repository.tcl:407 +#: lib/branch_create.tcl:33 lib/choose_repository.tcl:386 msgid "Create" msgstr "Създаване" @@ -797,7 +770,7 @@ msgstr "Не" msgid "Fast Forward Only" msgstr "Само тривиално превъртащо сливане" -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 +#: lib/branch_create.tcl:85 lib/checkout_op.tcl:572 msgid "Reset" msgstr "Отначало" @@ -935,9 +908,9 @@ msgstr "%s (%s): Разглеждане на файловете в клона" msgid "Browse Branch Files" msgstr "Разглеждане на файловете в клона" -#: lib/browser.tcl:288 lib/choose_repository.tcl:422 -#: lib/choose_repository.tcl:509 lib/choose_repository.tcl:518 -#: lib/choose_repository.tcl:1074 +#: lib/browser.tcl:288 lib/choose_repository.tcl:401 +#: lib/choose_repository.tcl:488 lib/choose_repository.tcl:497 +#: lib/choose_repository.tcl:1069 msgid "Browse" msgstr "Разглеждане" @@ -952,7 +925,7 @@ msgid "fatal: Cannot resolve %s" msgstr "фатална грешка: „%s“ не може да се открие" #: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:30 -#: lib/sshkey.tcl:55 +#: lib/sshkey.tcl:58 msgid "Close" msgstr "Затваряне" @@ -976,13 +949,13 @@ msgid "" msgstr "" "Клонът „%s“ съществува.\n" "\n" -"Той не може да бъде тривиално слят до „%s“.\n" +"Той не може да се слее тривиално до „%s“.\n" "Необходимо е сливане." #: lib/checkout_op.tcl:243 #, tcl-format msgid "Merge strategy '%s' not supported." -msgstr "Стратегия за сливане „%s“ не се поддържа." +msgstr "Стратегия за сливане „%s“ не се поддържа." #: lib/checkout_op.tcl:262 #, tcl-format @@ -1006,7 +979,7 @@ msgstr "" "хранилището.\n" "\n" "Някой друг процес за Git е променил хранилището междувременно. Състоянието " -"трябва да бъде проверено, преди да се премине към нов клон.\n" +"трябва да се провери, преди да се премине към нов клон.\n" "\n" "Автоматично ще започне нова проверка.\n" @@ -1019,22 +992,22 @@ msgstr "Работната директория се привежда към „ msgid "files checked out" msgstr "файла са изтеглени" -#: lib/checkout_op.tcl:376 +#: lib/checkout_op.tcl:377 #, tcl-format msgid "Aborted checkout of '%s' (file level merging is required)." msgstr "" "Преустановяване на изтеглянето на „%s“ (необходимо е пофайлово сливане)." -#: lib/checkout_op.tcl:377 +#: lib/checkout_op.tcl:378 msgid "File level merge required." msgstr "Необходимо е пофайлово сливане." -#: lib/checkout_op.tcl:381 +#: lib/checkout_op.tcl:382 #, tcl-format msgid "Staying on branch '%s'." msgstr "Оставане върху клона „%s“." -#: lib/checkout_op.tcl:452 +#: lib/checkout_op.tcl:453 msgid "" "You are no longer on a local branch.\n" "\n" @@ -1045,31 +1018,31 @@ msgstr "" "\n" "Ако искате да сте на клон, създайте базиран на „Това несвързано изтегляне“." -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 +#: lib/checkout_op.tcl:504 lib/checkout_op.tcl:508 #, tcl-format msgid "Checked out '%s'." msgstr "„%s“ е изтеглен." -#: lib/checkout_op.tcl:535 +#: lib/checkout_op.tcl:536 #, tcl-format msgid "Resetting '%s' to '%s' will lose the following commits:" msgstr "" "Зануляването на „%s“ към „%s“ ще доведе до загубването на следните подавания:" -#: lib/checkout_op.tcl:557 +#: lib/checkout_op.tcl:558 msgid "Recovering lost commits may not be easy." msgstr "Възстановяването на загубените подавания може да е трудно." -#: lib/checkout_op.tcl:562 +#: lib/checkout_op.tcl:563 #, tcl-format msgid "Reset '%s'?" msgstr "Зануляване на „%s“?" -#: lib/checkout_op.tcl:567 lib/merge.tcl:170 lib/tools_dlg.tcl:336 +#: lib/checkout_op.tcl:568 lib/merge.tcl:170 lib/tools_dlg.tcl:336 msgid "Visualize" msgstr "Визуализация" -#: lib/checkout_op.tcl:635 +#: lib/checkout_op.tcl:636 #, tcl-format msgid "" "Failed to set current branch.\n" @@ -1111,247 +1084,243 @@ msgstr "" "Това е примерен текст.\n" "Ако ви харесва как изглежда, изберете шрифта." -#: lib/choose_repository.tcl:33 +#: lib/choose_repository.tcl:45 msgid "Git Gui" msgstr "ГПИ на Git" -#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 +#: lib/choose_repository.tcl:104 lib/choose_repository.tcl:391 msgid "Create New Repository" msgstr "Създаване на ново хранилище" -#: lib/choose_repository.tcl:98 +#: lib/choose_repository.tcl:110 msgid "New..." msgstr "Ново…" -#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 +#: lib/choose_repository.tcl:117 lib/choose_repository.tcl:475 msgid "Clone Existing Repository" msgstr "Клониране на съществуващо хранилище" -#: lib/choose_repository.tcl:116 +#: lib/choose_repository.tcl:128 msgid "Clone..." msgstr "Клониране…" -#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 +#: lib/choose_repository.tcl:135 lib/choose_repository.tcl:1059 msgid "Open Existing Repository" msgstr "Отваряне на съществуващо хранилище" -#: lib/choose_repository.tcl:129 +#: lib/choose_repository.tcl:141 msgid "Open..." msgstr "Отваряне…" -#: lib/choose_repository.tcl:142 +#: lib/choose_repository.tcl:154 msgid "Recent Repositories" msgstr "Скоро ползвани" -#: lib/choose_repository.tcl:148 +#: lib/choose_repository.tcl:164 msgid "Open Recent Repository:" msgstr "Отваряне на хранилище ползвано наскоро:" -#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 -#: lib/choose_repository.tcl:330 +#: lib/choose_repository.tcl:328 lib/choose_repository.tcl:335 +#: lib/choose_repository.tcl:342 #, tcl-format msgid "Failed to create repository %s:" msgstr "Неуспешно създаване на хранилището „%s“:" -#: lib/choose_repository.tcl:417 +#: lib/choose_repository.tcl:396 msgid "Directory:" msgstr "Директория:" -#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 -#: lib/choose_repository.tcl:1098 +#: lib/choose_repository.tcl:426 lib/choose_repository.tcl:552 +#: lib/choose_repository.tcl:1093 msgid "Git Repository" msgstr "Хранилище на Git" -#: lib/choose_repository.tcl:472 +#: lib/choose_repository.tcl:451 #, tcl-format msgid "Directory %s already exists." msgstr "Вече съществува директория „%s“." -#: lib/choose_repository.tcl:476 +#: lib/choose_repository.tcl:455 #, tcl-format msgid "File %s already exists." msgstr "Вече съществува файл „%s“." -#: lib/choose_repository.tcl:491 +#: lib/choose_repository.tcl:470 msgid "Clone" msgstr "Клониране" -#: lib/choose_repository.tcl:504 +#: lib/choose_repository.tcl:483 msgid "Source Location:" msgstr "Адрес на източника:" -#: lib/choose_repository.tcl:513 +#: lib/choose_repository.tcl:492 msgid "Target Directory:" msgstr "Целева директория:" -#: lib/choose_repository.tcl:523 +#: lib/choose_repository.tcl:502 msgid "Clone Type:" msgstr "Вид клониране:" -#: lib/choose_repository.tcl:528 +#: lib/choose_repository.tcl:507 msgid "Standard (Fast, Semi-Redundant, Hardlinks)" msgstr "Стандартно (бързо, частично споделяне на файлове, твърди връзки)" -#: lib/choose_repository.tcl:533 +#: lib/choose_repository.tcl:512 msgid "Full Copy (Slower, Redundant Backup)" msgstr "Пълно (бавно, пълноценно резервно копие)" -#: lib/choose_repository.tcl:538 +#: lib/choose_repository.tcl:517 msgid "Shared (Fastest, Not Recommended, No Backup)" msgstr "Споделено (най-бързо, не се препоръчва, не прави резервно копие)" -#: lib/choose_repository.tcl:545 +#: lib/choose_repository.tcl:524 msgid "Recursively clone submodules too" msgstr "Рекурсивно клониране и на подмодулите" -#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 -#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 -#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 +#: lib/choose_repository.tcl:558 lib/choose_repository.tcl:605 +#: lib/choose_repository.tcl:744 lib/choose_repository.tcl:818 +#: lib/choose_repository.tcl:1099 lib/choose_repository.tcl:1107 #, tcl-format msgid "Not a Git repository: %s" msgstr "Това не е хранилище на Git: %s" -#: lib/choose_repository.tcl:615 +#: lib/choose_repository.tcl:594 msgid "Standard only available for local repository." -msgstr "Само локални хранилища могат да се клонират стандартно" +msgstr "Само локални хранилища може да се клонират стандартно" -#: lib/choose_repository.tcl:619 +#: lib/choose_repository.tcl:598 msgid "Shared only available for local repository." -msgstr "Само локални хранилища могат да се клонират споделено" +msgstr "Само локални хранилища може да се клонират споделено" -#: lib/choose_repository.tcl:640 +#: lib/choose_repository.tcl:613 #, tcl-format msgid "Location %s already exists." msgstr "Местоположението „%s“ вече съществува." -#: lib/choose_repository.tcl:651 +#: lib/choose_repository.tcl:624 msgid "Failed to configure origin" msgstr "Неуспешно настройване на хранилището-източник" -#: lib/choose_repository.tcl:663 +#: lib/choose_repository.tcl:636 msgid "Counting objects" msgstr "Преброяване на обекти" -#: lib/choose_repository.tcl:664 +#: lib/choose_repository.tcl:637 msgid "buckets" msgstr "клетки" -#: lib/choose_repository.tcl:688 +#: lib/choose_repository.tcl:657 #, tcl-format msgid "Unable to copy objects/info/alternates: %s" -msgstr "Обектите/информацията/синонимите не могат да бъдат копирани: %s" +msgstr "Обектите/Информацията/Синонимите не може да се копират: %s" -#: lib/choose_repository.tcl:724 +#: lib/choose_repository.tcl:694 #, tcl-format msgid "Nothing to clone from %s." msgstr "Няма какво да се клонира от „%s“." -#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 -#: lib/choose_repository.tcl:952 +#: lib/choose_repository.tcl:696 lib/choose_repository.tcl:916 +#: lib/choose_repository.tcl:928 msgid "The 'master' branch has not been initialized." msgstr "Основният клон — „master“ не е инициализиран." -#: lib/choose_repository.tcl:739 +#: lib/choose_repository.tcl:709 msgid "Hardlinks are unavailable. Falling back to copying." msgstr "Не се поддържат твърди връзки. Преминава се към копиране." -#: lib/choose_repository.tcl:751 +#: lib/choose_repository.tcl:723 #, tcl-format msgid "Cloning from %s" msgstr "Клониране на „%s“" -#: lib/choose_repository.tcl:782 +#: lib/choose_repository.tcl:754 msgid "Copying objects" msgstr "Копиране на обекти" -#: lib/choose_repository.tcl:783 +#: lib/choose_repository.tcl:755 msgid "KiB" msgstr "KiB" -#: lib/choose_repository.tcl:807 +#: lib/choose_repository.tcl:779 #, tcl-format msgid "Unable to copy object: %s" msgstr "Неуспешно копиране на обект: %s" -#: lib/choose_repository.tcl:817 +#: lib/choose_repository.tcl:791 msgid "Linking objects" msgstr "Създаване на връзки към обектите" -#: lib/choose_repository.tcl:818 +#: lib/choose_repository.tcl:792 msgid "objects" msgstr "обекти" -#: lib/choose_repository.tcl:826 +#: lib/choose_repository.tcl:800 #, tcl-format msgid "Unable to hardlink object: %s" msgstr "Неуспешно създаване на твърда връзка към обект: %s" -#: lib/choose_repository.tcl:881 +#: lib/choose_repository.tcl:857 msgid "Cannot fetch branches and objects. See console output for details." msgstr "" -"Клоните и обектите не могат да бъдат изтеглени. За повече информация " -"погледнете изхода на конзолата." +"Клоните и обектите не може да се изтеглят. За повече информация погледнете " +"изхода на конзолата." -#: lib/choose_repository.tcl:892 +#: lib/choose_repository.tcl:868 msgid "Cannot fetch tags. See console output for details." msgstr "" -"Етикетите не могат да бъдат изтеглени. За повече информация погледнете " -"изхода на конзолата." +"Етикетите не може да се изтеглят. За повече информация погледнете изхода на " +"конзолата." -#: lib/choose_repository.tcl:916 +#: lib/choose_repository.tcl:892 msgid "Cannot determine HEAD. See console output for details." msgstr "" -"Върхът „HEAD“ не може да бъде определен. За повече информация погледнете " -"изхода на конзолата." +"Върхът „HEAD“ не може да се определи. За повече информация погледнете изхода " +"на конзолата." -#: lib/choose_repository.tcl:925 +#: lib/choose_repository.tcl:901 #, tcl-format msgid "Unable to cleanup %s" -msgstr "„%s“ не може да се зачисти" +msgstr "„%s“ не може да се изчисти" -#: lib/choose_repository.tcl:931 +#: lib/choose_repository.tcl:907 msgid "Clone failed." msgstr "Неуспешно клониране." -#: lib/choose_repository.tcl:938 +#: lib/choose_repository.tcl:914 msgid "No default branch obtained." msgstr "Не е получен клон по подразбиране." -#: lib/choose_repository.tcl:949 +#: lib/choose_repository.tcl:925 #, tcl-format msgid "Cannot resolve %s as a commit." msgstr "Няма подаване отговарящо на „%s“." -#: lib/choose_repository.tcl:961 +#: lib/choose_repository.tcl:952 msgid "Creating working directory" msgstr "Създаване на работната директория" -#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 -#: lib/index.tcl:207 +#: lib/choose_repository.tcl:953 lib/index.tcl:77 lib/index.tcl:146 +#: lib/index.tcl:220 lib/index.tcl:589 msgid "files" msgstr "файлове" -#: lib/choose_repository.tcl:981 -msgid "Cannot clone submodules." -msgstr "Подмодулите не могат да се клонират." +#: lib/choose_repository.tcl:982 +msgid "Initial file checkout failed." +msgstr "Неуспешно първоначално изтегляне." -#: lib/choose_repository.tcl:990 +#: lib/choose_repository.tcl:1026 msgid "Cloning submodules" msgstr "Клониране на подмодули" -#: lib/choose_repository.tcl:1015 -msgid "Initial file checkout failed." -msgstr "Неуспешно първоначално изтегляне." - -#: lib/choose_repository.tcl:1059 -msgid "Open" -msgstr "Отваряне" +#: lib/choose_repository.tcl:1041 +msgid "Cannot clone submodules." +msgstr "Подмодулите не може да се клонират." -#: lib/choose_repository.tcl:1069 +#: lib/choose_repository.tcl:1064 msgid "Repository:" msgstr "Хранилище:" -#: lib/choose_repository.tcl:1118 +#: lib/choose_repository.tcl:1113 #, tcl-format msgid "Failed to open repository %s:" msgstr "Неуспешно отваряне на хранилището „%s“:" @@ -1422,24 +1391,24 @@ msgstr "" "В момента все още не сте завършили операция по сливане. Не може да поправите " "предишното подаване, освен ако първо не преустановите текущото сливане.\n" -#: lib/commit.tcl:48 +#: lib/commit.tcl:56 msgid "Error loading commit data for amend:" msgstr "Грешка при зареждане на данните от подаване, които да се поправят:" -#: lib/commit.tcl:75 +#: lib/commit.tcl:83 msgid "Unable to obtain your identity:" -msgstr "Идентификацията ви не може да бъде определена:" +msgstr "Идентификацията ви не може да се определи:" -#: lib/commit.tcl:80 +#: lib/commit.tcl:88 msgid "Invalid GIT_COMMITTER_IDENT:" msgstr "Неправилно поле „GIT_COMMITTER_IDENT“:" -#: lib/commit.tcl:129 +#: lib/commit.tcl:138 #, tcl-format msgid "warning: Tcl does not support encoding '%s'." msgstr "предупреждение: Tcl не поддържа кодирането „%s“." -#: lib/commit.tcl:149 +#: lib/commit.tcl:158 msgid "" "Last scanned state does not match repository state.\n" "\n" @@ -1452,11 +1421,11 @@ msgstr "" "хранилището.\n" "\n" "Някой друг процес за Git е променил хранилището междувременно. Състоянието " -"трябва да бъде проверено преди ново подаване.\n" +"трябва да се провери преди ново подаване.\n" "\n" "Автоматично ще започне нова проверка.\n" -#: lib/commit.tcl:173 +#: lib/commit.tcl:182 #, tcl-format msgid "" "Unmerged files cannot be committed.\n" @@ -1464,12 +1433,12 @@ msgid "" "File %s has merge conflicts. You must resolve them and stage the file " "before committing.\n" msgstr "" -"Неслетите файлове не могат да бъдат подавани.\n" +"Неслетите файлове не може да се подадат.\n" "\n" "Във файла „%s“ има конфликти при сливане. За да го подадете, трябва първо да " "коригирате конфликтите и да добавите файла към индекса за подаване.\n" -#: lib/commit.tcl:181 +#: lib/commit.tcl:190 #, tcl-format msgid "" "Unknown file state %s detected.\n" @@ -1478,9 +1447,9 @@ msgid "" msgstr "" "Непознато състояние на файл „%s“.\n" "\n" -"Файлът „%s“ не може да бъде подаден чрез текущата програма.\n" +"Файлът „%s“ не може да се подаде чрез текущата програма.\n" -#: lib/commit.tcl:189 +#: lib/commit.tcl:198 msgid "" "No changes to commit.\n" "\n" @@ -1490,7 +1459,7 @@ msgstr "" "\n" "Трябва да добавите поне един файл към индекса, за да подадете.\n" -#: lib/commit.tcl:204 +#: lib/commit.tcl:224 msgid "" "Please supply a commit message.\n" "\n" @@ -1508,15 +1477,15 @@ msgstr "" "● Втори ред: празен.\n" "● Останалите редове: опишете защо се налага тази промяна.\n" -#: lib/commit.tcl:235 +#: lib/commit.tcl:255 msgid "Calling pre-commit hook..." msgstr "Изпълняване на куката преди подаване…" -#: lib/commit.tcl:250 +#: lib/commit.tcl:270 msgid "Commit declined by pre-commit hook." msgstr "Подаването е отхвърлено от куката преди подаване." -#: lib/commit.tcl:269 +#: lib/commit.tcl:289 msgid "" "You are about to commit on a detached head. This is a potentially dangerous " "thing to do because if you switch to another branch you will lose your " @@ -1532,32 +1501,32 @@ msgstr "" " \n" "Сигурни ли сте, че искате да извършите текущото подаване?" -#: lib/commit.tcl:290 +#: lib/commit.tcl:310 msgid "Calling commit-msg hook..." msgstr "Изпълняване на куката за съобщението при подаване…" -#: lib/commit.tcl:305 +#: lib/commit.tcl:325 msgid "Commit declined by commit-msg hook." msgstr "Подаването е отхвърлено от куката за съобщението при подаване." -#: lib/commit.tcl:318 +#: lib/commit.tcl:338 msgid "Committing changes..." msgstr "Подаване на промените…" -#: lib/commit.tcl:334 +#: lib/commit.tcl:355 msgid "write-tree failed:" msgstr "неуспешно запазване на дървото (write-tree):" -#: lib/commit.tcl:335 lib/commit.tcl:382 lib/commit.tcl:403 +#: lib/commit.tcl:356 lib/commit.tcl:406 lib/commit.tcl:433 msgid "Commit failed." msgstr "Неуспешно подаване." -#: lib/commit.tcl:352 +#: lib/commit.tcl:373 #, tcl-format msgid "Commit %s appears to be corrupt" msgstr "Подаването „%s“ изглежда повредено" -#: lib/commit.tcl:357 +#: lib/commit.tcl:378 msgid "" "No changes to commit.\n" "\n" @@ -1572,19 +1541,19 @@ msgstr "" "\n" "Автоматично ще започне нова проверка.\n" -#: lib/commit.tcl:364 +#: lib/commit.tcl:385 msgid "No changes to commit." msgstr "Няма промени за подаване." -#: lib/commit.tcl:381 +#: lib/commit.tcl:405 msgid "commit-tree failed:" msgstr "неуспешно подаване на дървото (commit-tree):" -#: lib/commit.tcl:402 +#: lib/commit.tcl:432 msgid "update-ref failed:" msgstr "неуспешно обновяване на указателите (update-ref):" -#: lib/commit.tcl:495 +#: lib/commit.tcl:526 #, tcl-format msgid "Created commit %s: %s" msgstr "Успешно подаване %s: %s" @@ -1670,35 +1639,24 @@ msgstr "" msgid "Invalid date from Git: %s" msgstr "Неправилни данни от Git: %s" -#: lib/diff.tcl:77 -#, tcl-format +#: lib/diff.tcl:74 msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" -"\n" -"The modification date of this file was updated by another application, but " -"the content within the file was not changed.\n" -"\n" -"A rescan will be automatically started to find other files which may have " -"the same state." +"* No differences detected; stage the file to de-list it from Unstaged " +"Changes.\n" msgstr "" -"Не са открити разлики.\n" -"\n" -"Няма промени в „%s“.\n" -"\n" -"Времето на промяна на файла е бил зададен от друга програма, но съдържанието " -"му не е променено.\n" -"\n" -"Автоматично ще започне нова проверка дали няма други файлове в това " -"състояние." +"● Няма разлики. Добавете файла към индекса, за да се извади от промените " +"извън индекса.\n" + +#: lib/diff.tcl:75 +msgid "* Click to find other files that may have the same state.\n" +msgstr "● Натиснете, за да потърсите други файлове в това състояние.\n" -#: lib/diff.tcl:117 +#: lib/diff.tcl:106 #, tcl-format msgid "Loading diff of %s..." msgstr "Зареждане на разликите в „%s“…" -#: lib/diff.tcl:143 +#: lib/diff.tcl:132 msgid "" "LOCAL: deleted\n" "REMOTE:\n" @@ -1706,7 +1664,7 @@ msgstr "" "ЛОКАЛНО: изтрит\n" "ОТДАЛЕЧЕНО:\n" -#: lib/diff.tcl:148 +#: lib/diff.tcl:137 msgid "" "REMOTE: deleted\n" "LOCAL:\n" @@ -1714,32 +1672,32 @@ msgstr "" "ОТДАЛЕЧЕНО: изтрит\n" "ЛОКАЛНО:\n" -#: lib/diff.tcl:155 +#: lib/diff.tcl:144 msgid "LOCAL:\n" msgstr "ЛОКАЛНО:\n" -#: lib/diff.tcl:158 +#: lib/diff.tcl:147 msgid "REMOTE:\n" msgstr "ОТДАЛЕЧЕНО:\n" -#: lib/diff.tcl:220 lib/diff.tcl:357 +#: lib/diff.tcl:209 lib/diff.tcl:333 #, tcl-format msgid "Unable to display %s" -msgstr "Файлът „%s“ не може да бъде показан" +msgstr "Файлът „%s“ не може да се покаже" -#: lib/diff.tcl:221 +#: lib/diff.tcl:210 msgid "Error loading file:" msgstr "Грешка при зареждане на файл:" -#: lib/diff.tcl:227 +#: lib/diff.tcl:216 msgid "Git Repository (subproject)" msgstr "Хранилище на Git (подмодул)" -#: lib/diff.tcl:239 +#: lib/diff.tcl:228 msgid "* Binary file (not showing content)." msgstr "● Двоичен файл (съдържанието не се показва)." -#: lib/diff.tcl:244 +#: lib/diff.tcl:233 #, tcl-format msgid "" "* Untracked file is %d bytes.\n" @@ -1748,7 +1706,7 @@ msgstr "" "● Неследеният файл е %d байта.\n" "● Показват се само първите %d байта.\n" -#: lib/diff.tcl:250 +#: lib/diff.tcl:239 #, tcl-format msgid "" "\n" @@ -1759,21 +1717,33 @@ msgstr "" "● Неследеният файл е отрязан дотук от програмата „%s“.\n" "● Използвайте външен редактор, за да видите целия файл.\n" -#: lib/diff.tcl:580 +#: lib/diff.tcl:569 msgid "Failed to unstage selected hunk." -msgstr "Избраното парче не може да бъде извадено от индекса." +msgstr "Избраното парче не може да се извади от индекса." + +#: lib/diff.tcl:577 +msgid "Failed to revert selected hunk." +msgstr "Избраното парче не може да се върне." -#: lib/diff.tcl:587 +#: lib/diff.tcl:580 msgid "Failed to stage selected hunk." -msgstr "Избраното парче не може да бъде добавено към индекса." +msgstr "Избраното парче не може да се добави към индекса." -#: lib/diff.tcl:666 +#: lib/diff.tcl:673 msgid "Failed to unstage selected line." -msgstr "Избраният ред не може да бъде изваден от индекса." +msgstr "Избраният ред не може да се извади от индекса." + +#: lib/diff.tcl:682 +msgid "Failed to revert selected line." +msgstr "Избраният ред не може да се върне." -#: lib/diff.tcl:674 +#: lib/diff.tcl:686 msgid "Failed to stage selected line." -msgstr "Избраният ред не може да бъде добавен към индекса." +msgstr "Избраният ред не може да се добави към индекса." + +#: lib/diff.tcl:875 +msgid "Failed to undo last revert." +msgstr "Неуспешна отмяна на последното връщане." #: lib/encoding.tcl:443 msgid "Default" @@ -1814,13 +1784,13 @@ msgstr "%s (%s): грешка" #: lib/index.tcl:6 msgid "Unable to unlock the index." -msgstr "Индексът не може да бъде отключен." +msgstr "Индексът не може да се отключи." -#: lib/index.tcl:17 +#: lib/index.tcl:30 msgid "Index Error" msgstr "Грешка в индекса" -#: lib/index.tcl:19 +#: lib/index.tcl:32 msgid "" "Updating the Git index failed. A rescan will be automatically started to " "resynchronize git-gui." @@ -1828,70 +1798,106 @@ msgstr "" "Неуспешно обновяване на индекса на Git. Автоматично ще започне нова проверка " "за синхронизирането на git-gui." -#: lib/index.tcl:30 +#: lib/index.tcl:43 msgid "Continue" msgstr "Продължаване" -#: lib/index.tcl:33 +#: lib/index.tcl:46 msgid "Unlock Index" msgstr "Отключване на индекса" -#: lib/index.tcl:294 +#: lib/index.tcl:326 msgid "Unstaging selected files from commit" msgstr "Изваждане на избраните файлове от подаването" -#: lib/index.tcl:298 +#: lib/index.tcl:330 #, tcl-format msgid "Unstaging %s from commit" msgstr "Изваждане на „%s“ от подаването" -#: lib/index.tcl:337 +#: lib/index.tcl:369 msgid "Ready to commit." msgstr "Готовност за подаване." -#: lib/index.tcl:346 +#: lib/index.tcl:378 msgid "Adding selected files" msgstr "Добавяне на избраните файлове" -#: lib/index.tcl:350 +#: lib/index.tcl:382 #, tcl-format msgid "Adding %s" msgstr "Добавяне на „%s“" -#: lib/index.tcl:380 +#: lib/index.tcl:412 #, tcl-format msgid "Stage %d untracked files?" msgstr "Да се добавят ли %d неследени файла към индекса?" -#: lib/index.tcl:388 +#: lib/index.tcl:420 msgid "Adding all changed files" msgstr "Добавяне на всички променени файлове" -#: lib/index.tcl:428 +#: lib/index.tcl:503 #, tcl-format msgid "Revert changes in file %s?" msgstr "Да се махнат ли промените във файла „%s“?" -#: lib/index.tcl:430 +#: lib/index.tcl:508 #, tcl-format msgid "Revert changes in these %i files?" msgstr "Да се махнат ли промените в тези %i файла?" -#: lib/index.tcl:438 +#: lib/index.tcl:517 msgid "Any unstaged changes will be permanently lost by the revert." msgstr "" -"Всички промени, които не са били вкарани в индекса, ще бъдат безвъзвратно " -"загубени." +"Всички промени, които не са били добавени в индекса, ще се загубят " +"безвъзвратно." -#: lib/index.tcl:441 +#: lib/index.tcl:520 lib/index.tcl:564 msgid "Do Nothing" msgstr "Нищо да не се прави" -#: lib/index.tcl:459 +#: lib/index.tcl:546 +#, tcl-format +msgid "Delete untracked file %s?" +msgstr "Да се изтрие ли неследеният файл „%s“?" + +#: lib/index.tcl:551 +#, tcl-format +msgid "Delete these %i untracked files?" +msgstr "Да се изтрият ли тези %d неследени файла?" + +#: lib/index.tcl:561 +msgid "Files will be permanently deleted." +msgstr "Файловете ще се изтрият окончателно." + +#: lib/index.tcl:565 +msgid "Delete Files" +msgstr "Изтриване на файлове" + +#: lib/index.tcl:588 +msgid "Deleting" +msgstr "Изтриване" + +#: lib/index.tcl:667 +msgid "Encountered errors deleting files:\n" +msgstr "Грешки при изтриване на файловете:\n" + +#: lib/index.tcl:676 +#, tcl-format +msgid "None of the %d selected files could be deleted." +msgstr "Никой от избраните %d файла не бе изтрит." + +#: lib/index.tcl:681 +#, tcl-format +msgid "%d of the %d selected files could not be deleted." +msgstr "%d от избраните %d файла не бяха изтрити." + +#: lib/index.tcl:728 msgid "Reverting selected files" msgstr "Махане на промените в избраните файлове" -#: lib/index.tcl:463 +#: lib/index.tcl:732 #, tcl-format msgid "Reverting %s" msgstr "Махане на промените в „%s“" @@ -1902,7 +1908,7 @@ msgstr "Към ред:" #: lib/line.tcl:23 msgid "Go" -msgstr "Придвижване" +msgstr "Към" #: lib/merge.tcl:13 msgid "" @@ -1927,7 +1933,7 @@ msgstr "" "Последно установеното състояние не отговаря на това в хранилището.\n" "\n" "Някой друг процес за Git е променил хранилището междувременно. Състоянието " -"трябва да бъде проверено, преди да се извърши сливане.\n" +"трябва да се провери, преди да се извърши сливане.\n" "\n" "Автоматично ще започне нова проверка.\n" "\n" @@ -2005,7 +2011,7 @@ msgid "" "\n" "You must finish amending this commit.\n" msgstr "" -"Поправянето не може да бъде преустановено.\n" +"Поправянето не може да се преустанови.\n" "\n" "Трябва да завършите поправката на това подаване.\n" @@ -2019,7 +2025,7 @@ msgid "" msgstr "" "Да се преустанови ли сливането?\n" "\n" -"В такъв случай ●ВСИЧКИ● неподадени промени ще бъдат безвъзвратно загубени.\n" +"В такъв случай ●ВСИЧКИ● неподадени промени ще се загубят безвъзвратно.\n" "\n" "Наистина ли да се преустанови сливането?" @@ -2033,23 +2039,23 @@ msgid "" msgstr "" "Да се занулят ли промените?\n" "\n" -"В такъв случай ●ВСИЧКИ● неподадени промени ще бъдат безвъзвратно загубени.\n" +"В такъв случай ●ВСИЧКИ● неподадени промени ще се загубят безвъзвратно.\n" "\n" "Наистина ли да се занулят промените?" -#: lib/merge.tcl:245 +#: lib/merge.tcl:246 msgid "Aborting" msgstr "Преустановяване" -#: lib/merge.tcl:245 +#: lib/merge.tcl:247 msgid "files reset" msgstr "файла със занулени промени" -#: lib/merge.tcl:273 +#: lib/merge.tcl:277 msgid "Abort failed." msgstr "Неуспешно преустановяване." -#: lib/merge.tcl:275 +#: lib/merge.tcl:279 msgid "Abort completed. Ready." msgstr "Успешно преустановяване. Готовност за следващо действие." @@ -2076,9 +2082,9 @@ msgid "" msgstr "" "Разликата показва само разликите с конфликт.\n" "\n" -"Файлът „%s“ ще бъде презаписан.\n" +"Файлът „%s“ ще се презапише.\n" "\n" -"Тази операция може да бъде отменена само чрез започване на сливането наново." +"Тази операция може да се отмени само чрез започване на сливането наново." #: lib/mergetool.tcl:45 #, tcl-format @@ -2095,7 +2101,7 @@ msgstr "Добавяне на корекция на конфликтите в #: lib/mergetool.tcl:141 msgid "Cannot resolve deletion or link conflicts using a tool" msgstr "" -"Конфликтите при символни връзки или изтриване не могат да бъдат коригирани с " +"Конфликтите при символни връзки или изтриване не може да се коригират с " "външна програма." #: lib/mergetool.tcl:146 @@ -2107,16 +2113,36 @@ msgstr "Файлът, в който е конфликтът, не съществ msgid "Not a GUI merge tool: '%s'" msgstr "Това не е графична програма за сливане: „%s“" -#: lib/mergetool.tcl:275 +#: lib/mergetool.tcl:278 #, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "Неподдържана програма за сливане: „%s“" +msgid "" +"Unable to process square brackets in \"mergetool.%s.cmd\" configuration " +"option.\n" +"\n" +"Please remove the square brackets." +msgstr "" +"Квадратните скоби в настройката „mergetool.%s.cmd“ не може да се обработят.\n" +"\n" +"Махнете ги." -#: lib/mergetool.tcl:310 +#: lib/mergetool.tcl:289 +#, tcl-format +msgid "" +"Unsupported merge tool '%s'.\n" +"\n" +"To use this tool, configure \"mergetool.%s.cmd\" as shown in the git-config " +"manual page." +msgstr "" +"Неподдържана програма за сливане: „%s“.\n" +"\n" +"За да я използвате, настройте „mergetool.%s.cmd“ както както е обяснено в " +"страницата на ръководството за „git-config“." + +#: lib/mergetool.tcl:327 msgid "Merge tool is already running, terminate it?" -msgstr "Програмата за сливане вече е стартирана. Да бъде ли изключена?" +msgstr "Програмата за сливане вече е стартирана. Да се изключи ли?" -#: lib/mergetool.tcl:330 +#: lib/mergetool.tcl:347 #, tcl-format msgid "" "Error retrieving versions:\n" @@ -2125,22 +2151,22 @@ msgstr "" "Грешка при изтеглянето на версии:\n" "%s" -#: lib/mergetool.tcl:350 +#: lib/mergetool.tcl:367 #, tcl-format msgid "" "Could not start the merge tool:\n" "\n" "%s" msgstr "" -"Програмата за сливане не може да бъде стартирана:\n" +"Програмата за сливане не може да се стартира:\n" "\n" "%s" -#: lib/mergetool.tcl:354 +#: lib/mergetool.tcl:371 msgid "Running merge tool..." msgstr "Стартиране на програмата за сливане…" -#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +#: lib/mergetool.tcl:399 lib/mergetool.tcl:407 msgid "Merge tool failed." msgstr "Грешка в програмата за сливане." @@ -2292,26 +2318,6 @@ msgstr "Настройки" msgid "Failed to completely save options:" msgstr "Неуспешно запазване на настройките:" -#: lib/remote.tcl:200 -msgid "Push to" -msgstr "Изтласкване към" - -#: lib/remote.tcl:218 -msgid "Remove Remote" -msgstr "Премахване на отдалечено хранилище" - -#: lib/remote.tcl:223 -msgid "Prune from" -msgstr "Окастряне от" - -#: lib/remote.tcl:228 -msgid "Fetch from" -msgstr "Доставяне от" - -#: lib/remote.tcl:253 lib/remote.tcl:258 -msgid "All" -msgstr "Всички" - #: lib/remote_add.tcl:20 #, tcl-format msgid "%s (%s): Add Remote" @@ -2376,7 +2382,7 @@ msgstr "Доставяне на „%s“" #: lib/remote_add.tcl:156 #, tcl-format msgid "Do not know how to initialize repository at location '%s'." -msgstr "Хранилището с местоположение „%s“ не може да бъде инициализирано." +msgstr "Хранилището с местоположение „%s“ не може да се инициализира." #: lib/remote_add.tcl:162 lib/transport.tcl:54 lib/transport.tcl:92 #: lib/transport.tcl:110 @@ -2464,6 +2470,26 @@ msgstr "Не е избрано хранилище." msgid "Scanning %s..." msgstr "Претърсване на „%s“…" +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "Изтласкване към" + +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "Премахване на отдалечено хранилище" + +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "Окастряне от" + +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "Доставяне от" + +#: lib/remote.tcl:249 lib/remote.tcl:253 lib/remote.tcl:258 lib/remote.tcl:264 +msgid "All" +msgstr "Всички" + #: lib/search.tcl:48 msgid "Find:" msgstr "Търсене:" @@ -2482,20 +2508,20 @@ msgstr "РегИзр" #: lib/search.tcl:54 msgid "Case" -msgstr "Главни/малки" +msgstr "Главни/Малки" -#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75 +#: lib/shortcut.tcl:8 lib/shortcut.tcl:40 lib/shortcut.tcl:72 #, tcl-format msgid "%s (%s): Create Desktop Icon" msgstr "%s (%s): Добавяне на икона на работния плот" -#: lib/shortcut.tcl:24 lib/shortcut.tcl:65 +#: lib/shortcut.tcl:24 lib/shortcut.tcl:62 msgid "Cannot write shortcut:" -msgstr "Клавишната комбинация не може да бъде запазена:" +msgstr "Клавишната комбинация не може да се запази:" -#: lib/shortcut.tcl:140 +#: lib/shortcut.tcl:137 msgid "Cannot write icon:" -msgstr "Иконата не може да бъде запазена:" +msgstr "Иконата не може да се запази:" #: lib/spellcheck.tcl:57 msgid "Unsupported spell checker" @@ -2534,95 +2560,60 @@ msgstr "Неочакван край на файл от програмата за msgid "Spell Checker Failed" msgstr "Грешка в програмата за проверка на правописа" -#: lib/sshkey.tcl:31 +#: lib/sshkey.tcl:34 msgid "No keys found." msgstr "Не са открити ключове." -#: lib/sshkey.tcl:34 +#: lib/sshkey.tcl:37 #, tcl-format msgid "Found a public key in: %s" msgstr "Открит е публичен ключ в „%s“" -#: lib/sshkey.tcl:40 +#: lib/sshkey.tcl:43 msgid "Generate Key" msgstr "Генериране на ключ" -#: lib/sshkey.tcl:58 +#: lib/sshkey.tcl:61 msgid "Copy To Clipboard" msgstr "Копиране към системния буфер" -#: lib/sshkey.tcl:72 +#: lib/sshkey.tcl:75 msgid "Your OpenSSH Public Key" msgstr "Публичният ви ключ за OpenSSH" -#: lib/sshkey.tcl:80 +#: lib/sshkey.tcl:83 msgid "Generating..." msgstr "Генериране…" -#: lib/sshkey.tcl:86 +#: lib/sshkey.tcl:89 #, tcl-format msgid "" "Could not start ssh-keygen:\n" "\n" "%s" msgstr "" -"Програмата „ssh-keygen“ не може да бъде стартирана:\n" +"Програмата „ssh-keygen“ не може да се стартира:\n" "\n" "%s" -#: lib/sshkey.tcl:113 +#: lib/sshkey.tcl:116 msgid "Generation failed." msgstr "Неуспешно генериране." -#: lib/sshkey.tcl:120 +#: lib/sshkey.tcl:123 msgid "Generation succeeded, but no keys found." msgstr "Генерирането завърши успешно, а не са намерени ключове." -#: lib/sshkey.tcl:123 +#: lib/sshkey.tcl:126 #, tcl-format msgid "Your key is in: %s" msgstr "Ключът ви е в „%s“" -#: lib/status_bar.tcl:87 +#: lib/status_bar.tcl:263 #, tcl-format msgid "%s ... %*i of %*i %s (%3i%%)" msgstr "%s… %*i от общо %*i %s (%3i%%)" -#: lib/tools.tcl:76 -#, tcl-format -msgid "Running %s requires a selected file." -msgstr "За изпълнението на „%s“ трябва да изберете файл." - -#: lib/tools.tcl:92 -#, tcl-format -msgid "Are you sure you want to run %1$s on file \"%2$s\"?" -msgstr "Сигурни ли сте, че искате да изпълните „%1$s“ върху файла „%2$s“?" - -#: lib/tools.tcl:96 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "Сигурни ли сте, че искате да изпълните „%s“?" - -#: lib/tools.tcl:118 -#, tcl-format -msgid "Tool: %s" -msgstr "Команда: %s" - -#: lib/tools.tcl:119 -#, tcl-format -msgid "Running: %s" -msgstr "Изпълнение: %s" - -#: lib/tools.tcl:158 -#, tcl-format -msgid "Tool completed successfully: %s" -msgstr "Командата завърши успешно: %s" - -#: lib/tools.tcl:160 -#, tcl-format -msgid "Tool failed: %s" -msgstr "Командата върна грешка: %s" - #: lib/tools_dlg.tcl:22 #, tcl-format msgid "%s (%s): Add Tool" @@ -2685,7 +2676,7 @@ msgid "" "Could not add tool:\n" "%s" msgstr "" -"Командата не може да бъде добавена:\n" +"Командата не може да се добави:\n" "%s" #: lib/tools_dlg.tcl:187 @@ -2723,6 +2714,41 @@ msgstr "Аргументи" msgid "OK" msgstr "Добре" +#: lib/tools.tcl:76 +#, tcl-format +msgid "Running %s requires a selected file." +msgstr "За изпълнението на „%s“ трябва да изберете файл." + +#: lib/tools.tcl:92 +#, tcl-format +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "Сигурни ли сте, че искате да изпълните „%1$s“ върху файла „%2$s“?" + +#: lib/tools.tcl:96 +#, tcl-format +msgid "Are you sure you want to run %s?" +msgstr "Сигурни ли сте, че искате да изпълните „%s“?" + +#: lib/tools.tcl:118 +#, tcl-format +msgid "Tool: %s" +msgstr "Команда: %s" + +#: lib/tools.tcl:119 +#, tcl-format +msgid "Running: %s" +msgstr "Изпълнение: %s" + +#: lib/tools.tcl:158 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "Командата завърши успешно: %s" + +#: lib/tools.tcl:160 +#, tcl-format +msgid "Tool failed: %s" +msgstr "Командата върна грешка: %s" + #: lib/transport.tcl:7 #, tcl-format msgid "Fetching new changes from %s" @@ -2790,8 +2816,7 @@ msgstr "Настройки при пренасянето" #: lib/transport.tcl:207 msgid "Force overwrite existing branch (may discard changes)" msgstr "" -"Изрично презаписване на съществуващ клон (някои промени може да бъдат " -"загубени)" +"Изрично презаписване на съществуващ клон (някои промени може да се загубят)" #: lib/transport.tcl:211 msgid "Use thin pack (for slow network connections)" diff --git a/po/de.po b/po/de.po index baebff2..a8d5f61 100644 --- a/po/de.po +++ b/po/de.po @@ -7,41 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-26 22:22+0100\n" -"PO-Revision-Date: 2010-01-26 22:25+0100\n" -"Last-Translator: Christian Stimming \n" +"POT-Creation-Date: 2020-02-08 22:54+0100\n" +"PO-Revision-Date: 2020-02-09 22:40+0100\n" +"Last-Translator: Christian Stimming \n" "Language-Team: German\n" +"Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: git-gui.sh:41 git-gui.sh:793 git-gui.sh:807 git-gui.sh:820 git-gui.sh:903 -#: git-gui.sh:922 -msgid "git-gui: fatal error" -msgstr "git-gui: Programmfehler" - -#: git-gui.sh:743 +#: git-gui.sh:847 #, tcl-format msgid "Invalid font specified in %s:" msgstr "Ungültige Zeichensatz-Angabe in %s:" -#: git-gui.sh:779 +#: git-gui.sh:901 msgid "Main Font" msgstr "Programmschriftart" -#: git-gui.sh:780 +#: git-gui.sh:902 msgid "Diff/Console Font" msgstr "Vergleich-Schriftart" -#: git-gui.sh:794 +#: git-gui.sh:917 git-gui.sh:931 git-gui.sh:944 git-gui.sh:1034 git-gui.sh:1053 +#: git-gui.sh:3212 +msgid "git-gui: fatal error" +msgstr "git-gui: Programmfehler" + +#: git-gui.sh:918 msgid "Cannot find git in PATH." msgstr "Git kann im PATH nicht gefunden werden." -#: git-gui.sh:821 +#: git-gui.sh:945 msgid "Cannot parse Git version string:" msgstr "Git Versionsangabe kann nicht erkannt werden:" -#: git-gui.sh:839 +#: git-gui.sh:970 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -60,479 +61,524 @@ msgstr "" "\n" "Soll angenommen werden, »%s« sei Version 1.5.0?\n" -#: git-gui.sh:1128 +#: git-gui.sh:1267 msgid "Git directory not found:" msgstr "Git-Verzeichnis nicht gefunden:" -#: git-gui.sh:1146 +#: git-gui.sh:1301 msgid "Cannot move to top of working directory:" msgstr "" "Es konnte nicht in das oberste Verzeichnis der Arbeitskopie gewechselt " "werden:" -#: git-gui.sh:1154 +#: git-gui.sh:1309 msgid "Cannot use bare repository:" -msgstr "Bloßes Projektarchiv kann nicht benutzt werden:" +msgstr "Bloßes Repository kann nicht benutzt werden:" -#: git-gui.sh:1162 +#: git-gui.sh:1317 msgid "No working directory" msgstr "Kein Arbeitsverzeichnis" -#: git-gui.sh:1334 lib/checkout_op.tcl:306 +#: git-gui.sh:1491 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "Dateistatus aktualisieren..." -#: git-gui.sh:1390 +#: git-gui.sh:1551 msgid "Scanning for modified files ..." msgstr "Nach geänderten Dateien suchen..." -#: git-gui.sh:1454 +#: git-gui.sh:1629 msgid "Calling prepare-commit-msg hook..." -msgstr "Aufrufen der Eintragen-Vorbereiten-Kontrolle (»prepare-commit hook«)..." +msgstr "Aufrufen des »prepare-commit-msg hook«..." -#: git-gui.sh:1471 +#: git-gui.sh:1646 msgid "Commit declined by prepare-commit-msg hook." -msgstr "" -"Eintragen abgelehnt durch Eintragen-Vorbereiten-Kontrolle (»prepare-commit " -"hook«)." +msgstr "Commit abgelehnt durch »prepare-commit-msg hook«." -#: git-gui.sh:1629 lib/browser.tcl:246 +#: git-gui.sh:1804 lib/browser.tcl:252 msgid "Ready." msgstr "Bereit." -#: git-gui.sh:1787 +#: git-gui.sh:1968 #, tcl-format -msgid "Displaying only %s of %s files." -msgstr "Nur %s von %s Dateien werden angezeigt." +msgid "" +"Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." +msgstr "" +"Anzeigelimit erreicht (gui.maxfilesdisplayed = %s) für Anzahl Einträge. Es " +"werden nicht alle %s Dateien gezeigt." -#: git-gui.sh:1913 +#: git-gui.sh:2091 msgid "Unmodified" msgstr "Unverändert" -#: git-gui.sh:1915 +#: git-gui.sh:2093 msgid "Modified, not staged" msgstr "Verändert, nicht bereitgestellt" -#: git-gui.sh:1916 git-gui.sh:1924 +#: git-gui.sh:2094 git-gui.sh:2106 msgid "Staged for commit" -msgstr "Bereitgestellt zum Eintragen" +msgstr "Bereitgestellt zum Committen" -#: git-gui.sh:1917 git-gui.sh:1925 +#: git-gui.sh:2095 git-gui.sh:2107 msgid "Portions staged for commit" -msgstr "Teilweise bereitgestellt zum Eintragen" +msgstr "Teilweise bereitgestellt zum Committen" -#: git-gui.sh:1918 git-gui.sh:1926 +#: git-gui.sh:2096 git-gui.sh:2108 msgid "Staged for commit, missing" -msgstr "Bereitgestellt zum Eintragen, fehlend" +msgstr "Bereitgestellt zum Committen, fehlend" -#: git-gui.sh:1920 +#: git-gui.sh:2098 msgid "File type changed, not staged" msgstr "Dateityp geändert, nicht bereitgestellt" -#: git-gui.sh:1921 +#: git-gui.sh:2099 git-gui.sh:2100 +msgid "File type changed, old type staged for commit" +msgstr "Dateityp geändert, alter Dateityp bereitgestellt" + +#: git-gui.sh:2101 msgid "File type changed, staged" msgstr "Dateityp geändert, bereitgestellt" -#: git-gui.sh:1923 +#: git-gui.sh:2102 +msgid "File type change staged, modification not staged" +msgstr "Dateityp-Änderung bereitgestellt, Inhaltsänderung nicht bereitgestellt" + +#: git-gui.sh:2103 +msgid "File type change staged, file missing" +msgstr "Dateityp-Änderung bereitgestellt, Datei gelöscht" + +#: git-gui.sh:2105 msgid "Untracked, not staged" -msgstr "Nicht unter Versionskontrolle, nicht bereitgestellt" +msgstr "Unversioniert, nicht bereitgestellt" -#: git-gui.sh:1928 +#: git-gui.sh:2110 msgid "Missing" msgstr "Fehlend" -#: git-gui.sh:1929 +#: git-gui.sh:2111 msgid "Staged for removal" msgstr "Bereitgestellt zum Löschen" -#: git-gui.sh:1930 +#: git-gui.sh:2112 msgid "Staged for removal, still present" msgstr "Bereitgestellt zum Löschen, trotzdem vorhanden" -#: git-gui.sh:1932 git-gui.sh:1933 git-gui.sh:1934 git-gui.sh:1935 -#: git-gui.sh:1936 git-gui.sh:1937 +#: git-gui.sh:2114 git-gui.sh:2115 git-gui.sh:2116 git-gui.sh:2117 +#: git-gui.sh:2118 git-gui.sh:2119 msgid "Requires merge resolution" msgstr "Konfliktauflösung nötig" -#: git-gui.sh:1972 -msgid "Starting gitk... please wait..." -msgstr "Gitk wird gestartet... bitte warten." - -#: git-gui.sh:1984 +#: git-gui.sh:2164 msgid "Couldn't find gitk in PATH" msgstr "Gitk kann im PATH nicht gefunden werden." -#: git-gui.sh:2043 +#: git-gui.sh:2210 git-gui.sh:2245 +#, tcl-format +msgid "Starting %s... please wait..." +msgstr "%s wird gestartet... bitte warten." + +#: git-gui.sh:2224 msgid "Couldn't find git gui in PATH" msgstr "»Git gui« kann im PATH nicht gefunden werden." -#: git-gui.sh:2455 lib/choose_repository.tcl:36 +#: git-gui.sh:2726 lib/choose_repository.tcl:53 msgid "Repository" -msgstr "Projektarchiv" +msgstr "Repository" -#: git-gui.sh:2456 +#: git-gui.sh:2727 msgid "Edit" msgstr "Bearbeiten" -#: git-gui.sh:2458 lib/choose_rev.tcl:561 +#: git-gui.sh:2729 lib/choose_rev.tcl:567 msgid "Branch" -msgstr "Zweig" +msgstr "Branch" -#: git-gui.sh:2461 lib/choose_rev.tcl:548 +#: git-gui.sh:2732 lib/choose_rev.tcl:554 msgid "Commit@@noun" -msgstr "Version" +msgstr "Commit" -#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168 +#: git-gui.sh:2735 lib/merge.tcl:127 lib/merge.tcl:174 msgid "Merge" msgstr "Zusammenführen" -#: git-gui.sh:2465 lib/choose_rev.tcl:557 +#: git-gui.sh:2736 lib/choose_rev.tcl:563 msgid "Remote" -msgstr "Externe Archive" +msgstr "Extern" -#: git-gui.sh:2468 +#: git-gui.sh:2739 msgid "Tools" msgstr "Werkzeuge" -#: git-gui.sh:2477 +#: git-gui.sh:2748 msgid "Explore Working Copy" -msgstr "Arbeitskopie im Dateimanager" +msgstr "Arbeitskopie im Dateimanager öffnen" -#: git-gui.sh:2483 +#: git-gui.sh:2763 +msgid "Git Bash" +msgstr "Git Bash" + +#: git-gui.sh:2772 msgid "Browse Current Branch's Files" -msgstr "Aktuellen Zweig durchblättern" +msgstr "Aktuellen Branch durchblättern" -#: git-gui.sh:2487 +#: git-gui.sh:2776 msgid "Browse Branch Files..." -msgstr "Einen Zweig durchblättern..." +msgstr "Branch durchblättern..." -#: git-gui.sh:2492 +#: git-gui.sh:2781 msgid "Visualize Current Branch's History" -msgstr "Aktuellen Zweig darstellen" +msgstr "Aktuellen Branch darstellen" -#: git-gui.sh:2496 +#: git-gui.sh:2785 msgid "Visualize All Branch History" -msgstr "Alle Zweige darstellen" +msgstr "Historie aller Branches darstellen" -#: git-gui.sh:2503 +#: git-gui.sh:2792 #, tcl-format msgid "Browse %s's Files" -msgstr "Zweig »%s« durchblättern" +msgstr "Branch »%s« durchblättern" -#: git-gui.sh:2505 +#: git-gui.sh:2794 #, tcl-format msgid "Visualize %s's History" msgstr "Historie von »%s« darstellen" -#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67 +#: git-gui.sh:2799 lib/database.tcl:40 msgid "Database Statistics" msgstr "Datenbankstatistik" -#: git-gui.sh:2513 lib/database.tcl:34 +#: git-gui.sh:2802 lib/database.tcl:33 msgid "Compress Database" msgstr "Datenbank komprimieren" -#: git-gui.sh:2516 +#: git-gui.sh:2805 msgid "Verify Database" msgstr "Datenbank überprüfen" -#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8 -#: lib/shortcut.tcl:40 lib/shortcut.tcl:72 +#: git-gui.sh:2812 git-gui.sh:2816 git-gui.sh:2820 msgid "Create Desktop Icon" msgstr "Desktop-Icon erstellen" -#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191 +#: git-gui.sh:2828 lib/choose_repository.tcl:209 lib/choose_repository.tcl:217 msgid "Quit" msgstr "Beenden" -#: git-gui.sh:2547 +#: git-gui.sh:2836 msgid "Undo" msgstr "Rückgängig" -#: git-gui.sh:2550 +#: git-gui.sh:2839 msgid "Redo" msgstr "Wiederholen" -#: git-gui.sh:2554 git-gui.sh:3109 +#: git-gui.sh:2843 git-gui.sh:3461 msgid "Cut" msgstr "Ausschneiden" -#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259 +#: git-gui.sh:2846 git-gui.sh:3464 git-gui.sh:3540 git-gui.sh:3633 #: lib/console.tcl:69 msgid "Copy" msgstr "Kopieren" -#: git-gui.sh:2560 git-gui.sh:3115 +#: git-gui.sh:2849 git-gui.sh:3467 msgid "Paste" msgstr "Einfügen" -#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26 -#: lib/remote_branch_delete.tcl:38 +#: git-gui.sh:2852 git-gui.sh:3470 lib/remote_branch_delete.tcl:39 +#: lib/branch_delete.tcl:28 msgid "Delete" msgstr "Löschen" -#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71 +#: git-gui.sh:2856 git-gui.sh:3474 git-gui.sh:3637 lib/console.tcl:71 msgid "Select All" msgstr "Alle auswählen" -#: git-gui.sh:2576 +#: git-gui.sh:2865 msgid "Create..." msgstr "Erstellen..." -#: git-gui.sh:2582 +#: git-gui.sh:2871 msgid "Checkout..." -msgstr "Umstellen..." +msgstr "Auschecken..." -#: git-gui.sh:2588 +#: git-gui.sh:2877 msgid "Rename..." msgstr "Umbenennen..." -#: git-gui.sh:2593 +#: git-gui.sh:2882 msgid "Delete..." msgstr "Löschen..." -#: git-gui.sh:2598 +#: git-gui.sh:2887 msgid "Reset..." -msgstr "Zurücksetzen..." +msgstr "Änderungen verwerfen..." -#: git-gui.sh:2608 +#: git-gui.sh:2897 msgid "Done" msgstr "Fertig" -#: git-gui.sh:2610 +#: git-gui.sh:2899 msgid "Commit@@verb" -msgstr "Eintragen" - -#: git-gui.sh:2619 git-gui.sh:3050 -msgid "New Commit" -msgstr "Neue Version" +msgstr "Committen" -#: git-gui.sh:2627 git-gui.sh:3057 +#: git-gui.sh:2908 git-gui.sh:3400 msgid "Amend Last Commit" -msgstr "Letzte nachbessern" +msgstr "Letzten Commit nachbessern" -#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99 +#: git-gui.sh:2918 git-gui.sh:3361 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "Neu laden" -#: git-gui.sh:2643 +#: git-gui.sh:2924 msgid "Stage To Commit" -msgstr "Zum Eintragen bereitstellen" +msgstr "Für Commit bereitstellen" -#: git-gui.sh:2649 +#: git-gui.sh:2930 msgid "Stage Changed Files To Commit" -msgstr "Geänderte Dateien bereitstellen" +msgstr "Geänderte Dateien für Commit bereitstellen" -#: git-gui.sh:2655 +#: git-gui.sh:2936 msgid "Unstage From Commit" -msgstr "Aus der Bereitstellung herausnehmen" +msgstr "Aus Commit-Bereitstellung herausnehmen" -#: git-gui.sh:2661 lib/index.tcl:412 +#: git-gui.sh:2942 lib/index.tcl:521 msgid "Revert Changes" msgstr "Änderungen verwerfen" -#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341 +#: git-gui.sh:2950 git-gui.sh:3700 git-gui.sh:3731 msgid "Show Less Context" msgstr "Weniger Zeilen anzeigen" -#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345 +#: git-gui.sh:2954 git-gui.sh:3704 git-gui.sh:3735 msgid "Show More Context" msgstr "Mehr Zeilen anzeigen" -#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133 +#: git-gui.sh:2961 git-gui.sh:3374 git-gui.sh:3485 msgid "Sign Off" msgstr "Abzeichnen" -#: git-gui.sh:2696 +#: git-gui.sh:2977 msgid "Local Merge..." msgstr "Lokales Zusammenführen..." -#: git-gui.sh:2701 +#: git-gui.sh:2982 msgid "Abort Merge..." msgstr "Zusammenführen abbrechen..." -#: git-gui.sh:2713 git-gui.sh:2741 +#: git-gui.sh:2994 git-gui.sh:3022 msgid "Add..." -msgstr "Hinzufügen..." +msgstr "Neues hinzufügen..." -#: git-gui.sh:2717 +#: git-gui.sh:2998 msgid "Push..." msgstr "Versenden..." -#: git-gui.sh:2721 +#: git-gui.sh:3002 msgid "Delete Branch..." -msgstr "Zweig löschen..." +msgstr "Branch löschen..." -#: git-gui.sh:2731 git-gui.sh:3292 +#: git-gui.sh:3012 git-gui.sh:3666 msgid "Options..." msgstr "Optionen..." -#: git-gui.sh:2742 +#: git-gui.sh:3023 msgid "Remove..." msgstr "Entfernen..." -#: git-gui.sh:2751 lib/choose_repository.tcl:50 +#: git-gui.sh:3032 lib/choose_repository.tcl:67 msgid "Help" msgstr "Hilfe" -#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14 -#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53 +#: git-gui.sh:3036 git-gui.sh:3040 lib/choose_repository.tcl:61 +#: lib/choose_repository.tcl:70 lib/about.tcl:14 #, tcl-format msgid "About %s" msgstr "Über %s" -#: git-gui.sh:2783 +#: git-gui.sh:3064 msgid "Online Documentation" msgstr "Online-Dokumentation" -#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56 +#: git-gui.sh:3067 lib/choose_repository.tcl:64 lib/choose_repository.tcl:73 msgid "Show SSH Key" msgstr "SSH-Schlüssel anzeigen" -#: git-gui.sh:2893 +#: git-gui.sh:3097 git-gui.sh:3229 +msgid "usage:" +msgstr "Verwendung:" + +#: git-gui.sh:3101 git-gui.sh:3233 +msgid "Usage" +msgstr "Verwendung" + +#: git-gui.sh:3182 lib/blame.tcl:575 +msgid "Error" +msgstr "Fehler" + +#: git-gui.sh:3213 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" msgstr "" "Fehler: Verzeichnis »%s« kann nicht gelesen werden: Datei oder Verzeichnis " "nicht gefunden" -#: git-gui.sh:2926 +#: git-gui.sh:3246 msgid "Current Branch:" -msgstr "Aktueller Zweig:" - -#: git-gui.sh:2947 -msgid "Staged Changes (Will Commit)" -msgstr "Bereitstellung (zum Eintragen)" +msgstr "Aktueller Branch:" -#: git-gui.sh:2967 +#: git-gui.sh:3271 msgid "Unstaged Changes" msgstr "Nicht bereitgestellte Änderungen" -#: git-gui.sh:3017 +#: git-gui.sh:3293 +msgid "Staged Changes (Will Commit)" +msgstr "Bereitstellung (zum Committen)" + +#: git-gui.sh:3367 msgid "Stage Changed" msgstr "Alles bereitstellen" -#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193 +#: git-gui.sh:3386 lib/transport.tcl:137 msgid "Push" msgstr "Versenden" -#: git-gui.sh:3071 +#: git-gui.sh:3413 msgid "Initial Commit Message:" -msgstr "Erste Versionsbeschreibung:" +msgstr "Erste Commit-Beschreibung:" -#: git-gui.sh:3072 +#: git-gui.sh:3414 msgid "Amended Commit Message:" msgstr "Nachgebesserte Beschreibung:" -#: git-gui.sh:3073 +#: git-gui.sh:3415 msgid "Amended Initial Commit Message:" msgstr "Nachgebesserte erste Beschreibung:" -#: git-gui.sh:3074 +#: git-gui.sh:3416 msgid "Amended Merge Commit Message:" msgstr "Nachgebesserte Zusammenführungs-Beschreibung:" -#: git-gui.sh:3075 +#: git-gui.sh:3417 msgid "Merge Commit Message:" msgstr "Zusammenführungs-Beschreibung:" -#: git-gui.sh:3076 +#: git-gui.sh:3418 msgid "Commit Message:" -msgstr "Versionsbeschreibung:" +msgstr "Commit-Beschreibung:" -#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73 +#: git-gui.sh:3477 git-gui.sh:3641 lib/console.tcl:73 msgid "Copy All" msgstr "Alle kopieren" -#: git-gui.sh:3149 lib/blame.tcl:104 +#: git-gui.sh:3501 lib/blame.tcl:106 msgid "File:" msgstr "Datei:" -#: git-gui.sh:3255 +#: git-gui.sh:3549 lib/choose_repository.tcl:1100 +msgid "Open" +msgstr "Öffnen" + +#: git-gui.sh:3629 msgid "Refresh" msgstr "Aktualisieren" -#: git-gui.sh:3276 +#: git-gui.sh:3650 msgid "Decrease Font Size" msgstr "Schriftgröße verkleinern" -#: git-gui.sh:3280 +#: git-gui.sh:3654 msgid "Increase Font Size" msgstr "Schriftgröße vergrößern" -#: git-gui.sh:3288 lib/blame.tcl:281 +#: git-gui.sh:3662 lib/blame.tcl:296 msgid "Encoding" msgstr "Zeichenkodierung" -#: git-gui.sh:3299 +#: git-gui.sh:3673 msgid "Apply/Reverse Hunk" -msgstr "Kontext anwenden/umkehren" +msgstr "Patch-Block anwenden/zurücknehmen" -#: git-gui.sh:3304 +#: git-gui.sh:3678 msgid "Apply/Reverse Line" -msgstr "Zeile anwenden/umkehren" +msgstr "Zeile anwenden/zurücknehmen" + +#: git-gui.sh:3684 git-gui.sh:3794 git-gui.sh:3805 +msgid "Revert Hunk" +msgstr "Patch-Block zurücknehmen" + +#: git-gui.sh:3689 git-gui.sh:3801 git-gui.sh:3812 +msgid "Revert Line" +msgstr "Zeilenänderungen zurücknehmen" -#: git-gui.sh:3323 +#: git-gui.sh:3694 git-gui.sh:3791 +msgid "Undo Last Revert" +msgstr "Letztes Zurücknehmen rückgängig" + +#: git-gui.sh:3713 msgid "Run Merge Tool" msgstr "Zusammenführungswerkzeug" -#: git-gui.sh:3328 +#: git-gui.sh:3718 msgid "Use Remote Version" msgstr "Externe Version benutzen" -#: git-gui.sh:3332 +#: git-gui.sh:3722 msgid "Use Local Version" msgstr "Lokale Version benutzen" -#: git-gui.sh:3336 +#: git-gui.sh:3726 msgid "Revert To Base" -msgstr "Ursprüngliche Version benutzen" +msgstr "Zurücksetzen auf ursprünglichen Commit" -#: git-gui.sh:3354 +#: git-gui.sh:3744 msgid "Visualize These Changes In The Submodule" -msgstr "Diese Änderungen im Untermodul darstellen" +msgstr "Diese Änderungen im Submodul darstellen" -#: git-gui.sh:3358 +#: git-gui.sh:3748 msgid "Visualize Current Branch History In The Submodule" -msgstr "Aktuellen Zweig im Untermodul darstellen" +msgstr "Aktuellen Branch im Submodul darstellen" -#: git-gui.sh:3362 +#: git-gui.sh:3752 msgid "Visualize All Branch History In The Submodule" -msgstr "Alle Zweige im Untermodul darstellen" +msgstr "Alle Branches im Submodul darstellen" -#: git-gui.sh:3367 +#: git-gui.sh:3757 msgid "Start git gui In The Submodule" -msgstr "Git gui im Untermodul starten" +msgstr "Git gui im Submodul starten" -#: git-gui.sh:3389 +#: git-gui.sh:3793 msgid "Unstage Hunk From Commit" -msgstr "Kontext aus Bereitstellung herausnehmen" +msgstr "Patch-Block aus Bereitstellung herausnehmen" -#: git-gui.sh:3391 +#: git-gui.sh:3797 msgid "Unstage Lines From Commit" msgstr "Zeilen aus der Bereitstellung herausnehmen" -#: git-gui.sh:3393 +#: git-gui.sh:3798 git-gui.sh:3809 +msgid "Revert Lines" +msgstr "Zeilenänderung zurücknehmen" + +#: git-gui.sh:3800 msgid "Unstage Line From Commit" msgstr "Zeile aus der Bereitstellung herausnehmen" -#: git-gui.sh:3396 +#: git-gui.sh:3804 msgid "Stage Hunk For Commit" -msgstr "Kontext zur Bereitstellung hinzufügen" +msgstr "Patch-Block zur Bereitstellung hinzufügen" -#: git-gui.sh:3398 +#: git-gui.sh:3808 msgid "Stage Lines For Commit" msgstr "Zeilen zur Bereitstellung hinzufügen" -#: git-gui.sh:3400 +#: git-gui.sh:3811 msgid "Stage Line For Commit" msgstr "Zeile zur Bereitstellung hinzufügen" -#: git-gui.sh:3424 +#: git-gui.sh:3861 msgid "Initializing..." msgstr "Initialisieren..." -#: git-gui.sh:3541 +#: git-gui.sh:4017 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -548,7 +594,7 @@ msgstr "" "von %s an Git weitergegeben werden:\n" "\n" -#: git-gui.sh:3570 +#: git-gui.sh:4046 msgid "" "\n" "This is due to a known issue with the\n" @@ -558,7 +604,7 @@ msgstr "" "Dies ist ein bekanntes Problem der Tcl-Version, die\n" "in Cygwin mitgeliefert wird." -#: git-gui.sh:3575 +#: git-gui.sh:4051 #, tcl-format msgid "" "\n" @@ -574,363 +620,204 @@ msgstr "" "gewünschten Werte für die Einstellung user.name und \n" "user.email in Ihre Datei ~/.gitconfig einfügen.\n" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "git-gui - eine grafische Oberfläche für Git." - -#: lib/blame.tcl:72 -msgid "File Viewer" -msgstr "Datei-Browser" - -#: lib/blame.tcl:78 -msgid "Commit:" -msgstr "Version:" - -#: lib/blame.tcl:271 -msgid "Copy Commit" -msgstr "Version kopieren" - -#: lib/blame.tcl:275 -msgid "Find Text..." -msgstr "Text suchen..." - -#: lib/blame.tcl:284 -msgid "Do Full Copy Detection" -msgstr "Volle Kopie-Erkennung" +#: lib/spellcheck.tcl:57 +msgid "Unsupported spell checker" +msgstr "Rechtschreibprüfungsprogramm nicht unterstützt" -#: lib/blame.tcl:288 -msgid "Show History Context" -msgstr "Historien-Kontext anzeigen" +#: lib/spellcheck.tcl:65 +msgid "Spell checking is unavailable" +msgstr "Rechtschreibprüfung nicht verfügbar" -#: lib/blame.tcl:291 -msgid "Blame Parent Commit" -msgstr "Elternversion annotieren" +#: lib/spellcheck.tcl:68 +msgid "Invalid spell checking configuration" +msgstr "Unbenutzbare Konfiguration der Rechtschreibprüfung" -#: lib/blame.tcl:450 +#: lib/spellcheck.tcl:70 #, tcl-format -msgid "Reading %s..." -msgstr "%s lesen..." - -#: lib/blame.tcl:557 -msgid "Loading copy/move tracking annotations..." -msgstr "Annotierungen für Kopieren/Verschieben werden geladen..." +msgid "Reverting dictionary to %s." +msgstr "Wörterbuch auf %s zurückgesetzt." -#: lib/blame.tcl:577 -msgid "lines annotated" -msgstr "Zeilen annotiert" +#: lib/spellcheck.tcl:73 +msgid "Spell checker silently failed on startup" +msgstr "Rechtschreibprüfungsprogramm mit Fehler abgebrochen" -#: lib/blame.tcl:769 -msgid "Loading original location annotations..." -msgstr "Annotierungen für ursprünglichen Ort werden geladen..." +#: lib/spellcheck.tcl:80 +msgid "Unrecognized spell checker" +msgstr "Unbekanntes Rechtschreibprüfungsprogramm" -#: lib/blame.tcl:772 -msgid "Annotation complete." -msgstr "Annotierung vollständig." +#: lib/spellcheck.tcl:186 +msgid "No Suggestions" +msgstr "Keine Vorschläge" -#: lib/blame.tcl:802 -msgid "Busy" -msgstr "Verarbeitung läuft" +#: lib/spellcheck.tcl:388 +msgid "Unexpected EOF from spell checker" +msgstr "Unerwartetes EOF vom Rechtschreibprüfungsprogramm" -#: lib/blame.tcl:803 -msgid "Annotation process is already running." -msgstr "Annotierung läuft bereits." +#: lib/spellcheck.tcl:392 +msgid "Spell Checker Failed" +msgstr "Rechtschreibprüfung fehlgeschlagen" -#: lib/blame.tcl:842 -msgid "Running thorough copy detection..." -msgstr "Intensive Kopie-Erkennung läuft..." +#: lib/transport.tcl:6 lib/remote_add.tcl:132 +#, tcl-format +msgid "fetch %s" +msgstr "»%s« anfordern" -#: lib/blame.tcl:910 -msgid "Loading annotation..." -msgstr "Annotierung laden..." +#: lib/transport.tcl:7 +#, tcl-format +msgid "Fetching new changes from %s" +msgstr "Neue Änderungen von »%s« holen" -#: lib/blame.tcl:963 -msgid "Author:" -msgstr "Autor:" +#: lib/transport.tcl:18 +#, tcl-format +msgid "remote prune %s" +msgstr "Gelöschte externe Branches aus »%s« entfernen" -#: lib/blame.tcl:967 -msgid "Committer:" -msgstr "Eintragender:" +#: lib/transport.tcl:19 +#, tcl-format +msgid "Pruning tracking branches deleted from %s" +msgstr "Gelöschte externe Trackingbranches aus »%s« werden entfernt" -#: lib/blame.tcl:972 -msgid "Original File:" -msgstr "Ursprüngliche Datei:" +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "Abrufen aller externen" -#: lib/blame.tcl:1020 -msgid "Cannot find HEAD commit:" -msgstr "Zweigspitze (»HEAD«) kann nicht gefunden werden:" +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "Neue Änderungen von allen externen anfordern" -#: lib/blame.tcl:1075 -msgid "Cannot find parent commit:" -msgstr "Elternversion kann nicht gefunden werden:" +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "Extern veraltete Branches entfernen aller Repositories" -#: lib/blame.tcl:1090 -msgid "Unable to display parent" -msgstr "Elternversion kann nicht angezeigt werden" +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" +msgstr "" +"Gelöschte externe Trackingbranches aus allen Repositories werden entfernt" -#: lib/blame.tcl:1091 lib/diff.tcl:320 -msgid "Error loading diff:" -msgstr "Fehler beim Laden des Vergleichs:" +#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110 +#: lib/remote_add.tcl:162 +#, tcl-format +msgid "push %s" +msgstr "»%s« versenden..." -#: lib/blame.tcl:1231 -msgid "Originally By:" -msgstr "Ursprünglich von:" +#: lib/transport.tcl:55 +#, tcl-format +msgid "Pushing changes to %s" +msgstr "Änderungen nach »%s« versenden" -#: lib/blame.tcl:1237 -msgid "In File:" -msgstr "In Datei:" +#: lib/transport.tcl:93 +#, tcl-format +msgid "Mirroring to %s" +msgstr "Spiegeln nach %s" -#: lib/blame.tcl:1242 -msgid "Copied Or Moved Here By:" -msgstr "Kopiert oder verschoben durch:" +#: lib/transport.tcl:111 +#, tcl-format +msgid "Pushing %s %s to %s" +msgstr "%s %s nach %s versenden" -#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19 -msgid "Checkout Branch" -msgstr "Auf Zweig umstellen" +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "Branches versenden" -#: lib/branch_checkout.tcl:23 -msgid "Checkout" -msgstr "Umstellen" - -#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35 -#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282 -#: lib/checkout_op.tcl:579 lib/choose_font.tcl:43 lib/merge.tcl:172 -#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42 -#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352 -#: lib/transport.tcl:108 +#: lib/transport.tcl:141 lib/checkout_op.tcl:580 lib/remote_add.tcl:34 +#: lib/browser.tcl:292 lib/branch_checkout.tcl:30 lib/branch_rename.tcl:32 +#: lib/choose_font.tcl:45 lib/option.tcl:127 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/remote_branch_delete.tcl:43 +#: lib/branch_create.tcl:37 lib/branch_delete.tcl:34 lib/merge.tcl:178 msgid "Cancel" msgstr "Abbrechen" -#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328 -msgid "Revision" -msgstr "Version" - -#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280 -msgid "Options" -msgstr "Optionen" - -#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "Übernahmezweig anfordern" - -#: lib/branch_checkout.tcl:44 -msgid "Detach From Local Branch" -msgstr "Verbindung zu lokalem Zweig lösen" - -#: lib/branch_create.tcl:22 -msgid "Create Branch" -msgstr "Zweig erstellen" - -#: lib/branch_create.tcl:27 -msgid "Create New Branch" -msgstr "Neuen Zweig erstellen" - -#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381 -msgid "Create" -msgstr "Erstellen" - -#: lib/branch_create.tcl:40 -msgid "Branch Name" -msgstr "Zweigname" - -#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50 -msgid "Name:" -msgstr "Name:" - -#: lib/branch_create.tcl:58 -msgid "Match Tracking Branch Name" -msgstr "Passend zu Übernahmezweig-Name" +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "Lokale Branches" -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "Anfangsversion" +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "Ziel-Repository" -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "Existierenden Zweig aktualisieren:" +#: lib/transport.tcl:165 lib/remote_branch_delete.tcl:51 +msgid "Remote:" +msgstr "Externes Repository:" -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "Nein" +#: lib/transport.tcl:187 lib/remote_branch_delete.tcl:72 +msgid "Arbitrary Location:" +msgstr "Beliebige Adresse:" -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "Nur Schnellzusammenführung" +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "Netzwerk-Einstellungen" -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 -msgid "Reset" -msgstr "Zurücksetzen" +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" +msgstr "" +"Überschreiben von existierenden Branches erzwingen (könnte Änderungen " +"löschen)" -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "Arbeitskopie umstellen nach Erstellen" +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "Kompaktes Datenformat benutzen (für langsame Netzverbindungen)" -#: lib/branch_create.tcl:131 -msgid "Please select a tracking branch." -msgstr "Bitte wählen Sie einen Übernahmezweig." +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "Mit Tags versenden" -#: lib/branch_create.tcl:140 +#: lib/transport.tcl:229 #, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "Übernahmezweig »%s« ist kein Zweig im externen Projektarchiv." +msgid "%s (%s): Push" +msgstr "%s (%s): Versenden" -#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86 -msgid "Please supply a branch name." -msgstr "Bitte geben Sie einen Zweignamen an." - -#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 +#: lib/checkout_op.tcl:85 #, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "»%s« ist kein zulässiger Zweigname." - -#: lib/branch_delete.tcl:15 -msgid "Delete Branch" -msgstr "Zweig löschen" +msgid "Fetching %s from %s" +msgstr "Änderungen »%s« von »%s« anfordern" -#: lib/branch_delete.tcl:20 -msgid "Delete Local Branch" -msgstr "Lokalen Zweig löschen" +#: lib/checkout_op.tcl:133 +#, tcl-format +msgid "fatal: Cannot resolve %s" +msgstr "Fehler: »%s« kann nicht als Branch oder Version erkannt werden" -#: lib/branch_delete.tcl:37 -msgid "Local Branches" -msgstr "Lokale Zweige" +#: lib/checkout_op.tcl:146 lib/sshkey.tcl:58 lib/console.tcl:81 +#: lib/database.tcl:30 +msgid "Close" +msgstr "Schließen" -#: lib/branch_delete.tcl:52 -msgid "Delete Only If Merged Into" -msgstr "Nur löschen, wenn zusammengeführt nach" +#: lib/checkout_op.tcl:175 +#, tcl-format +msgid "Branch '%s' does not exist." +msgstr "Branch »%s« existiert nicht." -#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119 -msgid "Always (Do not perform merge checks)" -msgstr "Immer (Keine Zusammenführungsprüfung)" +#: lib/checkout_op.tcl:194 +#, tcl-format +msgid "Failed to configure simplified git-pull for '%s'." +msgstr "Fehler beim Einrichten der vereinfachten git-pull für »%s«." -#: lib/branch_delete.tcl:103 +#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102 #, tcl-format -msgid "The following branches are not completely merged into %s:" -msgstr "Folgende Zweige sind noch nicht mit »%s« zusammengeführt:" +msgid "Branch '%s' already exists." +msgstr "Branch »%s« existiert bereits." -#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217 +#: lib/checkout_op.tcl:229 +#, tcl-format msgid "" -"Recovering deleted branches is difficult.\n" +"Branch '%s' already exists.\n" "\n" -"Delete the selected branches?" +"It cannot fast-forward to %s.\n" +"A merge is required." msgstr "" -"Das Wiederherstellen von gelöschten Zweigen ist nur mit größerem Aufwand " -"möglich.\n" +"Branch »%s« existiert bereits.\n" "\n" -"Sollen die ausgewählten Zweige gelöscht werden?" +"Branch kann nicht auf »%s« vorgespult werden. Reguläres Zusammenführen ist " +"notwendig." -#: lib/branch_delete.tcl:141 +#: lib/checkout_op.tcl:243 #, tcl-format -msgid "" -"Failed to delete branches:\n" -"%s" -msgstr "" -"Fehler beim Löschen der Zweige:\n" -"%s" - -#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22 -msgid "Rename Branch" -msgstr "Zweig umbenennen" - -#: lib/branch_rename.tcl:26 -msgid "Rename" -msgstr "Umbenennen" - -#: lib/branch_rename.tcl:36 -msgid "Branch:" -msgstr "Zweig:" - -#: lib/branch_rename.tcl:39 -msgid "New Name:" -msgstr "Neuer Name:" - -#: lib/branch_rename.tcl:75 -msgid "Please select a branch to rename." -msgstr "Bitte wählen Sie einen Zweig zum umbenennen." +msgid "Merge strategy '%s' not supported." +msgstr "Zusammenführungsmethode »%s« nicht unterstützt." -#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202 +#: lib/checkout_op.tcl:262 #, tcl-format -msgid "Branch '%s' already exists." -msgstr "Zweig »%s« existiert bereits." - -#: lib/branch_rename.tcl:117 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "Fehler beim Umbenennen von »%s«." - -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "Starten..." - -#: lib/browser.tcl:26 -msgid "File Browser" -msgstr "Datei-Browser" - -#: lib/browser.tcl:126 lib/browser.tcl:143 -#, tcl-format -msgid "Loading %s..." -msgstr "%s laden..." - -#: lib/browser.tcl:187 -msgid "[Up To Parent]" -msgstr "[Nach oben]" - -#: lib/browser.tcl:267 lib/browser.tcl:273 -msgid "Browse Branch Files" -msgstr "Dateien des Zweigs durchblättern" - -#: lib/browser.tcl:278 lib/choose_repository.tcl:398 -#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497 -#: lib/choose_repository.tcl:1028 -msgid "Browse" -msgstr "Blättern" - -#: lib/checkout_op.tcl:85 -#, tcl-format -msgid "Fetching %s from %s" -msgstr "Änderungen »%s« von »%s« anfordern" - -#: lib/checkout_op.tcl:133 -#, tcl-format -msgid "fatal: Cannot resolve %s" -msgstr "Fehler: »%s« kann nicht als Zweig oder Version erkannt werden" - -#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31 -#: lib/sshkey.tcl:53 -msgid "Close" -msgstr "Schließen" - -#: lib/checkout_op.tcl:175 -#, tcl-format -msgid "Branch '%s' does not exist." -msgstr "Zweig »%s« existiert nicht." - -#: lib/checkout_op.tcl:194 -#, tcl-format -msgid "Failed to configure simplified git-pull for '%s'." -msgstr "Fehler beim Einrichten der vereinfachten git-pull für »%s«." - -#: lib/checkout_op.tcl:229 -#, tcl-format -msgid "" -"Branch '%s' already exists.\n" -"\n" -"It cannot fast-forward to %s.\n" -"A merge is required." -msgstr "" -"Zweig »%s« existiert bereits.\n" -"\n" -"Zweig kann nicht mit »%s« schnellzusammengeführt werden. Reguläres " -"Zusammenführen ist notwendig." - -#: lib/checkout_op.tcl:243 -#, tcl-format -msgid "Merge strategy '%s' not supported." -msgstr "Zusammenführungsmethode »%s« nicht unterstützt." - -#: lib/checkout_op.tcl:262 -#, tcl-format -msgid "Failed to update '%s'." -msgstr "Aktualisieren von »%s« fehlgeschlagen." +msgid "Failed to update '%s'." +msgstr "Aktualisieren von »%s« fehlgeschlagen." #: lib/checkout_op.tcl:274 msgid "Staging area (index) is already locked." @@ -945,76 +832,79 @@ msgid "" "\n" "The rescan will be automatically started now.\n" msgstr "" -"Der letzte geladene Status stimmt nicht mehr mit dem Projektarchiv überein.\n" +"Der letzte geladene Status stimmt nicht mehr mit dem Repository überein.\n" "\n" -"Ein anderes Git-Programm hat das Projektarchiv seit dem letzten Laden " -"geändert. Vor dem Wechseln des lokalen Zweigs muss neu geladen werden.\n" +"Ein anderes Git-Programm hat das Repository seit dem letzten Laden " +"geändert. Vor dem Wechseln des lokalen Branches muss neu geladen werden.\n" "\n" "Es wird gleich neu geladen.\n" #: lib/checkout_op.tcl:345 #, tcl-format msgid "Updating working directory to '%s'..." -msgstr "Arbeitskopie umstellen auf »%s«..." +msgstr "Arbeitskopie aktualisieren auf »%s«..." #: lib/checkout_op.tcl:346 msgid "files checked out" msgstr "Dateien aktualisiert" -#: lib/checkout_op.tcl:376 +#: lib/checkout_op.tcl:377 #, tcl-format msgid "Aborted checkout of '%s' (file level merging is required)." msgstr "" -"Auf Zweig »%s« umstellen abgebrochen (Zusammenführen der Dateien ist " +"Branch »%s« Auschecken abgebrochen (Zusammenführen der Dateien ist " "notwendig)." -#: lib/checkout_op.tcl:377 +#: lib/checkout_op.tcl:378 msgid "File level merge required." msgstr "Zusammenführen der Dateien ist notwendig." -#: lib/checkout_op.tcl:381 +#: lib/checkout_op.tcl:382 #, tcl-format msgid "Staying on branch '%s'." -msgstr "Es wird auf Zweig »%s« verblieben." +msgstr "Es wird auf Branch »%s« verblieben." -#: lib/checkout_op.tcl:452 +#: lib/checkout_op.tcl:453 msgid "" "You are no longer on a local branch.\n" "\n" "If you wanted to be on a branch, create one now starting from 'This Detached " "Checkout'." msgstr "" -"Die Arbeitskopie ist nicht auf einem lokalen Zweig.\n" +"Die Arbeitskopie ist nicht auf einem lokalen Branch.\n" "\n" -"Wenn Sie auf einem Zweig arbeiten möchten, erstellen Sie bitte jetzt einen " -"Zweig mit der Auswahl »Abgetrennte Arbeitskopie-Version«." +"Wenn Sie auf einem Branch arbeiten möchten, erstellen Sie bitte jetzt einen " +"Branch mit der Auswahl »Losgelöste Arbeitskopie-Version«." -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 +#: lib/checkout_op.tcl:504 lib/checkout_op.tcl:508 #, tcl-format msgid "Checked out '%s'." msgstr "Umgestellt auf »%s«." -#: lib/checkout_op.tcl:535 +#: lib/checkout_op.tcl:536 #, tcl-format msgid "Resetting '%s' to '%s' will lose the following commits:" -msgstr "Zurücksetzen von »%s« nach »%s« wird folgende Versionen verwerfen:" +msgstr "Umsetzen von »%s« nach »%s« wird folgende Commits verlieren:" -#: lib/checkout_op.tcl:557 +#: lib/checkout_op.tcl:558 msgid "Recovering lost commits may not be easy." msgstr "" -"Verworfene Versionen können nur mit größerem Aufwand wiederhergestellt " -"werden." +"Verlorene Commits können nur mit größerem Aufwand wiederhergestellt werden." -#: lib/checkout_op.tcl:562 +#: lib/checkout_op.tcl:563 #, tcl-format msgid "Reset '%s'?" -msgstr "»%s« zurücksetzen?" +msgstr "»%s« umsetzen?" -#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343 +#: lib/checkout_op.tcl:568 lib/tools_dlg.tcl:336 lib/merge.tcl:170 msgid "Visualize" msgstr "Darstellen" -#: lib/checkout_op.tcl:635 +#: lib/checkout_op.tcl:572 lib/branch_create.tcl:85 +msgid "Reset" +msgstr "Umsetzen (Reset)" + +#: lib/checkout_op.tcl:636 #, tcl-format msgid "" "Failed to set current branch.\n" @@ -1024,7 +914,7 @@ msgid "" "\n" "This should not have occurred. %s will now close and give up." msgstr "" -"Lokaler Zweig kann nicht gesetzt werden.\n" +"Lokaler Branch kann nicht gesetzt werden.\n" "\n" "Diese Arbeitskopie ist nur teilweise umgestellt. Die Dateien sind korrekt " "aktualisiert, aber einige interne Git-Dateien konnten nicht geändert " @@ -1032,658 +922,505 @@ msgstr "" "\n" "Dies ist ein interner Programmfehler von %s. Programm wird jetzt abgebrochen." -#: lib/choose_font.tcl:39 -msgid "Select" -msgstr "Auswählen" +#: lib/remote_add.tcl:20 +#, tcl-format +msgid "%s (%s): Add Remote" +msgstr "%s (%s): Externes Repository hinzufügen" -#: lib/choose_font.tcl:53 -msgid "Font Family" -msgstr "Schriftfamilie" +#: lib/remote_add.tcl:25 +msgid "Add New Remote" +msgstr "Neues externes Repository hinzufügen" -#: lib/choose_font.tcl:74 -msgid "Font Size" -msgstr "Schriftgröße" +#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 +msgid "Add" +msgstr "Hinzufügen" -#: lib/choose_font.tcl:91 -msgid "Font Example" -msgstr "Schriftbeispiel" +#: lib/remote_add.tcl:39 +msgid "Remote Details" +msgstr "Einzelheiten des externen Repository" -#: lib/choose_font.tcl:103 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "" -"Dies ist ein Beispieltext.\n" -"Wenn Ihnen dieser Text gefällt, sollten Sie diese Schriftart wählen." +#: lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 lib/branch_create.tcl:44 +msgid "Name:" +msgstr "Name:" -#: lib/choose_repository.tcl:28 -msgid "Git Gui" -msgstr "Git Gui" +#: lib/remote_add.tcl:50 +msgid "Location:" +msgstr "Adresse:" -#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386 -msgid "Create New Repository" -msgstr "Neues Projektarchiv" +#: lib/remote_add.tcl:60 +msgid "Further Action" +msgstr "Weitere Aktion" -#: lib/choose_repository.tcl:93 -msgid "New..." -msgstr "Neu..." +#: lib/remote_add.tcl:63 +msgid "Fetch Immediately" +msgstr "Jetzt anfordern" -#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471 -msgid "Clone Existing Repository" -msgstr "Projektarchiv klonen" +#: lib/remote_add.tcl:69 +msgid "Initialize Remote Repository and Push" +msgstr "Externes Repository initialisieren und dahin versenden" -#: lib/choose_repository.tcl:106 -msgid "Clone..." -msgstr "Klonen..." +#: lib/remote_add.tcl:75 +msgid "Do Nothing Else Now" +msgstr "Keine weitere Aktion" -#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016 -msgid "Open Existing Repository" -msgstr "Projektarchiv öffnen" +#: lib/remote_add.tcl:100 +msgid "Please supply a remote name." +msgstr "Bitte geben Sie einen Namen des externen Repository an." -#: lib/choose_repository.tcl:119 -msgid "Open..." -msgstr "Öffnen..." +#: lib/remote_add.tcl:113 +#, tcl-format +msgid "'%s' is not an acceptable remote name." +msgstr "»%s« ist kein zulässiger Name eines externen Repository." -#: lib/choose_repository.tcl:132 -msgid "Recent Repositories" -msgstr "Zuletzt benutzte Projektarchive" +#: lib/remote_add.tcl:124 +#, tcl-format +msgid "Failed to add remote '%s' of location '%s'." +msgstr "Fehler beim Hinzufügen des externen Repository »%s« aus Adresse »%s«." -#: lib/choose_repository.tcl:138 -msgid "Open Recent Repository:" -msgstr "Zuletzt benutztes Projektarchiv öffnen:" +#: lib/remote_add.tcl:133 +#, tcl-format +msgid "Fetching the %s" +msgstr "»%s« anfordern" -#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313 -#: lib/choose_repository.tcl:320 +#: lib/remote_add.tcl:156 #, tcl-format -msgid "Failed to create repository %s:" -msgstr "Projektarchiv »%s« konnte nicht erstellt werden:" +msgid "Do not know how to initialize repository at location '%s'." +msgstr "" +"Initialisieren eines externen Repositories an Adresse »%s« ist nicht möglich." -#: lib/choose_repository.tcl:391 -msgid "Directory:" -msgstr "Verzeichnis:" +#: lib/remote_add.tcl:163 +#, tcl-format +msgid "Setting up the %s (at %s)" +msgstr "Einrichten von »%s« an »%s«" -#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550 -#: lib/choose_repository.tcl:1052 -msgid "Git Repository" -msgstr "Git Projektarchiv" +#: lib/browser.tcl:17 +msgid "Starting..." +msgstr "Starten..." -#: lib/choose_repository.tcl:448 +#: lib/browser.tcl:27 #, tcl-format -msgid "Directory %s already exists." -msgstr "Verzeichnis »%s« existiert bereits." +msgid "%s (%s): File Browser" +msgstr "%s (%s): Datei-Browser" -#: lib/choose_repository.tcl:452 +#: lib/browser.tcl:132 lib/browser.tcl:149 #, tcl-format -msgid "File %s already exists." -msgstr "Datei »%s« existiert bereits." +msgid "Loading %s..." +msgstr "%s laden..." -#: lib/choose_repository.tcl:466 -msgid "Clone" -msgstr "Klonen" +#: lib/browser.tcl:193 +msgid "[Up To Parent]" +msgstr "[Nach oben]" -#: lib/choose_repository.tcl:479 -msgid "Source Location:" -msgstr "Herkunft:" +#: lib/browser.tcl:275 +#, tcl-format +msgid "%s (%s): Browse Branch Files" +msgstr "%s (%s): Dateien des Branches durchblättern" -#: lib/choose_repository.tcl:490 -msgid "Target Directory:" -msgstr "Zielverzeichnis:" +#: lib/browser.tcl:282 +msgid "Browse Branch Files" +msgstr "Dateien des Branches durchblättern" -#: lib/choose_repository.tcl:502 -msgid "Clone Type:" -msgstr "Art des Klonens:" +#: lib/browser.tcl:288 lib/choose_repository.tcl:437 +#: lib/choose_repository.tcl:524 lib/choose_repository.tcl:533 +#: lib/choose_repository.tcl:1115 +msgid "Browse" +msgstr "Blättern" -#: lib/choose_repository.tcl:508 -msgid "Standard (Fast, Semi-Redundant, Hardlinks)" -msgstr "Standard (schnell, teilweise redundant, Hardlinks)" +#: lib/browser.tcl:297 lib/branch_checkout.tcl:35 lib/tools_dlg.tcl:321 +msgid "Revision" +msgstr "Version" -#: lib/choose_repository.tcl:514 -msgid "Full Copy (Slower, Redundant Backup)" -msgstr "Alles kopieren (langsamer, volle Redundanz)" +#: lib/index.tcl:6 +msgid "Unable to unlock the index." +msgstr "Bereitstellung kann nicht wieder freigegeben werden." -#: lib/choose_repository.tcl:520 -msgid "Shared (Fastest, Not Recommended, No Backup)" -msgstr "Verknüpft (schnell, nicht empfohlen, kein Backup)" +#: lib/index.tcl:30 +msgid "Index Error" +msgstr "Fehler in Bereitstellung" -#: lib/choose_repository.tcl:556 lib/choose_repository.tcl:603 -#: lib/choose_repository.tcl:749 lib/choose_repository.tcl:819 -#: lib/choose_repository.tcl:1058 lib/choose_repository.tcl:1066 -#, tcl-format -msgid "Not a Git repository: %s" -msgstr "Kein Git-Projektarchiv in »%s« gefunden." +#: lib/index.tcl:32 +msgid "" +"Updating the Git index failed. A rescan will be automatically started to " +"resynchronize git-gui." +msgstr "" +"Das Aktualisieren der Git-Bereitstellung ist fehlgeschlagen. Eine allgemeine " +"Git-Aktualisierung wird jetzt gestartet, um git-gui wieder mit git zu " +"synchronisieren." -#: lib/choose_repository.tcl:592 -msgid "Standard only available for local repository." -msgstr "Standard ist nur für lokale Projektarchive verfügbar." +#: lib/index.tcl:43 +msgid "Continue" +msgstr "Fortsetzen" -#: lib/choose_repository.tcl:596 -msgid "Shared only available for local repository." -msgstr "Verknüpft ist nur für lokale Projektarchive verfügbar." +#: lib/index.tcl:46 +msgid "Unlock Index" +msgstr "Bereitstellung freigeben" -#: lib/choose_repository.tcl:617 -#, tcl-format -msgid "Location %s already exists." -msgstr "Projektarchiv »%s« existiert bereits." +#: lib/index.tcl:77 lib/index.tcl:146 lib/index.tcl:220 lib/index.tcl:587 +#: lib/choose_repository.tcl:999 +msgid "files" +msgstr "Dateien" -#: lib/choose_repository.tcl:628 -msgid "Failed to configure origin" -msgstr "Der Ursprungsort konnte nicht eingerichtet werden" +#: lib/index.tcl:326 +msgid "Unstaging selected files from commit" +msgstr "Gewählte Dateien aus der Bereitstellung herausnehmen" -#: lib/choose_repository.tcl:640 -msgid "Counting objects" -msgstr "Objekte werden gezählt" +#: lib/index.tcl:330 +#, tcl-format +msgid "Unstaging %s from commit" +msgstr "Datei »%s« aus der Bereitstellung herausnehmen" -#: lib/choose_repository.tcl:641 -msgid "buckets" -msgstr "Buckets" +#: lib/index.tcl:369 +msgid "Ready to commit." +msgstr "Bereit zum Committen." -#: lib/choose_repository.tcl:665 +#: lib/index.tcl:378 +msgid "Adding selected files" +msgstr "Gewählte Dateien hinzufügen" + +#: lib/index.tcl:382 #, tcl-format -msgid "Unable to copy objects/info/alternates: %s" -msgstr "Kopien von Objekten/Info/Alternates konnten nicht erstellt werden: %s" +msgid "Adding %s" +msgstr "»%s« hinzufügen" -#: lib/choose_repository.tcl:701 +#: lib/index.tcl:412 #, tcl-format -msgid "Nothing to clone from %s." -msgstr "Von »%s« konnte nichts geklont werden." +msgid "Stage %d untracked files?" +msgstr "%d unversionierte Dateien bereitstellen?" -#: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917 -#: lib/choose_repository.tcl:929 -msgid "The 'master' branch has not been initialized." -msgstr "Der »master«-Zweig wurde noch nicht initialisiert." +#: lib/index.tcl:420 +msgid "Adding all changed files" +msgstr "Alle geänderten Dateien hinzufügen" -#: lib/choose_repository.tcl:716 -msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "Hardlinks nicht verfügbar. Stattdessen wird kopiert." +#: lib/index.tcl:503 +#, tcl-format +msgid "Revert changes in file %s?" +msgstr "Änderungen in Datei »%s« verwerfen?" -#: lib/choose_repository.tcl:728 +#: lib/index.tcl:508 #, tcl-format -msgid "Cloning from %s" -msgstr "Kopieren von »%s«" +msgid "Revert changes in these %i files?" +msgstr "Änderungen in diesen %i Dateien verwerfen?" -#: lib/choose_repository.tcl:759 -msgid "Copying objects" -msgstr "Objektdatenbank kopieren" +#: lib/index.tcl:517 +msgid "Any unstaged changes will be permanently lost by the revert." +msgstr "" +"Alle nicht bereitgestellten Änderungen werden beim Verwerfen verloren gehen." -#: lib/choose_repository.tcl:760 -msgid "KiB" -msgstr "KB" +#: lib/index.tcl:520 lib/index.tcl:563 +msgid "Do Nothing" +msgstr "Nichts tun" -#: lib/choose_repository.tcl:784 +#: lib/index.tcl:545 #, tcl-format -msgid "Unable to copy object: %s" -msgstr "Objekt kann nicht kopiert werden: %s" +msgid "Delete untracked file %s?" +msgstr "Unversionierte Datei »%s« löschen?" -#: lib/choose_repository.tcl:794 -msgid "Linking objects" -msgstr "Objekte verlinken" +#: lib/index.tcl:550 +#, tcl-format +msgid "Delete these %i untracked files?" +msgstr "Diese %i unversionierten Dateien löschen?" -#: lib/choose_repository.tcl:795 -msgid "objects" -msgstr "Objekte" +#: lib/index.tcl:560 +msgid "Files will be permanently deleted." +msgstr "Dateien werden endgültig gelöscht." -#: lib/choose_repository.tcl:803 -#, tcl-format -msgid "Unable to hardlink object: %s" -msgstr "Für Objekt konnte kein Hardlink erstellt werden: %s" +#: lib/index.tcl:564 +msgid "Delete Files" +msgstr "Dateien löschen" -#: lib/choose_repository.tcl:858 -msgid "Cannot fetch branches and objects. See console output for details." -msgstr "" -"Zweige und Objekte konnten nicht angefordert werden. Kontrollieren Sie die " -"Ausgaben auf der Konsole für weitere Angaben." +#: lib/index.tcl:586 +msgid "Deleting" +msgstr "Löschen" -#: lib/choose_repository.tcl:869 -msgid "Cannot fetch tags. See console output for details." -msgstr "" -"Markierungen konnten nicht angefordert werden. Kontrollieren Sie die " -"Ausgaben auf der Konsole für weitere Angaben." +#: lib/index.tcl:665 +msgid "Encountered errors deleting files:\n" +msgstr "Fehler beim Löschen der Dateien:\n" -#: lib/choose_repository.tcl:893 -msgid "Cannot determine HEAD. See console output for details." -msgstr "" -"Die Zweigspitze (HEAD) konnte nicht gefunden werden. Kontrollieren Sie die " -"Ausgaben auf der Konsole für weitere Angaben." +#: lib/index.tcl:674 +#, tcl-format +msgid "None of the %d selected files could be deleted." +msgstr "Keine der %d gewählten Dateien konnten gelöscht werden." -#: lib/choose_repository.tcl:902 +#: lib/index.tcl:679 #, tcl-format -msgid "Unable to cleanup %s" -msgstr "Verzeichnis »%s« kann nicht aufgeräumt werden." +msgid "%d of the %d selected files could not be deleted." +msgstr "%d der %d gewählten Dateien konnten nicht gelöscht werden." -#: lib/choose_repository.tcl:908 -msgid "Clone failed." -msgstr "Klonen fehlgeschlagen." +#: lib/index.tcl:726 +msgid "Reverting selected files" +msgstr "Änderungen in gewählten Dateien verwerfen" -#: lib/choose_repository.tcl:915 -msgid "No default branch obtained." -msgstr "Kein voreingestellter Zweig gefunden." +#: lib/index.tcl:730 +#, tcl-format +msgid "Reverting %s" +msgstr "Änderungen in %s verwerfen" -#: lib/choose_repository.tcl:926 +#: lib/branch_checkout.tcl:16 #, tcl-format -msgid "Cannot resolve %s as a commit." -msgstr "»%s« wurde nicht als Version gefunden." +msgid "%s (%s): Checkout Branch" +msgstr "%s (%s): Branch auschecken" -#: lib/choose_repository.tcl:938 -msgid "Creating working directory" -msgstr "Arbeitskopie erstellen" +#: lib/branch_checkout.tcl:21 +msgid "Checkout Branch" +msgstr "Branch auschecken" -#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130 -#: lib/index.tcl:198 -msgid "files" -msgstr "Dateien" +#: lib/branch_checkout.tcl:26 +msgid "Checkout" +msgstr "Auschecken" -#: lib/choose_repository.tcl:968 -msgid "Initial file checkout failed." -msgstr "Erstellen der Arbeitskopie fehlgeschlagen." +#: lib/branch_checkout.tcl:39 lib/option.tcl:310 lib/branch_create.tcl:69 +msgid "Options" +msgstr "Optionen" -#: lib/choose_repository.tcl:1011 -msgid "Open" -msgstr "Öffnen" +#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 +msgid "Fetch Tracking Branch" +msgstr "Trackingbranch anfordern" -#: lib/choose_repository.tcl:1021 -msgid "Repository:" -msgstr "Projektarchiv:" +#: lib/branch_checkout.tcl:47 +msgid "Detach From Local Branch" +msgstr "Verbindung zu lokalem Branch lösen" -#: lib/choose_repository.tcl:1072 +#: lib/status_bar.tcl:263 #, tcl-format -msgid "Failed to open repository %s:" -msgstr "Projektarchiv »%s« konnte nicht geöffnet werden." +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%s ... %*i von %*i %s (%3i%%)" -#: lib/choose_rev.tcl:53 -msgid "This Detached Checkout" -msgstr "Abgetrennte Arbeitskopie-Version" +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "Versenden nach" -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "Version Regexp-Ausdruck:" +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "Externes Repository entfernen" -#: lib/choose_rev.tcl:74 -msgid "Local Branch" -msgstr "Lokaler Zweig" +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "Veraltete Branches entfernen" -#: lib/choose_rev.tcl:79 -msgid "Tracking Branch" -msgstr "Übernahmezweig" +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "Anfordern" -#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 -msgid "Tag" -msgstr "Markierung" +#: lib/remote.tcl:249 lib/remote.tcl:253 lib/remote.tcl:258 lib/remote.tcl:264 +msgid "All" +msgstr "Alle" -#: lib/choose_rev.tcl:317 +#: lib/branch_rename.tcl:15 #, tcl-format -msgid "Invalid revision: %s" -msgstr "Ungültige Version: %s" - -#: lib/choose_rev.tcl:338 -msgid "No revision selected." -msgstr "Keine Version ausgewählt." - -#: lib/choose_rev.tcl:346 -msgid "Revision expression is empty." -msgstr "Versions-Ausdruck ist leer." +msgid "%s (%s): Rename Branch" +msgstr "%s (%s): Branch umbenennen" -#: lib/choose_rev.tcl:531 -msgid "Updated" -msgstr "Aktualisiert" +#: lib/branch_rename.tcl:23 +msgid "Rename Branch" +msgstr "Branch umbenennen" -#: lib/choose_rev.tcl:559 -msgid "URL" -msgstr "URL" +#: lib/branch_rename.tcl:28 +msgid "Rename" +msgstr "Umbenennen" -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" -"Keine Version zur Nachbesserung vorhanden.\n" -"\n" -"Sie sind dabei, die erste Version zu übertragen. Es gibt keine existierende " -"Version, die Sie nachbessern könnten.\n" +#: lib/branch_rename.tcl:38 +msgid "Branch:" +msgstr "Branch:" -#: lib/commit.tcl:18 -msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" -msgstr "" -"Nachbesserung währen Zusammenführung nicht möglich.\n" -"\n" -"Sie haben das Zusammenführen von Versionen angefangen, aber noch nicht " -"beendet. Sie können keine vorige Übertragung nachbessern, solange eine " -"unfertige Zusammenführung existiert. Dazu müssen Sie die Zusammenführung " -"beenden oder abbrechen.\n" +#: lib/branch_rename.tcl:46 +msgid "New Name:" +msgstr "Neuer Name:" -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "Fehler beim Laden der Versionsdaten für Nachbessern:" +#: lib/branch_rename.tcl:81 +msgid "Please select a branch to rename." +msgstr "Bitte wählen Sie einen Branch zum umbenennen." -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "Benutzername konnte nicht bestimmt werden:" +#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 +msgid "Please supply a branch name." +msgstr "Bitte geben Sie einen Branchnamen an." -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "Ungültiger Wert von GIT_COMMITTER_INDENT:" +#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 +#, tcl-format +msgid "'%s' is not an acceptable branch name." +msgstr "»%s« ist kein zulässiger Branchname." -#: lib/commit.tcl:129 +#: lib/branch_rename.tcl:123 #, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "Warning: Tcl/Tk unterstützt die Zeichencodierung »%s« nicht." +msgid "Failed to rename '%s'." +msgstr "Fehler beim Umbenennen von »%s«." -#: lib/commit.tcl:149 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"Der letzte geladene Status stimmt nicht mehr mit dem Projektarchiv überein.\n" -"\n" -"Ein anderes Git-Programm hat das Projektarchiv seit dem letzten Laden " -"geändert. Vor dem Eintragen einer neuen Version muss neu geladen werden.\n" -"\n" -"Es wird gleich neu geladen.\n" +#: lib/choose_font.tcl:41 +msgid "Select" +msgstr "Auswählen" -#: lib/commit.tcl:172 -#, tcl-format -msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" -msgstr "" -"Nicht zusammengeführte Dateien können nicht eingetragen werden.\n" -"\n" -"Die Datei »%s« hat noch nicht aufgelöste Zusammenführungs-Konflikte. Sie " -"müssen diese Konflikte auflösen, bevor Sie eintragen können.\n" +#: lib/choose_font.tcl:55 +msgid "Font Family" +msgstr "Schriftfamilie" -#: lib/commit.tcl:180 -#, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "" -"Unbekannter Dateizustand »%s«.\n" -"\n" -"Datei »%s« kann nicht eingetragen werden.\n" +#: lib/choose_font.tcl:76 +msgid "Font Size" +msgstr "Schriftgröße" -#: lib/commit.tcl:188 -msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" -msgstr "" -"Keine Änderungen vorhanden, die eingetragen werden könnten.\n" -"\n" -"Sie müssen mindestens eine Datei bereitstellen, bevor Sie eintragen können.\n" +#: lib/choose_font.tcl:93 +msgid "Font Example" +msgstr "Schriftbeispiel" -#: lib/commit.tcl:203 +#: lib/choose_font.tcl:105 msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" +"This is example text.\n" +"If you like this text, it can be your font." msgstr "" -"Bitte geben Sie eine Versionsbeschreibung ein.\n" -"\n" -"Eine gute Versionsbeschreibung enthält folgende Abschnitte:\n" -"\n" -"- Erste Zeile: Eine Zusammenfassung, was man gemacht hat.\n" -"\n" -"- Zweite Zeile: Leerzeile\n" -"\n" -"- Rest: Eine ausführliche Beschreibung, warum diese Änderung hilfreich ist.\n" - -#: lib/commit.tcl:234 -msgid "Calling pre-commit hook..." -msgstr "Aufrufen der Vor-Eintragen-Kontrolle (»pre-commit hook«)..." - -#: lib/commit.tcl:249 -msgid "Commit declined by pre-commit hook." -msgstr "Eintragen abgelehnt durch Vor-Eintragen-Kontrolle (»pre-commit hook«)." - -#: lib/commit.tcl:272 -msgid "Calling commit-msg hook..." -msgstr "Aufrufen der Versionsbeschreibungs-Kontrolle (»commit-message hook«)..." +"Dies ist ein Beispieltext.\n" +"Wenn Ihnen dieser Text gefällt, sollten Sie diese Schriftart wählen." -#: lib/commit.tcl:287 -msgid "Commit declined by commit-msg hook." -msgstr "" -"Eintragen abgelehnt durch Versionsbeschreibungs-Kontrolle (»commit-message " -"hook«)." +#: lib/option.tcl:11 +#, tcl-format +msgid "Invalid global encoding '%s'" +msgstr "Ungültige globale Zeichenkodierung »%s«" -#: lib/commit.tcl:300 -msgid "Committing changes..." -msgstr "Änderungen eintragen..." +#: lib/option.tcl:19 +#, tcl-format +msgid "Invalid repo encoding '%s'" +msgstr "Ungültige Repository-Zeichenkodierung »%s«" -#: lib/commit.tcl:316 -msgid "write-tree failed:" -msgstr "write-tree fehlgeschlagen:" +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "Voreinstellungen wiederherstellen" -#: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382 -msgid "Commit failed." -msgstr "Eintragen fehlgeschlagen." +#: lib/option.tcl:123 +msgid "Save" +msgstr "Speichern" -#: lib/commit.tcl:334 +#: lib/option.tcl:133 #, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "Version »%s« scheint beschädigt zu sein" - -#: lib/commit.tcl:339 -msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" -msgstr "" -"Keine Änderungen einzutragen.\n" -"\n" -"Es gibt keine geänderte Datei bei dieser Version und es wurde auch nichts " -"zusammengeführt.\n" -"\n" -"Das Arbeitsverzeichnis wird daher jetzt neu geladen.\n" +msgid "%s Repository" +msgstr "%s Repository" -#: lib/commit.tcl:346 -msgid "No changes to commit." -msgstr "Keine Änderungen, die eingetragen werden können." +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "Global (Alle Repositories)" -#: lib/commit.tcl:360 -msgid "commit-tree failed:" -msgstr "commit-tree fehlgeschlagen:" +#: lib/option.tcl:140 +msgid "User Name" +msgstr "Benutzername" -#: lib/commit.tcl:381 -msgid "update-ref failed:" -msgstr "update-ref fehlgeschlagen:" +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "E-Mail-Adresse" -#: lib/commit.tcl:469 -#, tcl-format -msgid "Created commit %s: %s" -msgstr "Version %s übertragen: %s" +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "Zusammenführungs-Commits zusammenfassen" -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "Verarbeitung. Bitte warten..." +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "Ausführlichkeit der Zusammenführen-Meldungen" -#: lib/console.tcl:186 -msgid "Success" -msgstr "Erfolgreich" +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "Vergleichsstatistik nach Zusammenführen anzeigen" -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "Fehler: Kommando fehlgeschlagen" +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "Zusammenführungswerkzeug" -#: lib/database.tcl:43 -msgid "Number of loose objects" -msgstr "Anzahl unverknüpfter Objekte" +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "Auf Dateiänderungsdatum verlassen" -#: lib/database.tcl:44 -msgid "Disk space used by loose objects" -msgstr "Festplattenplatz von unverknüpften Objekten" +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "Veraltete Trackingbranches entfernen während Anforderung" -#: lib/database.tcl:45 -msgid "Number of packed objects" -msgstr "Anzahl komprimierter Objekte" +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "Neue Branches automatisch als Trackingbranch" -#: lib/database.tcl:46 -msgid "Number of packs" -msgstr "Anzahl Komprimierungseinheiten" +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "Benutze »textconv« für Vergleich und Annotieren" -#: lib/database.tcl:47 -msgid "Disk space used by packed objects" -msgstr "Festplattenplatz von komprimierten Objekten" +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "Kopie-Annotieren nur bei geänderten Dateien" -#: lib/database.tcl:48 -msgid "Packed objects waiting for pruning" -msgstr "Komprimierte Objekte, die zum Aufräumen vorgesehen sind" +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "Anzahl Einträge in »Letzte Repositories«" -#: lib/database.tcl:49 -msgid "Garbage files" -msgstr "Dateien im Mülleimer" +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "Mindestzahl Zeichen für Kopie-Annotieren" -#: lib/database.tcl:72 -msgid "Compressing the object database" -msgstr "Objektdatenbank komprimieren" +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "Anzahl Tage für Annotieren-Historien-Kontext" -#: lib/database.tcl:83 -msgid "Verifying the object database with fsck-objects" -msgstr "Die Objektdatenbank durch »fsck-objects« überprüfen lassen" +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "Anzahl der Kontextzeilen beim Vergleich" -#: lib/database.tcl:107 -#, tcl-format -msgid "" -"This repository currently has approximately %i loose objects.\n" -"\n" -"To maintain optimal performance it is strongly recommended that you compress " -"the database.\n" -"\n" -"Compress the database now?" -msgstr "" -"Dieses Projektarchiv enthält ungefähr %i nicht verknüpfte Objekte.\n" -"\n" -"Für eine optimale Performance wird empfohlen, die Datenbank des Projektarchivs zu komprimieren.\n" -"\n" -"Soll die Datenbank jetzt komprimiert werden?" +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "Zusätzliche Vergleich-/diff-Parameter" -#: lib/date.tcl:25 -#, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Ungültiges Datum von Git: %s" +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "Textbreite der Commit-Beschreibung" -#: lib/diff.tcl:64 -#, tcl-format -msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" -"\n" -"The modification date of this file was updated by another application, but " -"the content within the file was not changed.\n" -"\n" -"A rescan will be automatically started to find other files which may have " -"the same state." -msgstr "" -"Keine Änderungen feststellbar.\n" -"\n" -"»%s« enthält keine Änderungen. Zwar wurde das Änderungsdatum dieser Datei von " -"einem anderen Programm modifiziert, aber der Inhalt der Datei ist " -"unverändert.\n" -"\n" -"Das Arbeitsverzeichnis wird jetzt neu geladen, um diese Änderung bei allen " -"Dateien zu prüfen." +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "Namensvorlage für neue Branches" -#: lib/diff.tcl:104 -#, tcl-format -msgid "Loading diff of %s..." -msgstr "Vergleich von »%s« laden..." +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "Voreingestellte Zeichenkodierung" -#: lib/diff.tcl:125 -msgid "" -"LOCAL: deleted\n" -"REMOTE:\n" -msgstr "" -"LOKAL: gelöscht\n" -"ANDERES:\n" +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "Warnen vor Committen auf losgelöste Branchspitze" -#: lib/diff.tcl:130 -msgid "" -"REMOTE: deleted\n" -"LOCAL:\n" -msgstr "" -"ANDERES: gelöscht\n" -"LOKAL:\n" +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "Unversionierte Dateien bereitstellen" -#: lib/diff.tcl:137 -msgid "LOCAL:\n" -msgstr "LOKAL:\n" +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "Unversionierte Dateien anzeigen" -#: lib/diff.tcl:140 -msgid "REMOTE:\n" -msgstr "ANDERES:\n" +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "Tabulator-Breite" -#: lib/diff.tcl:202 lib/diff.tcl:319 +#: lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 lib/option.tcl:282 +#: lib/database.tcl:57 #, tcl-format -msgid "Unable to display %s" -msgstr "Datei »%s« kann nicht angezeigt werden" +msgid "%s:" +msgstr "%s:" -#: lib/diff.tcl:203 -msgid "Error loading file:" -msgstr "Fehler beim Laden der Datei:" - -#: lib/diff.tcl:210 -msgid "Git Repository (subproject)" -msgstr "Git-Projektarchiv (Unterprojekt)" +#: lib/option.tcl:210 +msgid "Change" +msgstr "Ändern" -#: lib/diff.tcl:222 -msgid "* Binary file (not showing content)." -msgstr "* Binärdatei (Inhalt wird nicht angezeigt)" +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "Wörterbuch Rechtschreibprüfung:" -#: lib/diff.tcl:227 -#, tcl-format -msgid "" -"* Untracked file is %d bytes.\n" -"* Showing only first %d bytes.\n" -msgstr "" -"* Datei nicht unter Versionskontrolle, Dateigröße %d Bytes.\n" -"* Nur erste %d Bytes werden angezeigt.\n" +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "Schriftart ändern" -#: lib/diff.tcl:233 +#: lib/option.tcl:288 #, tcl-format -msgid "" -"\n" -"* Untracked file clipped here by %s.\n" -"* To see the entire file, use an external editor.\n" -msgstr "" -"\n" -"* Datei nicht unter Versionskontrolle, hier abgeschnitten durch %s.\n" -"* Zum Ansehen der vollständigen Datei externen Editor benutzen.\n" - -#: lib/diff.tcl:482 -msgid "Failed to unstage selected hunk." -msgstr "" -"Fehler beim Herausnehmen des gewählten Kontexts aus der Bereitstellung." +msgid "Choose %s" +msgstr "%s wählen" -#: lib/diff.tcl:489 -msgid "Failed to stage selected hunk." -msgstr "Fehler beim Bereitstellen des gewählten Kontexts." +#: lib/option.tcl:294 +msgid "pt." +msgstr "pt." -#: lib/diff.tcl:568 -msgid "Failed to unstage selected line." -msgstr "Fehler beim Herausnehmen der gewählten Zeile aus der Bereitstellung." +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "Einstellungen" -#: lib/diff.tcl:576 -msgid "Failed to stage selected line." -msgstr "Fehler beim Bereitstellen der gewählten Zeile." +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "Optionen konnten nicht gespeichert werden:" #: lib/encoding.tcl:443 msgid "Default" @@ -1695,232 +1432,43 @@ msgid "System (%s)" msgstr "Systemweit (%s)" #: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "Andere" - -#: lib/error.tcl:20 lib/error.tcl:114 -msgid "error" -msgstr "Fehler" - -#: lib/error.tcl:36 -msgid "warning" -msgstr "Warnung" - -#: lib/error.tcl:94 -msgid "You must correct the above errors before committing." -msgstr "" -"Sie müssen die obigen Fehler zuerst beheben, bevor Sie eintragen können." - -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "Bereitstellung kann nicht wieder freigegeben werden." - -#: lib/index.tcl:15 -msgid "Index Error" -msgstr "Fehler in Bereitstellung" - -#: lib/index.tcl:17 -msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." -msgstr "" -"Das Aktualisieren der Git-Bereitstellung ist fehlgeschlagen. Eine allgemeine " -"Git-Aktualisierung wird jetzt gestartet, um git-gui wieder mit git zu " -"synchronisieren." - -#: lib/index.tcl:28 -msgid "Continue" -msgstr "Fortsetzen" - -#: lib/index.tcl:31 -msgid "Unlock Index" -msgstr "Bereitstellung freigeben" - -#: lib/index.tcl:289 -#, tcl-format -msgid "Unstaging %s from commit" -msgstr "Datei »%s« aus der Bereitstellung herausnehmen" - -#: lib/index.tcl:328 -msgid "Ready to commit." -msgstr "Bereit zum Eintragen." - -#: lib/index.tcl:341 -#, tcl-format -msgid "Adding %s" -msgstr "»%s« hinzufügen..." - -#: lib/index.tcl:398 -#, tcl-format -msgid "Revert changes in file %s?" -msgstr "Änderungen in Datei »%s« verwerfen?" - -#: lib/index.tcl:400 -#, tcl-format -msgid "Revert changes in these %i files?" -msgstr "Änderungen in den gewählten %i Dateien verwerfen?" - -#: lib/index.tcl:408 -msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "" -"Alle nicht bereitgestellten Änderungen werden beim Verwerfen verloren gehen." - -#: lib/index.tcl:411 -msgid "Do Nothing" -msgstr "Nichts tun" - -#: lib/index.tcl:429 -msgid "Reverting selected files" -msgstr "Änderungen in gewählten Dateien verwerfen" - -#: lib/index.tcl:433 -#, tcl-format -msgid "Reverting %s" -msgstr "Änderungen in %s verwerfen" - -#: lib/merge.tcl:13 -msgid "" -"Cannot merge while amending.\n" -"\n" -"You must finish amending this commit before starting any type of merge.\n" -msgstr "" -"Zusammenführen kann nicht gleichzeitig mit Nachbessern durchgeführt werden.\n" -"\n" -"Sie müssen zuerst die Nachbesserungs-Version abschließen, bevor Sie " -"zusammenführen können.\n" - -#: lib/merge.tcl:27 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"Der letzte geladene Status stimmt nicht mehr mit dem Projektarchiv überein.\n" -"\n" -"Ein anderes Git-Programm hat das Projektarchiv seit dem letzten Laden " -"geändert. Vor einem Zusammenführen muss neu geladen werden.\n" -"\n" -"Es wird gleich neu geladen.\n" - -#: lib/merge.tcl:45 -#, tcl-format -msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" -"\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" -msgstr "" -"Zusammenführung mit Konflikten.\n" -"\n" -"Die Datei »%s« enthält Konflikte beim Zusammenführen. Sie müssen diese " -"Konflikte per Hand auflösen. Anschließend müssen Sie die Datei wieder " -"bereitstellen und eintragen, um die Zusammenführung abzuschließen. Erst " -"danach kann eine neue Zusammenführung begonnen werden.\n" - -#: lib/merge.tcl:55 -#, tcl-format -msgid "" -"You are in the middle of a change.\n" -"\n" -"File %s is modified.\n" -"\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" -msgstr "" -"Es liegen Änderungen vor.\n" -"\n" -"Die Datei »%s« wurde geändert. Sie sollten zuerst die bereitgestellte " -"Version abschließen, bevor Sie eine Zusammenführung beginnen. Mit dieser " -"Reihenfolge können Sie mögliche Konflikte beim Zusammenführen wesentlich " -"einfacher beheben oder abbrechen.\n" - -#: lib/merge.tcl:107 -#, tcl-format -msgid "%s of %s" -msgstr "%s von %s" - -#: lib/merge.tcl:120 -#, tcl-format -msgid "Merging %s and %s..." -msgstr "Zusammenführen von %s und %s..." - -#: lib/merge.tcl:131 -msgid "Merge completed successfully." -msgstr "Zusammenführen erfolgreich abgeschlossen." - -#: lib/merge.tcl:133 -msgid "Merge failed. Conflict resolution is required." -msgstr "Zusammenführen fehlgeschlagen. Konfliktauflösung ist notwendig." - -#: lib/merge.tcl:158 -#, tcl-format -msgid "Merge Into %s" -msgstr "Zusammenführen in »%s«" - -#: lib/merge.tcl:177 -msgid "Revision To Merge" -msgstr "Zusammenzuführende Version" - -#: lib/merge.tcl:212 -msgid "" -"Cannot abort while amending.\n" -"\n" -"You must finish amending this commit.\n" -msgstr "" -"Abbruch der Nachbesserung ist nicht möglich.\n" -"\n" -"Sie müssen die Nachbesserung der Version abschließen.\n" - -#: lib/merge.tcl:222 -msgid "" -"Abort merge?\n" -"\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with aborting the current merge?" -msgstr "" -"Zusammenführen abbrechen?\n" -"\n" -"Wenn Sie abbrechen, gehen alle noch nicht eingetragenen Änderungen " -"verloren.\n" -"\n" -"Zusammenführen jetzt abbrechen?" - -#: lib/merge.tcl:228 -msgid "" -"Reset changes?\n" -"\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with resetting the current changes?" -msgstr "" -"Änderungen zurücksetzen?\n" -"\n" -"Wenn Sie zurücksetzen, gehen alle noch nicht eingetragenen Änderungen " -"verloren.\n" -"\n" -"Änderungen jetzt zurücksetzen?" +msgid "Other" +msgstr "Andere" -#: lib/merge.tcl:239 -msgid "Aborting" -msgstr "Abbruch" +#: lib/tools.tcl:76 +#, tcl-format +msgid "Running %s requires a selected file." +msgstr "Um »%s« zu starten, muss eine Datei ausgewählt sein." -#: lib/merge.tcl:239 -msgid "files reset" -msgstr "Dateien zurückgesetzt" +#: lib/tools.tcl:92 +#, tcl-format +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "Wollen Sie %1$s wirklich auf Datei »%2$s« starten?" -#: lib/merge.tcl:267 -msgid "Abort failed." -msgstr "Abbruch fehlgeschlagen." +#: lib/tools.tcl:96 +#, tcl-format +msgid "Are you sure you want to run %s?" +msgstr "Wollen Sie %s wirklich starten?" -#: lib/merge.tcl:269 -msgid "Abort completed. Ready." -msgstr "Abbruch durchgeführt. Bereit." +#: lib/tools.tcl:118 +#, tcl-format +msgid "Tool: %s" +msgstr "Werkzeug: %s" + +#: lib/tools.tcl:119 +#, tcl-format +msgid "Running: %s" +msgstr "Starten: %s" + +#: lib/tools.tcl:158 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "Werkzeug erfolgreich abgeschlossen: %s" + +#: lib/tools.tcl:160 +#, tcl-format +msgid "Tool failed: %s" +msgstr "Werkzeug fehlgeschlagen: %s" #: lib/mergetool.tcl:8 msgid "Force resolution to the base version?" @@ -1928,11 +1476,11 @@ msgstr "Konflikt durch Basisversion ersetzen?" #: lib/mergetool.tcl:9 msgid "Force resolution to this branch?" -msgstr "Konflikt durch diesen Zweig ersetzen?" +msgstr "Konflikt durch diesen Branch ersetzen?" #: lib/mergetool.tcl:10 msgid "Force resolution to the other branch?" -msgstr "Konflikt durch anderen Zweig ersetzen?" +msgstr "Konflikt durch anderen Branch ersetzen?" #: lib/mergetool.tcl:14 #, tcl-format @@ -1970,21 +1518,21 @@ msgstr "" msgid "Conflict file does not exist" msgstr "Konflikt-Datei existiert nicht" -#: lib/mergetool.tcl:264 +#: lib/mergetool.tcl:246 #, tcl-format msgid "Not a GUI merge tool: '%s'" msgstr "Kein GUI Zusammenführungswerkzeug: »%s«" -#: lib/mergetool.tcl:268 +#: lib/mergetool.tcl:275 #, tcl-format msgid "Unsupported merge tool '%s'" msgstr "Unbekanntes Zusammenführungswerkzeug: »%s«" -#: lib/mergetool.tcl:303 +#: lib/mergetool.tcl:310 msgid "Merge tool is already running, terminate it?" msgstr "Zusammenführungswerkzeug läuft bereits. Soll es abgebrochen werden?" -#: lib/mergetool.tcl:323 +#: lib/mergetool.tcl:330 #, tcl-format msgid "" "Error retrieving versions:\n" @@ -1993,7 +1541,7 @@ msgstr "" "Fehler beim Abrufen der Dateiversionen:\n" "%s" -#: lib/mergetool.tcl:343 +#: lib/mergetool.tcl:350 #, tcl-format msgid "" "Could not start the merge tool:\n" @@ -2004,384 +1552,726 @@ msgstr "" "\n" "%s" -#: lib/mergetool.tcl:347 +#: lib/mergetool.tcl:354 msgid "Running merge tool..." msgstr "Zusammenführungswerkzeug starten..." -#: lib/mergetool.tcl:375 lib/mergetool.tcl:383 -msgid "Merge tool failed." -msgstr "Zusammenführungswerkzeug fehlgeschlagen." +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "Zusammenführungswerkzeug fehlgeschlagen." + +#: lib/tools_dlg.tcl:22 +#, tcl-format +msgid "%s (%s): Add Tool" +msgstr "%s (%s): Werkzeug hinzufügen" + +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "Neues Kommando für Werkzeug hinzufügen" + +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "Global hinzufügen" + +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "Einzelheiten des Werkzeugs" + +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "Benutzen Sie einen Schrägstrich »/«, um Untermenüs zu erstellen:" + +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "Kommando:" + +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "Bestätigungsfrage vor Starten anzeigen" + +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "Benutzer nach Version fragen (setzt $REVISION)" + +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" +msgstr "Benutzer nach zusätzlichen Argumenten fragen (setzt $ARGS)" + +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "Kein Ausgabefenster zeigen" + +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "Nur starten, wenn ein Vergleich gewählt ist ($FILENAME ist nicht leer)" + +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "Bitte geben Sie einen Werkzeugnamen an." + +#: lib/tools_dlg.tcl:126 +#, tcl-format +msgid "Tool '%s' already exists." +msgstr "Werkzeug »%s« existiert bereits." + +#: lib/tools_dlg.tcl:148 +#, tcl-format +msgid "" +"Could not add tool:\n" +"%s" +msgstr "" +"Werkzeug konnte nicht hinzugefügt werden:\n" +"\n" +"%s" + +#: lib/tools_dlg.tcl:187 +#, tcl-format +msgid "%s (%s): Remove Tool" +msgstr "%s (%s): Werkzeug entfernen" + +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "Werkzeugkommandos entfernen" + +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "Entfernen" + +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(Werkzeuge für lokales Repository werden in Blau angezeigt)" + +#: lib/tools_dlg.tcl:283 +#, tcl-format +msgid "%s (%s):" +msgstr "%s (%s):" + +#: lib/tools_dlg.tcl:292 +#, tcl-format +msgid "Run Command: %s" +msgstr "Kommando aufrufen: %s" + +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "Argumente" + +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "Ok" + +#: lib/search.tcl:48 +msgid "Find:" +msgstr "Suchen:" + +#: lib/search.tcl:50 +msgid "Next" +msgstr "Nächster" + +#: lib/search.tcl:51 +msgid "Prev" +msgstr "Voriger" + +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "RegAusdruck" + +#: lib/search.tcl:54 +msgid "Case" +msgstr "Groß/klein" + +#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75 +#, tcl-format +msgid "%s (%s): Create Desktop Icon" +msgstr "%s (%s): Desktop-Icon erstellen" + +#: lib/shortcut.tcl:24 lib/shortcut.tcl:65 +msgid "Cannot write shortcut:" +msgstr "Fehler beim Schreiben der Verknüpfung:" + +#: lib/shortcut.tcl:140 +msgid "Cannot write icon:" +msgstr "Fehler beim Erstellen des Icons:" + +#: lib/remote_branch_delete.tcl:29 +#, tcl-format +msgid "%s (%s): Delete Branch Remotely" +msgstr "%s (%s): Branch in externem Repository löschen" + +#: lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "Branch in externem Repository löschen" + +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "In Repository" + +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "Branches" + +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "Nur löschen, wenn" + +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "Zusammengeführt mit:" + +#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 +msgid "Always (Do not perform merge checks)" +msgstr "Immer (Keine Zusammenführungsprüfung)" + +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "Für »Zusammenführen mit« muss ein Branch angegeben werden." + +#: lib/remote_branch_delete.tcl:185 +#, tcl-format +msgid "" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" +msgstr "" +"Folgende Branches sind noch nicht mit »%s« zusammengeführt:\n" +"\n" +" - %s" + +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "" +"Ein oder mehrere Zusammenführungen sind fehlgeschlagen, da Sie nicht die " +"notwendigen Commits vorher angefordert haben. Sie sollten versuchen, zuerst " +"von »%s« anzufordern." + +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "Bitte wählen Sie mindestens einen Branch, der gelöscht werden soll." + +#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "" +"Das Wiederherstellen von gelöschten Branches ist nur mit größerem Aufwand " +"möglich.\n" +"\n" +"Sollen die ausgewählten Branches gelöscht werden?" + +#: lib/remote_branch_delete.tcl:227 +#, tcl-format +msgid "Deleting branches from %s" +msgstr "Branches auf »%s« werden gelöscht" + +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "Kein Repository ausgewählt." + +#: lib/remote_branch_delete.tcl:305 +#, tcl-format +msgid "Scanning %s..." +msgstr "»%s« laden..." + +#: lib/choose_repository.tcl:45 +msgid "Git Gui" +msgstr "Git Gui" + +#: lib/choose_repository.tcl:104 lib/choose_repository.tcl:427 +msgid "Create New Repository" +msgstr "Repository neu erstellen" + +#: lib/choose_repository.tcl:110 +msgid "New..." +msgstr "Neu..." + +#: lib/choose_repository.tcl:117 lib/choose_repository.tcl:511 +msgid "Clone Existing Repository" +msgstr "Repository klonen" + +#: lib/choose_repository.tcl:128 +msgid "Clone..." +msgstr "Klonen..." + +#: lib/choose_repository.tcl:135 lib/choose_repository.tcl:1105 +msgid "Open Existing Repository" +msgstr "Repository öffnen" + +#: lib/choose_repository.tcl:141 +msgid "Open..." +msgstr "Öffnen..." + +#: lib/choose_repository.tcl:154 +msgid "Recent Repositories" +msgstr "Letzte Repositories" + +#: lib/choose_repository.tcl:164 +msgid "Open Recent Repository:" +msgstr "Zuletzt benutztes Repository öffnen:" + +#: lib/choose_repository.tcl:331 lib/choose_repository.tcl:338 +#: lib/choose_repository.tcl:345 +#, tcl-format +msgid "Failed to create repository %s:" +msgstr "Repository »%s« konnte nicht erstellt werden:" + +#: lib/choose_repository.tcl:422 lib/branch_create.tcl:33 +msgid "Create" +msgstr "Erstellen" + +#: lib/choose_repository.tcl:432 +msgid "Directory:" +msgstr "Verzeichnis:" + +#: lib/choose_repository.tcl:462 lib/choose_repository.tcl:588 +#: lib/choose_repository.tcl:1139 +msgid "Git Repository" +msgstr "Git Repository" + +#: lib/choose_repository.tcl:487 +#, tcl-format +msgid "Directory %s already exists." +msgstr "Verzeichnis »%s« existiert bereits." + +#: lib/choose_repository.tcl:491 +#, tcl-format +msgid "File %s already exists." +msgstr "Datei »%s« existiert bereits." + +#: lib/choose_repository.tcl:506 +msgid "Clone" +msgstr "Klonen" + +#: lib/choose_repository.tcl:519 +msgid "Source Location:" +msgstr "Herkunfts-Adresse:" + +#: lib/choose_repository.tcl:528 +msgid "Target Directory:" +msgstr "Zielverzeichnis:" + +#: lib/choose_repository.tcl:538 +msgid "Clone Type:" +msgstr "Art des Klonens:" + +#: lib/choose_repository.tcl:543 +msgid "Standard (Fast, Semi-Redundant, Hardlinks)" +msgstr "Standard (schnell, teilweise redundant, Hardlinks)" + +#: lib/choose_repository.tcl:548 +msgid "Full Copy (Slower, Redundant Backup)" +msgstr "Alles kopieren (langsamer, volle Redundanz)" + +#: lib/choose_repository.tcl:553 +msgid "Shared (Fastest, Not Recommended, No Backup)" +msgstr "Verknüpft (schnell, nicht empfohlen, kein Backup)" + +#: lib/choose_repository.tcl:560 +msgid "Recursively clone submodules too" +msgstr "Rekursiv weitere Submodule klonen" + +#: lib/choose_repository.tcl:594 lib/choose_repository.tcl:641 +#: lib/choose_repository.tcl:790 lib/choose_repository.tcl:864 +#: lib/choose_repository.tcl:1145 lib/choose_repository.tcl:1153 +#, tcl-format +msgid "Not a Git repository: %s" +msgstr "Kein Git-Repository: %s" + +#: lib/choose_repository.tcl:630 +msgid "Standard only available for local repository." +msgstr "Standard ist nur für lokale Repositories verfügbar." + +#: lib/choose_repository.tcl:634 +msgid "Shared only available for local repository." +msgstr "Verknüpft ist nur für lokale Repositories verfügbar." + +#: lib/choose_repository.tcl:655 +#, tcl-format +msgid "Location %s already exists." +msgstr "Adresse »%s« existiert bereits." + +#: lib/choose_repository.tcl:666 +msgid "Failed to configure origin" +msgstr "Der Ursprungsort konnte nicht eingerichtet werden" + +#: lib/choose_repository.tcl:678 +msgid "Counting objects" +msgstr "Objekte werden gezählt" + +#: lib/choose_repository.tcl:679 +msgid "buckets" +msgstr "Buckets" -#: lib/option.tcl:11 +#: lib/choose_repository.tcl:703 #, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "Ungültige globale Zeichenkodierung »%s«" +msgid "Unable to copy objects/info/alternates: %s" +msgstr "Kopien von Objekten/Info/Alternates konnten nicht erstellt werden: %s" -#: lib/option.tcl:19 +#: lib/choose_repository.tcl:740 #, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "Ungültige Archiv-Zeichenkodierung »%s«" +msgid "Nothing to clone from %s." +msgstr "Von »%s« konnte nichts geklont werden." -#: lib/option.tcl:117 -msgid "Restore Defaults" -msgstr "Voreinstellungen wiederherstellen" +#: lib/choose_repository.tcl:742 lib/choose_repository.tcl:962 +#: lib/choose_repository.tcl:974 +msgid "The 'master' branch has not been initialized." +msgstr "Der »master«-Branch wurde noch nicht initialisiert." -#: lib/option.tcl:121 -msgid "Save" -msgstr "Speichern" +#: lib/choose_repository.tcl:755 +msgid "Hardlinks are unavailable. Falling back to copying." +msgstr "Hardlinks nicht verfügbar. Stattdessen wird kopiert." -#: lib/option.tcl:131 +#: lib/choose_repository.tcl:769 #, tcl-format -msgid "%s Repository" -msgstr "Projektarchiv %s" - -#: lib/option.tcl:132 -msgid "Global (All Repositories)" -msgstr "Global (Alle Projektarchive)" - -#: lib/option.tcl:138 -msgid "User Name" -msgstr "Benutzername" +msgid "Cloning from %s" +msgstr "Kopieren von »%s«" -#: lib/option.tcl:139 -msgid "Email Address" -msgstr "E-Mail-Adresse" +#: lib/choose_repository.tcl:800 +msgid "Copying objects" +msgstr "Objektdatenbank kopieren" -#: lib/option.tcl:141 -msgid "Summarize Merge Commits" -msgstr "Zusammenführungs-Versionen zusammenfassen" +#: lib/choose_repository.tcl:801 +msgid "KiB" +msgstr "KB" -#: lib/option.tcl:142 -msgid "Merge Verbosity" -msgstr "Ausführlichkeit der Zusammenführen-Meldungen" +#: lib/choose_repository.tcl:825 +#, tcl-format +msgid "Unable to copy object: %s" +msgstr "Objekt kann nicht kopiert werden: %s" -#: lib/option.tcl:143 -msgid "Show Diffstat After Merge" -msgstr "Vergleichsstatistik nach Zusammenführen anzeigen" +#: lib/choose_repository.tcl:837 +msgid "Linking objects" +msgstr "Objekte verlinken" -#: lib/option.tcl:144 -msgid "Use Merge Tool" -msgstr "Zusammenführungswerkzeug" +#: lib/choose_repository.tcl:838 +msgid "objects" +msgstr "Objekte" -#: lib/option.tcl:146 -msgid "Trust File Modification Timestamps" -msgstr "Auf Dateiänderungsdatum verlassen" +#: lib/choose_repository.tcl:846 +#, tcl-format +msgid "Unable to hardlink object: %s" +msgstr "Für Objekt konnte kein Hardlink erstellt werden: %s" -#: lib/option.tcl:147 -msgid "Prune Tracking Branches During Fetch" -msgstr "Übernahmezweige aufräumen während Anforderung" +#: lib/choose_repository.tcl:903 +msgid "Cannot fetch branches and objects. See console output for details." +msgstr "" +"Branches und Objekte konnten nicht angefordert werden. Kontrollieren Sie " +"die Ausgaben auf der Konsole für weitere Angaben." -#: lib/option.tcl:148 -msgid "Match Tracking Branches" -msgstr "Passend zu Übernahmezweig" +#: lib/choose_repository.tcl:914 +msgid "Cannot fetch tags. See console output for details." +msgstr "" +"Tags konnten nicht angefordert werden. Kontrollieren Sie die Ausgaben auf " +"der Konsole für weitere Angaben." -#: lib/option.tcl:149 -msgid "Blame Copy Only On Changed Files" -msgstr "Kopie-Annotieren nur bei geänderten Dateien" +#: lib/choose_repository.tcl:938 +msgid "Cannot determine HEAD. See console output for details." +msgstr "" +"Die Branchspitze (HEAD) konnte nicht gefunden werden. Kontrollieren Sie die " +"Ausgaben auf der Konsole für weitere Angaben." -#: lib/option.tcl:150 -msgid "Minimum Letters To Blame Copy On" -msgstr "Mindestzahl Zeichen für Kopie-Annotieren" +#: lib/choose_repository.tcl:947 +#, tcl-format +msgid "Unable to cleanup %s" +msgstr "Verzeichnis »%s« kann nicht aufgeräumt werden." -#: lib/option.tcl:151 -msgid "Blame History Context Radius (days)" -msgstr "Anzahl Tage für Historien-Kontext" +#: lib/choose_repository.tcl:953 +msgid "Clone failed." +msgstr "Klonen fehlgeschlagen." -#: lib/option.tcl:152 -msgid "Number of Diff Context Lines" -msgstr "Anzahl der Kontextzeilen beim Vergleich" +#: lib/choose_repository.tcl:960 +msgid "No default branch obtained." +msgstr "Kein voreingestellter Branch gefunden." -#: lib/option.tcl:153 -msgid "Commit Message Text Width" -msgstr "Textbreite der Versionsbeschreibung" +#: lib/choose_repository.tcl:971 +#, tcl-format +msgid "Cannot resolve %s as a commit." +msgstr "»%s« wurde nicht als Commit gefunden." -#: lib/option.tcl:154 -msgid "New Branch Name Template" -msgstr "Namensvorschlag für neue Zweige" +#: lib/choose_repository.tcl:998 +msgid "Creating working directory" +msgstr "Arbeitskopie erstellen" -#: lib/option.tcl:155 -msgid "Default File Contents Encoding" -msgstr "Voreingestellte Zeichenkodierung" +#: lib/choose_repository.tcl:1028 +msgid "Initial file checkout failed." +msgstr "Erstellen der Arbeitskopie fehlgeschlagen." -#: lib/option.tcl:203 -msgid "Change" -msgstr "Ändern" +#: lib/choose_repository.tcl:1072 +msgid "Cloning submodules" +msgstr "Klone Submodul" -#: lib/option.tcl:230 -msgid "Spelling Dictionary:" -msgstr "Wörterbuch Rechtschreibprüfung:" +#: lib/choose_repository.tcl:1087 +msgid "Cannot clone submodules." +msgstr "Submodul konnte nicht geklont werden." -#: lib/option.tcl:254 -msgid "Change Font" -msgstr "Schriftart ändern" +#: lib/choose_repository.tcl:1110 +msgid "Repository:" +msgstr "Repository:" -#: lib/option.tcl:258 +#: lib/choose_repository.tcl:1159 #, tcl-format -msgid "Choose %s" -msgstr "%s wählen" +msgid "Failed to open repository %s:" +msgstr "Repository »%s« konnte nicht geöffnet werden." -#: lib/option.tcl:264 -msgid "pt." -msgstr "pt." +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "git-gui - eine grafische Oberfläche für Git." -#: lib/option.tcl:278 -msgid "Preferences" -msgstr "Einstellungen" +#: lib/blame.tcl:74 +#, tcl-format +msgid "%s (%s): File Viewer" +msgstr "%s (%s): Datei-Browser" -#: lib/option.tcl:314 -msgid "Failed to completely save options:" -msgstr "Optionen konnten nicht gespeichert werden:" +#: lib/blame.tcl:80 +msgid "Commit:" +msgstr "Commit:" -#: lib/remote_add.tcl:19 -msgid "Add Remote" -msgstr "Externes Archiv hinzufügen" +#: lib/blame.tcl:282 +msgid "Copy Commit" +msgstr "Commit kopieren" -#: lib/remote_add.tcl:24 -msgid "Add New Remote" -msgstr "Neues externes Archiv hinzufügen" +#: lib/blame.tcl:286 +msgid "Find Text..." +msgstr "Text suchen..." -#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36 -msgid "Add" -msgstr "Hinzufügen" +#: lib/blame.tcl:290 +msgid "Goto Line..." +msgstr "Gehe zu Zeile..." -#: lib/remote_add.tcl:37 -msgid "Remote Details" -msgstr "Einzelheiten des externen Archivs" +#: lib/blame.tcl:299 +msgid "Do Full Copy Detection" +msgstr "Volle Kopie-Erkennung" -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "Adresse:" +#: lib/blame.tcl:303 +msgid "Show History Context" +msgstr "Historien-Kontext anzeigen" -#: lib/remote_add.tcl:62 -msgid "Further Action" -msgstr "Weitere Aktion jetzt" +#: lib/blame.tcl:306 +msgid "Blame Parent Commit" +msgstr "Elterncommit annotieren" -#: lib/remote_add.tcl:65 -msgid "Fetch Immediately" -msgstr "Gleich anfordern" +#: lib/blame.tcl:468 +#, tcl-format +msgid "Reading %s..." +msgstr "%s lesen..." -#: lib/remote_add.tcl:71 -msgid "Initialize Remote Repository and Push" -msgstr "Externes Archiv initialisieren und dahin versenden" +#: lib/blame.tcl:596 +msgid "Loading copy/move tracking annotations..." +msgstr "Annotierungen für Kopieren/Verschieben werden geladen..." -#: lib/remote_add.tcl:77 -msgid "Do Nothing Else Now" -msgstr "Nichts tun" +#: lib/blame.tcl:613 +msgid "lines annotated" +msgstr "Zeilen annotiert" -#: lib/remote_add.tcl:101 -msgid "Please supply a remote name." -msgstr "Bitte geben Sie einen Namen des externen Archivs an." +#: lib/blame.tcl:815 +msgid "Loading original location annotations..." +msgstr "Annotierungen für ursprünglichen Ort werden geladen..." -#: lib/remote_add.tcl:114 -#, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "»%s« ist kein zulässiger Name eines externen Archivs." +#: lib/blame.tcl:818 +msgid "Annotation complete." +msgstr "Annotierung vollständig." -#: lib/remote_add.tcl:125 -#, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "Fehler beim Hinzufügen des externen Archivs »%s« aus Herkunftsort »%s«." +#: lib/blame.tcl:849 +msgid "Busy" +msgstr "Verarbeitung läuft" -#: lib/remote_add.tcl:133 lib/transport.tcl:6 -#, tcl-format -msgid "fetch %s" -msgstr "»%s« anfordern" +#: lib/blame.tcl:850 +msgid "Annotation process is already running." +msgstr "Annotierung läuft bereits." -#: lib/remote_add.tcl:134 -#, tcl-format -msgid "Fetching the %s" -msgstr "»%s« anfordern" +#: lib/blame.tcl:889 +msgid "Running thorough copy detection..." +msgstr "Intensive Kopie-Erkennung läuft..." -#: lib/remote_add.tcl:157 -#, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "Initialisieren eines externen Archivs an Adresse »%s« ist nicht möglich." +#: lib/blame.tcl:957 +msgid "Loading annotation..." +msgstr "Annotierung laden..." -#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63 -#: lib/transport.tcl:81 -#, tcl-format -msgid "push %s" -msgstr "»%s« versenden..." +#: lib/blame.tcl:1010 +msgid "Author:" +msgstr "Autor:" -#: lib/remote_add.tcl:164 -#, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "Einrichten von »%s« an »%s«" +#: lib/blame.tcl:1014 +msgid "Committer:" +msgstr "Committer:" -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "Zweig in externem Archiv löschen" +#: lib/blame.tcl:1019 +msgid "Original File:" +msgstr "Ursprüngliche Datei:" -#: lib/remote_branch_delete.tcl:47 -msgid "From Repository" -msgstr "In Projektarchiv" +#: lib/blame.tcl:1067 +msgid "Cannot find HEAD commit:" +msgstr "Branchspitze (»HEAD commit«) kann nicht gefunden werden:" -#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134 -msgid "Remote:" -msgstr "Externes Archiv:" +#: lib/blame.tcl:1122 +msgid "Cannot find parent commit:" +msgstr "Elterncommit kann nicht gefunden werden:" -#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149 -msgid "Arbitrary Location:" -msgstr "Adresse:" +#: lib/blame.tcl:1137 +msgid "Unable to display parent" +msgstr "Elterncommit kann nicht angezeigt werden" -#: lib/remote_branch_delete.tcl:84 -msgid "Branches" -msgstr "Zweige" +#: lib/blame.tcl:1138 lib/diff.tcl:345 +msgid "Error loading diff:" +msgstr "Fehler beim Laden des Vergleichs:" -#: lib/remote_branch_delete.tcl:109 -msgid "Delete Only If" -msgstr "Nur löschen, wenn" +#: lib/blame.tcl:1279 +msgid "Originally By:" +msgstr "Ursprünglich von:" -#: lib/remote_branch_delete.tcl:111 -msgid "Merged Into:" -msgstr "Zusammengeführt mit:" +#: lib/blame.tcl:1285 +msgid "In File:" +msgstr "In Datei:" -#: lib/remote_branch_delete.tcl:152 -msgid "A branch is required for 'Merged Into'." -msgstr "Für »Zusammenführen mit« muss ein Zweig angegeben werden." +#: lib/blame.tcl:1290 +msgid "Copied Or Moved Here By:" +msgstr "Kopiert oder verschoben durch:" -#: lib/remote_branch_delete.tcl:184 +#: lib/diff.tcl:77 #, tcl-format msgid "" -"The following branches are not completely merged into %s:\n" +"No differences detected.\n" "\n" -" - %s" +"%s has no changes.\n" +"\n" +"The modification date of this file was updated by another application, but " +"the content within the file was not changed.\n" +"\n" +"A rescan will be automatically started to find other files which may have " +"the same state." msgstr "" -"Folgende Zweige sind noch nicht mit »%s« zusammengeführt:\n" +"Keine Änderungen feststellbar.\n" "\n" -" - %s" +"»%s« enthält keine Änderungen. Zwar wurde das Änderungsdatum dieser Datei " +"von einem anderen Programm modifiziert, aber der Inhalt der Datei ist " +"unverändert.\n" +"\n" +"Das Arbeitsverzeichnis wird jetzt neu geladen, um diese Änderung bei allen " +"Dateien zu prüfen." -#: lib/remote_branch_delete.tcl:189 +#: lib/diff.tcl:117 #, tcl-format +msgid "Loading diff of %s..." +msgstr "Vergleich von »%s« laden..." + +#: lib/diff.tcl:143 msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." +"LOCAL: deleted\n" +"REMOTE:\n" msgstr "" -"Ein oder mehrere Zusammenführungen sind fehlgeschlagen, da Sie nicht die " -"notwendigen Versionen vorher angefordert haben. Sie sollten versuchen, " -"zuerst von »%s« anzufordern." - -#: lib/remote_branch_delete.tcl:207 -msgid "Please select one or more branches to delete." -msgstr "Bitte wählen Sie mindestens einen Zweig, der gelöscht werden soll." - -#: lib/remote_branch_delete.tcl:226 -#, tcl-format -msgid "Deleting branches from %s" -msgstr "Zweige auf »%s« werden gelöscht" - -#: lib/remote_branch_delete.tcl:292 -msgid "No repository selected." -msgstr "Kein Projektarchiv ausgewählt." - -#: lib/remote_branch_delete.tcl:297 -#, tcl-format -msgid "Scanning %s..." -msgstr "»%s« laden..." - -#: lib/remote.tcl:163 -msgid "Remove Remote" -msgstr "Externes Archiv entfernen" - -#: lib/remote.tcl:168 -msgid "Prune from" -msgstr "Aufräumen von" - -#: lib/remote.tcl:173 -msgid "Fetch from" -msgstr "Anfordern von" - -#: lib/remote.tcl:215 -msgid "Push to" -msgstr "Versenden nach" - -#: lib/search.tcl:21 -msgid "Find:" -msgstr "Suchen:" +"LOKAL: gelöscht\n" +"EXTERN:\n" -#: lib/search.tcl:23 -msgid "Next" -msgstr "Nächster" +#: lib/diff.tcl:148 +msgid "" +"REMOTE: deleted\n" +"LOCAL:\n" +msgstr "" +"EXTERN: gelöscht\n" +"LOKAL:\n" -#: lib/search.tcl:24 -msgid "Prev" -msgstr "Voriger" +#: lib/diff.tcl:155 +msgid "LOCAL:\n" +msgstr "LOKAL:\n" -#: lib/search.tcl:25 -msgid "Case-Sensitive" -msgstr "Groß-/Kleinschreibung unterscheiden" +#: lib/diff.tcl:158 +msgid "REMOTE:\n" +msgstr "EXTERN:\n" -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "Fehler beim Schreiben der Verknüpfung:" +#: lib/diff.tcl:220 lib/diff.tcl:344 +#, tcl-format +msgid "Unable to display %s" +msgstr "Datei »%s« kann nicht angezeigt werden" -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "Fehler beim Erstellen des Icons:" +#: lib/diff.tcl:221 +msgid "Error loading file:" +msgstr "Fehler beim Laden der Datei:" -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "Rechtschreibprüfungsprogramm nicht unterstützt" +#: lib/diff.tcl:227 +msgid "Git Repository (subproject)" +msgstr "Git-Repository (Subprojekt)" -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "Rechtschreibprüfung nicht verfügbar" +#: lib/diff.tcl:239 +msgid "* Binary file (not showing content)." +msgstr "* Binärdatei (Inhalt wird nicht angezeigt)" -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "Unbenutzbare Konfiguration der Rechtschreibprüfung" +#: lib/diff.tcl:244 +#, tcl-format +msgid "" +"* Untracked file is %d bytes.\n" +"* Showing only first %d bytes.\n" +msgstr "" +"* Unversionierte Datei hat %d Bytes.\n" +"* Nur erste %d Bytes werden angezeigt.\n" -#: lib/spellcheck.tcl:70 +#: lib/diff.tcl:250 #, tcl-format -msgid "Reverting dictionary to %s." -msgstr "Wörterbuch auf %s zurückgesetzt." +msgid "" +"\n" +"* Untracked file clipped here by %s.\n" +"* To see the entire file, use an external editor.\n" +msgstr "" +"\n" +"* Unversionierte Datei, hier abgeschnitten durch %s.\n" +"* Zum Ansehen der vollständigen Datei externen Editor benutzen.\n" -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "Rechtschreibprüfungsprogramm mit Fehler abgebrochen" +#: lib/diff.tcl:583 +msgid "Failed to unstage selected hunk." +msgstr "" +"Fehler beim Herausnehmen des gewählten Patch-Blocks aus der Bereitstellung." -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "Unbekanntes Rechtschreibprüfungsprogramm" +#: lib/diff.tcl:591 +msgid "Failed to revert selected hunk." +msgstr "Fehler beim Zurücknehmen des gewählten Patch-Blocks." -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "Keine Vorschläge" +#: lib/diff.tcl:594 +msgid "Failed to stage selected hunk." +msgstr "Fehler beim Bereitstellen des gewählten Patch-Blocks." -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "Unerwartetes EOF vom Rechtschreibprüfungsprogramm" +#: lib/diff.tcl:687 +msgid "Failed to unstage selected line." +msgstr "Fehler beim Herausnehmen der gewählten Zeile aus der Bereitstellung." -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "Rechtschreibprüfung fehlgeschlagen" +#: lib/diff.tcl:696 +msgid "Failed to revert selected line." +msgstr "Fehler beim Zurücknehmen der gewählten Zeile." + +#: lib/diff.tcl:700 +msgid "Failed to stage selected line." +msgstr "Fehler beim Bereitstellen der gewählten Zeile." -#: lib/sshkey.tcl:31 +#: lib/diff.tcl:889 +msgid "Failed to undo last revert." +msgstr "Fehler beim Rückgängigmachen des letzten Zurücknehmen-Commits" + +#: lib/sshkey.tcl:34 msgid "No keys found." msgstr "Keine Schlüssel gefunden." -#: lib/sshkey.tcl:34 +#: lib/sshkey.tcl:37 #, tcl-format msgid "Found a public key in: %s" msgstr "Öffentlicher Schlüssel gefunden in: %s" -#: lib/sshkey.tcl:40 +#: lib/sshkey.tcl:43 msgid "Generate Key" msgstr "Schlüssel erzeugen" -#: lib/sshkey.tcl:56 +#: lib/sshkey.tcl:61 msgid "Copy To Clipboard" msgstr "In Zwischenablage kopieren" -#: lib/sshkey.tcl:70 +#: lib/sshkey.tcl:75 msgid "Your OpenSSH Public Key" msgstr "Ihr OpenSSH öffenlicher Schlüssel" -#: lib/sshkey.tcl:78 +#: lib/sshkey.tcl:83 msgid "Generating..." msgstr "Erzeugen..." -#: lib/sshkey.tcl:84 +#: lib/sshkey.tcl:89 #, tcl-format msgid "" "Could not start ssh-keygen:\n" @@ -2392,201 +2282,593 @@ msgstr "" "\n" "%s" -#: lib/sshkey.tcl:111 +#: lib/sshkey.tcl:116 msgid "Generation failed." msgstr "Schlüsselerzeugung fehlgeschlagen." -#: lib/sshkey.tcl:118 +#: lib/sshkey.tcl:123 msgid "Generation succeeded, but no keys found." msgstr "Schlüsselerzeugung erfolgreich, aber keine Schlüssel gefunden." -#: lib/sshkey.tcl:121 +#: lib/sshkey.tcl:126 #, tcl-format msgid "Your key is in: %s" msgstr "Ihr Schlüssel ist abgelegt in: %s" -#: lib/status_bar.tcl:83 +#: lib/branch_create.tcl:23 #, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%s ... %*i von %*i %s (%3i%%)" +msgid "%s (%s): Create Branch" +msgstr "%s (%s): Branch erstellen" -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "Werkzeug hinzufügen" +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "Neuen Branch erstellen" + +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "Branchname" + +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "Passend zu Trackingbranch-Name" + +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "Anfangsversion" + +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "Existierenden Branch aktualisieren:" + +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "Nein" + +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "Nur Vorspulen" + +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "Branch auschecken nach Erstellen" + +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "Bitte wählen Sie einen Trackingbranch." + +#: lib/branch_create.tcl:141 +#, tcl-format +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "Trackingbranch »%s« ist kein Branch im externen Repository." + +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "Verarbeitung. Bitte warten..." + +#: lib/console.tcl:186 +msgid "Success" +msgstr "Erfolgreich" + +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "Fehler: Kommando fehlgeschlagen" + +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "Gehe zu Zeile:" + +#: lib/line.tcl:23 +msgid "Go" +msgstr "Gehe" + +#: lib/choose_rev.tcl:52 +msgid "This Detached Checkout" +msgstr "Losgelöste Arbeitskopie-Version" + +#: lib/choose_rev.tcl:60 +msgid "Revision Expression:" +msgstr "Version Regex-Ausdruck:" + +#: lib/choose_rev.tcl:72 +msgid "Local Branch" +msgstr "Lokaler Branch" + +#: lib/choose_rev.tcl:77 +msgid "Tracking Branch" +msgstr "Trackingbranch" + +#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 +msgid "Tag" +msgstr "Tag" + +#: lib/choose_rev.tcl:321 +#, tcl-format +msgid "Invalid revision: %s" +msgstr "Ungültige Version: %s" + +#: lib/choose_rev.tcl:342 +msgid "No revision selected." +msgstr "Keine Version ausgewählt." + +#: lib/choose_rev.tcl:350 +msgid "Revision expression is empty." +msgstr "Versions-Ausdruck ist leer." + +#: lib/choose_rev.tcl:537 +msgid "Updated" +msgstr "Aktualisiert" + +#: lib/choose_rev.tcl:565 +msgid "URL" +msgstr "URL" + +#: lib/commit.tcl:9 +msgid "" +"There is nothing to amend.\n" +"\n" +"You are about to create the initial commit. There is no commit before this " +"to amend.\n" +msgstr "" +"Kein Commit zur Nachbesserung vorhanden.\n" +"\n" +"Sie sind dabei, den ersten Commit zu erstellen. Es gibt keinen existierenden " +"Commit, den Sie nachbessern könnten.\n" + +#: lib/commit.tcl:18 +msgid "" +"Cannot amend while merging.\n" +"\n" +"You are currently in the middle of a merge that has not been fully " +"completed. You cannot amend the prior commit unless you first abort the " +"current merge activity.\n" +msgstr "" +"Nachbesserung bei Zusammenführung nicht möglich.\n" +"\n" +"Sie haben das Zusammenführen von Commits angefangen, aber noch nicht " +"beendet. Sie können keinen vorigen Commit nachbessern, solange eine " +"unfertige Zusammenführung existiert. Dazu müssen Sie die Zusammenführung " +"beenden oder abbrechen.\n" + +#: lib/commit.tcl:56 +msgid "Error loading commit data for amend:" +msgstr "Fehler beim Laden der Commitdaten für Nachbessern:" + +#: lib/commit.tcl:83 +msgid "Unable to obtain your identity:" +msgstr "Benutzername konnte nicht bestimmt werden:" + +#: lib/commit.tcl:88 +msgid "Invalid GIT_COMMITTER_IDENT:" +msgstr "Ungültiger Wert von GIT_COMMITTER_INDENT:" + +#: lib/commit.tcl:138 +#, tcl-format +msgid "warning: Tcl does not support encoding '%s'." +msgstr "Warning: Tcl/Tk unterstützt die Zeichencodierung »%s« nicht." + +#: lib/commit.tcl:158 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before another commit can be created.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"Der letzte geladene Status stimmt nicht mehr mit dem Repository überein.\n" +"\n" +"Ein anderes Git-Programm hat das Repository seit dem letzten Laden " +"geändert. Vor dem nächsten Commit muss neu geladen werden.\n" +"\n" +"Es wird gleich neu geladen.\n" + +#: lib/commit.tcl:182 +#, tcl-format +msgid "" +"Unmerged files cannot be committed.\n" +"\n" +"File %s has merge conflicts. You must resolve them and stage the file " +"before committing.\n" +msgstr "" +"Nicht zusammengeführte Dateien können nicht committet werden.\n" +"\n" +"Die Datei »%s« hat noch nicht aufgelöste Zusammenführungs-Konflikte. Sie " +"müssen diese Konflikte auflösen und die Dateien in die Bereitstellung " +"hinzufügen, bevor Sie committen können.\n" + +#: lib/commit.tcl:190 +#, tcl-format +msgid "" +"Unknown file state %s detected.\n" +"\n" +"File %s cannot be committed by this program.\n" +msgstr "" +"Unbekannter Dateizustand »%s«.\n" +"\n" +"Datei »%s« kann nicht committet werden.\n" + +#: lib/commit.tcl:198 +msgid "" +"No changes to commit.\n" +"\n" +"You must stage at least 1 file before you can commit.\n" +msgstr "" +"Keine Änderungen vorhanden, die committet werden könnten.\n" +"\n" +"Sie müssen mindestens eine Datei bereitstellen, bevor Sie committen können.\n" + +#: lib/commit.tcl:213 +msgid "" +"Please supply a commit message.\n" +"\n" +"A good commit message has the following format:\n" +"\n" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" +msgstr "" +"Bitte geben Sie eine Versionsbeschreibung ein.\n" +"\n" +"Eine gute Versionsbeschreibung enthält folgende Abschnitte:\n" +"\n" +"- Erste Zeile: Eine Zusammenfassung, was man gemacht hat.\n" +"\n" +"- Zweite Zeile: Leerzeile\n" +"\n" +"- Rest: Eine ausführliche Beschreibung, warum diese Änderung hilfreich ist.\n" + +#: lib/commit.tcl:244 +msgid "Calling pre-commit hook..." +msgstr "Aufrufen des »pre-commit hook«..." + +#: lib/commit.tcl:259 +msgid "Commit declined by pre-commit hook." +msgstr "Committen abgelehnt durch »pre-commit hook«." + +#: lib/commit.tcl:278 +msgid "" +"You are about to commit on a detached head. This is a potentially dangerous " +"thing to do because if you switch to another branch you will lose your " +"changes and it can be difficult to retrieve them later from the reflog. You " +"should probably cancel this commit and create a new branch to continue.\n" +" \n" +" Do you really want to proceed with your Commit?" +msgstr "" +"Sie sind dabei, einen Commit auf losgelöste Branchspitze (»commit to " +"detached head«) zu erstellen. Das ist riskant, denn wenn Sie zu einem " +"anderen Branch wechseln, würden Sie diese Änderungen verlieren und es ist " +"nachträglich schwierig, diese aus dem Commit-Log (»reflog«) wiederzufinden. " +"Es wird empfohlen, diesen Commit abzubrechen und zunächst einen neuen Branch " +"zu erstellen.\n" +"\n" +" Wollen Sie den Commit trotzdem in dieser Form erstellen?" + +#: lib/commit.tcl:299 +msgid "Calling commit-msg hook..." +msgstr "Aufrufen des »commit-msg hook«..." + +#: lib/commit.tcl:314 +msgid "Commit declined by commit-msg hook." +msgstr "Committen abgelehnt durch »commit-msg hook«." + +#: lib/commit.tcl:327 +msgid "Committing changes..." +msgstr "Änderungen committen..." + +#: lib/commit.tcl:344 +msgid "write-tree failed:" +msgstr "write-tree fehlgeschlagen:" + +#: lib/commit.tcl:345 lib/commit.tcl:395 lib/commit.tcl:422 +msgid "Commit failed." +msgstr "Committen fehlgeschlagen." -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "Neues Kommando für Werkzeug hinzufügen" +#: lib/commit.tcl:362 +#, tcl-format +msgid "Commit %s appears to be corrupt" +msgstr "Version »%s« scheint beschädigt zu sein" -#: lib/tools_dlg.tcl:33 -msgid "Add globally" -msgstr "Global hinzufügen" +#: lib/commit.tcl:367 +msgid "" +"No changes to commit.\n" +"\n" +"No files were modified by this commit and it was not a merge commit.\n" +"\n" +"A rescan will be automatically started now.\n" +msgstr "" +"Keine Änderungen zum committen.\n" +"\n" +"Es gibt keine geänderte Datei in diesem Commit und es wurde auch nichts " +"zusammengeführt.\n" +"\n" +"Das Arbeitsverzeichnis wird daher jetzt neu geladen.\n" -#: lib/tools_dlg.tcl:45 -msgid "Tool Details" -msgstr "Einzelheiten des Werkzeugs" +#: lib/commit.tcl:374 +msgid "No changes to commit." +msgstr "Keine Änderungen, die committet werden können." -#: lib/tools_dlg.tcl:48 -msgid "Use '/' separators to create a submenu tree:" -msgstr "Benutzen Sie einen Schrägstrich »/«, um Untermenüs zu erstellen:" +#: lib/commit.tcl:394 +msgid "commit-tree failed:" +msgstr "commit-tree fehlgeschlagen:" -#: lib/tools_dlg.tcl:61 -msgid "Command:" -msgstr "Kommando:" +#: lib/commit.tcl:421 +msgid "update-ref failed:" +msgstr "update-ref fehlgeschlagen:" -#: lib/tools_dlg.tcl:74 -msgid "Show a dialog before running" -msgstr "Bestätigungsfrage vor Starten anzeigen" +#: lib/commit.tcl:514 +#, tcl-format +msgid "Created commit %s: %s" +msgstr "Commit %s erstellt: %s" -#: lib/tools_dlg.tcl:80 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "Benutzer nach Version fragen (setzt $REVISION)" +#: lib/branch_delete.tcl:16 +#, tcl-format +msgid "%s (%s): Delete Branch" +msgstr "%s (%s): Branch löschen" -#: lib/tools_dlg.tcl:85 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "Benutzer nach zusätzlichen Argumenten fragen (setzt $ARGS)" +#: lib/branch_delete.tcl:21 +msgid "Delete Local Branch" +msgstr "Lokalen Branch löschen" -#: lib/tools_dlg.tcl:92 -msgid "Don't show the command output window" -msgstr "Kein Ausgabefenster zeigen" +#: lib/branch_delete.tcl:39 +msgid "Local Branches" +msgstr "Lokale Branches" -#: lib/tools_dlg.tcl:97 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "Nur starten, wenn ein Vergleich gewählt ist ($FILENAME ist nicht leer)" +#: lib/branch_delete.tcl:51 +msgid "Delete Only If Merged Into" +msgstr "Nur löschen, wenn zusammengeführt nach" -#: lib/tools_dlg.tcl:121 -msgid "Please supply a name for the tool." -msgstr "Bitte geben Sie einen Werkzeugnamen an." +#: lib/branch_delete.tcl:103 +#, tcl-format +msgid "The following branches are not completely merged into %s:" +msgstr "Folgende Branches sind noch nicht mit »%s« zusammengeführt:" -#: lib/tools_dlg.tcl:129 +#: lib/branch_delete.tcl:131 #, tcl-format -msgid "Tool '%s' already exists." -msgstr "Werkzeug »%s« existiert bereits." +msgid " - %s:" +msgstr " - %s:" -#: lib/tools_dlg.tcl:151 +#: lib/branch_delete.tcl:141 #, tcl-format msgid "" -"Could not add tool:\n" +"Failed to delete branches:\n" "%s" msgstr "" -"Werkzeug konnte nicht hinzugefügt werden:\n" -"\n" +"Fehler beim Löschen der Branches:\n" "%s" -#: lib/tools_dlg.tcl:190 -msgid "Remove Tool" -msgstr "Werkzeug entfernen" +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Ungültiges Datum von Git: %s" + +#: lib/database.tcl:42 +msgid "Number of loose objects" +msgstr "Anzahl unverknüpfter Objekte" -#: lib/tools_dlg.tcl:196 -msgid "Remove Tool Commands" -msgstr "Werkzeugkommandos entfernen" +#: lib/database.tcl:43 +msgid "Disk space used by loose objects" +msgstr "Festplattenplatz von unverknüpften Objekten" -#: lib/tools_dlg.tcl:200 -msgid "Remove" -msgstr "Entfernen" +#: lib/database.tcl:44 +msgid "Number of packed objects" +msgstr "Anzahl komprimierter Objekte" -#: lib/tools_dlg.tcl:236 -msgid "(Blue denotes repository-local tools)" -msgstr "(Werkzeuge für lokales Archiv werden in Blau angezeigt)" +#: lib/database.tcl:45 +msgid "Number of packs" +msgstr "Anzahl Komprimierungseinheiten" -#: lib/tools_dlg.tcl:297 -#, tcl-format -msgid "Run Command: %s" -msgstr "Kommando aufrufen: %s" +#: lib/database.tcl:46 +msgid "Disk space used by packed objects" +msgstr "Festplattenplatz von komprimierten Objekten" -#: lib/tools_dlg.tcl:311 -msgid "Arguments" -msgstr "Argumente" +#: lib/database.tcl:47 +msgid "Packed objects waiting for pruning" +msgstr "Komprimierte Objekte, die zum Aufräumen vorgesehen sind" -#: lib/tools_dlg.tcl:348 -msgid "OK" -msgstr "Ok" +#: lib/database.tcl:48 +msgid "Garbage files" +msgstr "Dateien im Mülleimer" -#: lib/tools.tcl:75 +#: lib/database.tcl:66 #, tcl-format -msgid "Running %s requires a selected file." -msgstr "Um »%s« zu starten, muss eine Datei ausgewählt sein." +msgid "%s (%s): Database Statistics" +msgstr "%s (%s): Datenbankstatistik" -#: lib/tools.tcl:90 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "Wollen Sie %s wirklich starten?" +#: lib/database.tcl:72 +msgid "Compressing the object database" +msgstr "Objektdatenbank komprimieren" + +#: lib/database.tcl:83 +msgid "Verifying the object database with fsck-objects" +msgstr "Die Objektdatenbank durch »fsck-objects« überprüfen lassen" -#: lib/tools.tcl:110 +#: lib/database.tcl:107 #, tcl-format -msgid "Tool: %s" -msgstr "Werkzeug: %s" +msgid "" +"This repository currently has approximately %i loose objects.\n" +"\n" +"To maintain optimal performance it is strongly recommended that you compress " +"the database.\n" +"\n" +"Compress the database now?" +msgstr "" +"Dieses Repository enthält ungefähr %i nicht verknüpfte Objekte.\n" +"\n" +"Für eine optimale Performance wird empfohlen, die Datenbank des Repository " +"zu komprimieren.\n" +"\n" +"Soll die Datenbank jetzt komprimiert werden?" -#: lib/tools.tcl:111 +#: lib/error.tcl:20 #, tcl-format -msgid "Running: %s" -msgstr "Starten: %s" +msgid "%s: error" +msgstr "%s: Fehler" -#: lib/tools.tcl:149 +#: lib/error.tcl:36 #, tcl-format -msgid "Tool completed successfully: %s" -msgstr "Werkzeug erfolgreich abgeschlossen: %s" +msgid "%s: warning" +msgstr "%s: Warnung" -#: lib/tools.tcl:151 +#: lib/error.tcl:80 #, tcl-format -msgid "Tool failed: %s" -msgstr "Werkzeug fehlgeschlagen: %s" +msgid "%s hook failed:" +msgstr "%s hook fehlgeschlagen:" -#: lib/transport.tcl:7 +#: lib/error.tcl:96 +msgid "You must correct the above errors before committing." +msgstr "" +"Sie müssen die obigen Fehler zuerst beheben, bevor Sie committen können." + +#: lib/error.tcl:116 #, tcl-format -msgid "Fetching new changes from %s" -msgstr "Neue Änderungen von »%s« holen" +msgid "%s (%s): error" +msgstr "%s (%s): Fehler" -#: lib/transport.tcl:18 +#: lib/merge.tcl:13 +msgid "" +"Cannot merge while amending.\n" +"\n" +"You must finish amending this commit before starting any type of merge.\n" +msgstr "" +"Zusammenführen kann nicht gleichzeitig mit Nachbessern durchgeführt werden.\n" +"\n" +"Sie müssen zuerst den Nachbesserungs-Commit abschließen, bevor Sie " +"zusammenführen können.\n" + +#: lib/merge.tcl:27 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before a merge can be performed.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"Der letzte geladene Status stimmt nicht mehr mit dem Repository überein.\n" +"\n" +"Ein anderes Git-Programm hat das Repository seit dem letzten Laden " +"geändert. Vor einem Zusammenführen muss neu geladen werden.\n" +"\n" +"Es wird gleich neu geladen.\n" + +#: lib/merge.tcl:45 #, tcl-format -msgid "remote prune %s" -msgstr "Aufräumen von »%s«" +msgid "" +"You are in the middle of a conflicted merge.\n" +"\n" +"File %s has merge conflicts.\n" +"\n" +"You must resolve them, stage the file, and commit to complete the current " +"merge. Only then can you begin another merge.\n" +msgstr "" +"Zusammenführung mit Konflikten.\n" +"\n" +"Die Datei »%s« enthält Konflikte beim Zusammenführen.\n" +"\n" +"Sie müssen diese Konflikte per Hand auflösen. Anschließend müssen Sie die " +"Datei wieder bereitstellen und committen, um die Zusammenführung " +"abzuschließen. Erst danach kann eine neue Zusammenführung begonnen werden.\n" -#: lib/transport.tcl:19 +#: lib/merge.tcl:55 #, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "Übernahmezweige aufräumen und entfernen, die in »%s« gelöscht wurden" +msgid "" +"You are in the middle of a change.\n" +"\n" +"File %s is modified.\n" +"\n" +"You should complete the current commit before starting a merge. Doing so " +"will help you abort a failed merge, should the need arise.\n" +msgstr "" +"Es liegen Änderungen vor.\n" +"\n" +"Die Datei »%s« wurde geändert.\n" +"\n" +"Sie sollten zuerst den bereitgestellten Commit abschließen, bevor Sie eine " +"Zusammenführung beginnen. Mit dieser Reihenfolge können Sie mögliche " +"Konflikte beim Zusammenführen wesentlich einfacher beheben oder abbrechen.\n" -#: lib/transport.tcl:26 +#: lib/merge.tcl:108 #, tcl-format -msgid "Pushing changes to %s" -msgstr "Änderungen nach »%s« versenden" +msgid "%s of %s" +msgstr "%s von %s" -#: lib/transport.tcl:64 +#: lib/merge.tcl:126 #, tcl-format -msgid "Mirroring to %s" -msgstr "Spiegeln nach %s" +msgid "Merging %s and %s..." +msgstr "Zusammenführen von %s und %s..." + +#: lib/merge.tcl:137 +msgid "Merge completed successfully." +msgstr "Zusammenführen erfolgreich abgeschlossen." -#: lib/transport.tcl:82 +#: lib/merge.tcl:139 +msgid "Merge failed. Conflict resolution is required." +msgstr "Zusammenführen fehlgeschlagen. Konfliktauflösung ist notwendig." + +#: lib/merge.tcl:156 #, tcl-format -msgid "Pushing %s %s to %s" -msgstr "%s %s nach %s versenden" +msgid "%s (%s): Merge" +msgstr "%s (%s): Zusammenführen" -#: lib/transport.tcl:100 -msgid "Push Branches" -msgstr "Zweige versenden" +#: lib/merge.tcl:164 +#, tcl-format +msgid "Merge Into %s" +msgstr "Zusammenführen in »%s«" -#: lib/transport.tcl:114 -msgid "Source Branches" -msgstr "Lokale Zweige" +#: lib/merge.tcl:183 +msgid "Revision To Merge" +msgstr "Zusammenzuführende Version" -#: lib/transport.tcl:131 -msgid "Destination Repository" -msgstr "Ziel-Projektarchiv" +#: lib/merge.tcl:218 +msgid "" +"Cannot abort while amending.\n" +"\n" +"You must finish amending this commit.\n" +msgstr "" +"Abbruch der Nachbesserung ist nicht möglich.\n" +"\n" +"Sie müssen die Nachbesserung diese Commits abschließen.\n" -#: lib/transport.tcl:169 -msgid "Transfer Options" -msgstr "Netzwerk-Einstellungen" +#: lib/merge.tcl:228 +msgid "" +"Abort merge?\n" +"\n" +"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with aborting the current merge?" +msgstr "" +"Zusammenführen abbrechen?\n" +"\n" +"Wenn Sie abbrechen, gehen alle noch nicht committeten Änderungen verloren.\n" +"\n" +"Zusammenführen jetzt abbrechen?" -#: lib/transport.tcl:171 -msgid "Force overwrite existing branch (may discard changes)" +#: lib/merge.tcl:234 +msgid "" +"Reset changes?\n" +"\n" +"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with resetting the current changes?" msgstr "" -"Überschreiben von existierenden Zweigen erzwingen (könnte Änderungen löschen)" +"Änderungen verwerfen?\n" +"\n" +"Alle noch nicht committeten Änderungen würden verloren gehen.\n" +"\n" +"Änderungen jetzt verwerfen?" -#: lib/transport.tcl:175 -msgid "Use thin pack (for slow network connections)" -msgstr "Kompaktes Datenformat benutzen (für langsame Netzverbindungen)" +#: lib/merge.tcl:246 +msgid "Aborting" +msgstr "Abbruch" -#: lib/transport.tcl:179 -msgid "Include tags" -msgstr "Mit Markierungen übertragen" +#: lib/merge.tcl:247 +msgid "files reset" +msgstr "Dateien zurückgesetzt" + +#: lib/merge.tcl:277 +msgid "Abort failed." +msgstr "Abbruch fehlgeschlagen." + +#: lib/merge.tcl:279 +msgid "Abort completed. Ready." +msgstr "Abbruch durchgeführt. Bereit." diff --git a/po/fr.po b/po/fr.po index 0aff186..878df65 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1646,7 +1646,7 @@ msgstr "Dépôt Git (sous projet)" #: lib/diff.tcl:222 msgid "* Binary file (not showing content)." -msgstr "* Fichier binaire (pas d'apperçu du contenu)." +msgstr "* Fichier binaire (pas d'aperçu du contenu)." #: lib/diff.tcl:227 #, tcl-format diff --git a/po/git-gui.pot b/po/git-gui.pot deleted file mode 100644 index 0c94f9c..0000000 --- a/po/git-gui.pot +++ /dev/null @@ -1,2394 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-26 15:47-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: git-gui.sh:41 git-gui.sh:793 git-gui.sh:807 git-gui.sh:820 git-gui.sh:903 -#: git-gui.sh:922 -msgid "git-gui: fatal error" -msgstr "" - -#: git-gui.sh:743 -#, tcl-format -msgid "Invalid font specified in %s:" -msgstr "" - -#: git-gui.sh:779 -msgid "Main Font" -msgstr "" - -#: git-gui.sh:780 -msgid "Diff/Console Font" -msgstr "" - -#: git-gui.sh:794 -msgid "Cannot find git in PATH." -msgstr "" - -#: git-gui.sh:821 -msgid "Cannot parse Git version string:" -msgstr "" - -#: git-gui.sh:839 -#, tcl-format -msgid "" -"Git version cannot be determined.\n" -"\n" -"%s claims it is version '%s'.\n" -"\n" -"%s requires at least Git 1.5.0 or later.\n" -"\n" -"Assume '%s' is version 1.5.0?\n" -msgstr "" - -#: git-gui.sh:1128 -msgid "Git directory not found:" -msgstr "" - -#: git-gui.sh:1146 -msgid "Cannot move to top of working directory:" -msgstr "" - -#: git-gui.sh:1154 -msgid "Cannot use bare repository:" -msgstr "" - -#: git-gui.sh:1162 -msgid "No working directory" -msgstr "" - -#: git-gui.sh:1334 lib/checkout_op.tcl:306 -msgid "Refreshing file status..." -msgstr "" - -#: git-gui.sh:1390 -msgid "Scanning for modified files ..." -msgstr "" - -#: git-gui.sh:1454 -msgid "Calling prepare-commit-msg hook..." -msgstr "" - -#: git-gui.sh:1471 -msgid "Commit declined by prepare-commit-msg hook." -msgstr "" - -#: git-gui.sh:1629 lib/browser.tcl:246 -msgid "Ready." -msgstr "" - -#: git-gui.sh:1787 -#, tcl-format -msgid "Displaying only %s of %s files." -msgstr "" - -#: git-gui.sh:1913 -msgid "Unmodified" -msgstr "" - -#: git-gui.sh:1915 -msgid "Modified, not staged" -msgstr "" - -#: git-gui.sh:1916 git-gui.sh:1924 -msgid "Staged for commit" -msgstr "" - -#: git-gui.sh:1917 git-gui.sh:1925 -msgid "Portions staged for commit" -msgstr "" - -#: git-gui.sh:1918 git-gui.sh:1926 -msgid "Staged for commit, missing" -msgstr "" - -#: git-gui.sh:1920 -msgid "File type changed, not staged" -msgstr "" - -#: git-gui.sh:1921 -msgid "File type changed, staged" -msgstr "" - -#: git-gui.sh:1923 -msgid "Untracked, not staged" -msgstr "" - -#: git-gui.sh:1928 -msgid "Missing" -msgstr "" - -#: git-gui.sh:1929 -msgid "Staged for removal" -msgstr "" - -#: git-gui.sh:1930 -msgid "Staged for removal, still present" -msgstr "" - -#: git-gui.sh:1932 git-gui.sh:1933 git-gui.sh:1934 git-gui.sh:1935 -#: git-gui.sh:1936 git-gui.sh:1937 -msgid "Requires merge resolution" -msgstr "" - -#: git-gui.sh:1972 -msgid "Starting gitk... please wait..." -msgstr "" - -#: git-gui.sh:1984 -msgid "Couldn't find gitk in PATH" -msgstr "" - -#: git-gui.sh:2043 -msgid "Couldn't find git gui in PATH" -msgstr "" - -#: git-gui.sh:2455 lib/choose_repository.tcl:36 -msgid "Repository" -msgstr "" - -#: git-gui.sh:2456 -msgid "Edit" -msgstr "" - -#: git-gui.sh:2458 lib/choose_rev.tcl:561 -msgid "Branch" -msgstr "" - -#: git-gui.sh:2461 lib/choose_rev.tcl:548 -msgid "Commit@@noun" -msgstr "" - -#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168 -msgid "Merge" -msgstr "" - -#: git-gui.sh:2465 lib/choose_rev.tcl:557 -msgid "Remote" -msgstr "" - -#: git-gui.sh:2468 -msgid "Tools" -msgstr "" - -#: git-gui.sh:2477 -msgid "Explore Working Copy" -msgstr "" - -#: git-gui.sh:2483 -msgid "Browse Current Branch's Files" -msgstr "" - -#: git-gui.sh:2487 -msgid "Browse Branch Files..." -msgstr "" - -#: git-gui.sh:2492 -msgid "Visualize Current Branch's History" -msgstr "" - -#: git-gui.sh:2496 -msgid "Visualize All Branch History" -msgstr "" - -#: git-gui.sh:2503 -#, tcl-format -msgid "Browse %s's Files" -msgstr "" - -#: git-gui.sh:2505 -#, tcl-format -msgid "Visualize %s's History" -msgstr "" - -#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67 -msgid "Database Statistics" -msgstr "" - -#: git-gui.sh:2513 lib/database.tcl:34 -msgid "Compress Database" -msgstr "" - -#: git-gui.sh:2516 -msgid "Verify Database" -msgstr "" - -#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8 -#: lib/shortcut.tcl:40 lib/shortcut.tcl:72 -msgid "Create Desktop Icon" -msgstr "" - -#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191 -msgid "Quit" -msgstr "" - -#: git-gui.sh:2547 -msgid "Undo" -msgstr "" - -#: git-gui.sh:2550 -msgid "Redo" -msgstr "" - -#: git-gui.sh:2554 git-gui.sh:3109 -msgid "Cut" -msgstr "" - -#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259 -#: lib/console.tcl:69 -msgid "Copy" -msgstr "" - -#: git-gui.sh:2560 git-gui.sh:3115 -msgid "Paste" -msgstr "" - -#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26 -#: lib/remote_branch_delete.tcl:38 -msgid "Delete" -msgstr "" - -#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71 -msgid "Select All" -msgstr "" - -#: git-gui.sh:2576 -msgid "Create..." -msgstr "" - -#: git-gui.sh:2582 -msgid "Checkout..." -msgstr "" - -#: git-gui.sh:2588 -msgid "Rename..." -msgstr "" - -#: git-gui.sh:2593 -msgid "Delete..." -msgstr "" - -#: git-gui.sh:2598 -msgid "Reset..." -msgstr "" - -#: git-gui.sh:2608 -msgid "Done" -msgstr "" - -#: git-gui.sh:2610 -msgid "Commit@@verb" -msgstr "" - -#: git-gui.sh:2619 git-gui.sh:3050 -msgid "New Commit" -msgstr "" - -#: git-gui.sh:2627 git-gui.sh:3057 -msgid "Amend Last Commit" -msgstr "" - -#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99 -msgid "Rescan" -msgstr "" - -#: git-gui.sh:2643 -msgid "Stage To Commit" -msgstr "" - -#: git-gui.sh:2649 -msgid "Stage Changed Files To Commit" -msgstr "" - -#: git-gui.sh:2655 -msgid "Unstage From Commit" -msgstr "" - -#: git-gui.sh:2661 lib/index.tcl:412 -msgid "Revert Changes" -msgstr "" - -#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341 -msgid "Show Less Context" -msgstr "" - -#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345 -msgid "Show More Context" -msgstr "" - -#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133 -msgid "Sign Off" -msgstr "" - -#: git-gui.sh:2696 -msgid "Local Merge..." -msgstr "" - -#: git-gui.sh:2701 -msgid "Abort Merge..." -msgstr "" - -#: git-gui.sh:2713 git-gui.sh:2741 -msgid "Add..." -msgstr "" - -#: git-gui.sh:2717 -msgid "Push..." -msgstr "" - -#: git-gui.sh:2721 -msgid "Delete Branch..." -msgstr "" - -#: git-gui.sh:2731 git-gui.sh:3292 -msgid "Options..." -msgstr "" - -#: git-gui.sh:2742 -msgid "Remove..." -msgstr "" - -#: git-gui.sh:2751 lib/choose_repository.tcl:50 -msgid "Help" -msgstr "" - -#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14 -#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53 -#, tcl-format -msgid "About %s" -msgstr "" - -#: git-gui.sh:2783 -msgid "Online Documentation" -msgstr "" - -#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56 -msgid "Show SSH Key" -msgstr "" - -#: git-gui.sh:2893 -#, tcl-format -msgid "fatal: cannot stat path %s: No such file or directory" -msgstr "" - -#: git-gui.sh:2926 -msgid "Current Branch:" -msgstr "" - -#: git-gui.sh:2947 -msgid "Staged Changes (Will Commit)" -msgstr "" - -#: git-gui.sh:2967 -msgid "Unstaged Changes" -msgstr "" - -#: git-gui.sh:3017 -msgid "Stage Changed" -msgstr "" - -#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193 -msgid "Push" -msgstr "" - -#: git-gui.sh:3071 -msgid "Initial Commit Message:" -msgstr "" - -#: git-gui.sh:3072 -msgid "Amended Commit Message:" -msgstr "" - -#: git-gui.sh:3073 -msgid "Amended Initial Commit Message:" -msgstr "" - -#: git-gui.sh:3074 -msgid "Amended Merge Commit Message:" -msgstr "" - -#: git-gui.sh:3075 -msgid "Merge Commit Message:" -msgstr "" - -#: git-gui.sh:3076 -msgid "Commit Message:" -msgstr "" - -#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73 -msgid "Copy All" -msgstr "" - -#: git-gui.sh:3149 lib/blame.tcl:104 -msgid "File:" -msgstr "" - -#: git-gui.sh:3255 -msgid "Refresh" -msgstr "" - -#: git-gui.sh:3276 -msgid "Decrease Font Size" -msgstr "" - -#: git-gui.sh:3280 -msgid "Increase Font Size" -msgstr "" - -#: git-gui.sh:3288 lib/blame.tcl:281 -msgid "Encoding" -msgstr "" - -#: git-gui.sh:3299 -msgid "Apply/Reverse Hunk" -msgstr "" - -#: git-gui.sh:3304 -msgid "Apply/Reverse Line" -msgstr "" - -#: git-gui.sh:3323 -msgid "Run Merge Tool" -msgstr "" - -#: git-gui.sh:3328 -msgid "Use Remote Version" -msgstr "" - -#: git-gui.sh:3332 -msgid "Use Local Version" -msgstr "" - -#: git-gui.sh:3336 -msgid "Revert To Base" -msgstr "" - -#: git-gui.sh:3354 -msgid "Visualize These Changes In The Submodule" -msgstr "" - -#: git-gui.sh:3358 -msgid "Visualize Current Branch History In The Submodule" -msgstr "" - -#: git-gui.sh:3362 -msgid "Visualize All Branch History In The Submodule" -msgstr "" - -#: git-gui.sh:3367 -msgid "Start git gui In The Submodule" -msgstr "" - -#: git-gui.sh:3389 -msgid "Unstage Hunk From Commit" -msgstr "" - -#: git-gui.sh:3391 -msgid "Unstage Lines From Commit" -msgstr "" - -#: git-gui.sh:3393 -msgid "Unstage Line From Commit" -msgstr "" - -#: git-gui.sh:3396 -msgid "Stage Hunk For Commit" -msgstr "" - -#: git-gui.sh:3398 -msgid "Stage Lines For Commit" -msgstr "" - -#: git-gui.sh:3400 -msgid "Stage Line For Commit" -msgstr "" - -#: git-gui.sh:3424 -msgid "Initializing..." -msgstr "" - -#: git-gui.sh:3541 -#, tcl-format -msgid "" -"Possible environment issues exist.\n" -"\n" -"The following environment variables are probably\n" -"going to be ignored by any Git subprocess run\n" -"by %s:\n" -"\n" -msgstr "" - -#: git-gui.sh:3570 -msgid "" -"\n" -"This is due to a known issue with the\n" -"Tcl binary distributed by Cygwin." -msgstr "" - -#: git-gui.sh:3575 -#, tcl-format -msgid "" -"\n" -"\n" -"A good replacement for %s\n" -"is placing values for the user.name and\n" -"user.email settings into your personal\n" -"~/.gitconfig file.\n" -msgstr "" - -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "" - -#: lib/blame.tcl:72 -msgid "File Viewer" -msgstr "" - -#: lib/blame.tcl:78 -msgid "Commit:" -msgstr "" - -#: lib/blame.tcl:271 -msgid "Copy Commit" -msgstr "" - -#: lib/blame.tcl:275 -msgid "Find Text..." -msgstr "" - -#: lib/blame.tcl:284 -msgid "Do Full Copy Detection" -msgstr "" - -#: lib/blame.tcl:288 -msgid "Show History Context" -msgstr "" - -#: lib/blame.tcl:291 -msgid "Blame Parent Commit" -msgstr "" - -#: lib/blame.tcl:450 -#, tcl-format -msgid "Reading %s..." -msgstr "" - -#: lib/blame.tcl:557 -msgid "Loading copy/move tracking annotations..." -msgstr "" - -#: lib/blame.tcl:577 -msgid "lines annotated" -msgstr "" - -#: lib/blame.tcl:769 -msgid "Loading original location annotations..." -msgstr "" - -#: lib/blame.tcl:772 -msgid "Annotation complete." -msgstr "" - -#: lib/blame.tcl:802 -msgid "Busy" -msgstr "" - -#: lib/blame.tcl:803 -msgid "Annotation process is already running." -msgstr "" - -#: lib/blame.tcl:842 -msgid "Running thorough copy detection..." -msgstr "" - -#: lib/blame.tcl:910 -msgid "Loading annotation..." -msgstr "" - -#: lib/blame.tcl:963 -msgid "Author:" -msgstr "" - -#: lib/blame.tcl:967 -msgid "Committer:" -msgstr "" - -#: lib/blame.tcl:972 -msgid "Original File:" -msgstr "" - -#: lib/blame.tcl:1020 -msgid "Cannot find HEAD commit:" -msgstr "" - -#: lib/blame.tcl:1075 -msgid "Cannot find parent commit:" -msgstr "" - -#: lib/blame.tcl:1090 -msgid "Unable to display parent" -msgstr "" - -#: lib/blame.tcl:1091 lib/diff.tcl:320 -msgid "Error loading diff:" -msgstr "" - -#: lib/blame.tcl:1231 -msgid "Originally By:" -msgstr "" - -#: lib/blame.tcl:1237 -msgid "In File:" -msgstr "" - -#: lib/blame.tcl:1242 -msgid "Copied Or Moved Here By:" -msgstr "" - -#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19 -msgid "Checkout Branch" -msgstr "" - -#: lib/branch_checkout.tcl:23 -msgid "Checkout" -msgstr "" - -#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35 -#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282 -#: lib/checkout_op.tcl:579 lib/choose_font.tcl:43 lib/merge.tcl:172 -#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42 -#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352 -#: lib/transport.tcl:108 -msgid "Cancel" -msgstr "" - -#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328 -msgid "Revision" -msgstr "" - -#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280 -msgid "Options" -msgstr "" - -#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "" - -#: lib/branch_checkout.tcl:44 -msgid "Detach From Local Branch" -msgstr "" - -#: lib/branch_create.tcl:22 -msgid "Create Branch" -msgstr "" - -#: lib/branch_create.tcl:27 -msgid "Create New Branch" -msgstr "" - -#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381 -msgid "Create" -msgstr "" - -#: lib/branch_create.tcl:40 -msgid "Branch Name" -msgstr "" - -#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50 -msgid "Name:" -msgstr "" - -#: lib/branch_create.tcl:58 -msgid "Match Tracking Branch Name" -msgstr "" - -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "" - -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "" - -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "" - -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "" - -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 -msgid "Reset" -msgstr "" - -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "" - -#: lib/branch_create.tcl:131 -msgid "Please select a tracking branch." -msgstr "" - -#: lib/branch_create.tcl:140 -#, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "" - -#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86 -msgid "Please supply a branch name." -msgstr "" - -#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 -#, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "" - -#: lib/branch_delete.tcl:15 -msgid "Delete Branch" -msgstr "" - -#: lib/branch_delete.tcl:20 -msgid "Delete Local Branch" -msgstr "" - -#: lib/branch_delete.tcl:37 -msgid "Local Branches" -msgstr "" - -#: lib/branch_delete.tcl:52 -msgid "Delete Only If Merged Into" -msgstr "" - -#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119 -msgid "Always (Do not perform merge checks)" -msgstr "" - -#: lib/branch_delete.tcl:103 -#, tcl-format -msgid "The following branches are not completely merged into %s:" -msgstr "" - -#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217 -msgid "" -"Recovering deleted branches is difficult.\n" -"\n" -"Delete the selected branches?" -msgstr "" - -#: lib/branch_delete.tcl:141 -#, tcl-format -msgid "" -"Failed to delete branches:\n" -"%s" -msgstr "" - -#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22 -msgid "Rename Branch" -msgstr "" - -#: lib/branch_rename.tcl:26 -msgid "Rename" -msgstr "" - -#: lib/branch_rename.tcl:36 -msgid "Branch:" -msgstr "" - -#: lib/branch_rename.tcl:39 -msgid "New Name:" -msgstr "" - -#: lib/branch_rename.tcl:75 -msgid "Please select a branch to rename." -msgstr "" - -#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202 -#, tcl-format -msgid "Branch '%s' already exists." -msgstr "" - -#: lib/branch_rename.tcl:117 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "" - -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "" - -#: lib/browser.tcl:26 -msgid "File Browser" -msgstr "" - -#: lib/browser.tcl:126 lib/browser.tcl:143 -#, tcl-format -msgid "Loading %s..." -msgstr "" - -#: lib/browser.tcl:187 -msgid "[Up To Parent]" -msgstr "" - -#: lib/browser.tcl:267 lib/browser.tcl:273 -msgid "Browse Branch Files" -msgstr "" - -#: lib/browser.tcl:278 lib/choose_repository.tcl:398 -#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497 -#: lib/choose_repository.tcl:1028 -msgid "Browse" -msgstr "" - -#: lib/checkout_op.tcl:85 -#, tcl-format -msgid "Fetching %s from %s" -msgstr "" - -#: lib/checkout_op.tcl:133 -#, tcl-format -msgid "fatal: Cannot resolve %s" -msgstr "" - -#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31 -#: lib/sshkey.tcl:53 -msgid "Close" -msgstr "" - -#: lib/checkout_op.tcl:175 -#, tcl-format -msgid "Branch '%s' does not exist." -msgstr "" - -#: lib/checkout_op.tcl:194 -#, tcl-format -msgid "Failed to configure simplified git-pull for '%s'." -msgstr "" - -#: lib/checkout_op.tcl:229 -#, tcl-format -msgid "" -"Branch '%s' already exists.\n" -"\n" -"It cannot fast-forward to %s.\n" -"A merge is required." -msgstr "" - -#: lib/checkout_op.tcl:243 -#, tcl-format -msgid "Merge strategy '%s' not supported." -msgstr "" - -#: lib/checkout_op.tcl:262 -#, tcl-format -msgid "Failed to update '%s'." -msgstr "" - -#: lib/checkout_op.tcl:274 -msgid "Staging area (index) is already locked." -msgstr "" - -#: lib/checkout_op.tcl:289 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before the current branch can be changed.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" - -#: lib/checkout_op.tcl:345 -#, tcl-format -msgid "Updating working directory to '%s'..." -msgstr "" - -#: lib/checkout_op.tcl:346 -msgid "files checked out" -msgstr "" - -#: lib/checkout_op.tcl:376 -#, tcl-format -msgid "Aborted checkout of '%s' (file level merging is required)." -msgstr "" - -#: lib/checkout_op.tcl:377 -msgid "File level merge required." -msgstr "" - -#: lib/checkout_op.tcl:381 -#, tcl-format -msgid "Staying on branch '%s'." -msgstr "" - -#: lib/checkout_op.tcl:452 -msgid "" -"You are no longer on a local branch.\n" -"\n" -"If you wanted to be on a branch, create one now starting from 'This Detached " -"Checkout'." -msgstr "" - -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 -#, tcl-format -msgid "Checked out '%s'." -msgstr "" - -#: lib/checkout_op.tcl:535 -#, tcl-format -msgid "Resetting '%s' to '%s' will lose the following commits:" -msgstr "" - -#: lib/checkout_op.tcl:557 -msgid "Recovering lost commits may not be easy." -msgstr "" - -#: lib/checkout_op.tcl:562 -#, tcl-format -msgid "Reset '%s'?" -msgstr "" - -#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343 -msgid "Visualize" -msgstr "" - -#: lib/checkout_op.tcl:635 -#, tcl-format -msgid "" -"Failed to set current branch.\n" -"\n" -"This working directory is only partially switched. We successfully updated " -"your files, but failed to update an internal Git file.\n" -"\n" -"This should not have occurred. %s will now close and give up." -msgstr "" - -#: lib/choose_font.tcl:39 -msgid "Select" -msgstr "" - -#: lib/choose_font.tcl:53 -msgid "Font Family" -msgstr "" - -#: lib/choose_font.tcl:74 -msgid "Font Size" -msgstr "" - -#: lib/choose_font.tcl:91 -msgid "Font Example" -msgstr "" - -#: lib/choose_font.tcl:103 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "" - -#: lib/choose_repository.tcl:28 -msgid "Git Gui" -msgstr "" - -#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386 -msgid "Create New Repository" -msgstr "" - -#: lib/choose_repository.tcl:93 -msgid "New..." -msgstr "" - -#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471 -msgid "Clone Existing Repository" -msgstr "" - -#: lib/choose_repository.tcl:106 -msgid "Clone..." -msgstr "" - -#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016 -msgid "Open Existing Repository" -msgstr "" - -#: lib/choose_repository.tcl:119 -msgid "Open..." -msgstr "" - -#: lib/choose_repository.tcl:132 -msgid "Recent Repositories" -msgstr "" - -#: lib/choose_repository.tcl:138 -msgid "Open Recent Repository:" -msgstr "" - -#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313 -#: lib/choose_repository.tcl:320 -#, tcl-format -msgid "Failed to create repository %s:" -msgstr "" - -#: lib/choose_repository.tcl:391 -msgid "Directory:" -msgstr "" - -#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550 -#: lib/choose_repository.tcl:1052 -msgid "Git Repository" -msgstr "" - -#: lib/choose_repository.tcl:448 -#, tcl-format -msgid "Directory %s already exists." -msgstr "" - -#: lib/choose_repository.tcl:452 -#, tcl-format -msgid "File %s already exists." -msgstr "" - -#: lib/choose_repository.tcl:466 -msgid "Clone" -msgstr "" - -#: lib/choose_repository.tcl:479 -msgid "Source Location:" -msgstr "" - -#: lib/choose_repository.tcl:490 -msgid "Target Directory:" -msgstr "" - -#: lib/choose_repository.tcl:502 -msgid "Clone Type:" -msgstr "" - -#: lib/choose_repository.tcl:508 -msgid "Standard (Fast, Semi-Redundant, Hardlinks)" -msgstr "" - -#: lib/choose_repository.tcl:514 -msgid "Full Copy (Slower, Redundant Backup)" -msgstr "" - -#: lib/choose_repository.tcl:520 -msgid "Shared (Fastest, Not Recommended, No Backup)" -msgstr "" - -#: lib/choose_repository.tcl:556 lib/choose_repository.tcl:603 -#: lib/choose_repository.tcl:749 lib/choose_repository.tcl:819 -#: lib/choose_repository.tcl:1058 lib/choose_repository.tcl:1066 -#, tcl-format -msgid "Not a Git repository: %s" -msgstr "" - -#: lib/choose_repository.tcl:592 -msgid "Standard only available for local repository." -msgstr "" - -#: lib/choose_repository.tcl:596 -msgid "Shared only available for local repository." -msgstr "" - -#: lib/choose_repository.tcl:617 -#, tcl-format -msgid "Location %s already exists." -msgstr "" - -#: lib/choose_repository.tcl:628 -msgid "Failed to configure origin" -msgstr "" - -#: lib/choose_repository.tcl:640 -msgid "Counting objects" -msgstr "" - -#: lib/choose_repository.tcl:641 -msgid "buckets" -msgstr "" - -#: lib/choose_repository.tcl:665 -#, tcl-format -msgid "Unable to copy objects/info/alternates: %s" -msgstr "" - -#: lib/choose_repository.tcl:701 -#, tcl-format -msgid "Nothing to clone from %s." -msgstr "" - -#: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917 -#: lib/choose_repository.tcl:929 -msgid "The 'master' branch has not been initialized." -msgstr "" - -#: lib/choose_repository.tcl:716 -msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "" - -#: lib/choose_repository.tcl:728 -#, tcl-format -msgid "Cloning from %s" -msgstr "" - -#: lib/choose_repository.tcl:759 -msgid "Copying objects" -msgstr "" - -#: lib/choose_repository.tcl:760 -msgid "KiB" -msgstr "" - -#: lib/choose_repository.tcl:784 -#, tcl-format -msgid "Unable to copy object: %s" -msgstr "" - -#: lib/choose_repository.tcl:794 -msgid "Linking objects" -msgstr "" - -#: lib/choose_repository.tcl:795 -msgid "objects" -msgstr "" - -#: lib/choose_repository.tcl:803 -#, tcl-format -msgid "Unable to hardlink object: %s" -msgstr "" - -#: lib/choose_repository.tcl:858 -msgid "Cannot fetch branches and objects. See console output for details." -msgstr "" - -#: lib/choose_repository.tcl:869 -msgid "Cannot fetch tags. See console output for details." -msgstr "" - -#: lib/choose_repository.tcl:893 -msgid "Cannot determine HEAD. See console output for details." -msgstr "" - -#: lib/choose_repository.tcl:902 -#, tcl-format -msgid "Unable to cleanup %s" -msgstr "" - -#: lib/choose_repository.tcl:908 -msgid "Clone failed." -msgstr "" - -#: lib/choose_repository.tcl:915 -msgid "No default branch obtained." -msgstr "" - -#: lib/choose_repository.tcl:926 -#, tcl-format -msgid "Cannot resolve %s as a commit." -msgstr "" - -#: lib/choose_repository.tcl:938 -msgid "Creating working directory" -msgstr "" - -#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130 -#: lib/index.tcl:198 -msgid "files" -msgstr "" - -#: lib/choose_repository.tcl:968 -msgid "Initial file checkout failed." -msgstr "" - -#: lib/choose_repository.tcl:1011 -msgid "Open" -msgstr "" - -#: lib/choose_repository.tcl:1021 -msgid "Repository:" -msgstr "" - -#: lib/choose_repository.tcl:1072 -#, tcl-format -msgid "Failed to open repository %s:" -msgstr "" - -#: lib/choose_rev.tcl:53 -msgid "This Detached Checkout" -msgstr "" - -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "" - -#: lib/choose_rev.tcl:74 -msgid "Local Branch" -msgstr "" - -#: lib/choose_rev.tcl:79 -msgid "Tracking Branch" -msgstr "" - -#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 -msgid "Tag" -msgstr "" - -#: lib/choose_rev.tcl:317 -#, tcl-format -msgid "Invalid revision: %s" -msgstr "" - -#: lib/choose_rev.tcl:338 -msgid "No revision selected." -msgstr "" - -#: lib/choose_rev.tcl:346 -msgid "Revision expression is empty." -msgstr "" - -#: lib/choose_rev.tcl:531 -msgid "Updated" -msgstr "" - -#: lib/choose_rev.tcl:559 -msgid "URL" -msgstr "" - -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" - -#: lib/commit.tcl:18 -msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" -msgstr "" - -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "" - -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "" - -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "" - -#: lib/commit.tcl:129 -#, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "" - -#: lib/commit.tcl:149 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" - -#: lib/commit.tcl:172 -#, tcl-format -msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" -msgstr "" - -#: lib/commit.tcl:180 -#, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "" - -#: lib/commit.tcl:188 -msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" -msgstr "" - -#: lib/commit.tcl:203 -msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" -msgstr "" - -#: lib/commit.tcl:234 -msgid "Calling pre-commit hook..." -msgstr "" - -#: lib/commit.tcl:249 -msgid "Commit declined by pre-commit hook." -msgstr "" - -#: lib/commit.tcl:272 -msgid "Calling commit-msg hook..." -msgstr "" - -#: lib/commit.tcl:287 -msgid "Commit declined by commit-msg hook." -msgstr "" - -#: lib/commit.tcl:300 -msgid "Committing changes..." -msgstr "" - -#: lib/commit.tcl:316 -msgid "write-tree failed:" -msgstr "" - -#: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382 -msgid "Commit failed." -msgstr "" - -#: lib/commit.tcl:334 -#, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "" - -#: lib/commit.tcl:339 -msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" -msgstr "" - -#: lib/commit.tcl:346 -msgid "No changes to commit." -msgstr "" - -#: lib/commit.tcl:360 -msgid "commit-tree failed:" -msgstr "" - -#: lib/commit.tcl:381 -msgid "update-ref failed:" -msgstr "" - -#: lib/commit.tcl:469 -#, tcl-format -msgid "Created commit %s: %s" -msgstr "" - -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "" - -#: lib/console.tcl:186 -msgid "Success" -msgstr "" - -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "" - -#: lib/database.tcl:43 -msgid "Number of loose objects" -msgstr "" - -#: lib/database.tcl:44 -msgid "Disk space used by loose objects" -msgstr "" - -#: lib/database.tcl:45 -msgid "Number of packed objects" -msgstr "" - -#: lib/database.tcl:46 -msgid "Number of packs" -msgstr "" - -#: lib/database.tcl:47 -msgid "Disk space used by packed objects" -msgstr "" - -#: lib/database.tcl:48 -msgid "Packed objects waiting for pruning" -msgstr "" - -#: lib/database.tcl:49 -msgid "Garbage files" -msgstr "" - -#: lib/database.tcl:72 -msgid "Compressing the object database" -msgstr "" - -#: lib/database.tcl:83 -msgid "Verifying the object database with fsck-objects" -msgstr "" - -#: lib/database.tcl:107 -#, tcl-format -msgid "" -"This repository currently has approximately %i loose objects.\n" -"\n" -"To maintain optimal performance it is strongly recommended that you compress " -"the database.\n" -"\n" -"Compress the database now?" -msgstr "" - -#: lib/date.tcl:25 -#, tcl-format -msgid "Invalid date from Git: %s" -msgstr "" - -#: lib/diff.tcl:64 -#, tcl-format -msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" -"\n" -"The modification date of this file was updated by another application, but " -"the content within the file was not changed.\n" -"\n" -"A rescan will be automatically started to find other files which may have " -"the same state." -msgstr "" - -#: lib/diff.tcl:104 -#, tcl-format -msgid "Loading diff of %s..." -msgstr "" - -#: lib/diff.tcl:125 -msgid "" -"LOCAL: deleted\n" -"REMOTE:\n" -msgstr "" - -#: lib/diff.tcl:130 -msgid "" -"REMOTE: deleted\n" -"LOCAL:\n" -msgstr "" - -#: lib/diff.tcl:137 -msgid "LOCAL:\n" -msgstr "" - -#: lib/diff.tcl:140 -msgid "REMOTE:\n" -msgstr "" - -#: lib/diff.tcl:202 lib/diff.tcl:319 -#, tcl-format -msgid "Unable to display %s" -msgstr "" - -#: lib/diff.tcl:203 -msgid "Error loading file:" -msgstr "" - -#: lib/diff.tcl:210 -msgid "Git Repository (subproject)" -msgstr "" - -#: lib/diff.tcl:222 -msgid "* Binary file (not showing content)." -msgstr "" - -#: lib/diff.tcl:227 -#, tcl-format -msgid "" -"* Untracked file is %d bytes.\n" -"* Showing only first %d bytes.\n" -msgstr "" - -#: lib/diff.tcl:233 -#, tcl-format -msgid "" -"\n" -"* Untracked file clipped here by %s.\n" -"* To see the entire file, use an external editor.\n" -msgstr "" - -#: lib/diff.tcl:482 -msgid "Failed to unstage selected hunk." -msgstr "" - -#: lib/diff.tcl:489 -msgid "Failed to stage selected hunk." -msgstr "" - -#: lib/diff.tcl:568 -msgid "Failed to unstage selected line." -msgstr "" - -#: lib/diff.tcl:576 -msgid "Failed to stage selected line." -msgstr "" - -#: lib/encoding.tcl:443 -msgid "Default" -msgstr "" - -#: lib/encoding.tcl:448 -#, tcl-format -msgid "System (%s)" -msgstr "" - -#: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "" - -#: lib/error.tcl:20 lib/error.tcl:114 -msgid "error" -msgstr "" - -#: lib/error.tcl:36 -msgid "warning" -msgstr "" - -#: lib/error.tcl:94 -msgid "You must correct the above errors before committing." -msgstr "" - -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "" - -#: lib/index.tcl:15 -msgid "Index Error" -msgstr "" - -#: lib/index.tcl:17 -msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." -msgstr "" - -#: lib/index.tcl:28 -msgid "Continue" -msgstr "" - -#: lib/index.tcl:31 -msgid "Unlock Index" -msgstr "" - -#: lib/index.tcl:289 -#, tcl-format -msgid "Unstaging %s from commit" -msgstr "" - -#: lib/index.tcl:328 -msgid "Ready to commit." -msgstr "" - -#: lib/index.tcl:341 -#, tcl-format -msgid "Adding %s" -msgstr "" - -#: lib/index.tcl:398 -#, tcl-format -msgid "Revert changes in file %s?" -msgstr "" - -#: lib/index.tcl:400 -#, tcl-format -msgid "Revert changes in these %i files?" -msgstr "" - -#: lib/index.tcl:408 -msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "" - -#: lib/index.tcl:411 -msgid "Do Nothing" -msgstr "" - -#: lib/index.tcl:429 -msgid "Reverting selected files" -msgstr "" - -#: lib/index.tcl:433 -#, tcl-format -msgid "Reverting %s" -msgstr "" - -#: lib/merge.tcl:13 -msgid "" -"Cannot merge while amending.\n" -"\n" -"You must finish amending this commit before starting any type of merge.\n" -msgstr "" - -#: lib/merge.tcl:27 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" - -#: lib/merge.tcl:45 -#, tcl-format -msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" -"\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" -msgstr "" - -#: lib/merge.tcl:55 -#, tcl-format -msgid "" -"You are in the middle of a change.\n" -"\n" -"File %s is modified.\n" -"\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" -msgstr "" - -#: lib/merge.tcl:107 -#, tcl-format -msgid "%s of %s" -msgstr "" - -#: lib/merge.tcl:120 -#, tcl-format -msgid "Merging %s and %s..." -msgstr "" - -#: lib/merge.tcl:131 -msgid "Merge completed successfully." -msgstr "" - -#: lib/merge.tcl:133 -msgid "Merge failed. Conflict resolution is required." -msgstr "" - -#: lib/merge.tcl:158 -#, tcl-format -msgid "Merge Into %s" -msgstr "" - -#: lib/merge.tcl:177 -msgid "Revision To Merge" -msgstr "" - -#: lib/merge.tcl:212 -msgid "" -"Cannot abort while amending.\n" -"\n" -"You must finish amending this commit.\n" -msgstr "" - -#: lib/merge.tcl:222 -msgid "" -"Abort merge?\n" -"\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with aborting the current merge?" -msgstr "" - -#: lib/merge.tcl:228 -msgid "" -"Reset changes?\n" -"\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with resetting the current changes?" -msgstr "" - -#: lib/merge.tcl:239 -msgid "Aborting" -msgstr "" - -#: lib/merge.tcl:239 -msgid "files reset" -msgstr "" - -#: lib/merge.tcl:267 -msgid "Abort failed." -msgstr "" - -#: lib/merge.tcl:269 -msgid "Abort completed. Ready." -msgstr "" - -#: lib/mergetool.tcl:8 -msgid "Force resolution to the base version?" -msgstr "" - -#: lib/mergetool.tcl:9 -msgid "Force resolution to this branch?" -msgstr "" - -#: lib/mergetool.tcl:10 -msgid "Force resolution to the other branch?" -msgstr "" - -#: lib/mergetool.tcl:14 -#, tcl-format -msgid "" -"Note that the diff shows only conflicting changes.\n" -"\n" -"%s will be overwritten.\n" -"\n" -"This operation can be undone only by restarting the merge." -msgstr "" - -#: lib/mergetool.tcl:45 -#, tcl-format -msgid "File %s seems to have unresolved conflicts, still stage?" -msgstr "" - -#: lib/mergetool.tcl:60 -#, tcl-format -msgid "Adding resolution for %s" -msgstr "" - -#: lib/mergetool.tcl:141 -msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "" - -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "" - -#: lib/mergetool.tcl:264 -#, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "" - -#: lib/mergetool.tcl:268 -#, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "" - -#: lib/mergetool.tcl:303 -msgid "Merge tool is already running, terminate it?" -msgstr "" - -#: lib/mergetool.tcl:323 -#, tcl-format -msgid "" -"Error retrieving versions:\n" -"%s" -msgstr "" - -#: lib/mergetool.tcl:343 -#, tcl-format -msgid "" -"Could not start the merge tool:\n" -"\n" -"%s" -msgstr "" - -#: lib/mergetool.tcl:347 -msgid "Running merge tool..." -msgstr "" - -#: lib/mergetool.tcl:375 lib/mergetool.tcl:383 -msgid "Merge tool failed." -msgstr "" - -#: lib/option.tcl:11 -#, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "" - -#: lib/option.tcl:19 -#, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "" - -#: lib/option.tcl:117 -msgid "Restore Defaults" -msgstr "" - -#: lib/option.tcl:121 -msgid "Save" -msgstr "" - -#: lib/option.tcl:131 -#, tcl-format -msgid "%s Repository" -msgstr "" - -#: lib/option.tcl:132 -msgid "Global (All Repositories)" -msgstr "" - -#: lib/option.tcl:138 -msgid "User Name" -msgstr "" - -#: lib/option.tcl:139 -msgid "Email Address" -msgstr "" - -#: lib/option.tcl:141 -msgid "Summarize Merge Commits" -msgstr "" - -#: lib/option.tcl:142 -msgid "Merge Verbosity" -msgstr "" - -#: lib/option.tcl:143 -msgid "Show Diffstat After Merge" -msgstr "" - -#: lib/option.tcl:144 -msgid "Use Merge Tool" -msgstr "" - -#: lib/option.tcl:146 -msgid "Trust File Modification Timestamps" -msgstr "" - -#: lib/option.tcl:147 -msgid "Prune Tracking Branches During Fetch" -msgstr "" - -#: lib/option.tcl:148 -msgid "Match Tracking Branches" -msgstr "" - -#: lib/option.tcl:149 -msgid "Blame Copy Only On Changed Files" -msgstr "" - -#: lib/option.tcl:150 -msgid "Minimum Letters To Blame Copy On" -msgstr "" - -#: lib/option.tcl:151 -msgid "Blame History Context Radius (days)" -msgstr "" - -#: lib/option.tcl:152 -msgid "Number of Diff Context Lines" -msgstr "" - -#: lib/option.tcl:153 -msgid "Commit Message Text Width" -msgstr "" - -#: lib/option.tcl:154 -msgid "New Branch Name Template" -msgstr "" - -#: lib/option.tcl:155 -msgid "Default File Contents Encoding" -msgstr "" - -#: lib/option.tcl:203 -msgid "Change" -msgstr "" - -#: lib/option.tcl:230 -msgid "Spelling Dictionary:" -msgstr "" - -#: lib/option.tcl:254 -msgid "Change Font" -msgstr "" - -#: lib/option.tcl:258 -#, tcl-format -msgid "Choose %s" -msgstr "" - -#: lib/option.tcl:264 -msgid "pt." -msgstr "" - -#: lib/option.tcl:278 -msgid "Preferences" -msgstr "" - -#: lib/option.tcl:314 -msgid "Failed to completely save options:" -msgstr "" - -#: lib/remote.tcl:163 -msgid "Remove Remote" -msgstr "" - -#: lib/remote.tcl:168 -msgid "Prune from" -msgstr "" - -#: lib/remote.tcl:173 -msgid "Fetch from" -msgstr "" - -#: lib/remote.tcl:215 -msgid "Push to" -msgstr "" - -#: lib/remote_add.tcl:19 -msgid "Add Remote" -msgstr "" - -#: lib/remote_add.tcl:24 -msgid "Add New Remote" -msgstr "" - -#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36 -msgid "Add" -msgstr "" - -#: lib/remote_add.tcl:37 -msgid "Remote Details" -msgstr "" - -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "" - -#: lib/remote_add.tcl:62 -msgid "Further Action" -msgstr "" - -#: lib/remote_add.tcl:65 -msgid "Fetch Immediately" -msgstr "" - -#: lib/remote_add.tcl:71 -msgid "Initialize Remote Repository and Push" -msgstr "" - -#: lib/remote_add.tcl:77 -msgid "Do Nothing Else Now" -msgstr "" - -#: lib/remote_add.tcl:101 -msgid "Please supply a remote name." -msgstr "" - -#: lib/remote_add.tcl:114 -#, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "" - -#: lib/remote_add.tcl:125 -#, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "" - -#: lib/remote_add.tcl:133 lib/transport.tcl:6 -#, tcl-format -msgid "fetch %s" -msgstr "" - -#: lib/remote_add.tcl:134 -#, tcl-format -msgid "Fetching the %s" -msgstr "" - -#: lib/remote_add.tcl:157 -#, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "" - -#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63 -#: lib/transport.tcl:81 -#, tcl-format -msgid "push %s" -msgstr "" - -#: lib/remote_add.tcl:164 -#, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "" - -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "" - -#: lib/remote_branch_delete.tcl:47 -msgid "From Repository" -msgstr "" - -#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134 -msgid "Remote:" -msgstr "" - -#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149 -msgid "Arbitrary Location:" -msgstr "" - -#: lib/remote_branch_delete.tcl:84 -msgid "Branches" -msgstr "" - -#: lib/remote_branch_delete.tcl:109 -msgid "Delete Only If" -msgstr "" - -#: lib/remote_branch_delete.tcl:111 -msgid "Merged Into:" -msgstr "" - -#: lib/remote_branch_delete.tcl:152 -msgid "A branch is required for 'Merged Into'." -msgstr "" - -#: lib/remote_branch_delete.tcl:184 -#, tcl-format -msgid "" -"The following branches are not completely merged into %s:\n" -"\n" -" - %s" -msgstr "" - -#: lib/remote_branch_delete.tcl:189 -#, tcl-format -msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." -msgstr "" - -#: lib/remote_branch_delete.tcl:207 -msgid "Please select one or more branches to delete." -msgstr "" - -#: lib/remote_branch_delete.tcl:226 -#, tcl-format -msgid "Deleting branches from %s" -msgstr "" - -#: lib/remote_branch_delete.tcl:292 -msgid "No repository selected." -msgstr "" - -#: lib/remote_branch_delete.tcl:297 -#, tcl-format -msgid "Scanning %s..." -msgstr "" - -#: lib/search.tcl:21 -msgid "Find:" -msgstr "" - -#: lib/search.tcl:23 -msgid "Next" -msgstr "" - -#: lib/search.tcl:24 -msgid "Prev" -msgstr "" - -#: lib/search.tcl:25 -msgid "Case-Sensitive" -msgstr "" - -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "" - -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "" - -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "" - -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "" - -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "" - -#: lib/spellcheck.tcl:70 -#, tcl-format -msgid "Reverting dictionary to %s." -msgstr "" - -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "" - -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "" - -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "" - -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "" - -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "" - -#: lib/sshkey.tcl:31 -msgid "No keys found." -msgstr "" - -#: lib/sshkey.tcl:34 -#, tcl-format -msgid "Found a public key in: %s" -msgstr "" - -#: lib/sshkey.tcl:40 -msgid "Generate Key" -msgstr "" - -#: lib/sshkey.tcl:56 -msgid "Copy To Clipboard" -msgstr "" - -#: lib/sshkey.tcl:70 -msgid "Your OpenSSH Public Key" -msgstr "" - -#: lib/sshkey.tcl:78 -msgid "Generating..." -msgstr "" - -#: lib/sshkey.tcl:84 -#, tcl-format -msgid "" -"Could not start ssh-keygen:\n" -"\n" -"%s" -msgstr "" - -#: lib/sshkey.tcl:111 -msgid "Generation failed." -msgstr "" - -#: lib/sshkey.tcl:118 -msgid "Generation succeeded, but no keys found." -msgstr "" - -#: lib/sshkey.tcl:121 -#, tcl-format -msgid "Your key is in: %s" -msgstr "" - -#: lib/status_bar.tcl:83 -#, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "" - -#: lib/tools.tcl:75 -#, tcl-format -msgid "Running %s requires a selected file." -msgstr "" - -#: lib/tools.tcl:90 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "" - -#: lib/tools.tcl:110 -#, tcl-format -msgid "Tool: %s" -msgstr "" - -#: lib/tools.tcl:111 -#, tcl-format -msgid "Running: %s" -msgstr "" - -#: lib/tools.tcl:149 -#, tcl-format -msgid "Tool completed successfully: %s" -msgstr "" - -#: lib/tools.tcl:151 -#, tcl-format -msgid "Tool failed: %s" -msgstr "" - -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "" - -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "" - -#: lib/tools_dlg.tcl:33 -msgid "Add globally" -msgstr "" - -#: lib/tools_dlg.tcl:45 -msgid "Tool Details" -msgstr "" - -#: lib/tools_dlg.tcl:48 -msgid "Use '/' separators to create a submenu tree:" -msgstr "" - -#: lib/tools_dlg.tcl:61 -msgid "Command:" -msgstr "" - -#: lib/tools_dlg.tcl:74 -msgid "Show a dialog before running" -msgstr "" - -#: lib/tools_dlg.tcl:80 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "" - -#: lib/tools_dlg.tcl:85 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "" - -#: lib/tools_dlg.tcl:92 -msgid "Don't show the command output window" -msgstr "" - -#: lib/tools_dlg.tcl:97 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "" - -#: lib/tools_dlg.tcl:121 -msgid "Please supply a name for the tool." -msgstr "" - -#: lib/tools_dlg.tcl:129 -#, tcl-format -msgid "Tool '%s' already exists." -msgstr "" - -#: lib/tools_dlg.tcl:151 -#, tcl-format -msgid "" -"Could not add tool:\n" -"%s" -msgstr "" - -#: lib/tools_dlg.tcl:190 -msgid "Remove Tool" -msgstr "" - -#: lib/tools_dlg.tcl:196 -msgid "Remove Tool Commands" -msgstr "" - -#: lib/tools_dlg.tcl:200 -msgid "Remove" -msgstr "" - -#: lib/tools_dlg.tcl:236 -msgid "(Blue denotes repository-local tools)" -msgstr "" - -#: lib/tools_dlg.tcl:297 -#, tcl-format -msgid "Run Command: %s" -msgstr "" - -#: lib/tools_dlg.tcl:311 -msgid "Arguments" -msgstr "" - -#: lib/tools_dlg.tcl:348 -msgid "OK" -msgstr "" - -#: lib/transport.tcl:7 -#, tcl-format -msgid "Fetching new changes from %s" -msgstr "" - -#: lib/transport.tcl:18 -#, tcl-format -msgid "remote prune %s" -msgstr "" - -#: lib/transport.tcl:19 -#, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "" - -#: lib/transport.tcl:26 -#, tcl-format -msgid "Pushing changes to %s" -msgstr "" - -#: lib/transport.tcl:64 -#, tcl-format -msgid "Mirroring to %s" -msgstr "" - -#: lib/transport.tcl:82 -#, tcl-format -msgid "Pushing %s %s to %s" -msgstr "" - -#: lib/transport.tcl:100 -msgid "Push Branches" -msgstr "" - -#: lib/transport.tcl:114 -msgid "Source Branches" -msgstr "" - -#: lib/transport.tcl:131 -msgid "Destination Repository" -msgstr "" - -#: lib/transport.tcl:169 -msgid "Transfer Options" -msgstr "" - -#: lib/transport.tcl:171 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "" - -#: lib/transport.tcl:175 -msgid "Use thin pack (for slow network connections)" -msgstr "" - -#: lib/transport.tcl:179 -msgid "Include tags" -msgstr "" diff --git a/po/glossary/de.po b/po/glossary/de.po index 35764d1..4c5f233 100644 --- a/po/glossary/de.po +++ b/po/glossary/de.po @@ -6,10 +6,11 @@ msgid "" msgstr "" "Project-Id-Version: git-gui glossary\n" -"POT-Creation-Date: 2008-01-07 21:20+0100\n" -"PO-Revision-Date: 2008-02-16 21:48+0100\n" +"POT-Creation-Date: 2020-01-26 22:26+0100\n" +"PO-Revision-Date: 2020-02-09 21:22+0100\n" "Last-Translator: Christian Stimming \n" "Language-Team: German \n" +"Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -19,6 +20,9 @@ msgid "" "English Term (Dear translator: This file will never be visible to the user!)" msgstr "" "Deutsche Übersetzung.\n" +"Git-core glossary:\n" +" https://github.com/ruester/git-po-de/wiki/Translation-Guidelines\n" +"\n" "Andere deutsche SCM:\n" " http://tortoisesvn.net/docs/release/TortoiseSVN_de/index.html und http://" "tortoisesvn.tigris.org/svn/tortoisesvn/trunk/Languages/Tortoise_de.po " @@ -32,33 +36,77 @@ msgstr "" " http://rapidsvn.tigris.org/svn/rapidsvn/trunk/src/locale/de/rapidsvn.po " "(username=guest, password empty, schlecht)" +#. "prematurely stop and abandon an operation" +msgid "abort" +msgstr "abbrechen" + #. "" msgid "amend" msgstr "nachbessern (ergänzen)" +#. "a commit that succeeds the current one in git's graph of commits (not necessarily directly)" +msgid "ancestor" +msgstr "Vorgänger-Commit" + #. "" msgid "annotate" msgstr "annotieren" +#. "The person who initially created (authored) a commit" +msgid "author" +msgstr "Autor" + +#. "a repository with only .git directory, without working directory" +msgid "bare repository" +msgstr "bloßes Projektarchiv" + +#. "a parent version of the current file" +msgid "base" +msgstr "Ursprung" + +#. "" +msgid "bisect" +msgstr "binäre Suche [noun], binäre Suche benutzen [verb]" + +#. "get the authors responsible for each line in a file" +msgid "blame" +msgstr "annotieren" + +#. "" +msgid "blob" +msgstr "Blob" + #. "A 'branch' is an active line of development." msgid "branch [noun]" -msgstr "Zweig" +msgstr "Branch" #. "" msgid "branch [verb]" -msgstr "verzweigen" +msgstr "branchen" #. "" msgid "checkout [noun]" msgstr "" -"Arbeitskopie (Erstellung einer Arbeitskopie; Auscheck? Ausspielung? Abruf? " -"Source Safe: Auscheckvorgang)" +"Arbeitskopie (Checkout; Erstellung einer Arbeitskopie; Auscheck? Source " +"Safe: Auscheckvorgang)" #. "The action of updating the working tree to a revision which was stored in the object database." msgid "checkout [verb]" msgstr "" -"Arbeitskopie erstellen; Zweig umstellen [checkout a branch] (auschecken? " -"ausspielen? abrufen? Source Safe: auschecken)" +"Arbeitskopie erstellen; Branch auschecken [checkout a branch] (umstellen? " +"Source Safe: auschecken)" + +#. "to select and apply a single commit to the current HEAD without merging" +msgid "cherry-pick" +msgstr "cherry-pick (pflücken?)" + +#. "a commit that directly succeeds the current one in git's graph of commits" +msgid "child commit" +msgstr "Kind-Commit" + +#. "clean the state of the git repository, often after manually stopped operation" +msgid "cleanup" +msgstr "aufräumen" #. "" msgid "clone [verb]" @@ -66,39 +114,98 @@ msgstr "klonen" #. "A single point in the git history." msgid "commit [noun]" -msgstr "" -"Version; Eintragung; Änderung (Buchung?, Eintragung?, Übertragung?, " -"Sendung?, Übergabe?, Einspielung?, Ablagevorgang?)" +msgstr "Commit (Version?)" #. "The action of storing a new snapshot of the project's state in the git history." msgid "commit [verb]" msgstr "" -"eintragen (TortoiseSVN: übertragen; Source Safe: einchecken; senden?, " -"übergeben?, einspielen?, einpflegen?, ablegen?)" +"committen (eintragen?, TortoiseSVN: übertragen; Source Safe: einchecken)" + +#. "a message that gets attached with any commit" +msgid "commit message" +msgstr "Commit-Beschreibung (Meldung?, Nachricht?; Source Safe: Kommentar)" + +#. "The person who committed a commit (to the current branch), which might be different than the author." +msgid "committer" +msgstr "Committer" + +#. "a commit that precedes the current one in git's graph of commits (not necessarily directly)" +msgid "descendant" +msgstr "Nachfolger-Commit" + +#. "checkout of a revision rather than some head" +msgid "detached HEAD" +msgstr "losgelöster HEAD / Branchspitze" + +#. "checkout of a revision rather than some head" +msgid "detached checkout" +msgstr "losgelöster Commit (von Branch losgelöster Commit?)" #. "" msgid "diff [noun]" -msgstr "Vergleich (Source Safe: Unterschiede)" +msgstr "Vergleich (Diff? Source Safe: Unterschiede)" #. "" msgid "diff [verb]" msgstr "vergleichen" -#. "A fast-forward is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." -msgid "fast forward merge" -msgstr "Schnellzusammenführung" +#. "" +msgid "directory" +msgstr "Verzeichnis" + +#. "A fast-forward merge is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." +msgid "fast-forward" +msgstr "vorspulen" #. "Fetching a branch means to get the branch's head from a remote repository, to find out which objects are missing from the local object database, and to get them, too." msgid "fetch" msgstr "anfordern (holen?)" +#. "any merge strategy that works on a file by file basis" +msgid "file level merging" +msgstr "Datei-basiertes zusammenführen" + +#. "" +msgid "file" +msgstr "Datei" + +#. "the last revision in a branch" +msgid "head" +msgstr "HEAD / Branchspitze" + +#. "script that gets executed automatically on some event" +msgid "hook" +msgstr "Hook (in der dt. Informatik wohl als Einschubmethode bezeichnet)" + #. "One context of consecutive lines in a whole patch, which consists of many such hunks" msgid "hunk" -msgstr "Kontext" +msgstr "Patch-Block (Kontext?)" #. "A collection of files. The index is a stored version of your working tree." msgid "index (in git-gui: staging area)" -msgstr "Bereitstellung" +msgstr "" +"Bereitstellung (sofern der git index gemeint ist. In git-gui sowieso: " +"staging area)" + +#. "the first checkout during a clone operation" +msgid "initial checkout" +msgstr "Erstellen der Arbeitskopie, auschecken" + +#. "The very first commit in a repository" +msgid "initial commit" +msgstr "Allererster Commit" + +#. "a branch that resides in the local git repository" +msgid "local branch" +msgstr "Lokaler Branch" + +#. "a Git object that is not part of any pack" +msgid "loose object" +msgstr "loses Objekt" + +#. "a branch called by convention 'master' that exists in a newly created git repository" +msgid "master branch" +msgstr "Master-Branch" #. "A successful merge results in the creation of a new commit representing the result of the merge." msgid "merge [noun]" @@ -112,78 +219,212 @@ msgstr "zusammenführen" msgid "message" msgstr "Beschreibung (Meldung?, Nachricht?; Source Safe: Kommentar)" -#. "Deletes all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." +#. "a remote called by convention 'origin' that the current git repository has been cloned from" +msgid "origin" +msgstr "origin" + +#. "" +msgid "orphan commit" +msgstr "verwaister Commit" + +#. "" +msgid "orphan reference" +msgstr "verwaiste Referenz" + +#. "a file containing many git objects packed together" +msgid "pack [noun]" +msgstr "Pack-Datei" + +#. "the process of creating a pack file" +msgid "pack [verb]" +msgstr "Pack-Datei erstellen" + +#. "a Git object part of some pack" +msgid "packed object" +msgstr "gepacktes Objekt" + +#. "a commit that directly precedes the current one in git's graph of commits" +msgid "parent commit" +msgstr "Eltern-Commit" + +msgid "patch" +msgstr "Patch" + +#. "The path to a file" +msgid "path" +msgstr "Pfad" + +#. "Delete all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." msgid "prune" -msgstr "aufräumen (entfernen?)" +msgstr "veraltete Branches entfernen (aufräumen?, entfernen?)" #. "Pulling a branch means to fetch it and merge it." msgid "pull" -msgstr "übernehmen (ziehen?)" +msgstr "" +"übernehmen (pull? ziehen? Vorsicht: zusammenführen = merge, aber pull kann " +"auch rebase bewirken)" #. "Pushing a branch means to get the branch's head ref from a remote repository, and ... (well, can someone please explain it for mere mortals?)" msgid "push" msgstr "versenden (ausliefern? hochladen? verschicken? schieben?)" +#. "The process of rebasing one set of commits on top of another branch's head" +msgid "rebase [noun]" +msgstr "der Rebase (das Umpflanzen)" + +#. "Re-apply one set of commits on top of another branch's head. Contrary to merge." +msgid "rebase [verb]" +msgstr "rebase (umpflanzen)" + #. "" msgid "redo" msgstr "wiederholen" -#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks." -msgid "remote" -msgstr "Andere Archive (Gegenseite?, Entfernte?, Server?)" +#. "" +msgid "reference" +msgstr "Referenz" + +#. "the log file containing all states of the HEAD reference (in other words past pristine states of the working copy)" +msgid "reflog" +msgstr "Commit-Log, »reflog«" + +msgid "refmap" +msgstr "Refmap" + +#. "" +msgid "refspec" +msgstr "Refspec" + +#. "The adjective for anything which is outside of the current (local) repository" +msgid "remote [adj]" +msgstr "Extern (Andere?, Gegenseite?, Entfernte?, Server?)" + +#. "A branch in any other ('remote') repository" +msgid "remote branch" +msgstr "Externer branch" + +#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks." +msgid "remote repository" +msgstr "Externes Repository" #. "A collection of refs (?) together with an object database containing all objects which are reachable from the refs... (oops, you've lost me here. Again, please an explanation for mere mortals?)" msgid "repository" -msgstr "Projektarchiv" +msgstr "Repository" #. "" msgid "reset" -msgstr "zurücksetzen (zurückkehren?)" +msgstr "umsetzen (reset to commit), Änderungen verwerfen (reset to HEAD)" + +#. "decide which changes from alternative versions of a file should persist in Git" +msgid "resolve (a conflict)" +msgstr "auflösen (einen Konflikt)" + +#. "abandon changes and go to pristine version" +msgid "revert changes" +msgstr "" +"verwerfen (bei git-reset bzw. checkout), zurücknehmen (bei git-revert, also " +"mit neuem commit; umkehren?)" #. "" msgid "revert" -msgstr "verwerfen (bei git-reset), revidieren (bei git-revert, also mit neuem commit)" +msgstr "" +"verwerfen (bei git-reset bzw. checkout), zurücknehmen (bei git-revert, also " +"mit neuem commit; umkehren?)" + +#. "expression that signifies a revision in git" +msgid "revision expression" +msgstr "Version Regexp-Ausdruck" #. "A particular state of files and directories which was stored in the object database." msgid "revision" -msgstr "Version (TortoiseSVN: Revision; Source Safe: Version)" +msgstr "" +"Version (aber was macht das Wort revision hier im Git?? TortoiseSVN: " +"Revision; Source Safe: Version)" #. "" msgid "sign off" -msgstr "abzeichnen (gegenzeichnen?, freizeichnen?, absegnen?)" +msgstr "abzeichnen (signieren? gegenzeichnen?, freizeichnen?)" -#. "" +#. "see: staging area. In some areas of git this is called 'index'." +msgid "stage [noun], index" +msgstr "Bereitstellung" + +#. "add some content of files and directories to the staging area in preparation for a commit" +msgid "stage [verb]" +msgstr "bereitstellen" + +#. "The place where changes from files are marked to be included for the next commit. In some areas of git this is called 'index'." msgid "staging area" msgstr "Bereitstellung" +#. "The place (stack) where changes can be temporarily saved without committing" +msgid "stash [noun]" +msgstr "der Stash" + +#. "temporarily save changes in a stack without committing" +msgid "stash [verb]" +msgstr "in Stash speichern; \"stash\" benutzen" + #. "" msgid "status" msgstr "Status" -#. "A ref pointing to a tag or commit object" +#. "" +msgid "submodule" +msgstr "Submodul (Untermodul?)" + +#. "A ref pointing to some commit object. In other words: A label on a specific commit." msgid "tag [noun]" -msgstr "Markierung" +msgstr "Tag (Markierung?)" -#. "" +#. "The process of creating a tag at a specific commit object" msgid "tag [verb]" -msgstr "markieren" +msgstr "taggen (markieren?)" + +#. "The person who created a tag" +msgid "tagger" +msgstr "Tag-Ersteller (Markierungs-Ersteller?)" + +#. "file whose content is tracked/not tracked by git" +msgid "tracked/untracked" +msgstr "versioniert/unversioniert" #. "A regular git branch that is used to follow changes from another repository." msgid "tracking branch" -msgstr "Übernahmezweig" +msgstr "Tracking-Branch (Verfolgungsbranch? Übernahmebranch?)" + +#. "" +msgid "trailer" +msgstr "Anhang" + +#. "1. tree object, 2. directory tree" +msgid "tree" +msgstr "1. Baum-Objekt, 2. Verzeichnisbaum" #. "" msgid "undo" msgstr "rückgängig" +#. "Remove content of files from the staging area again so that it will not be part of the next commit" +msgid "unstage" +msgstr "aus Bereitstellung herausnehmen" + +#. "Retrieving the temporarily saved changes back again from the stash" +msgid "unstash [verb]" +msgstr "aus Stash zurückladen" + #. "" msgid "update" msgstr "aktualisieren" +#. "" +msgid "upstream branch" +msgstr "Upstream-Branch" + #. "" msgid "verify" msgstr "überprüfen" #. "The tree of actual checked out files." -msgid "working copy, working tree" +msgid "working directory, working copy, working tree" msgstr "Arbeitskopie" diff --git a/po/glossary/git-gui-glossary.pot b/po/glossary/git-gui-glossary.pot index 40eb3e9..4e66e0d 100644 --- a/po/glossary/git-gui-glossary.pot +++ b/po/glossary/git-gui-glossary.pot @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2008-01-07 21:20+0100\n" +"POT-Creation-Date: 2020-01-26 22:26+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,14 +18,46 @@ msgstr "" msgid "English Term (Dear translator: This file will never be visible to the user!)" msgstr "" +#. "prematurely stop and abandon an operation" +msgid "abort" +msgstr "" + #. "" msgid "amend" msgstr "" +#. "a commit that succeeds the current one in git's graph of commits (not necessarily directly)" +msgid "ancestor" +msgstr "" + #. "" msgid "annotate" msgstr "" +#. "The person who initially created (authored) a commit" +msgid "author" +msgstr "" + +#. "a repository with only .git directory, without working directory" +msgid "bare repository" +msgstr "" + +#. "a parent version of the current file" +msgid "base" +msgstr "" + +#. "" +msgid "bisect" +msgstr "" + +#. "get the authors responsible for each line in a file" +msgid "blame" +msgstr "" + +#. "" +msgid "blob" +msgstr "" + #. "A 'branch' is an active line of development." msgid "branch [noun]" msgstr "" @@ -42,6 +74,18 @@ msgstr "" msgid "checkout [verb]" msgstr "" +#. "to select and apply a single commit to the current HEAD without merging" +msgid "cherry-pick" +msgstr "" + +#. "a commit that directly succeeds the current one in git's graph of commits" +msgid "child commit" +msgstr "" + +#. "clean the state of the git repository, often after manually stopped operation" +msgid "cleanup" +msgstr "" + #. "" msgid "clone [verb]" msgstr "" @@ -54,6 +98,26 @@ msgstr "" msgid "commit [verb]" msgstr "" +#. "a message that gets attached with any commit" +msgid "commit message" +msgstr "" + +#. "The person who committed a commit (to the current branch), which might be different than the author." +msgid "committer" +msgstr "" + +#. "a commit that precedes the current one in git's graph of commits (not necessarily directly)" +msgid "descendant" +msgstr "" + +#. "checkout of a revision rather than some head" +msgid "detached HEAD" +msgstr "" + +#. "checkout of a revision rather than some head" +msgid "detached checkout" +msgstr "" + #. "" msgid "diff [noun]" msgstr "" @@ -62,14 +126,34 @@ msgstr "" msgid "diff [verb]" msgstr "" -#. "A fast-forward is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." -msgid "fast forward merge" +#. "" +msgid "directory" +msgstr "" + +#. "A fast-forward merge is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." +msgid "fast-forward" msgstr "" #. "Fetching a branch means to get the branch's head from a remote repository, to find out which objects are missing from the local object database, and to get them, too." msgid "fetch" msgstr "" +#. "any merge strategy that works on a file by file basis" +msgid "file level merging" +msgstr "" + +#. "" +msgid "file" +msgstr "" + +#. "the last revision in a branch" +msgid "head" +msgstr "" + +#. "script that gets executed automatically on some event" +msgid "hook" +msgstr "" + #. "One context of consecutive lines in a whole patch, which consists of many such hunks" msgid "hunk" msgstr "" @@ -78,6 +162,26 @@ msgstr "" msgid "index (in git-gui: staging area)" msgstr "" +#. "the first checkout during a clone operation" +msgid "initial checkout" +msgstr "" + +#. "The very first commit in a repository" +msgid "initial commit" +msgstr "" + +#. "a branch that resides in the local git repository" +msgid "local branch" +msgstr "" + +#. "a Git object that is not part of any pack" +msgid "loose object" +msgstr "" + +#. "a branch called by convention 'master' that exists in a newly created git repository" +msgid "master branch" +msgstr "" + #. "A successful merge results in the creation of a new commit representing the result of the merge." msgid "merge [noun]" msgstr "" @@ -90,7 +194,42 @@ msgstr "" msgid "message" msgstr "" -#. "Deletes all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." +#. "a remote called by convention 'origin' that the current git repository has been cloned from" +msgid "origin" +msgstr "" + +#. "" +msgid "orphan commit" +msgstr "" + +#. "" +msgid "orphan reference" +msgstr "" + +#. "a file containing many git objects packed together" +msgid "pack [noun]" +msgstr "" + +#. "the process of creating a pack file" +msgid "pack [verb]" +msgstr "" + +#. "a Git object part of some pack" +msgid "packed object" +msgstr "" + +#. "a commit that directly precedes the current one in git's graph of commits" +msgid "parent commit" +msgstr "" + +msgid "patch" "" +msgstr "" + +#. "The path to a file" +msgid "path" +msgstr "" + +#. "Delete all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." msgid "prune" msgstr "" @@ -102,12 +241,43 @@ msgstr "" msgid "push" msgstr "" +#. "The process of rebasing one set of commits on top of another branch's head" +msgid "rebase [noun]" +msgstr "" + +#. "Re-apply one set of commits on top of another branch's head. Contrary to merge." +msgid "rebase [verb]" +msgstr "" + #. "" msgid "redo" msgstr "" -#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks." -msgid "remote" +#. "" +msgid "reference" +msgstr "" + +#. "the log file containing all states of the HEAD reference (in other words past pristine states of the working copy)" +msgid "reflog" +msgstr "" + +msgid "refmap" "" +msgstr "" + +#. "" +msgid "refspec" +msgstr "" + +#. "The adjective for anything which is outside of the current (local) repository" +msgid "remote [adj]" +msgstr "" + +#. "A branch in any other ('remote') repository" +msgid "remote branch" +msgstr "" + +#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks." +msgid "remote repository" msgstr "" #. "A collection of refs (?) together with an object database containing all objects which are reachable from the refs... (oops, you've lost me here. Again, please an explanation for mere mortals?)" @@ -118,10 +288,22 @@ msgstr "" msgid "reset" msgstr "" +#. "decide which changes from alternative versions of a file should persist in Git" +msgid "resolve (a conflict)" +msgstr "" + +#. "abandon changes and go to pristine version" +msgid "revert changes" +msgstr "" + #. "" msgid "revert" msgstr "" +#. "expression that signifies a revision in git" +msgid "revision expression" +msgstr "" + #. "A particular state of files and directories which was stored in the object database." msgid "revision" msgstr "" @@ -130,39 +312,87 @@ msgstr "" msgid "sign off" msgstr "" -#. "" +#. "see: staging area. In some areas of git this is called 'index'." +msgid "stage [noun], index" +msgstr "" + +#. "add some content of files and directories to the staging area in preparation for a commit" +msgid "stage [verb]" +msgstr "" + +#. "The place where changes from files are marked to be included for the next commit. In some areas of git this is called 'index'." msgid "staging area" msgstr "" +#. "The place (stack) where changes can be temporarily saved without committing" +msgid "stash [noun]" +msgstr "" + +#. "temporarily save changes in a stack without committing" +msgid "stash [verb]" +msgstr "" + #. "" msgid "status" msgstr "" -#. "A ref pointing to a tag or commit object" +#. "" +msgid "submodule" +msgstr "" + +#. "A ref pointing to some commit object. In other words: A label on a specific commit." msgid "tag [noun]" msgstr "" -#. "" +#. "The process of creating a tag at a specific commit object" msgid "tag [verb]" msgstr "" +#. "The person who created a tag" +msgid "tagger" +msgstr "" + +#. "file whose content is tracked/not tracked by git" +msgid "tracked/untracked" +msgstr "" + #. "A regular git branch that is used to follow changes from another repository." msgid "tracking branch" msgstr "" +#. "" +msgid "trailer" +msgstr "" + +#. "1. tree object, 2. directory tree" +msgid "tree" +msgstr "" + #. "" msgid "undo" msgstr "" +#. "Remove content of files from the staging area again so that it will not be part of the next commit" +msgid "unstage" +msgstr "" + +#. "Retrieving the temporarily saved changes back again from the stash" +msgid "unstash [verb]" +msgstr "" + #. "" msgid "update" msgstr "" +#. "" +msgid "upstream branch" +msgstr "" + #. "" msgid "verify" msgstr "" #. "The tree of actual checked out files." -msgid "working copy, working tree" +msgid "working directory, working copy, working tree" msgstr "" diff --git a/po/glossary/git-gui-glossary.txt b/po/glossary/git-gui-glossary.txt index 4093046..48b9f10 100644 --- a/po/glossary/git-gui-glossary.txt +++ b/po/glossary/git-gui-glossary.txt @@ -1,67 +1,96 @@ "English Term (Dear translator: This file will never be visible to the user!)" "English Definition (Dear translator: This file will never be visible to the user! It should only serve as a tool for you, the translator. Nothing more.)" +"abort" "prematurely stop and abandon an operation" "amend" "" +"ancestor" "a commit that succeeds the current one in git's graph of commits (not necessarily directly)" "annotate" "" +"author" "The person who initially created (authored) a commit" +"bare repository" "a repository with only .git directory, without working directory" +"base" "a parent version of the current file" +"bisect" "" +"blame" "get the authors responsible for each line in a file" +"blob" "" "branch [noun]" "A 'branch' is an active line of development." "branch [verb]" "" "checkout [noun]" "" "checkout [verb]" "The action of updating the working tree to a revision which was stored in the object database." +"cherry-pick" "to select and apply a single commit to the current HEAD without merging" +"child commit" "a commit that directly succeeds the current one in git's graph of commits" +"cleanup" "clean the state of the git repository, often after manually stopped operation" "clone [verb]" "" "commit [noun]" "A single point in the git history." "commit [verb]" "The action of storing a new snapshot of the project's state in the git history." +"commit message" "a message that gets attached with any commit" +"committer" "The person who committed a commit (to the current branch), which might be different than the author." +"descendant" "a commit that precedes the current one in git's graph of commits (not necessarily directly)" +"detached HEAD" "checkout of a revision rather than some head" +"detached checkout" "checkout of a revision rather than some head" "diff [noun]" "" "diff [verb]" "" -"fast forward merge" "A fast-forward is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." +"directory" "" +"fast-forward" "A fast-forward merge is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." "fetch" "Fetching a branch means to get the branch's head from a remote repository, to find out which objects are missing from the local object database, and to get them, too." +"file level merging" "any merge strategy that works on a file by file basis" +"file" "" +"head" "the last revision in a branch" +"hook" "script that gets executed automatically on some event" "hunk" "One context of consecutive lines in a whole patch, which consists of many such hunks" "index (in git-gui: staging area)" "A collection of files. The index is a stored version of your working tree." +"initial checkout" "the first checkout during a clone operation" +"initial commit" "The very first commit in a repository" +"local branch" "a branch that resides in the local git repository" +"loose object" "a Git object that is not part of any pack" +"master branch" "a branch called by convention 'master' that exists in a newly created git repository" "merge [noun]" "A successful merge results in the creation of a new commit representing the result of the merge." "merge [verb]" "To bring the contents of another branch into the current branch." "message" "" -"prune" "Deletes all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." +"origin" "a remote called by convention 'origin' that the current git repository has been cloned from" +"orphan commit" "" +"orphan reference" "" +"pack [noun]" "a file containing many git objects packed together" +"pack [verb]" "the process of creating a pack file" +"packed object" "a Git object part of some pack" +"parent commit" "a commit that directly precedes the current one in git's graph of commits" +"patch" "" +"path" "The path to a file" +"prune" "Delete all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." "pull" "Pulling a branch means to fetch it and merge it." "push" "Pushing a branch means to get the branch's head ref from a remote repository, and ... (well, can someone please explain it for mere mortals?)" +"rebase [noun]" "The process of rebasing one set of commits on top of another branch's head" +"rebase [verb]" "Re-apply one set of commits on top of another branch's head. Contrary to merge." "redo" "" -"remote" "An other repository ('remote'). One might have a set of remotes whose branches one tracks." +"reference" "" +"reflog" "the log file containing all states of the HEAD reference (in other words past pristine states of the working copy)" +"refmap" "" +"refspec" "" +"remote [adj]" "The adjective for anything which is outside of the current (local) repository" +"remote branch" "A branch in any other ('remote') repository" +"remote repository" "An other repository ('remote'). One might have a set of remotes whose branches one tracks." "repository" "A collection of refs (?) together with an object database containing all objects which are reachable from the refs... (oops, you've lost me here. Again, please an explanation for mere mortals?)" "reset" "" +"resolve (a conflict)" "decide which changes from alternative versions of a file should persist in Git" +"revert changes" "abandon changes and go to pristine version" "revert" "" +"revision expression" "expression that signifies a revision in git" "revision" "A particular state of files and directories which was stored in the object database." "sign off" "" -"staging area" "" +"stage [noun], index" "see: staging area. In some areas of git this is called 'index'." +"stage [verb]" "add some content of files and directories to the staging area in preparation for a commit" +"staging area" "The place where changes from files are marked to be included for the next commit. In some areas of git this is called 'index'." +"stash [noun]" "The place (stack) where changes can be temporarily saved without committing" +"stash [verb]" "temporarily save changes in a stack without committing" "status" "" -"tag [noun]" "A ref pointing to a tag or commit object" -"tag [verb]" "" +"submodule" "" +"tag [noun]" "A ref pointing to some commit object. In other words: A label on a specific commit." +"tag [verb]" "The process of creating a tag at a specific commit object" +"tagger" "The person who created a tag" +"tracked/untracked" "file whose content is tracked/not tracked by git" "tracking branch" "A regular git branch that is used to follow changes from another repository." +"trailer" "" +"tree" "1. tree object, 2. directory tree" "undo" "" +"unstage" "Remove content of files from the staging area again so that it will not be part of the next commit" +"unstash [verb]" "Retrieving the temporarily saved changes back again from the stash" "update" "" +"upstream branch" "" "verify" "" -"working copy, working tree" "The tree of actual checked out files." -"ancestor" "a commit that succeeds the current one in git's graph of commits (not necessarily directly)" -"abort" "prematurely stop and abandon an operation" -"bare repository" "a repository with only .git directory, without working directory" -"base" "a parent version of the current file" -"blame" "get the authors responsible for each line in a file" -"cherry-pick" "to select and apply a single commit without merging" -"child" "a commit that directly succeeds the current one in git's graph of commits" -"cleanup" "clean the state of the git repository, often after manually stopped operation" -"commit message" "a message that gets attached with any commit" -"descendant" "a commit that precedes the current one in git's graph of commits (not necessarily directly)" -"detached checkout" "checkout of a revision rather than a some head" -"file level merging" "any merge strategy that works on a file by file basis" -"head" "the last revision in a branch" -"hook" "script that gets executed automatically on some event" -"initial checkout" "the first checkout during a clone operation" -"local branch" "a branch that resides in the local git repository" -"loose object" "a Git object that is not part of any pack" -"master branch" "a branch called by convention 'master' that exists in a newly created git repository" -"origin" "a remote called by convention 'origin' that the current git repository has been cloned from" -"pack [noun]" "a file containing many git objects packed together" -"packed object" "a Git object part of some pack" -"parent" "a commit that directly precedes the current one in git's graph of commits" -"reflog" "the log file containing all states of the HEAD reference (in other words past pristine states of the working copy)" -"resolve (a conflict)" "decide which changes from alternative versions of a file should persist in Git" -"revert changes" "abandon changes and go to pristine version" -"revision expression" "expression that signifies a revision in git" -"stage/unstage" "add some content of files and directories to the staging area in preparation for a commit" -"stash" "temporarily save changes in a stack without committing" -"tracked/untracked" "file whose content is tracked/not tracked by git" +"working directory, working copy, working tree" "The tree of actual checked out files." diff --git a/po/ja.po b/po/ja.po index 208651c..2f61153 100644 --- a/po/ja.po +++ b/po/ja.po @@ -4,14 +4,15 @@ # # しらいし ななこ , 2007. # Satoshi Yasushima , 2016. +# KIDANI Akito , 2019. # msgid "" msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-05-27 17:52+0900\n" -"PO-Revision-Date: 2016-06-22 12:50+0900\n" -"Last-Translator: Satoshi Yasushima \n" +"PO-Revision-Date: 2019-10-13 23:20+0900\n" +"Last-Translator: KIDANI Akito \n" "Language-Team: Japanese\n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -661,7 +662,7 @@ msgstr "" #: lib/merge.tcl:108 #, tcl-format msgid "%s of %s" -msgstr "%s の %s ブランチ" +msgstr "%2$s の %1$s ブランチ" #: lib/merge.tcl:122 #, tcl-format @@ -956,7 +957,7 @@ msgstr "エラー: コマンドが失敗しました" #: lib/checkout_op.tcl:85 #, tcl-format msgid "Fetching %s from %s" -msgstr "%s から %s をフェッチしています" +msgstr "%2$s から %1$s をフェッチしています" #: lib/checkout_op.tcl:133 #, tcl-format diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 0000000..00cae74 --- /dev/null +++ b/po/meson.build @@ -0,0 +1,38 @@ +languages = [ + 'bg', + 'de', + 'el', + 'fr', + 'hu', + 'it', + 'ja', + 'nb', + 'pt_br', + 'pt_pt', + 'ru', + 'sv', + 'vi', + 'zh_cn', +] + +msgfmt = find_program('msgfmt', required: false) +if not msgfmt.found() + subdir_done() +endif + +foreach language : languages + custom_target( + input: language + '.po', + output: language + '.msg', + command: [ + msgfmt, + '--statistics', + '--tcl', + '--locale=' + language, + '-d', meson.current_build_dir(), + '@INPUT@', + ], + install: true, + install_dir: get_option('datadir') / 'git-gui/lib/msgs', + ) +endforeach diff --git a/po/ru.po b/po/ru.po index 9f5305c..7aebaf8 100644 --- a/po/ru.po +++ b/po/ru.po @@ -2,14 +2,14 @@ # Copyright (C) 2007 Shawn Pearce # This file is distributed under the same license as the git-gui package. # Translators: -# Dimitriy Ryazantcev , 2015-2016 +# Dimitriy Ryazantcev , 2015-2016,2020 # Irina Riesen , 2007 msgid "" msgstr "" "Project-Id-Version: Git Russian Localization Project\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-26 15:47-0800\n" -"PO-Revision-Date: 2016-06-30 12:39+0000\n" +"POT-Creation-Date: 2020-02-08 22:54+0100\n" +"PO-Revision-Date: 2020-11-05 11:20+0000\n" "Last-Translator: Dimitriy Ryazantcev \n" "Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n" "MIME-Version: 1.0\n" @@ -18,33 +18,33 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: git-gui.sh:41 git-gui.sh:793 git-gui.sh:807 git-gui.sh:820 git-gui.sh:903 -#: git-gui.sh:922 -msgid "git-gui: fatal error" -msgstr "git-gui: критическая ошибка" - -#: git-gui.sh:743 +#: git-gui.sh:847 #, tcl-format msgid "Invalid font specified in %s:" msgstr "В %s установлен неверный шрифт:" -#: git-gui.sh:779 +#: git-gui.sh:901 msgid "Main Font" msgstr "Шрифт интерфейса" -#: git-gui.sh:780 +#: git-gui.sh:902 msgid "Diff/Console Font" msgstr "Шрифт консоли и изменений (diff)" -#: git-gui.sh:794 +#: git-gui.sh:917 git-gui.sh:931 git-gui.sh:944 git-gui.sh:1034 +#: git-gui.sh:1053 git-gui.sh:3212 +msgid "git-gui: fatal error" +msgstr "git-gui: критическая ошибка" + +#: git-gui.sh:918 msgid "Cannot find git in PATH." msgstr "git не найден в PATH." -#: git-gui.sh:821 +#: git-gui.sh:945 msgid "Cannot parse Git version string:" msgstr "Невозможно распознать строку версии Git: " -#: git-gui.sh:839 +#: git-gui.sh:970 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -56,473 +56,519 @@ msgid "" "Assume '%s' is version 1.5.0?\n" msgstr "Невозможно определить версию Git\n\n%s указывает на версию «%s».\n\nдля %s требуется версия Git, начиная с 1.5.0\n\nПредположить, что «%s» и есть версия 1.5.0?\n" -#: git-gui.sh:1128 +#: git-gui.sh:1267 msgid "Git directory not found:" msgstr "Каталог Git не найден:" -#: git-gui.sh:1146 +#: git-gui.sh:1301 msgid "Cannot move to top of working directory:" msgstr "Невозможно перейти к корню рабочего каталога репозитория: " -#: git-gui.sh:1154 +#: git-gui.sh:1309 msgid "Cannot use bare repository:" msgstr "Невозможно использование репозитория без рабочего каталога:" -#: git-gui.sh:1162 +#: git-gui.sh:1317 msgid "No working directory" msgstr "Отсутствует рабочий каталог" -#: git-gui.sh:1334 lib/checkout_op.tcl:306 +#: git-gui.sh:1491 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "Обновление информации о состоянии файлов…" -#: git-gui.sh:1390 +#: git-gui.sh:1551 msgid "Scanning for modified files ..." msgstr "Поиск измененных файлов…" -#: git-gui.sh:1454 +#: git-gui.sh:1629 msgid "Calling prepare-commit-msg hook..." msgstr "Вызов перехватчика prepare-commit-msg…" -#: git-gui.sh:1471 +#: git-gui.sh:1646 msgid "Commit declined by prepare-commit-msg hook." msgstr "Коммит прерван перехватчиком prepare-commit-msg." -#: git-gui.sh:1629 lib/browser.tcl:246 +#: git-gui.sh:1804 lib/browser.tcl:252 msgid "Ready." msgstr "Готово." -#: git-gui.sh:1787 +#: git-gui.sh:1968 #, tcl-format -msgid "Displaying only %s of %s files." -msgstr "Показано %s из %s файлов." +msgid "" +"Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s " +"files." +msgstr "Лимит отображаемых файлов достигнут (gui.maxfilesdisplayed = %s), не все %s файлы показаны." -#: git-gui.sh:1913 +#: git-gui.sh:2091 msgid "Unmodified" msgstr "Не изменено" -#: git-gui.sh:1915 +#: git-gui.sh:2093 msgid "Modified, not staged" msgstr "Изменено, не в индексе" -#: git-gui.sh:1916 git-gui.sh:1924 +#: git-gui.sh:2094 git-gui.sh:2106 msgid "Staged for commit" msgstr "В индексе для коммита" -#: git-gui.sh:1917 git-gui.sh:1925 +#: git-gui.sh:2095 git-gui.sh:2107 msgid "Portions staged for commit" msgstr "Части, в индексе для коммита" -#: git-gui.sh:1918 git-gui.sh:1926 +#: git-gui.sh:2096 git-gui.sh:2108 msgid "Staged for commit, missing" msgstr "В индексе для коммита, отсутствует" -#: git-gui.sh:1920 +#: git-gui.sh:2098 msgid "File type changed, not staged" msgstr "Тип файла изменён, не в индексе" -#: git-gui.sh:1921 +#: git-gui.sh:2099 git-gui.sh:2100 +msgid "File type changed, old type staged for commit" +msgstr "Тип файла изменён, старый тип файла в индексе" + +#: git-gui.sh:2101 msgid "File type changed, staged" msgstr "Тип файла изменён, в индексе" -#: git-gui.sh:1923 +#: git-gui.sh:2102 +msgid "File type change staged, modification not staged" +msgstr "Изменение типа файла в индексе, изменение не в индексе" + +#: git-gui.sh:2103 +msgid "File type change staged, file missing" +msgstr "Изменение типа файла в индексе, файл не найден" + +#: git-gui.sh:2105 msgid "Untracked, not staged" msgstr "Не отслеживается, не в индексе" -#: git-gui.sh:1928 +#: git-gui.sh:2110 msgid "Missing" msgstr "Отсутствует" -#: git-gui.sh:1929 +#: git-gui.sh:2111 msgid "Staged for removal" msgstr "В индексе для удаления" -#: git-gui.sh:1930 +#: git-gui.sh:2112 msgid "Staged for removal, still present" msgstr "В индексе для удаления, еще не удалено" -#: git-gui.sh:1932 git-gui.sh:1933 git-gui.sh:1934 git-gui.sh:1935 -#: git-gui.sh:1936 git-gui.sh:1937 +#: git-gui.sh:2114 git-gui.sh:2115 git-gui.sh:2116 git-gui.sh:2117 +#: git-gui.sh:2118 git-gui.sh:2119 msgid "Requires merge resolution" msgstr "Требуется разрешение конфликта при слиянии" -#: git-gui.sh:1972 -msgid "Starting gitk... please wait..." -msgstr "Запускается gitk… Подождите, пожалуйста…" - -#: git-gui.sh:1984 +#: git-gui.sh:2164 msgid "Couldn't find gitk in PATH" msgstr "gitk не найден в PATH." -#: git-gui.sh:2043 +#: git-gui.sh:2210 git-gui.sh:2245 +#, tcl-format +msgid "Starting %s... please wait..." +msgstr "Запускается %s… Подождите, пожалуйста…" + +#: git-gui.sh:2224 msgid "Couldn't find git gui in PATH" msgstr "git gui не найден в PATH." -#: git-gui.sh:2455 lib/choose_repository.tcl:36 +#: git-gui.sh:2726 lib/choose_repository.tcl:53 msgid "Repository" msgstr "Репозиторий" -#: git-gui.sh:2456 +#: git-gui.sh:2727 msgid "Edit" -msgstr "Редактировать" +msgstr "Правка" -#: git-gui.sh:2458 lib/choose_rev.tcl:561 +#: git-gui.sh:2729 lib/choose_rev.tcl:567 msgid "Branch" msgstr "Ветка" -#: git-gui.sh:2461 lib/choose_rev.tcl:548 +#: git-gui.sh:2732 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "Коммит" -#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168 +#: git-gui.sh:2735 lib/merge.tcl:127 lib/merge.tcl:174 msgid "Merge" msgstr "Слияние" -#: git-gui.sh:2465 lib/choose_rev.tcl:557 +#: git-gui.sh:2736 lib/choose_rev.tcl:563 msgid "Remote" msgstr "Внешние репозитории" -#: git-gui.sh:2468 +#: git-gui.sh:2739 msgid "Tools" msgstr "Вспомогательные операции" -#: git-gui.sh:2477 +#: git-gui.sh:2748 msgid "Explore Working Copy" msgstr "Просмотр рабочего каталога" -#: git-gui.sh:2483 +#: git-gui.sh:2763 +msgid "Git Bash" +msgstr "Git Bash" + +#: git-gui.sh:2772 msgid "Browse Current Branch's Files" msgstr "Просмотреть файлы текущей ветки" -#: git-gui.sh:2487 +#: git-gui.sh:2776 msgid "Browse Branch Files..." msgstr "Показать файлы ветки…" -#: git-gui.sh:2492 +#: git-gui.sh:2781 msgid "Visualize Current Branch's History" msgstr "Показать историю текущей ветки" -#: git-gui.sh:2496 +#: git-gui.sh:2785 msgid "Visualize All Branch History" msgstr "Показать историю всех веток" -#: git-gui.sh:2503 +#: git-gui.sh:2792 #, tcl-format msgid "Browse %s's Files" msgstr "Показать файлы ветки %s" -#: git-gui.sh:2505 +#: git-gui.sh:2794 #, tcl-format msgid "Visualize %s's History" msgstr "Показать историю ветки %s" -#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67 +#: git-gui.sh:2799 lib/database.tcl:40 msgid "Database Statistics" msgstr "Статистика базы данных" -#: git-gui.sh:2513 lib/database.tcl:34 +#: git-gui.sh:2802 lib/database.tcl:33 msgid "Compress Database" msgstr "Сжать базу данных" -#: git-gui.sh:2516 +#: git-gui.sh:2805 msgid "Verify Database" msgstr "Проверить базу данных" -#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8 -#: lib/shortcut.tcl:40 lib/shortcut.tcl:72 +#: git-gui.sh:2812 git-gui.sh:2816 git-gui.sh:2820 msgid "Create Desktop Icon" msgstr "Создать ярлык на рабочем столе" -#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191 +#: git-gui.sh:2828 lib/choose_repository.tcl:209 lib/choose_repository.tcl:217 msgid "Quit" msgstr "Выход" -#: git-gui.sh:2547 +#: git-gui.sh:2836 msgid "Undo" msgstr "Отменить" -#: git-gui.sh:2550 +#: git-gui.sh:2839 msgid "Redo" msgstr "Повторить" -#: git-gui.sh:2554 git-gui.sh:3109 +#: git-gui.sh:2843 git-gui.sh:3461 msgid "Cut" msgstr "Вырезать" -#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259 +#: git-gui.sh:2846 git-gui.sh:3464 git-gui.sh:3540 git-gui.sh:3633 #: lib/console.tcl:69 msgid "Copy" msgstr "Копировать" -#: git-gui.sh:2560 git-gui.sh:3115 +#: git-gui.sh:2849 git-gui.sh:3467 msgid "Paste" msgstr "Вставить" -#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26 -#: lib/remote_branch_delete.tcl:38 +#: git-gui.sh:2852 git-gui.sh:3470 lib/remote_branch_delete.tcl:39 +#: lib/branch_delete.tcl:28 msgid "Delete" msgstr "Удалить" -#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71 +#: git-gui.sh:2856 git-gui.sh:3474 git-gui.sh:3637 lib/console.tcl:71 msgid "Select All" -msgstr "Выделить все" +msgstr "Выделить всё" -#: git-gui.sh:2576 +#: git-gui.sh:2865 msgid "Create..." msgstr "Создать…" -#: git-gui.sh:2582 +#: git-gui.sh:2871 msgid "Checkout..." msgstr "Перейти…" -#: git-gui.sh:2588 +#: git-gui.sh:2877 msgid "Rename..." msgstr "Переименовать…" -#: git-gui.sh:2593 +#: git-gui.sh:2882 msgid "Delete..." msgstr "Удалить…" -#: git-gui.sh:2598 +#: git-gui.sh:2887 msgid "Reset..." msgstr "Сбросить…" -#: git-gui.sh:2608 +#: git-gui.sh:2897 msgid "Done" msgstr "Завершено" -#: git-gui.sh:2610 +#: git-gui.sh:2899 msgid "Commit@@verb" msgstr "Закоммитить" -#: git-gui.sh:2619 git-gui.sh:3050 -msgid "New Commit" -msgstr "Новый коммит" - -#: git-gui.sh:2627 git-gui.sh:3057 +#: git-gui.sh:2908 git-gui.sh:3400 msgid "Amend Last Commit" msgstr "Исправить последний коммит" -#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99 +#: git-gui.sh:2918 git-gui.sh:3361 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "Перечитать" -#: git-gui.sh:2643 +#: git-gui.sh:2924 msgid "Stage To Commit" msgstr "Добавить в индекс" -#: git-gui.sh:2649 +#: git-gui.sh:2930 msgid "Stage Changed Files To Commit" msgstr "Добавить изменённые файлы в индекс" -#: git-gui.sh:2655 +#: git-gui.sh:2936 msgid "Unstage From Commit" -msgstr "Убрать из издекса" +msgstr "Убрать из индекса" -#: git-gui.sh:2661 lib/index.tcl:412 +#: git-gui.sh:2942 lib/index.tcl:521 msgid "Revert Changes" msgstr "Обратить изменения" -#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341 +#: git-gui.sh:2950 git-gui.sh:3700 git-gui.sh:3731 msgid "Show Less Context" msgstr "Меньше контекста" -#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345 +#: git-gui.sh:2954 git-gui.sh:3704 git-gui.sh:3735 msgid "Show More Context" msgstr "Больше контекста" -#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133 +#: git-gui.sh:2961 git-gui.sh:3374 git-gui.sh:3485 msgid "Sign Off" msgstr "Вставить Signed-off-by" -#: git-gui.sh:2696 +#: git-gui.sh:2977 msgid "Local Merge..." msgstr "Локальное слияние…" -#: git-gui.sh:2701 +#: git-gui.sh:2982 msgid "Abort Merge..." msgstr "Прервать слияние…" -#: git-gui.sh:2713 git-gui.sh:2741 +#: git-gui.sh:2994 git-gui.sh:3022 msgid "Add..." msgstr "Добавить…" -#: git-gui.sh:2717 +#: git-gui.sh:2998 msgid "Push..." msgstr "Отправить…" -#: git-gui.sh:2721 +#: git-gui.sh:3002 msgid "Delete Branch..." msgstr "Удалить ветку…" -#: git-gui.sh:2731 git-gui.sh:3292 +#: git-gui.sh:3012 git-gui.sh:3666 msgid "Options..." msgstr "Настройки…" -#: git-gui.sh:2742 +#: git-gui.sh:3023 msgid "Remove..." msgstr "Удалить…" -#: git-gui.sh:2751 lib/choose_repository.tcl:50 +#: git-gui.sh:3032 lib/choose_repository.tcl:67 msgid "Help" -msgstr "Помощь" +msgstr "Справка" -#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14 -#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53 +#: git-gui.sh:3036 git-gui.sh:3040 lib/choose_repository.tcl:61 +#: lib/choose_repository.tcl:70 lib/about.tcl:14 #, tcl-format msgid "About %s" msgstr "О %s" -#: git-gui.sh:2783 +#: git-gui.sh:3064 msgid "Online Documentation" msgstr "Документация в интернете" -#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56 +#: git-gui.sh:3067 lib/choose_repository.tcl:64 lib/choose_repository.tcl:73 msgid "Show SSH Key" msgstr "Показать ключ SSH" -#: git-gui.sh:2893 +#: git-gui.sh:3097 git-gui.sh:3229 +msgid "usage:" +msgstr "использование:" + +#: git-gui.sh:3101 git-gui.sh:3233 +msgid "Usage" +msgstr "Использование" + +#: git-gui.sh:3182 lib/blame.tcl:575 +msgid "Error" +msgstr "Ошибка" + +#: git-gui.sh:3213 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" msgstr "критическая ошибка: %s: нет такого файла или каталога" -#: git-gui.sh:2926 +#: git-gui.sh:3246 msgid "Current Branch:" msgstr "Текущая ветка:" -#: git-gui.sh:2947 -msgid "Staged Changes (Will Commit)" -msgstr "Изменения в индексе (будут закоммичены)" - -#: git-gui.sh:2967 +#: git-gui.sh:3271 msgid "Unstaged Changes" msgstr "Изменено (не будет сохранено)" -#: git-gui.sh:3017 +#: git-gui.sh:3293 +msgid "Staged Changes (Will Commit)" +msgstr "Изменения в индексе (будут закоммичены)" + +#: git-gui.sh:3367 msgid "Stage Changed" msgstr "Индексировать всё" -#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193 +#: git-gui.sh:3386 lib/transport.tcl:137 msgid "Push" msgstr "Отправить" -#: git-gui.sh:3071 +#: git-gui.sh:3413 msgid "Initial Commit Message:" msgstr "Сообщение первого коммита:" -#: git-gui.sh:3072 +#: git-gui.sh:3414 msgid "Amended Commit Message:" msgstr "Сообщение исправленного коммита:" -#: git-gui.sh:3073 +#: git-gui.sh:3415 msgid "Amended Initial Commit Message:" msgstr "Сообщение исправленного первого коммита:" -#: git-gui.sh:3074 +#: git-gui.sh:3416 msgid "Amended Merge Commit Message:" msgstr "Сообщение исправленного слияния:" -#: git-gui.sh:3075 +#: git-gui.sh:3417 msgid "Merge Commit Message:" msgstr "Сообщение слияния:" -#: git-gui.sh:3076 +#: git-gui.sh:3418 msgid "Commit Message:" msgstr "Сообщение коммита:" -#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73 +#: git-gui.sh:3477 git-gui.sh:3641 lib/console.tcl:73 msgid "Copy All" msgstr "Копировать все" -#: git-gui.sh:3149 lib/blame.tcl:104 +#: git-gui.sh:3501 lib/blame.tcl:106 msgid "File:" msgstr "Файл:" -#: git-gui.sh:3255 +#: git-gui.sh:3549 lib/choose_repository.tcl:1100 +msgid "Open" +msgstr "Открыть" + +#: git-gui.sh:3629 msgid "Refresh" msgstr "Обновить" -#: git-gui.sh:3276 +#: git-gui.sh:3650 msgid "Decrease Font Size" msgstr "Уменьшить размер шрифта" -#: git-gui.sh:3280 +#: git-gui.sh:3654 msgid "Increase Font Size" msgstr "Увеличить размер шрифта" -#: git-gui.sh:3288 lib/blame.tcl:281 +#: git-gui.sh:3662 lib/blame.tcl:296 msgid "Encoding" msgstr "Кодировка" -#: git-gui.sh:3299 +#: git-gui.sh:3673 msgid "Apply/Reverse Hunk" msgstr "Применить/Убрать изменение" -#: git-gui.sh:3304 +#: git-gui.sh:3678 msgid "Apply/Reverse Line" msgstr "Применить/Убрать строку" -#: git-gui.sh:3323 +#: git-gui.sh:3684 git-gui.sh:3794 git-gui.sh:3805 +msgid "Revert Hunk" +msgstr "Обратить изменения блока" + +#: git-gui.sh:3689 git-gui.sh:3801 git-gui.sh:3812 +msgid "Revert Line" +msgstr "Обратить изменения строки" + +#: git-gui.sh:3694 git-gui.sh:3791 +msgid "Undo Last Revert" +msgstr "Отменить последнее обращение изменений" + +#: git-gui.sh:3713 msgid "Run Merge Tool" msgstr "Запустить программу слияния" -#: git-gui.sh:3328 +#: git-gui.sh:3718 msgid "Use Remote Version" msgstr "Взять внешнюю версию" -#: git-gui.sh:3332 +#: git-gui.sh:3722 msgid "Use Local Version" msgstr "Взять локальную версию" -#: git-gui.sh:3336 +#: git-gui.sh:3726 msgid "Revert To Base" msgstr "Обратить изменения" -#: git-gui.sh:3354 +#: git-gui.sh:3744 msgid "Visualize These Changes In The Submodule" msgstr "Показать эти изменения подмодуля" -#: git-gui.sh:3358 +#: git-gui.sh:3748 msgid "Visualize Current Branch History In The Submodule" msgstr "Показать историю текущей ветки подмодуля" -#: git-gui.sh:3362 +#: git-gui.sh:3752 msgid "Visualize All Branch History In The Submodule" msgstr "Показать историю всех веток подмодуля" -#: git-gui.sh:3367 +#: git-gui.sh:3757 msgid "Start git gui In The Submodule" msgstr "Запустить git gui в подмодуле" -#: git-gui.sh:3389 +#: git-gui.sh:3793 msgid "Unstage Hunk From Commit" msgstr "Убрать блок из индекса" -#: git-gui.sh:3391 +#: git-gui.sh:3797 msgid "Unstage Lines From Commit" msgstr "Убрать строки из индекса" -#: git-gui.sh:3393 +#: git-gui.sh:3798 git-gui.sh:3809 +msgid "Revert Lines" +msgstr "Обратить изменения строк" + +#: git-gui.sh:3800 msgid "Unstage Line From Commit" msgstr "Убрать строку из индекса" -#: git-gui.sh:3396 +#: git-gui.sh:3804 msgid "Stage Hunk For Commit" msgstr "Добавить блок в индекс" -#: git-gui.sh:3398 +#: git-gui.sh:3808 msgid "Stage Lines For Commit" msgstr "Добавить строки в индекс" -#: git-gui.sh:3400 +#: git-gui.sh:3811 msgid "Stage Line For Commit" msgstr "Добавить строку в индекс" -#: git-gui.sh:3424 +#: git-gui.sh:3861 msgid "Initializing..." msgstr "Инициализация…" -#: git-gui.sh:3541 +#: git-gui.sh:4017 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -533,14 +579,14 @@ msgid "" "\n" msgstr "Возможны ошибки в переменных окружения.\n\nПеременные окружения, которые возможно\nбудут проигнорированы командами Git,\nзапущенными из %s\n\n" -#: git-gui.sh:3570 +#: git-gui.sh:4046 msgid "" "\n" "This is due to a known issue with the\n" "Tcl binary distributed by Cygwin." msgstr "\nЭто известная проблема с Tcl,\nраспространяемым Cygwin." -#: git-gui.sh:3575 +#: git-gui.sh:4051 #, tcl-format msgid "" "\n" @@ -551,357 +597,201 @@ msgid "" "~/.gitconfig file.\n" msgstr "\n\nВместо использования %s можно\nсохранить значения user.name и\nuser.email в Вашем персональном\nфайле ~/.gitconfig.\n" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "git-gui - графический пользовательский интерфейс к Git." - -#: lib/blame.tcl:72 -msgid "File Viewer" -msgstr "Просмотр файла" - -#: lib/blame.tcl:78 -msgid "Commit:" -msgstr "Коммит:" - -#: lib/blame.tcl:271 -msgid "Copy Commit" -msgstr "Копировать SHA-1" - -#: lib/blame.tcl:275 -msgid "Find Text..." -msgstr "Найти текст…" - -#: lib/blame.tcl:284 -msgid "Do Full Copy Detection" -msgstr "Провести полный поиск копий" +#: lib/spellcheck.tcl:57 +msgid "Unsupported spell checker" +msgstr "Неподдерживаемая программа проверки правописания" -#: lib/blame.tcl:288 -msgid "Show History Context" -msgstr "Показать исторический контекст" +#: lib/spellcheck.tcl:65 +msgid "Spell checking is unavailable" +msgstr "Проверка правописания не доступна" -#: lib/blame.tcl:291 -msgid "Blame Parent Commit" -msgstr "Авторы родительского коммита" +#: lib/spellcheck.tcl:68 +msgid "Invalid spell checking configuration" +msgstr "Неправильная конфигурация программы проверки правописания" -#: lib/blame.tcl:450 +#: lib/spellcheck.tcl:70 #, tcl-format -msgid "Reading %s..." -msgstr "Чтение %s…" - -#: lib/blame.tcl:557 -msgid "Loading copy/move tracking annotations..." -msgstr "Загрузка аннотации копирований/переименований…" - -#: lib/blame.tcl:577 -msgid "lines annotated" -msgstr "строк прокомментировано" +msgid "Reverting dictionary to %s." +msgstr "Словарь вернут к %s." -#: lib/blame.tcl:769 -msgid "Loading original location annotations..." -msgstr "Загрузка аннотаций первоначального положения объекта…" +#: lib/spellcheck.tcl:73 +msgid "Spell checker silently failed on startup" +msgstr "Программа проверки правописания не смогла запуститься" -#: lib/blame.tcl:772 -msgid "Annotation complete." -msgstr "Аннотация завершена." +#: lib/spellcheck.tcl:80 +msgid "Unrecognized spell checker" +msgstr "Нераспознанная программа проверки правописания" -#: lib/blame.tcl:802 -msgid "Busy" -msgstr "Занят" +#: lib/spellcheck.tcl:186 +msgid "No Suggestions" +msgstr "Исправлений не найдено" -#: lib/blame.tcl:803 -msgid "Annotation process is already running." -msgstr "Аннотация уже запущена" +#: lib/spellcheck.tcl:388 +msgid "Unexpected EOF from spell checker" +msgstr "Программа проверки правописания прервала передачу данных" -#: lib/blame.tcl:842 -msgid "Running thorough copy detection..." -msgstr "Выполнение полного поиска копий…" +#: lib/spellcheck.tcl:392 +msgid "Spell Checker Failed" +msgstr "Ошибка проверки правописания" -#: lib/blame.tcl:910 -msgid "Loading annotation..." -msgstr "Загрузка аннотации…" +#: lib/transport.tcl:6 lib/remote_add.tcl:132 +#, tcl-format +msgid "fetch %s" +msgstr "извлечение %s" -#: lib/blame.tcl:963 -msgid "Author:" -msgstr "Автор:" +#: lib/transport.tcl:7 +#, tcl-format +msgid "Fetching new changes from %s" +msgstr "Извлечение изменений из %s " -#: lib/blame.tcl:967 -msgid "Committer:" -msgstr "Коммитер:" +#: lib/transport.tcl:18 +#, tcl-format +msgid "remote prune %s" +msgstr "чистка внешнего %s" -#: lib/blame.tcl:972 -msgid "Original File:" -msgstr "Исходный файл:" +#: lib/transport.tcl:19 +#, tcl-format +msgid "Pruning tracking branches deleted from %s" +msgstr "Чистка отслеживаемых веток, удалённых из %s" -#: lib/blame.tcl:1020 -msgid "Cannot find HEAD commit:" -msgstr "Не удалось найти текущее состояние:" +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "извлечь со всех внешних репозиториев" -#: lib/blame.tcl:1075 -msgid "Cannot find parent commit:" -msgstr "Не удалось найти родительское состояние:" +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "Получение изменений со всех внешних репозиториев" -#: lib/blame.tcl:1090 -msgid "Unable to display parent" -msgstr "Не могу показать предка" +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "чистка всех внешних репозиториев" -#: lib/blame.tcl:1091 lib/diff.tcl:320 -msgid "Error loading diff:" -msgstr "Ошибка загрузки изменений:" +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" +msgstr "Чистка отслеживаемых веток, удалённых со всех внешних репозиториев" -#: lib/blame.tcl:1231 -msgid "Originally By:" -msgstr "Источник:" +#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110 +#: lib/remote_add.tcl:162 +#, tcl-format +msgid "push %s" +msgstr "отправить %s" -#: lib/blame.tcl:1237 -msgid "In File:" -msgstr "Файл:" +#: lib/transport.tcl:55 +#, tcl-format +msgid "Pushing changes to %s" +msgstr "Отправка изменений в %s " -#: lib/blame.tcl:1242 -msgid "Copied Or Moved Here By:" -msgstr "Скопировано/перемещено в:" +#: lib/transport.tcl:93 +#, tcl-format +msgid "Mirroring to %s" +msgstr "Точное копирование в %s" -#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19 -msgid "Checkout Branch" -msgstr "Перейти на ветку" +#: lib/transport.tcl:111 +#, tcl-format +msgid "Pushing %s %s to %s" +msgstr "Отправка %s %s в %s" -#: lib/branch_checkout.tcl:23 -msgid "Checkout" -msgstr "Перейти" +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "Отправить ветки" -#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35 -#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282 -#: lib/checkout_op.tcl:579 lib/choose_font.tcl:43 lib/merge.tcl:172 -#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42 -#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352 -#: lib/transport.tcl:108 +#: lib/transport.tcl:141 lib/checkout_op.tcl:580 lib/remote_add.tcl:34 +#: lib/browser.tcl:292 lib/branch_checkout.tcl:30 lib/branch_rename.tcl:32 +#: lib/choose_font.tcl:45 lib/option.tcl:127 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/remote_branch_delete.tcl:43 +#: lib/branch_create.tcl:37 lib/branch_delete.tcl:34 lib/merge.tcl:178 msgid "Cancel" msgstr "Отмена" -#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328 -msgid "Revision" -msgstr "Версия" - -#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280 -msgid "Options" -msgstr "Настройки" - -#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "Извлечь изменения из внешней ветки" +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "Исходные ветки" -#: lib/branch_checkout.tcl:44 -msgid "Detach From Local Branch" -msgstr "Отсоединить от локальной ветки" +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "Репозиторий назначения" -#: lib/branch_create.tcl:22 -msgid "Create Branch" -msgstr "Создать ветку" +#: lib/transport.tcl:165 lib/remote_branch_delete.tcl:51 +msgid "Remote:" +msgstr "внешний:" -#: lib/branch_create.tcl:27 -msgid "Create New Branch" -msgstr "Создать новую ветку" +#: lib/transport.tcl:187 lib/remote_branch_delete.tcl:72 +msgid "Arbitrary Location:" +msgstr "Указанное положение:" -#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381 -msgid "Create" -msgstr "Создать" +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "Настройки отправки" -#: lib/branch_create.tcl:40 -msgid "Branch Name" -msgstr "Имя ветки" +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" +msgstr "Принудительно перезаписать существующую ветку (возможна потеря изменений)" -#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50 -msgid "Name:" -msgstr "Название:" +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "Использовать thin pack (для медленных сетевых подключений)" -#: lib/branch_create.tcl:58 -msgid "Match Tracking Branch Name" -msgstr "Соответствовать имени отслеживаемой ветки" +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "Передать метки" -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "Начальная версия" +#: lib/transport.tcl:229 +#, tcl-format +msgid "%s (%s): Push" +msgstr "%s (%s): Отправка" -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "Обновить имеющуюся ветку:" +#: lib/checkout_op.tcl:85 +#, tcl-format +msgid "Fetching %s from %s" +msgstr "Извлечение %s из %s " -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "Нет" +#: lib/checkout_op.tcl:133 +#, tcl-format +msgid "fatal: Cannot resolve %s" +msgstr "критическая ошибка: невозможно разрешить %s" -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "Только Fast Forward" +#: lib/checkout_op.tcl:146 lib/sshkey.tcl:58 lib/console.tcl:81 +#: lib/database.tcl:30 +msgid "Close" +msgstr "Закрыть" -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 -msgid "Reset" -msgstr "Сброс" +#: lib/checkout_op.tcl:175 +#, tcl-format +msgid "Branch '%s' does not exist." +msgstr "Ветка «%s» не существует." -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "После создания сделать текущей" +#: lib/checkout_op.tcl:194 +#, tcl-format +msgid "Failed to configure simplified git-pull for '%s'." +msgstr "Ошибка создания упрощённой конфигурации git pull для «%s»." -#: lib/branch_create.tcl:131 -msgid "Please select a tracking branch." -msgstr "Укажите отлеживаемую ветку." +#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102 +#, tcl-format +msgid "Branch '%s' already exists." +msgstr "Ветка «%s» уже существует." -#: lib/branch_create.tcl:140 +#: lib/checkout_op.tcl:229 #, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "Отслеживаемая ветка %s не является веткой на внешнем репозитории." +msgid "" +"Branch '%s' already exists.\n" +"\n" +"It cannot fast-forward to %s.\n" +"A merge is required." +msgstr "Ветка «%s» уже существует.\n\nОна не может быть перемотана вперед к %s.\nТребуется слияние." -#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86 -msgid "Please supply a branch name." -msgstr "Укажите имя ветки." +#: lib/checkout_op.tcl:243 +#, tcl-format +msgid "Merge strategy '%s' not supported." +msgstr "Неизвестная стратегия слияния «%s»." -#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 +#: lib/checkout_op.tcl:262 #, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "Недопустимое имя ветки «%s»." +msgid "Failed to update '%s'." +msgstr "Не удалось обновить «%s»." -#: lib/branch_delete.tcl:15 -msgid "Delete Branch" -msgstr "Удаление ветки" - -#: lib/branch_delete.tcl:20 -msgid "Delete Local Branch" -msgstr "Удалить локальную ветку" - -#: lib/branch_delete.tcl:37 -msgid "Local Branches" -msgstr "Локальные ветки" - -#: lib/branch_delete.tcl:52 -msgid "Delete Only If Merged Into" -msgstr "Удалить только в случае, если было слияние с" - -#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119 -msgid "Always (Do not perform merge checks)" -msgstr "Всегда (не выполнять проверку на слияние)" - -#: lib/branch_delete.tcl:103 -#, tcl-format -msgid "The following branches are not completely merged into %s:" -msgstr "Ветки, которые не полностью сливаются с %s:" - -#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217 -msgid "" -"Recovering deleted branches is difficult.\n" -"\n" -"Delete the selected branches?" -msgstr "Восстановить удаленные ветки сложно.\n\nПродолжить?" - -#: lib/branch_delete.tcl:141 -#, tcl-format -msgid "" -"Failed to delete branches:\n" -"%s" -msgstr "Не удалось удалить ветки:\n%s" - -#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22 -msgid "Rename Branch" -msgstr "Переименование ветки" - -#: lib/branch_rename.tcl:26 -msgid "Rename" -msgstr "Переименовать" - -#: lib/branch_rename.tcl:36 -msgid "Branch:" -msgstr "Ветка:" - -#: lib/branch_rename.tcl:39 -msgid "New Name:" -msgstr "Новое название:" - -#: lib/branch_rename.tcl:75 -msgid "Please select a branch to rename." -msgstr "Укажите ветку для переименования." - -#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202 -#, tcl-format -msgid "Branch '%s' already exists." -msgstr "Ветка «%s» уже существует." - -#: lib/branch_rename.tcl:117 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "Не удалось переименовать «%s». " - -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "Запуск…" - -#: lib/browser.tcl:26 -msgid "File Browser" -msgstr "Просмотр списка файлов" - -#: lib/browser.tcl:126 lib/browser.tcl:143 -#, tcl-format -msgid "Loading %s..." -msgstr "Загрузка %s…" - -#: lib/browser.tcl:187 -msgid "[Up To Parent]" -msgstr "[На уровень выше]" - -#: lib/browser.tcl:267 lib/browser.tcl:273 -msgid "Browse Branch Files" -msgstr "Показать файлы ветки" - -#: lib/browser.tcl:278 lib/choose_repository.tcl:398 -#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497 -#: lib/choose_repository.tcl:1028 -msgid "Browse" -msgstr "Показать" - -#: lib/checkout_op.tcl:85 -#, tcl-format -msgid "Fetching %s from %s" -msgstr "Извлечение %s из %s " - -#: lib/checkout_op.tcl:133 -#, tcl-format -msgid "fatal: Cannot resolve %s" -msgstr "критическая ошибка: невозможно разрешить %s" - -#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31 -#: lib/sshkey.tcl:53 -msgid "Close" -msgstr "Закрыть" - -#: lib/checkout_op.tcl:175 -#, tcl-format -msgid "Branch '%s' does not exist." -msgstr "Ветка «%s» не существует." - -#: lib/checkout_op.tcl:194 -#, tcl-format -msgid "Failed to configure simplified git-pull for '%s'." -msgstr "Ошибка создания упрощённой конфигурации git pull для «%s»." - -#: lib/checkout_op.tcl:229 -#, tcl-format -msgid "" -"Branch '%s' already exists.\n" -"\n" -"It cannot fast-forward to %s.\n" -"A merge is required." -msgstr "Ветка «%s» уже существует.\n\nОна не может быть перемотана вперед к %s.\nТребуется слияние." - -#: lib/checkout_op.tcl:243 -#, tcl-format -msgid "Merge strategy '%s' not supported." -msgstr "Неизвестная стратегия слияния «%s»." - -#: lib/checkout_op.tcl:262 -#, tcl-format -msgid "Failed to update '%s'." -msgstr "Не удалось обновить «%s»." - -#: lib/checkout_op.tcl:274 -msgid "Staging area (index) is already locked." -msgstr "Рабочая область заблокирована другим процессом." +#: lib/checkout_op.tcl:274 +msgid "Staging area (index) is already locked." +msgstr "Рабочая область заблокирована другим процессом." #: lib/checkout_op.tcl:289 msgid "" @@ -921,51 +811,55 @@ msgstr "Обновление рабочего каталога из «%s»…" msgid "files checked out" msgstr "файлы извлечены" -#: lib/checkout_op.tcl:376 +#: lib/checkout_op.tcl:377 #, tcl-format msgid "Aborted checkout of '%s' (file level merging is required)." msgstr "Прерван переход на «%s» (требуется слияние содержимого файлов)" -#: lib/checkout_op.tcl:377 +#: lib/checkout_op.tcl:378 msgid "File level merge required." msgstr "Требуется слияние содержания файлов." -#: lib/checkout_op.tcl:381 +#: lib/checkout_op.tcl:382 #, tcl-format msgid "Staying on branch '%s'." msgstr "Ветка «%s» остаётся текущей." -#: lib/checkout_op.tcl:452 +#: lib/checkout_op.tcl:453 msgid "" "You are no longer on a local branch.\n" "\n" "If you wanted to be on a branch, create one now starting from 'This Detached Checkout'." msgstr "Вы более не находитесь на локальной ветке.\n\nЕсли вы хотите снова вернуться к какой-нибудь ветке, создайте её сейчас, начиная с «Текущего отсоединенного состояния»." -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 +#: lib/checkout_op.tcl:504 lib/checkout_op.tcl:508 #, tcl-format msgid "Checked out '%s'." msgstr "Выполнен переход на «%s»." -#: lib/checkout_op.tcl:535 +#: lib/checkout_op.tcl:536 #, tcl-format msgid "Resetting '%s' to '%s' will lose the following commits:" msgstr "Сброс «%s» на «%s» приведет к потере следующих коммитов:" -#: lib/checkout_op.tcl:557 +#: lib/checkout_op.tcl:558 msgid "Recovering lost commits may not be easy." msgstr "Восстановить потерянные коммиты будет сложно." -#: lib/checkout_op.tcl:562 +#: lib/checkout_op.tcl:563 #, tcl-format msgid "Reset '%s'?" msgstr "Сбросить «%s»?" -#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343 +#: lib/checkout_op.tcl:568 lib/tools_dlg.tcl:336 lib/merge.tcl:170 msgid "Visualize" msgstr "Наглядно" -#: lib/checkout_op.tcl:635 +#: lib/checkout_op.tcl:572 lib/branch_create.tcl:85 +msgid "Reset" +msgstr "Сброс" + +#: lib/checkout_op.tcl:636 #, tcl-format msgid "" "Failed to set current branch.\n" @@ -975,576 +869,498 @@ msgid "" "This should not have occurred. %s will now close and give up." msgstr "Не удалось установить текущую ветку.\n\nВаш рабочий каталог обновлён только частично. Были обновлены все файлы кроме служебных файлов Git. \n\nЭтого не должно было произойти. %s завершается." -#: lib/choose_font.tcl:39 -msgid "Select" -msgstr "Выбрать" +#: lib/remote_add.tcl:20 +#, tcl-format +msgid "%s (%s): Add Remote" +msgstr "%s (%s): Добавление внешнего репозитория" -#: lib/choose_font.tcl:53 -msgid "Font Family" -msgstr "Шрифт" +#: lib/remote_add.tcl:25 +msgid "Add New Remote" +msgstr "Добавить внешний репозиторий" -#: lib/choose_font.tcl:74 -msgid "Font Size" -msgstr "Размер шрифта" +#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 +msgid "Add" +msgstr "Добавить" -#: lib/choose_font.tcl:91 -msgid "Font Example" -msgstr "Пример текста" +#: lib/remote_add.tcl:39 +msgid "Remote Details" +msgstr "Информация о внешнем репозитории" -#: lib/choose_font.tcl:103 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "Это пример текста.\nЕсли Вам нравится этот текст, это может быть Ваш шрифт." +#: lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 lib/branch_create.tcl:44 +msgid "Name:" +msgstr "Название:" -#: lib/choose_repository.tcl:28 -msgid "Git Gui" -msgstr "Git Gui" +#: lib/remote_add.tcl:50 +msgid "Location:" +msgstr "Положение:" -#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386 -msgid "Create New Repository" -msgstr "Создать новый репозиторий" +#: lib/remote_add.tcl:60 +msgid "Further Action" +msgstr "Следующая операция" -#: lib/choose_repository.tcl:93 -msgid "New..." -msgstr "Новый…" +#: lib/remote_add.tcl:63 +msgid "Fetch Immediately" +msgstr "Сразу извлечь изменения" -#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471 -msgid "Clone Existing Repository" -msgstr "Склонировать существующий репозиторий" +#: lib/remote_add.tcl:69 +msgid "Initialize Remote Repository and Push" +msgstr "Инициализировать внешний репозиторий и отправить" -#: lib/choose_repository.tcl:106 -msgid "Clone..." -msgstr "Клонировать…" +#: lib/remote_add.tcl:75 +msgid "Do Nothing Else Now" +msgstr "Больше ничего не делать" -#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016 -msgid "Open Existing Repository" -msgstr "Выбрать существующий репозиторий" +#: lib/remote_add.tcl:100 +msgid "Please supply a remote name." +msgstr "Укажите название внешнего репозитория." -#: lib/choose_repository.tcl:119 -msgid "Open..." -msgstr "Открыть…" +#: lib/remote_add.tcl:113 +#, tcl-format +msgid "'%s' is not an acceptable remote name." +msgstr "«%s» не является допустимым именем внешнего репозитория." -#: lib/choose_repository.tcl:132 -msgid "Recent Repositories" -msgstr "Недавние репозитории" +#: lib/remote_add.tcl:124 +#, tcl-format +msgid "Failed to add remote '%s' of location '%s'." +msgstr "Не удалось добавить «%s» из «%s». " -#: lib/choose_repository.tcl:138 -msgid "Open Recent Repository:" -msgstr "Открыть последний репозиторий" +#: lib/remote_add.tcl:133 +#, tcl-format +msgid "Fetching the %s" +msgstr "Извлечение %s" -#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313 -#: lib/choose_repository.tcl:320 +#: lib/remote_add.tcl:156 #, tcl-format -msgid "Failed to create repository %s:" -msgstr "Не удалось создать репозиторий %s:" +msgid "Do not know how to initialize repository at location '%s'." +msgstr "Невозможно инициализировать репозиторий в «%s»." -#: lib/choose_repository.tcl:391 -msgid "Directory:" -msgstr "Каталог:" +#: lib/remote_add.tcl:163 +#, tcl-format +msgid "Setting up the %s (at %s)" +msgstr "Настройка %s (в %s)" -#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550 -#: lib/choose_repository.tcl:1052 -msgid "Git Repository" -msgstr "Репозиторий" +#: lib/browser.tcl:17 +msgid "Starting..." +msgstr "Запуск…" -#: lib/choose_repository.tcl:448 +#: lib/browser.tcl:27 #, tcl-format -msgid "Directory %s already exists." -msgstr "Каталог '%s' уже существует." +msgid "%s (%s): File Browser" +msgstr "%s (%s): Просмотр списка файлов" -#: lib/choose_repository.tcl:452 +#: lib/browser.tcl:132 lib/browser.tcl:149 #, tcl-format -msgid "File %s already exists." -msgstr "Файл '%s' уже существует." +msgid "Loading %s..." +msgstr "Загрузка %s…" -#: lib/choose_repository.tcl:466 -msgid "Clone" -msgstr "Склонировать" +#: lib/browser.tcl:193 +msgid "[Up To Parent]" +msgstr "[На уровень выше]" -#: lib/choose_repository.tcl:479 -msgid "Source Location:" -msgstr "Исходное положение:" +#: lib/browser.tcl:275 +#, tcl-format +msgid "%s (%s): Browse Branch Files" +msgstr "%s (%s): Просмотр файлов ветки" -#: lib/choose_repository.tcl:490 -msgid "Target Directory:" -msgstr "Каталог назначения:" +#: lib/browser.tcl:282 +msgid "Browse Branch Files" +msgstr "Показать файлы ветки" -#: lib/choose_repository.tcl:502 -msgid "Clone Type:" -msgstr "Тип клона:" +#: lib/browser.tcl:288 lib/choose_repository.tcl:437 +#: lib/choose_repository.tcl:524 lib/choose_repository.tcl:533 +#: lib/choose_repository.tcl:1115 +msgid "Browse" +msgstr "Показать" -#: lib/choose_repository.tcl:508 -msgid "Standard (Fast, Semi-Redundant, Hardlinks)" -msgstr "Стандартный (Быстрый, полуизбыточный, «жесткие» ссылки)" +#: lib/browser.tcl:297 lib/branch_checkout.tcl:35 lib/tools_dlg.tcl:321 +msgid "Revision" +msgstr "Версия" -#: lib/choose_repository.tcl:514 -msgid "Full Copy (Slower, Redundant Backup)" -msgstr "Полная копия (Медленный, создает резервную копию)" +#: lib/index.tcl:6 +msgid "Unable to unlock the index." +msgstr "Не удалось разблокировать индекс" -#: lib/choose_repository.tcl:520 -msgid "Shared (Fastest, Not Recommended, No Backup)" -msgstr "Общий (Самый быстрый, не рекомендуется, без резервной копии)" +#: lib/index.tcl:30 +msgid "Index Error" +msgstr "Ошибка в индексе" -#: lib/choose_repository.tcl:556 lib/choose_repository.tcl:603 -#: lib/choose_repository.tcl:749 lib/choose_repository.tcl:819 -#: lib/choose_repository.tcl:1058 lib/choose_repository.tcl:1066 -#, tcl-format -msgid "Not a Git repository: %s" -msgstr "Каталог не является репозиторием: %s" +#: lib/index.tcl:32 +msgid "" +"Updating the Git index failed. A rescan will be automatically started to " +"resynchronize git-gui." +msgstr "Не удалось обновить индекс Git. Состояние репозитория будет перечитано автоматически." -#: lib/choose_repository.tcl:592 -msgid "Standard only available for local repository." -msgstr "Стандартный клон возможен только для локального репозитория." +#: lib/index.tcl:43 +msgid "Continue" +msgstr "Продолжить" -#: lib/choose_repository.tcl:596 -msgid "Shared only available for local repository." -msgstr "Общий клон возможен только для локального репозитория." +#: lib/index.tcl:46 +msgid "Unlock Index" +msgstr "Разблокировать индекс" + +#: lib/index.tcl:77 lib/index.tcl:146 lib/index.tcl:220 lib/index.tcl:587 +#: lib/choose_repository.tcl:999 +msgid "files" +msgstr "файлов" + +#: lib/index.tcl:326 +msgid "Unstaging selected files from commit" +msgstr "Уборка выбранных файлов из индекса" -#: lib/choose_repository.tcl:617 +#: lib/index.tcl:330 #, tcl-format -msgid "Location %s already exists." -msgstr "Путь '%s' уже существует." +msgid "Unstaging %s from commit" +msgstr "Удаление %s из индекса" -#: lib/choose_repository.tcl:628 -msgid "Failed to configure origin" -msgstr "Не могу сконфигурировать исходный репозиторий." +#: lib/index.tcl:369 +msgid "Ready to commit." +msgstr "Готов для коммита." -#: lib/choose_repository.tcl:640 -msgid "Counting objects" -msgstr "Считаю объекты" +#: lib/index.tcl:378 +msgid "Adding selected files" +msgstr "Добавление выбранных файлов" -#: lib/choose_repository.tcl:641 -msgid "buckets" -msgstr "блоки" - -#: lib/choose_repository.tcl:665 +#: lib/index.tcl:382 #, tcl-format -msgid "Unable to copy objects/info/alternates: %s" -msgstr "Не могу скопировать objects/info/alternates: %s" +msgid "Adding %s" +msgstr "Добавление %s…" -#: lib/choose_repository.tcl:701 +#: lib/index.tcl:412 #, tcl-format -msgid "Nothing to clone from %s." -msgstr "Нечего клонировать с %s." +msgid "Stage %d untracked files?" +msgstr "Проиндексировать %d неотслеживаемые файла?" -#: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917 -#: lib/choose_repository.tcl:929 -msgid "The 'master' branch has not been initialized." -msgstr "Не инициализирована ветвь «master»." +#: lib/index.tcl:420 +msgid "Adding all changed files" +msgstr "Добавление всех измененных файлов" -#: lib/choose_repository.tcl:716 -msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "«Жесткие ссылки» недоступны. Будет использовано копирование." +#: lib/index.tcl:503 +#, tcl-format +msgid "Revert changes in file %s?" +msgstr "Обратить изменения в файле %s?" -#: lib/choose_repository.tcl:728 +#: lib/index.tcl:508 #, tcl-format -msgid "Cloning from %s" -msgstr "Клонирование %s" +msgid "Revert changes in these %i files?" +msgstr "Обратить изменения в %i файле(-ах)?" -#: lib/choose_repository.tcl:759 -msgid "Copying objects" -msgstr "Копирование objects" +#: lib/index.tcl:517 +msgid "Any unstaged changes will be permanently lost by the revert." +msgstr "Любые непроиндексированные изменения, будут потеряны при обращении изменений." -#: lib/choose_repository.tcl:760 -msgid "KiB" -msgstr "КБ" +#: lib/index.tcl:520 lib/index.tcl:563 +msgid "Do Nothing" +msgstr "Ничего не делать" -#: lib/choose_repository.tcl:784 +#: lib/index.tcl:545 #, tcl-format -msgid "Unable to copy object: %s" -msgstr "Не могу скопировать объект: %s" +msgid "Delete untracked file %s?" +msgstr "Удалить неотслеживаемый файл %s?" -#: lib/choose_repository.tcl:794 -msgid "Linking objects" -msgstr "Создание ссылок на objects" +#: lib/index.tcl:550 +#, tcl-format +msgid "Delete these %i untracked files?" +msgstr "Удалить %i неотслеживаемые файла?" -#: lib/choose_repository.tcl:795 -msgid "objects" -msgstr "объекты" +#: lib/index.tcl:560 +msgid "Files will be permanently deleted." +msgstr "Файлы будут удалены навсегда." -#: lib/choose_repository.tcl:803 -#, tcl-format -msgid "Unable to hardlink object: %s" -msgstr "Не могу создать «жесткую ссылку» на объект: %s" +#: lib/index.tcl:564 +msgid "Delete Files" +msgstr "Удалить файлы" -#: lib/choose_repository.tcl:858 -msgid "Cannot fetch branches and objects. See console output for details." -msgstr "Не удалось извлечь ветки и объекты. Дополнительная информация на консоли." +#: lib/index.tcl:586 +msgid "Deleting" +msgstr "Удаление" -#: lib/choose_repository.tcl:869 -msgid "Cannot fetch tags. See console output for details." -msgstr "Не удалось извлечь метки. Дополнительная информация на консоли." +#: lib/index.tcl:665 +msgid "Encountered errors deleting files:\n" +msgstr "Возникшие ошибки при удалении файлов:\n" -#: lib/choose_repository.tcl:893 -msgid "Cannot determine HEAD. See console output for details." -msgstr "Не могу определить HEAD. Дополнительная информация на консоли." +#: lib/index.tcl:674 +#, tcl-format +msgid "None of the %d selected files could be deleted." +msgstr "Не удалось удалить ни один из выбранных %d файлов." -#: lib/choose_repository.tcl:902 +#: lib/index.tcl:679 #, tcl-format -msgid "Unable to cleanup %s" -msgstr "Не могу очистить %s" +msgid "%d of the %d selected files could not be deleted." +msgstr "Не удалось удалить %d из выбранных %d файлов." -#: lib/choose_repository.tcl:908 -msgid "Clone failed." -msgstr "Клонирование не удалось." +#: lib/index.tcl:726 +msgid "Reverting selected files" +msgstr "Обращение изменений в выбранных файлах" -#: lib/choose_repository.tcl:915 -msgid "No default branch obtained." -msgstr "Ветка по умолчанию не была получена." +#: lib/index.tcl:730 +#, tcl-format +msgid "Reverting %s" +msgstr "Обращение изменений в %s" -#: lib/choose_repository.tcl:926 +#: lib/branch_checkout.tcl:16 #, tcl-format -msgid "Cannot resolve %s as a commit." -msgstr "Не могу распознать %s как коммит." +msgid "%s (%s): Checkout Branch" +msgstr "%s (%s): Переход на ветку" -#: lib/choose_repository.tcl:938 -msgid "Creating working directory" -msgstr "Создаю рабочий каталог" +#: lib/branch_checkout.tcl:21 +msgid "Checkout Branch" +msgstr "Перейти на ветку" -#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130 -#: lib/index.tcl:198 -msgid "files" -msgstr "файлов" +#: lib/branch_checkout.tcl:26 +msgid "Checkout" +msgstr "Перейти" -#: lib/choose_repository.tcl:968 -msgid "Initial file checkout failed." -msgstr "Не удалось получить начальное состояние файлов репозитория." +#: lib/branch_checkout.tcl:39 lib/option.tcl:310 lib/branch_create.tcl:69 +msgid "Options" +msgstr "Настройки" -#: lib/choose_repository.tcl:1011 -msgid "Open" -msgstr "Открыть" +#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 +msgid "Fetch Tracking Branch" +msgstr "Извлечь изменения из внешней ветки" -#: lib/choose_repository.tcl:1021 -msgid "Repository:" -msgstr "Репозиторий:" +#: lib/branch_checkout.tcl:47 +msgid "Detach From Local Branch" +msgstr "Отсоединить от локальной ветки" -#: lib/choose_repository.tcl:1072 +#: lib/status_bar.tcl:263 #, tcl-format -msgid "Failed to open repository %s:" -msgstr "Не удалось открыть репозиторий %s:" +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%s … %*i из %*i %s (%3i%%)" -#: lib/choose_rev.tcl:53 -msgid "This Detached Checkout" -msgstr "Текущее отсоединенное состояние" +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "Отправить" -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "Выражение для определения версии:" +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "Удалить ссылку на внешний репозиторий" -#: lib/choose_rev.tcl:74 -msgid "Local Branch" -msgstr "Локальная ветка:" +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "Чистка" -#: lib/choose_rev.tcl:79 -msgid "Tracking Branch" -msgstr "Отслеживаемая ветка" +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "Извлечение из" -#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 -msgid "Tag" -msgstr "Метка" +#: lib/remote.tcl:249 lib/remote.tcl:253 lib/remote.tcl:258 lib/remote.tcl:264 +msgid "All" +msgstr "Все" -#: lib/choose_rev.tcl:317 +#: lib/branch_rename.tcl:15 #, tcl-format -msgid "Invalid revision: %s" -msgstr "Неверная версия: %s" +msgid "%s (%s): Rename Branch" +msgstr "%s (%s): Переименовать ветку" -#: lib/choose_rev.tcl:338 -msgid "No revision selected." -msgstr "Версия не указана." +#: lib/branch_rename.tcl:23 +msgid "Rename Branch" +msgstr "Переименование ветки" -#: lib/choose_rev.tcl:346 -msgid "Revision expression is empty." -msgstr "Пустое выражение для определения версии." +#: lib/branch_rename.tcl:28 +msgid "Rename" +msgstr "Переименовать" -#: lib/choose_rev.tcl:531 -msgid "Updated" -msgstr "Обновлено" +#: lib/branch_rename.tcl:38 +msgid "Branch:" +msgstr "Ветка:" -#: lib/choose_rev.tcl:559 -msgid "URL" -msgstr "Ссылка" +#: lib/branch_rename.tcl:46 +msgid "New Name:" +msgstr "Новое название:" -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this to amend.\n" -msgstr "Отсутствует коммиты для исправления.\n\nВы создаете начальный коммит, здесь еще нечего исправлять.\n" +#: lib/branch_rename.tcl:81 +msgid "Please select a branch to rename." +msgstr "Укажите ветку для переименования." -#: lib/commit.tcl:18 -msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully completed. You cannot amend the prior commit unless you first abort the current merge activity.\n" -msgstr "Невозможно исправить коммит во время слияния.\n\nТекущее слияние не завершено. Невозможно исправить предыдуий коммит, не прерывая эту операцию.\n" +#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 +msgid "Please supply a branch name." +msgstr "Укажите имя ветки." -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "Ошибка при загрузке данных для исправления коммита:" +#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 +#, tcl-format +msgid "'%s' is not an acceptable branch name." +msgstr "Недопустимое имя ветки «%s»." -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "Невозможно получить информацию об авторстве:" +#: lib/branch_rename.tcl:123 +#, tcl-format +msgid "Failed to rename '%s'." +msgstr "Не удалось переименовать «%s». " -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "Недопустимый GIT_COMMITTER_IDENT:" +#: lib/choose_font.tcl:41 +msgid "Select" +msgstr "Выбрать" -#: lib/commit.tcl:129 -#, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "предупреждение: Tcl не поддерживает кодировку «%s»." +#: lib/choose_font.tcl:55 +msgid "Font Family" +msgstr "Шрифт" -#: lib/commit.tcl:149 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A rescan must be performed before another commit can be created.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь. \n\nЭто будет сделано сейчас автоматически.\n" +#: lib/choose_font.tcl:76 +msgid "Font Size" +msgstr "Размер шрифта" -#: lib/commit.tcl:172 -#, tcl-format +#: lib/choose_font.tcl:93 +msgid "Font Example" +msgstr "Пример текста" + +#: lib/choose_font.tcl:105 msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file before committing.\n" -msgstr "Нельзя выполнить коммит с незавершённой операцией слияния.\n\nДля файла %s возник конфликт слияния. Разрешите конфликт и добавьте их в индекс перед выполнением коммита.\n" +"This is example text.\n" +"If you like this text, it can be your font." +msgstr "Это пример текста.\nЕсли Вам нравится этот текст, это может быть Ваш шрифт." -#: lib/commit.tcl:180 +#: lib/option.tcl:11 #, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "Обнаружено неизвестное состояние файла %s.\n\nФайл %s не может быть закоммичен этой программой.\n" +msgid "Invalid global encoding '%s'" +msgstr "Неверная глобальная кодировка «%s»" -#: lib/commit.tcl:188 -msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" -msgstr "Отсутствуют изменения для сохранения.\n\nДобавьте в индекс хотя бы один файл перед выполнением коммита.\n" +#: lib/option.tcl:19 +#, tcl-format +msgid "Invalid repo encoding '%s'" +msgstr "Неверная кодировка репозитория «%s»" -#: lib/commit.tcl:203 -msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" -msgstr "Укажите сообщение коммита.\n\nРекомендуется следующий формат сообщения:\n\n- в первой строке краткое описание сделанных изменений\n- вторая строка пустая\n- в оставшихся строках опишите, что дают ваши изменения\n" +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "Восстановить настройки по умолчанию" -#: lib/commit.tcl:234 -msgid "Calling pre-commit hook..." -msgstr "Вызов перехватчика pre-commit…" +#: lib/option.tcl:123 +msgid "Save" +msgstr "Сохранить" -#: lib/commit.tcl:249 -msgid "Commit declined by pre-commit hook." -msgstr "Коммит прерван переватчиком pre-commit." +#: lib/option.tcl:133 +#, tcl-format +msgid "%s Repository" +msgstr "Для репозитория %s" -#: lib/commit.tcl:272 -msgid "Calling commit-msg hook..." -msgstr "Вызов перехватчика commit-msg…" +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "Общие (для всех репозиториев)" -#: lib/commit.tcl:287 -msgid "Commit declined by commit-msg hook." -msgstr "Коммит прерван переватчиком commit-msg" +#: lib/option.tcl:140 +msgid "User Name" +msgstr "Имя пользователя" -#: lib/commit.tcl:300 -msgid "Committing changes..." -msgstr "Коммит изменений…" +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "Адрес электронной почты" -#: lib/commit.tcl:316 -msgid "write-tree failed:" -msgstr "Программа write-tree завершилась с ошибкой:" +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "Суммарное сообщение при слиянии" -#: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382 -msgid "Commit failed." -msgstr "Не удалось закоммитить изменения." +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "Уровень детальности сообщений при слиянии" -#: lib/commit.tcl:334 -#, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "Коммит %s похоже поврежден" +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "Показать отчет об изменениях после слияния" -#: lib/commit.tcl:339 -msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" -msgstr "Нет изменения для коммита.\n\nНи один файл не был изменен и не было слияния.\n\nСейчас автоматически запустится перечитывание репозитория.\n" +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "Использовать для слияния программу" -#: lib/commit.tcl:346 -msgid "No changes to commit." -msgstr "Нет изменения для коммита." +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "Доверять времени модификации файла" -#: lib/commit.tcl:360 -msgid "commit-tree failed:" -msgstr "Программа commit-tree завершилась с ошибкой:" +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "Чистка отслеживаемых веток при извлечении изменений" -#: lib/commit.tcl:381 -msgid "update-ref failed:" -msgstr "Программа update-ref завершилась с ошибкой:" - -#: lib/commit.tcl:469 -#, tcl-format -msgid "Created commit %s: %s" -msgstr "Создан коммит %s: %s " - -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "В процессе… пожалуйста, ждите…" - -#: lib/console.tcl:186 -msgid "Success" -msgstr "Процесс успешно завершен" - -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "Ошибка: не удалось выполнить команду" - -#: lib/database.tcl:43 -msgid "Number of loose objects" -msgstr "Количество несвязанных объектов" - -#: lib/database.tcl:44 -msgid "Disk space used by loose objects" -msgstr "Объем дискового пространства, занятый несвязанными объектами" - -#: lib/database.tcl:45 -msgid "Number of packed objects" -msgstr "Количество упакованных объектов" +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "Такое же имя, как и у отслеживаемой ветки" -#: lib/database.tcl:46 -msgid "Number of packs" -msgstr "Количество pack-файлов" +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "Использовать Textconv для просмотра различий и авторства" -#: lib/database.tcl:47 -msgid "Disk space used by packed objects" -msgstr "Объем дискового пространства, занятый упакованными объектами" +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "Поиск копий только в изменённых файлах" -#: lib/database.tcl:48 -msgid "Packed objects waiting for pruning" -msgstr "Несвязанные объекты, которые можно удалить" +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "Максимальная длинна списка недавних репозиториев" -#: lib/database.tcl:49 -msgid "Garbage files" -msgstr "Мусор" +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "Минимальное количество символов для поиска копий" -#: lib/database.tcl:72 -msgid "Compressing the object database" -msgstr "Сжатие базы объектов" +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "Радиус исторического контекста (в днях)" -#: lib/database.tcl:83 -msgid "Verifying the object database with fsck-objects" -msgstr "Проверка базы объектов при помощи fsck" +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "Число строк в контексте diff" -#: lib/database.tcl:107 -#, tcl-format -msgid "" -"This repository currently has approximately %i loose objects.\n" -"\n" -"To maintain optimal performance it is strongly recommended that you compress the database.\n" -"\n" -"Compress the database now?" -msgstr "Этот репозиторий сейчас содержит примерно %i свободных объектов\n\nДля лучшей производительности рекомендуется сжать базу данных.\n\nСжать базу данных сейчас?" +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "Дополнительные параметры для diff" -#: lib/date.tcl:25 -#, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Неправильная дата в репозитории: %s" +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "Ширина текста сообщения коммита" -#: lib/diff.tcl:64 -#, tcl-format -msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" -"\n" -"The modification date of this file was updated by another application, but the content within the file was not changed.\n" -"\n" -"A rescan will be automatically started to find other files which may have the same state." -msgstr "Изменений не обнаружено.\n\nв %s отсутствуют изменения.\n\nДата изменения файла была обновлена другой программой, но содержимое файла осталось прежним.\n\nСейчас будет запущено перечитывание репозитория, чтобы найти подобные файлы." +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "Шаблон для имени новой ветки" -#: lib/diff.tcl:104 -#, tcl-format -msgid "Loading diff of %s..." -msgstr "Загрузка изменений %s…" +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "Кодировка содержания файла по умолчанию" -#: lib/diff.tcl:125 -msgid "" -"LOCAL: deleted\n" -"REMOTE:\n" -msgstr "ЛОКАЛЬНО: удалён\nВНЕШНИЙ:\n" +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "Предупреждать перед коммитом в отделённый HEAD" -#: lib/diff.tcl:130 -msgid "" -"REMOTE: deleted\n" -"LOCAL:\n" -msgstr "ВНЕШНИЙ: удалён\nЛОКАЛЬНО:\n" +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "Индексирование неотслеживаемых файлов" -#: lib/diff.tcl:137 -msgid "LOCAL:\n" -msgstr "ЛОКАЛЬНО:\n" +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "Показать неотслеживаемые файлы" -#: lib/diff.tcl:140 -msgid "REMOTE:\n" -msgstr "ВНЕШНИЙ:\n" +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "Ширина табуляции" -#: lib/diff.tcl:202 lib/diff.tcl:319 +#: lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 lib/option.tcl:282 +#: lib/database.tcl:57 #, tcl-format -msgid "Unable to display %s" -msgstr "Не могу показать %s" +msgid "%s:" +msgstr "%s:" -#: lib/diff.tcl:203 -msgid "Error loading file:" -msgstr "Ошибка загрузки файла:" - -#: lib/diff.tcl:210 -msgid "Git Repository (subproject)" -msgstr "Репозиторий Git (подпроект)" +#: lib/option.tcl:210 +msgid "Change" +msgstr "Изменить" -#: lib/diff.tcl:222 -msgid "* Binary file (not showing content)." -msgstr "* Двоичный файл (содержимое не показано)" +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "Словарь для проверки правописания:" -#: lib/diff.tcl:227 -#, tcl-format -msgid "" -"* Untracked file is %d bytes.\n" -"* Showing only first %d bytes.\n" -msgstr "* Размер неотслеживаемого файла %d байт.\n* Показано первых %d байт.\n" +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "Изменить" -#: lib/diff.tcl:233 +#: lib/option.tcl:288 #, tcl-format -msgid "" -"\n" -"* Untracked file clipped here by %s.\n" -"* To see the entire file, use an external editor.\n" -msgstr "\n* Неотслеживаемый файл обрезан: %s.\n* Чтобы увидеть весь файл, используйте внешний редактор.\n" - -#: lib/diff.tcl:482 -msgid "Failed to unstage selected hunk." -msgstr "Не удалось исключить выбранную часть." +msgid "Choose %s" +msgstr "Выберите %s" -#: lib/diff.tcl:489 -msgid "Failed to stage selected hunk." -msgstr "Не удалось проиндексировать выбранный блок изменений." +#: lib/option.tcl:294 +msgid "pt." +msgstr "п." -#: lib/diff.tcl:568 -msgid "Failed to unstage selected line." -msgstr "Не удалось исключить выбранную строку." +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "Настройки" -#: lib/diff.tcl:576 -msgid "Failed to stage selected line." -msgstr "Не удалось проиндексировать выбранную строку." +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "Не удалось полностью сохранить настройки:" #: lib/encoding.tcl:443 msgid "Default" @@ -1559,824 +1375,1277 @@ msgstr "Системная (%s)" msgid "Other" msgstr "Другая" -#: lib/error.tcl:20 lib/error.tcl:114 -msgid "error" -msgstr "ошибка" +#: lib/tools.tcl:76 +#, tcl-format +msgid "Running %s requires a selected file." +msgstr "Запуск %s требует выбранного файла." -#: lib/error.tcl:36 -msgid "warning" -msgstr "предупреждение" +#: lib/tools.tcl:92 +#, tcl-format +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "Вы действительно хотите выполнить %1$s на «%2$s»?" -#: lib/error.tcl:94 -msgid "You must correct the above errors before committing." -msgstr "Перед коммитом, исправьте вышеуказанные ошибки." +#: lib/tools.tcl:96 +#, tcl-format +msgid "Are you sure you want to run %s?" +msgstr "Действительно запустить %s?" -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "Не удалось разблокировать индекс" +#: lib/tools.tcl:118 +#, tcl-format +msgid "Tool: %s" +msgstr "Вспомогательная операция: %s" -#: lib/index.tcl:15 -msgid "Index Error" -msgstr "Ошибка в индексе" +#: lib/tools.tcl:119 +#, tcl-format +msgid "Running: %s" +msgstr "Выполнение: %s" -#: lib/index.tcl:17 -msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." -msgstr "Не удалось обновить индекс Git. Состояние репозитория будет перечитано автоматически." +#: lib/tools.tcl:158 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "Программа %s завершилась успешно." -#: lib/index.tcl:28 -msgid "Continue" -msgstr "Продолжить" +#: lib/tools.tcl:160 +#, tcl-format +msgid "Tool failed: %s" +msgstr "Ошибка выполнения программы: %s" -#: lib/index.tcl:31 -msgid "Unlock Index" -msgstr "Разблокировать индекс" +#: lib/mergetool.tcl:8 +msgid "Force resolution to the base version?" +msgstr "Использовать базовую версию для разрешения конфликта?" -#: lib/index.tcl:289 -#, tcl-format -msgid "Unstaging %s from commit" -msgstr "Удаление %s из индекса" +#: lib/mergetool.tcl:9 +msgid "Force resolution to this branch?" +msgstr "Использовать версию из этой ветки для разрешения конфликта?" -#: lib/index.tcl:328 -msgid "Ready to commit." -msgstr "Готов для коммита." +#: lib/mergetool.tcl:10 +msgid "Force resolution to the other branch?" +msgstr "Использовать версию из другой ветки для разрешения конфликта?" -#: lib/index.tcl:341 +#: lib/mergetool.tcl:14 #, tcl-format -msgid "Adding %s" -msgstr "Добавление %s…" +msgid "" +"Note that the diff shows only conflicting changes.\n" +"\n" +"%s will be overwritten.\n" +"\n" +"This operation can be undone only by restarting the merge." +msgstr "Внимание! Список изменений показывает только конфликтующие отличия.\n\n%s будет переписан.\n\nЭто действие можно отменить только перезапуском операции слияния." -#: lib/index.tcl:398 +#: lib/mergetool.tcl:45 #, tcl-format -msgid "Revert changes in file %s?" -msgstr "Обратить изменения в файле %s?" +msgid "File %s seems to have unresolved conflicts, still stage?" +msgstr "Похоже, что файл %s содержит неразрешенные конфликты. Продолжить индексацию?" -#: lib/index.tcl:400 +#: lib/mergetool.tcl:60 #, tcl-format -msgid "Revert changes in these %i files?" -msgstr "Обратить изменения в %i файле(-ах)?" +msgid "Adding resolution for %s" +msgstr "Добавляю результат разрешения для %s" -#: lib/index.tcl:408 -msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "Любые непроиндексированные изменения, будут потеряны при обращении изменений." +#: lib/mergetool.tcl:141 +msgid "Cannot resolve deletion or link conflicts using a tool" +msgstr "Программа слияния не обрабатывает конфликты с удалением или участием ссылок" -#: lib/index.tcl:411 -msgid "Do Nothing" -msgstr "Ничего не делать" +#: lib/mergetool.tcl:146 +msgid "Conflict file does not exist" +msgstr "Конфликтующий файл не существует" -#: lib/index.tcl:429 -msgid "Reverting selected files" -msgstr "Обращение изменений в выбранных файлах" +#: lib/mergetool.tcl:246 +#, tcl-format +msgid "Not a GUI merge tool: '%s'" +msgstr "«%s» не является программой слияния" -#: lib/index.tcl:433 +#: lib/mergetool.tcl:275 #, tcl-format -msgid "Reverting %s" -msgstr "Обращение изменений в %s" +msgid "Unsupported merge tool '%s'" +msgstr "Неподдерживаемая программа слияния «%s»" -#: lib/merge.tcl:13 +#: lib/mergetool.tcl:310 +msgid "Merge tool is already running, terminate it?" +msgstr "Программа слияния уже работает. Прервать?" + +#: lib/mergetool.tcl:330 +#, tcl-format msgid "" -"Cannot merge while amending.\n" -"\n" -"You must finish amending this commit before starting any type of merge.\n" -msgstr "Невозможно выполнить слияние во время исправления.\n\nЗавершите исправление данного коммита перед выполнением операции слияния.\n" +"Error retrieving versions:\n" +"%s" +msgstr "Ошибка получения версий:\n%s" -#: lib/merge.tcl:27 +#: lib/mergetool.tcl:350 +#, tcl-format msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A rescan must be performed before a merge can be performed.\n" +"Could not start the merge tool:\n" "\n" -"The rescan will be automatically started now.\n" -msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем слияние может быть сделано.\n\nЭто будет сделано сейчас автоматически.\n" - -#: lib/merge.tcl:45 -#, tcl-format -msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" -"\n" -"You must resolve them, stage the file, and commit to complete the current merge. Only then can you begin another merge.\n" -msgstr "Предыдущее слияние не завершено из-за конфликта.\n\nДля файла %s возник конфликт слияния.\n\nРазрешите конфликт, добавьте файл в индекс и закоммитьте. Только после этого можно начать следующее слияние.\n" +"%s" +msgstr "Ошибка запуска программы слияния:\n\n%s" -#: lib/merge.tcl:55 -#, tcl-format -msgid "" -"You are in the middle of a change.\n" -"\n" -"File %s is modified.\n" -"\n" -"You should complete the current commit before starting a merge. Doing so will help you abort a failed merge, should the need arise.\n" -msgstr "Вы находитесь в процессе изменений.\n\nФайл %s изменён.\n\nВы должны завершить текущий коммит перед началом слияния. В случае необходимости, это позволит прервать операцию слияния.\n" +#: lib/mergetool.tcl:354 +msgid "Running merge tool..." +msgstr "Запуск программы слияния…" -#: lib/merge.tcl:107 -#, tcl-format -msgid "%s of %s" -msgstr "%s из %s" +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "Ошибка выполнения программы слияния." -#: lib/merge.tcl:120 +#: lib/tools_dlg.tcl:22 #, tcl-format -msgid "Merging %s and %s..." -msgstr "Слияние %s и %s…" +msgid "%s (%s): Add Tool" +msgstr "%s (%s): Добавить инструмент" -#: lib/merge.tcl:131 -msgid "Merge completed successfully." -msgstr "Слияние успешно завершено." - -#: lib/merge.tcl:133 -msgid "Merge failed. Conflict resolution is required." -msgstr "Не удалось завершить слияние. Требуется разрешение конфликта." - -#: lib/merge.tcl:158 -#, tcl-format -msgid "Merge Into %s" -msgstr "Слияние с %s" +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "Новая вспомогательная операция" -#: lib/merge.tcl:177 -msgid "Revision To Merge" -msgstr "Версия, с которой провести слияние" +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "Добавить для всех репозиториев" -#: lib/merge.tcl:212 -msgid "" -"Cannot abort while amending.\n" -"\n" -"You must finish amending this commit.\n" -msgstr "Невозможно прервать исправление.\n\nЗавершите текущее исправление коммита.\n" +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "Описание вспомогательной операции" -#: lib/merge.tcl:222 -msgid "" -"Abort merge?\n" -"\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with aborting the current merge?" -msgstr "Прервать операцию слияния?\n\nПрерывание текущего слияния приведет к потере *ВСЕХ* несохраненных изменений.\n\nПродолжить?" +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "Используйте «/» для создания подменю" -#: lib/merge.tcl:228 -msgid "" -"Reset changes?\n" -"\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with resetting the current changes?" -msgstr "Сбросить изменения?\n\nСброс изменений приведет к потере *ВСЕХ* несохраненных изменений.\n\nПродолжить?" +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "Команда:" -#: lib/merge.tcl:239 -msgid "Aborting" -msgstr "Прерываю" +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "Показать диалог перед запуском" -#: lib/merge.tcl:239 -msgid "files reset" -msgstr "изменения в файлах отменены" +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "Запрос на выбор версии (устанавливает $REVISION)" -#: lib/merge.tcl:267 -msgid "Abort failed." -msgstr "Прервать не удалось." +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" +msgstr "Запрос дополнительных аргументов (устанавливает $ARGS)" -#: lib/merge.tcl:269 -msgid "Abort completed. Ready." -msgstr "Прервано." +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "Не показывать окно вывода команды" -#: lib/mergetool.tcl:8 -msgid "Force resolution to the base version?" -msgstr "Использовать базовую версию для разрешения конфликта?" +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "Запуск только если показан список изменений ($FILENAME не пусто)" -#: lib/mergetool.tcl:9 -msgid "Force resolution to this branch?" -msgstr "Использовать версию из этой ветки для разрешения конфликта?" +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "Укажите название вспомогательной операции." -#: lib/mergetool.tcl:10 -msgid "Force resolution to the other branch?" -msgstr "Использовать версию из другой ветки для разрешения конфликта?" +#: lib/tools_dlg.tcl:126 +#, tcl-format +msgid "Tool '%s' already exists." +msgstr "Вспомогательная операция «%s» уже существует." -#: lib/mergetool.tcl:14 +#: lib/tools_dlg.tcl:148 #, tcl-format msgid "" -"Note that the diff shows only conflicting changes.\n" -"\n" -"%s will be overwritten.\n" -"\n" -"This operation can be undone only by restarting the merge." -msgstr "Внимание! Список изменений показывает только конфликтующие отличия.\n\n%s будет переписан.\n\nЭто действие можно отменить только перезапуском операции слияния." +"Could not add tool:\n" +"%s" +msgstr "Ошибка добавления программы:\n%s" -#: lib/mergetool.tcl:45 +#: lib/tools_dlg.tcl:187 #, tcl-format -msgid "File %s seems to have unresolved conflicts, still stage?" -msgstr "Похоже, что файл %s содержит неразрешенные конфликты. Продолжить индексацию?" +msgid "%s (%s): Remove Tool" +msgstr "%s (%s): Удалить инструмент" -#: lib/mergetool.tcl:60 -#, tcl-format -msgid "Adding resolution for %s" -msgstr "Добавляю результат разрешения для %s" +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "Удалить команды программы" -#: lib/mergetool.tcl:141 -msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "Программа слияния не обрабатывает конфликты с удалением или участием ссылок" +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "Удалить" -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "Конфликтующий файл не существует" +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(Синим выделены программы локальные репозиторию)" -#: lib/mergetool.tcl:264 +#: lib/tools_dlg.tcl:283 #, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "«%s» не является программой слияния" +msgid "%s (%s):" +msgstr "%s (%s):" -#: lib/mergetool.tcl:268 +#: lib/tools_dlg.tcl:292 #, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "Неподдерживаемая программа слияния «%s»" +msgid "Run Command: %s" +msgstr "Запуск команды: %s" -#: lib/mergetool.tcl:303 -msgid "Merge tool is already running, terminate it?" -msgstr "Программа слияния уже работает. Прервать?" +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "Аргументы" -#: lib/mergetool.tcl:323 -#, tcl-format -msgid "" -"Error retrieving versions:\n" -"%s" -msgstr "Ошибка получения версий:\n%s" +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "OK" -#: lib/mergetool.tcl:343 -#, tcl-format -msgid "" -"Could not start the merge tool:\n" -"\n" -"%s" -msgstr "Ошибка запуска программы слияния:\n\n%s" +#: lib/search.tcl:48 +msgid "Find:" +msgstr "Поиск:" -#: lib/mergetool.tcl:347 -msgid "Running merge tool..." -msgstr "Запуск программы слияния…" +#: lib/search.tcl:50 +msgid "Next" +msgstr "Дальше" -#: lib/mergetool.tcl:375 lib/mergetool.tcl:383 -msgid "Merge tool failed." -msgstr "Ошибка выполнения программы слияния." +#: lib/search.tcl:51 +msgid "Prev" +msgstr "Обратно" -#: lib/option.tcl:11 -#, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "Неверная глобальная кодировка «%s»" +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "Регулярные выражения" -#: lib/option.tcl:19 +#: lib/search.tcl:54 +msgid "Case" +msgstr "Учёт регистра" + +#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75 #, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "Неверная кодировка репозитория «%s»" +msgid "%s (%s): Create Desktop Icon" +msgstr "%s (%s): Создать ярлык на рабочем столе" -#: lib/option.tcl:117 -msgid "Restore Defaults" -msgstr "Восстановить настройки по умолчанию" +#: lib/shortcut.tcl:24 lib/shortcut.tcl:65 +msgid "Cannot write shortcut:" +msgstr "Невозможно записать ссылку:" -#: lib/option.tcl:121 -msgid "Save" -msgstr "Сохранить" +#: lib/shortcut.tcl:140 +msgid "Cannot write icon:" +msgstr "Невозможно записать значок:" -#: lib/option.tcl:131 +#: lib/remote_branch_delete.tcl:29 #, tcl-format -msgid "%s Repository" -msgstr "Для репозитория %s" - -#: lib/option.tcl:132 -msgid "Global (All Repositories)" -msgstr "Общие (для всех репозиториев)" +msgid "%s (%s): Delete Branch Remotely" +msgstr "%s (%s): Удаление внешней ветки" -#: lib/option.tcl:138 -msgid "User Name" -msgstr "Имя пользователя" +#: lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "Удаление ветки во внешнем репозитории" -#: lib/option.tcl:139 -msgid "Email Address" -msgstr "Адрес электронной почты" +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "Из репозитория" -#: lib/option.tcl:141 -msgid "Summarize Merge Commits" -msgstr "Суммарное сообщение при слиянии" +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "Ветки" -#: lib/option.tcl:142 -msgid "Merge Verbosity" -msgstr "Уровень детальности сообщений при слиянии" +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "Удалить только в случае, если" -#: lib/option.tcl:143 -msgid "Show Diffstat After Merge" -msgstr "Показать отчет об изменениях после слияния" +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "Слияние с:" -#: lib/option.tcl:144 -msgid "Use Merge Tool" -msgstr "Использовать для слияния программу" +#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 +msgid "Always (Do not perform merge checks)" +msgstr "Всегда (не выполнять проверку на слияние)" -#: lib/option.tcl:146 -msgid "Trust File Modification Timestamps" -msgstr "Доверять времени модификации файла" +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "Для операции «Слияние с» требуется указать ветку." -#: lib/option.tcl:147 -msgid "Prune Tracking Branches During Fetch" -msgstr "Чистка отслеживаемых веток при извлечении изменений" +#: lib/remote_branch_delete.tcl:185 +#, tcl-format +msgid "" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" +msgstr "Следующие ветки могут быть объединены с %s при помощи операции слияния:\n\n - %s" -#: lib/option.tcl:148 -msgid "Match Tracking Branches" -msgstr "Такое же имя, как и у отслеживаемой ветки" +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "Некоторые тесты на слияние не прошли, потому что вы не извлекли необходимые коммиты. Попытайтесь извлечь их из %s." -#: lib/option.tcl:149 -msgid "Blame Copy Only On Changed Files" -msgstr "Поиск копий только в изменённых файлах" +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "Укажите одну или несколько веток для удаления." -#: lib/option.tcl:150 -msgid "Minimum Letters To Blame Copy On" -msgstr "Минимальное количество символов для поиска копий" +#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "Восстановить удаленные ветки сложно.\n\nПродолжить?" -#: lib/option.tcl:151 -msgid "Blame History Context Radius (days)" -msgstr "Радиус исторического контекста (в днях)" +#: lib/remote_branch_delete.tcl:227 +#, tcl-format +msgid "Deleting branches from %s" +msgstr "Удаление веток из %s" -#: lib/option.tcl:152 -msgid "Number of Diff Context Lines" -msgstr "Число строк в контексте diff" +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "Не указан репозиторий." -#: lib/option.tcl:153 -msgid "Commit Message Text Width" -msgstr "Ширина текста сообщения коммита" +#: lib/remote_branch_delete.tcl:305 +#, tcl-format +msgid "Scanning %s..." +msgstr "Перечитывание %s…" -#: lib/option.tcl:154 -msgid "New Branch Name Template" -msgstr "Шаблон для имени новой ветки" +#: lib/choose_repository.tcl:45 +msgid "Git Gui" +msgstr "Git Gui" -#: lib/option.tcl:155 -msgid "Default File Contents Encoding" -msgstr "Кодировка содержания файла по умолчанию" +#: lib/choose_repository.tcl:104 lib/choose_repository.tcl:427 +msgid "Create New Repository" +msgstr "Создать новый репозиторий" -#: lib/option.tcl:203 -msgid "Change" -msgstr "Изменить" +#: lib/choose_repository.tcl:110 +msgid "New..." +msgstr "Новый…" -#: lib/option.tcl:230 -msgid "Spelling Dictionary:" -msgstr "Словарь для проверки правописания:" +#: lib/choose_repository.tcl:117 lib/choose_repository.tcl:511 +msgid "Clone Existing Repository" +msgstr "Склонировать существующий репозиторий" -#: lib/option.tcl:254 -msgid "Change Font" -msgstr "Изменить" +#: lib/choose_repository.tcl:128 +msgid "Clone..." +msgstr "Клонировать…" -#: lib/option.tcl:258 -#, tcl-format -msgid "Choose %s" -msgstr "Выберите %s" +#: lib/choose_repository.tcl:135 lib/choose_repository.tcl:1105 +msgid "Open Existing Repository" +msgstr "Выбрать существующий репозиторий" -#: lib/option.tcl:264 -msgid "pt." -msgstr "pt." +#: lib/choose_repository.tcl:141 +msgid "Open..." +msgstr "Открыть…" -#: lib/option.tcl:278 -msgid "Preferences" -msgstr "Настройки" +#: lib/choose_repository.tcl:154 +msgid "Recent Repositories" +msgstr "Недавние репозитории" -#: lib/option.tcl:314 -msgid "Failed to completely save options:" -msgstr "Не удалось полностью сохранить настройки:" +#: lib/choose_repository.tcl:164 +msgid "Open Recent Repository:" +msgstr "Открыть последний репозиторий" -#: lib/remote.tcl:163 -msgid "Remove Remote" -msgstr "Удалить ссылку на внешний репозиторий" +#: lib/choose_repository.tcl:331 lib/choose_repository.tcl:338 +#: lib/choose_repository.tcl:345 +#, tcl-format +msgid "Failed to create repository %s:" +msgstr "Не удалось создать репозиторий %s:" -#: lib/remote.tcl:168 -msgid "Prune from" -msgstr "Чистка" +#: lib/choose_repository.tcl:422 lib/branch_create.tcl:33 +msgid "Create" +msgstr "Создать" -#: lib/remote.tcl:173 -msgid "Fetch from" -msgstr "Извлечение из" +#: lib/choose_repository.tcl:432 +msgid "Directory:" +msgstr "Каталог:" -#: lib/remote.tcl:215 -msgid "Push to" -msgstr "Отправить" +#: lib/choose_repository.tcl:462 lib/choose_repository.tcl:588 +#: lib/choose_repository.tcl:1139 +msgid "Git Repository" +msgstr "Репозиторий" -#: lib/remote_add.tcl:19 -msgid "Add Remote" -msgstr "Зарегистрировать внешний репозиторий" +#: lib/choose_repository.tcl:487 +#, tcl-format +msgid "Directory %s already exists." +msgstr "Каталог '%s' уже существует." -#: lib/remote_add.tcl:24 -msgid "Add New Remote" -msgstr "Добавить внешний репозиторий" +#: lib/choose_repository.tcl:491 +#, tcl-format +msgid "File %s already exists." +msgstr "Файл '%s' уже существует." -#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36 -msgid "Add" -msgstr "Добавить" +#: lib/choose_repository.tcl:506 +msgid "Clone" +msgstr "Склонировать" -#: lib/remote_add.tcl:37 -msgid "Remote Details" -msgstr "Информация о внешнем репозитории" +#: lib/choose_repository.tcl:519 +msgid "Source Location:" +msgstr "Исходное положение:" -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "Положение:" +#: lib/choose_repository.tcl:528 +msgid "Target Directory:" +msgstr "Каталог назначения:" -#: lib/remote_add.tcl:62 -msgid "Further Action" -msgstr "Следующая операция" +#: lib/choose_repository.tcl:538 +msgid "Clone Type:" +msgstr "Тип клона:" -#: lib/remote_add.tcl:65 -msgid "Fetch Immediately" -msgstr "Сразу извлечь изменения" +#: lib/choose_repository.tcl:543 +msgid "Standard (Fast, Semi-Redundant, Hardlinks)" +msgstr "Стандартный (Быстрый, полуизбыточный, «жесткие» ссылки)" -#: lib/remote_add.tcl:71 -msgid "Initialize Remote Repository and Push" -msgstr "Инициализировать внешний репозиторий и отправить" +#: lib/choose_repository.tcl:548 +msgid "Full Copy (Slower, Redundant Backup)" +msgstr "Полная копия (Медленный, создает резервную копию)" -#: lib/remote_add.tcl:77 -msgid "Do Nothing Else Now" -msgstr "Больше ничего не делать" +#: lib/choose_repository.tcl:553 +msgid "Shared (Fastest, Not Recommended, No Backup)" +msgstr "Общий (Самый быстрый, не рекомендуется, без резервной копии)" -#: lib/remote_add.tcl:101 -msgid "Please supply a remote name." -msgstr "Укажите название внешнего репозитория." +#: lib/choose_repository.tcl:560 +msgid "Recursively clone submodules too" +msgstr "Также рекурсивно клонировать подмодули" -#: lib/remote_add.tcl:114 +#: lib/choose_repository.tcl:594 lib/choose_repository.tcl:641 +#: lib/choose_repository.tcl:790 lib/choose_repository.tcl:864 +#: lib/choose_repository.tcl:1145 lib/choose_repository.tcl:1153 #, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "«%s» не является допустимым именем внешнего репозитория." +msgid "Not a Git repository: %s" +msgstr "Каталог не является репозиторием Git: %s" -#: lib/remote_add.tcl:125 -#, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "Не удалось добавить «%s» из «%s». " +#: lib/choose_repository.tcl:630 +msgid "Standard only available for local repository." +msgstr "Стандартный клон возможен только для локального репозитория." -#: lib/remote_add.tcl:133 lib/transport.tcl:6 -#, tcl-format -msgid "fetch %s" -msgstr "извлечение %s" +#: lib/choose_repository.tcl:634 +msgid "Shared only available for local repository." +msgstr "Общий клон возможен только для локального репозитория." -#: lib/remote_add.tcl:134 +#: lib/choose_repository.tcl:655 #, tcl-format -msgid "Fetching the %s" -msgstr "Извлечение %s" +msgid "Location %s already exists." +msgstr "Путь %s уже существует." -#: lib/remote_add.tcl:157 -#, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "Невозможно инициализировать репозиторий в «%s»." +#: lib/choose_repository.tcl:666 +msgid "Failed to configure origin" +msgstr "Не удалось сконфигурировать исходный репозиторий" + +#: lib/choose_repository.tcl:678 +msgid "Counting objects" +msgstr "Подсчёт объектов" -#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63 -#: lib/transport.tcl:81 +#: lib/choose_repository.tcl:679 +msgid "buckets" +msgstr "блоки" + +#: lib/choose_repository.tcl:703 #, tcl-format -msgid "push %s" -msgstr "отправить %s" +msgid "Unable to copy objects/info/alternates: %s" +msgstr "Не удалось скопировать objects/info/alternates: %s" -#: lib/remote_add.tcl:164 +#: lib/choose_repository.tcl:740 #, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "Настройка %s (в %s)" +msgid "Nothing to clone from %s." +msgstr "Нечего клонировать с %s." -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "Удаление ветки во внешнем репозитории" +#: lib/choose_repository.tcl:742 lib/choose_repository.tcl:962 +#: lib/choose_repository.tcl:974 +msgid "The 'master' branch has not been initialized." +msgstr "Не инициализирована ветка «master»." -#: lib/remote_branch_delete.tcl:47 -msgid "From Repository" -msgstr "Из репозитория" +#: lib/choose_repository.tcl:755 +msgid "Hardlinks are unavailable. Falling back to copying." +msgstr "Жесткие ссылки недоступны. Будет использовано копирование." -#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134 -msgid "Remote:" -msgstr "внешний:" +#: lib/choose_repository.tcl:769 +#, tcl-format +msgid "Cloning from %s" +msgstr "Клонирование из %s" -#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149 -msgid "Arbitrary Location:" -msgstr "Указанное положение:" +#: lib/choose_repository.tcl:800 +msgid "Copying objects" +msgstr "Копирование объектов" -#: lib/remote_branch_delete.tcl:84 -msgid "Branches" -msgstr "Ветки" +#: lib/choose_repository.tcl:801 +msgid "KiB" +msgstr "КБ" -#: lib/remote_branch_delete.tcl:109 -msgid "Delete Only If" -msgstr "Удалить только в случае, если" +#: lib/choose_repository.tcl:825 +#, tcl-format +msgid "Unable to copy object: %s" +msgstr "Не могу скопировать объект: %s" -#: lib/remote_branch_delete.tcl:111 -msgid "Merged Into:" -msgstr "Слияние с:" +#: lib/choose_repository.tcl:837 +msgid "Linking objects" +msgstr "Создание ссылок на objects" -#: lib/remote_branch_delete.tcl:152 -msgid "A branch is required for 'Merged Into'." -msgstr "Для операции «Слияние с» требуется указать ветку." +#: lib/choose_repository.tcl:838 +msgid "objects" +msgstr "объекты" -#: lib/remote_branch_delete.tcl:184 +#: lib/choose_repository.tcl:846 #, tcl-format -msgid "" -"The following branches are not completely merged into %s:\n" -"\n" -" - %s" -msgstr "Следующие ветки могут быть объединены с %s при помощи операции слияния:\n\n - %s" +msgid "Unable to hardlink object: %s" +msgstr "Не могу создать «жесткую ссылку» на объект: %s" -#: lib/remote_branch_delete.tcl:189 -#, tcl-format -msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." -msgstr "Некоторые тесты на слияние не прошли, потому что вы не извлекли необходимые коммиты. Попытайтесь извлечь их из %s." +#: lib/choose_repository.tcl:903 +msgid "Cannot fetch branches and objects. See console output for details." +msgstr "Не удалось извлечь ветки и объекты. Дополнительная информация на консоли." -#: lib/remote_branch_delete.tcl:207 -msgid "Please select one or more branches to delete." -msgstr "Укажите одну или несколько веток для удаления." +#: lib/choose_repository.tcl:914 +msgid "Cannot fetch tags. See console output for details." +msgstr "Не удалось извлечь метки. Дополнительная информация на консоли." + +#: lib/choose_repository.tcl:938 +msgid "Cannot determine HEAD. See console output for details." +msgstr "Не могу определить HEAD. Дополнительная информация на консоли." -#: lib/remote_branch_delete.tcl:226 +#: lib/choose_repository.tcl:947 #, tcl-format -msgid "Deleting branches from %s" -msgstr "Удаление веток из %s" +msgid "Unable to cleanup %s" +msgstr "Не могу очистить %s" -#: lib/remote_branch_delete.tcl:292 -msgid "No repository selected." -msgstr "Не указан репозиторий." +#: lib/choose_repository.tcl:953 +msgid "Clone failed." +msgstr "Клонирование не удалось." + +#: lib/choose_repository.tcl:960 +msgid "No default branch obtained." +msgstr "Ветка по умолчанию не была получена." -#: lib/remote_branch_delete.tcl:297 +#: lib/choose_repository.tcl:971 #, tcl-format -msgid "Scanning %s..." -msgstr "Перечитывание %s…" +msgid "Cannot resolve %s as a commit." +msgstr "Не могу распознать %s как коммит." -#: lib/search.tcl:21 -msgid "Find:" -msgstr "Поиск:" +#: lib/choose_repository.tcl:998 +msgid "Creating working directory" +msgstr "Создаю рабочий каталог" -#: lib/search.tcl:23 -msgid "Next" -msgstr "Дальше" +#: lib/choose_repository.tcl:1028 +msgid "Initial file checkout failed." +msgstr "Не удалось получить начальное состояние файлов репозитория." -#: lib/search.tcl:24 -msgid "Prev" -msgstr "Обратно" +#: lib/choose_repository.tcl:1072 +msgid "Cloning submodules" +msgstr "Клонирование подмодулей" -#: lib/search.tcl:25 -msgid "Case-Sensitive" -msgstr "Игн. большие/маленькие" +#: lib/choose_repository.tcl:1087 +msgid "Cannot clone submodules." +msgstr "Не удалось клонировать подмодули." -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "Невозможно записать ссылку:" +#: lib/choose_repository.tcl:1110 +msgid "Repository:" +msgstr "Репозиторий:" -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "Невозможно записать значок:" +#: lib/choose_repository.tcl:1159 +#, tcl-format +msgid "Failed to open repository %s:" +msgstr "Не удалось открыть репозиторий %s:" -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "Неподдерживаемая программа проверки правописания" +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "git-gui - графический пользовательский интерфейс к Git." -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "Проверка правописания не доступна" +#: lib/blame.tcl:74 +#, tcl-format +msgid "%s (%s): File Viewer" +msgstr "%s (%s): Просмотр файла" -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "Неправильная конфигурация программы проверки правописания" +#: lib/blame.tcl:80 +msgid "Commit:" +msgstr "Коммит:" -#: lib/spellcheck.tcl:70 -#, tcl-format -msgid "Reverting dictionary to %s." -msgstr "Словарь вернут к %s." +#: lib/blame.tcl:282 +msgid "Copy Commit" +msgstr "Копировать SHA-1" -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "Программа проверки правописания не смогла запуститься" +#: lib/blame.tcl:286 +msgid "Find Text..." +msgstr "Найти текст…" -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "Нераспознанная программа проверки правописания" +#: lib/blame.tcl:290 +msgid "Goto Line..." +msgstr "Перейти на строку…" -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "Исправлений не найдено" +#: lib/blame.tcl:299 +msgid "Do Full Copy Detection" +msgstr "Провести полный поиск копий" -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "Программа проверки правописания прервала передачу данных" +#: lib/blame.tcl:303 +msgid "Show History Context" +msgstr "Показать исторический контекст" -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "Ошибка проверки правописания" +#: lib/blame.tcl:306 +msgid "Blame Parent Commit" +msgstr "Авторы родительского коммита" -#: lib/sshkey.tcl:31 +#: lib/blame.tcl:468 +#, tcl-format +msgid "Reading %s..." +msgstr "Чтение %s…" + +#: lib/blame.tcl:596 +msgid "Loading copy/move tracking annotations..." +msgstr "Загрузка аннотации копирований/переименований…" + +#: lib/blame.tcl:613 +msgid "lines annotated" +msgstr "строк прокомментировано" + +#: lib/blame.tcl:815 +msgid "Loading original location annotations..." +msgstr "Загрузка аннотаций первоначального положения объекта…" + +#: lib/blame.tcl:818 +msgid "Annotation complete." +msgstr "Аннотация завершена." + +#: lib/blame.tcl:849 +msgid "Busy" +msgstr "Занят" + +#: lib/blame.tcl:850 +msgid "Annotation process is already running." +msgstr "Аннотация уже запущена" + +#: lib/blame.tcl:889 +msgid "Running thorough copy detection..." +msgstr "Выполнение полного поиска копий…" + +#: lib/blame.tcl:957 +msgid "Loading annotation..." +msgstr "Загрузка аннотации…" + +#: lib/blame.tcl:1010 +msgid "Author:" +msgstr "Автор:" + +#: lib/blame.tcl:1014 +msgid "Committer:" +msgstr "Коммитер:" + +#: lib/blame.tcl:1019 +msgid "Original File:" +msgstr "Исходный файл:" + +#: lib/blame.tcl:1067 +msgid "Cannot find HEAD commit:" +msgstr "Не удалось найти текущее состояние:" + +#: lib/blame.tcl:1122 +msgid "Cannot find parent commit:" +msgstr "Не удалось найти родительское состояние:" + +#: lib/blame.tcl:1137 +msgid "Unable to display parent" +msgstr "Не могу показать предка" + +#: lib/blame.tcl:1138 lib/diff.tcl:345 +msgid "Error loading diff:" +msgstr "Ошибка загрузки изменений:" + +#: lib/blame.tcl:1279 +msgid "Originally By:" +msgstr "Источник:" + +#: lib/blame.tcl:1285 +msgid "In File:" +msgstr "Файл:" + +#: lib/blame.tcl:1290 +msgid "Copied Or Moved Here By:" +msgstr "Скопировано/перемещено в:" + +#: lib/diff.tcl:77 +#, tcl-format +msgid "" +"No differences detected.\n" +"\n" +"%s has no changes.\n" +"\n" +"The modification date of this file was updated by another application, but the content within the file was not changed.\n" +"\n" +"A rescan will be automatically started to find other files which may have the same state." +msgstr "Изменений не обнаружено.\n\nв %s отсутствуют изменения.\n\nДата изменения файла была обновлена другой программой, но содержимое файла осталось прежним.\n\nСейчас будет запущено перечитывание репозитория, чтобы найти подобные файлы." + +#: lib/diff.tcl:117 +#, tcl-format +msgid "Loading diff of %s..." +msgstr "Загрузка изменений %s…" + +#: lib/diff.tcl:143 +msgid "" +"LOCAL: deleted\n" +"REMOTE:\n" +msgstr "ЛОКАЛЬНО: удалён\nВНЕШНИЙ:\n" + +#: lib/diff.tcl:148 +msgid "" +"REMOTE: deleted\n" +"LOCAL:\n" +msgstr "ВНЕШНИЙ: удалён\nЛОКАЛЬНО:\n" + +#: lib/diff.tcl:155 +msgid "LOCAL:\n" +msgstr "ЛОКАЛЬНО:\n" + +#: lib/diff.tcl:158 +msgid "REMOTE:\n" +msgstr "ВНЕШНИЙ:\n" + +#: lib/diff.tcl:220 lib/diff.tcl:344 +#, tcl-format +msgid "Unable to display %s" +msgstr "Не могу показать %s" + +#: lib/diff.tcl:221 +msgid "Error loading file:" +msgstr "Ошибка загрузки файла:" + +#: lib/diff.tcl:227 +msgid "Git Repository (subproject)" +msgstr "Репозиторий Git (подпроект)" + +#: lib/diff.tcl:239 +msgid "* Binary file (not showing content)." +msgstr "* Двоичный файл (содержимое не показано)" + +#: lib/diff.tcl:244 +#, tcl-format +msgid "" +"* Untracked file is %d bytes.\n" +"* Showing only first %d bytes.\n" +msgstr "* Размер неотслеживаемого файла %d байт.\n* Показано первых %d байт.\n" + +#: lib/diff.tcl:250 +#, tcl-format +msgid "" +"\n" +"* Untracked file clipped here by %s.\n" +"* To see the entire file, use an external editor.\n" +msgstr "\n* Неотслеживаемый файл обрезан: %s.\n* Чтобы увидеть весь файл, используйте внешний редактор.\n" + +#: lib/diff.tcl:583 +msgid "Failed to unstage selected hunk." +msgstr "Не удалось исключить выбранную часть." + +#: lib/diff.tcl:591 +msgid "Failed to revert selected hunk." +msgstr "Не удалось обратить изменения выбранного блока." + +#: lib/diff.tcl:594 +msgid "Failed to stage selected hunk." +msgstr "Не удалось проиндексировать выбранный блок изменений." + +#: lib/diff.tcl:687 +msgid "Failed to unstage selected line." +msgstr "Не удалось исключить выбранную строку." + +#: lib/diff.tcl:696 +msgid "Failed to revert selected line." +msgstr "Не удалось обратить изменения выбраной строки." + +#: lib/diff.tcl:700 +msgid "Failed to stage selected line." +msgstr "Не удалось проиндексировать выбранную строку." + +#: lib/diff.tcl:889 +msgid "Failed to undo last revert." +msgstr "Не удалось отменить посленднее обращение изменений." + +#: lib/sshkey.tcl:34 msgid "No keys found." msgstr "Ключ не найден" -#: lib/sshkey.tcl:34 +#: lib/sshkey.tcl:37 #, tcl-format msgid "Found a public key in: %s" msgstr "Публичный ключ из %s" -#: lib/sshkey.tcl:40 +#: lib/sshkey.tcl:43 msgid "Generate Key" msgstr "Создать ключ" -#: lib/sshkey.tcl:56 +#: lib/sshkey.tcl:61 msgid "Copy To Clipboard" msgstr "Скопировать в буфер обмена" -#: lib/sshkey.tcl:70 -msgid "Your OpenSSH Public Key" -msgstr "Ваш публичный ключ OpenSSH" +#: lib/sshkey.tcl:75 +msgid "Your OpenSSH Public Key" +msgstr "Ваш публичный ключ OpenSSH" + +#: lib/sshkey.tcl:83 +msgid "Generating..." +msgstr "Создание…" + +#: lib/sshkey.tcl:89 +#, tcl-format +msgid "" +"Could not start ssh-keygen:\n" +"\n" +"%s" +msgstr "Ошибка запуска ssh-keygen:\n\n%s" + +#: lib/sshkey.tcl:116 +msgid "Generation failed." +msgstr "Ключ не создан." + +#: lib/sshkey.tcl:123 +msgid "Generation succeeded, but no keys found." +msgstr "Создание ключа завершилось, но результат не был найден" + +#: lib/sshkey.tcl:126 +#, tcl-format +msgid "Your key is in: %s" +msgstr "Ваш ключ находится в: %s" + +#: lib/branch_create.tcl:23 +#, tcl-format +msgid "%s (%s): Create Branch" +msgstr "%s (%s): Создание ветки" + +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "Создать новую ветку" + +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "Имя ветки" + +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "Соответствовать имени отслеживаемой ветки" + +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "Начальная версия" + +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "Обновить имеющуюся ветку:" + +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "Нет" + +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "Только Fast Forward" + +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "После создания сделать текущей" + +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "Укажите отлеживаемую ветку." + +#: lib/branch_create.tcl:141 +#, tcl-format +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "Отслеживаемая ветка %s не является веткой на внешнем репозитории." + +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "В процессе… пожалуйста, ждите…" + +#: lib/console.tcl:186 +msgid "Success" +msgstr "Процесс успешно завершен" + +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "Ошибка: не удалось выполнить команду" + +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "Перейти на строку:" + +#: lib/line.tcl:23 +msgid "Go" +msgstr "Перейти" + +#: lib/choose_rev.tcl:52 +msgid "This Detached Checkout" +msgstr "Текущее отсоединенное состояние" + +#: lib/choose_rev.tcl:60 +msgid "Revision Expression:" +msgstr "Выражение для определения версии:" + +#: lib/choose_rev.tcl:72 +msgid "Local Branch" +msgstr "Локальная ветка:" + +#: lib/choose_rev.tcl:77 +msgid "Tracking Branch" +msgstr "Отслеживаемая ветка" + +#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 +msgid "Tag" +msgstr "Метка" + +#: lib/choose_rev.tcl:321 +#, tcl-format +msgid "Invalid revision: %s" +msgstr "Неверная версия: %s" + +#: lib/choose_rev.tcl:342 +msgid "No revision selected." +msgstr "Версия не указана." + +#: lib/choose_rev.tcl:350 +msgid "Revision expression is empty." +msgstr "Пустое выражение для определения версии." + +#: lib/choose_rev.tcl:537 +msgid "Updated" +msgstr "Обновлено" + +#: lib/choose_rev.tcl:565 +msgid "URL" +msgstr "Ссылка" + +#: lib/commit.tcl:9 +msgid "" +"There is nothing to amend.\n" +"\n" +"You are about to create the initial commit. There is no commit before this to amend.\n" +msgstr "Отсутствует коммиты для исправления.\n\nВы создаете начальный коммит, здесь еще нечего исправлять.\n" + +#: lib/commit.tcl:18 +msgid "" +"Cannot amend while merging.\n" +"\n" +"You are currently in the middle of a merge that has not been fully completed. You cannot amend the prior commit unless you first abort the current merge activity.\n" +msgstr "Невозможно исправить коммит во время слияния.\n\nТекущее слияние не завершено. Невозможно исправить предыдуий коммит, не прерывая эту операцию.\n" + +#: lib/commit.tcl:56 +msgid "Error loading commit data for amend:" +msgstr "Ошибка при загрузке данных для исправления коммита:" + +#: lib/commit.tcl:83 +msgid "Unable to obtain your identity:" +msgstr "Невозможно получить информацию об авторстве:" + +#: lib/commit.tcl:88 +msgid "Invalid GIT_COMMITTER_IDENT:" +msgstr "Недопустимый GIT_COMMITTER_IDENT:" + +#: lib/commit.tcl:138 +#, tcl-format +msgid "warning: Tcl does not support encoding '%s'." +msgstr "предупреждение: Tcl не поддерживает кодировку «%s»." + +#: lib/commit.tcl:158 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A rescan must be performed before another commit can be created.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь. \n\nЭто будет сделано сейчас автоматически.\n" + +#: lib/commit.tcl:182 +#, tcl-format +msgid "" +"Unmerged files cannot be committed.\n" +"\n" +"File %s has merge conflicts. You must resolve them and stage the file before committing.\n" +msgstr "Нельзя выполнить коммит с незавершённой операцией слияния.\n\nДля файла %s возник конфликт слияния. Разрешите конфликт и добавьте их в индекс перед выполнением коммита.\n" + +#: lib/commit.tcl:190 +#, tcl-format +msgid "" +"Unknown file state %s detected.\n" +"\n" +"File %s cannot be committed by this program.\n" +msgstr "Обнаружено неизвестное состояние файла %s.\n\nФайл %s не может быть закоммичен этой программой.\n" + +#: lib/commit.tcl:198 +msgid "" +"No changes to commit.\n" +"\n" +"You must stage at least 1 file before you can commit.\n" +msgstr "Отсутствуют изменения для сохранения.\n\nДобавьте в индекс хотя бы один файл перед выполнением коммита.\n" + +#: lib/commit.tcl:213 +msgid "" +"Please supply a commit message.\n" +"\n" +"A good commit message has the following format:\n" +"\n" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" +msgstr "Укажите сообщение коммита.\n\nРекомендуется следующий формат сообщения:\n\n- в первой строке краткое описание сделанных изменений\n- вторая строка пустая\n- в оставшихся строках опишите, что дают ваши изменения\n" + +#: lib/commit.tcl:244 +msgid "Calling pre-commit hook..." +msgstr "Вызов перехватчика pre-commit…" + +#: lib/commit.tcl:259 +msgid "Commit declined by pre-commit hook." +msgstr "Коммит прерван переватчиком pre-commit." + +#: lib/commit.tcl:278 +msgid "" +"You are about to commit on a detached head. This is a potentially dangerous thing to do because if you switch to another branch you will lose your changes and it can be difficult to retrieve them later from the reflog. You should probably cancel this commit and create a new branch to continue.\n" +" \n" +" Do you really want to proceed with your Commit?" +msgstr "Вы собираетесь сделать коммит в отделённый HEAD. Это действие потенциально опасно, так как если вы переключитесь на другую ветку после этого, то вы потеряете свои изменения и их сложно будет потом найти с помощью журнала ссылок (reflog). Вам скорее всего следует отменить этот коммит и создать новую ветку до продолжения.\n \n Вы действительно хотите продолжить и создать коммит?" + +#: lib/commit.tcl:299 +msgid "Calling commit-msg hook..." +msgstr "Вызов перехватчика commit-msg…" + +#: lib/commit.tcl:314 +msgid "Commit declined by commit-msg hook." +msgstr "Коммит прерван переватчиком commit-msg" + +#: lib/commit.tcl:327 +msgid "Committing changes..." +msgstr "Коммит изменений…" + +#: lib/commit.tcl:344 +msgid "write-tree failed:" +msgstr "Программа write-tree завершилась с ошибкой:" -#: lib/sshkey.tcl:78 -msgid "Generating..." -msgstr "Создание…" +#: lib/commit.tcl:345 lib/commit.tcl:395 lib/commit.tcl:422 +msgid "Commit failed." +msgstr "Не удалось закоммитить изменения." -#: lib/sshkey.tcl:84 +#: lib/commit.tcl:362 #, tcl-format +msgid "Commit %s appears to be corrupt" +msgstr "Коммит %s похоже поврежден" + +#: lib/commit.tcl:367 msgid "" -"Could not start ssh-keygen:\n" +"No changes to commit.\n" "\n" -"%s" -msgstr "Ошибка запуска ssh-keygen:\n\n%s" +"No files were modified by this commit and it was not a merge commit.\n" +"\n" +"A rescan will be automatically started now.\n" +msgstr "Нет изменения для коммита.\n\nНи один файл не был изменен и не было слияния.\n\nСейчас автоматически запустится перечитывание репозитория.\n" -#: lib/sshkey.tcl:111 -msgid "Generation failed." -msgstr "Ключ не создан." +#: lib/commit.tcl:374 +msgid "No changes to commit." +msgstr "Нет изменения для коммита." -#: lib/sshkey.tcl:118 -msgid "Generation succeeded, but no keys found." -msgstr "Создание ключа завершилось, но результат не был найден" +#: lib/commit.tcl:394 +msgid "commit-tree failed:" +msgstr "Программа commit-tree завершилась с ошибкой:" -#: lib/sshkey.tcl:121 -#, tcl-format -msgid "Your key is in: %s" -msgstr "Ваш ключ находится в: %s" +#: lib/commit.tcl:421 +msgid "update-ref failed:" +msgstr "Программа update-ref завершилась с ошибкой:" -#: lib/status_bar.tcl:83 +#: lib/commit.tcl:514 #, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%s … %*i из %*i %s (%3i%%)" +msgid "Created commit %s: %s" +msgstr "Создан коммит %s: %s " -#: lib/tools.tcl:75 +#: lib/branch_delete.tcl:16 #, tcl-format -msgid "Running %s requires a selected file." -msgstr "Запуск %s требует выбранного файла." +msgid "%s (%s): Delete Branch" +msgstr "%s (%s): Удаление ветки" -#: lib/tools.tcl:90 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "Действительно запустить %s?" +#: lib/branch_delete.tcl:21 +msgid "Delete Local Branch" +msgstr "Удалить локальную ветку" -#: lib/tools.tcl:110 -#, tcl-format -msgid "Tool: %s" -msgstr "Вспомогательная операция: %s" +#: lib/branch_delete.tcl:39 +msgid "Local Branches" +msgstr "Локальные ветки" -#: lib/tools.tcl:111 -#, tcl-format -msgid "Running: %s" -msgstr "Выполнение: %s" +#: lib/branch_delete.tcl:51 +msgid "Delete Only If Merged Into" +msgstr "Удалить только в случае, если было слияние с" -#: lib/tools.tcl:149 +#: lib/branch_delete.tcl:103 #, tcl-format -msgid "Tool completed successfully: %s" -msgstr "Программа %s завершилась успешно." +msgid "The following branches are not completely merged into %s:" +msgstr "Ветки, которые не полностью сливаются с %s:" -#: lib/tools.tcl:151 +#: lib/branch_delete.tcl:131 #, tcl-format -msgid "Tool failed: %s" -msgstr "Ошибка выполнения программы: %s" +msgid " - %s:" +msgstr " — %s:" -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "Добавить вспомогательную операцию" - -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "Новая вспомогательная операция" +#: lib/branch_delete.tcl:141 +#, tcl-format +msgid "" +"Failed to delete branches:\n" +"%s" +msgstr "Не удалось удалить ветки:\n%s" -#: lib/tools_dlg.tcl:33 -msgid "Add globally" -msgstr "Добавить для всех репозиториев" +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Неправильная дата в репозитории: %s" -#: lib/tools_dlg.tcl:45 -msgid "Tool Details" -msgstr "Описание вспомогательной операции" +#: lib/database.tcl:42 +msgid "Number of loose objects" +msgstr "Количество несвязанных объектов" -#: lib/tools_dlg.tcl:48 -msgid "Use '/' separators to create a submenu tree:" -msgstr "Используйте «/» для создания подменю" +#: lib/database.tcl:43 +msgid "Disk space used by loose objects" +msgstr "Объем дискового пространства, занятый несвязанными объектами" -#: lib/tools_dlg.tcl:61 -msgid "Command:" -msgstr "Команда:" +#: lib/database.tcl:44 +msgid "Number of packed objects" +msgstr "Количество упакованных объектов" -#: lib/tools_dlg.tcl:74 -msgid "Show a dialog before running" -msgstr "Показать диалог перед запуском" +#: lib/database.tcl:45 +msgid "Number of packs" +msgstr "Количество pack-файлов" -#: lib/tools_dlg.tcl:80 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "Запрос на выбор версии (устанавливает $REVISION)" +#: lib/database.tcl:46 +msgid "Disk space used by packed objects" +msgstr "Объем дискового пространства, занятый упакованными объектами" -#: lib/tools_dlg.tcl:85 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "Запрос дополнительных аргументов (устанавливает $ARGS)" +#: lib/database.tcl:47 +msgid "Packed objects waiting for pruning" +msgstr "Несвязанные объекты, которые можно удалить" -#: lib/tools_dlg.tcl:92 -msgid "Don't show the command output window" -msgstr "Не показывать окно вывода команды" +#: lib/database.tcl:48 +msgid "Garbage files" +msgstr "Мусор" -#: lib/tools_dlg.tcl:97 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "Запуск только если показан список изменений ($FILENAME не пусто)" +#: lib/database.tcl:66 +#, tcl-format +msgid "%s (%s): Database Statistics" +msgstr "%s (%s): Статистика базы данных" -#: lib/tools_dlg.tcl:121 -msgid "Please supply a name for the tool." -msgstr "Укажите название вспомогательной операции." +#: lib/database.tcl:72 +msgid "Compressing the object database" +msgstr "Сжатие базы объектов" -#: lib/tools_dlg.tcl:129 -#, tcl-format -msgid "Tool '%s' already exists." -msgstr "Вспомогательная операция «%s» уже существует." +#: lib/database.tcl:83 +msgid "Verifying the object database with fsck-objects" +msgstr "Проверка базы объектов при помощи fsck" -#: lib/tools_dlg.tcl:151 +#: lib/database.tcl:107 #, tcl-format msgid "" -"Could not add tool:\n" -"%s" -msgstr "Ошибка добавления программы:\n%s" +"This repository currently has approximately %i loose objects.\n" +"\n" +"To maintain optimal performance it is strongly recommended that you compress the database.\n" +"\n" +"Compress the database now?" +msgstr "Этот репозиторий сейчас содержит примерно %i свободных объектов\n\nДля лучшей производительности рекомендуется сжать базу данных.\n\nСжать базу данных сейчас?" -#: lib/tools_dlg.tcl:190 -msgid "Remove Tool" -msgstr "Удалить программу" +#: lib/error.tcl:20 +#, tcl-format +msgid "%s: error" +msgstr "%s: ошибка" -#: lib/tools_dlg.tcl:196 -msgid "Remove Tool Commands" -msgstr "Удалить команды программы" +#: lib/error.tcl:36 +#, tcl-format +msgid "%s: warning" +msgstr "%s: предупреждение" -#: lib/tools_dlg.tcl:200 -msgid "Remove" -msgstr "Удалить" +#: lib/error.tcl:80 +#, tcl-format +msgid "%s hook failed:" +msgstr "ошибка перехватчика %s:" -#: lib/tools_dlg.tcl:236 -msgid "(Blue denotes repository-local tools)" -msgstr "(Синим выделены программы локальные репозиторию)" +#: lib/error.tcl:96 +msgid "You must correct the above errors before committing." +msgstr "Перед коммитом, исправьте вышеуказанные ошибки." -#: lib/tools_dlg.tcl:297 +#: lib/error.tcl:116 #, tcl-format -msgid "Run Command: %s" -msgstr "Запуск команды: %s" +msgid "%s (%s): error" +msgstr "%s (%s): ошибка" -#: lib/tools_dlg.tcl:311 -msgid "Arguments" -msgstr "Аргументы" +#: lib/merge.tcl:13 +msgid "" +"Cannot merge while amending.\n" +"\n" +"You must finish amending this commit before starting any type of merge.\n" +msgstr "Невозможно выполнить слияние во время исправления.\n\nЗавершите исправление данного коммита перед выполнением операции слияния.\n" -#: lib/tools_dlg.tcl:348 -msgid "OK" -msgstr "OK" +#: lib/merge.tcl:27 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A rescan must be performed before a merge can be performed.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем слияние может быть сделано.\n\nЭто будет сделано сейчас автоматически.\n" -#: lib/transport.tcl:7 +#: lib/merge.tcl:45 #, tcl-format -msgid "Fetching new changes from %s" -msgstr "Извлечение изменений из %s " +msgid "" +"You are in the middle of a conflicted merge.\n" +"\n" +"File %s has merge conflicts.\n" +"\n" +"You must resolve them, stage the file, and commit to complete the current merge. Only then can you begin another merge.\n" +msgstr "Предыдущее слияние не завершено из-за конфликта.\n\nДля файла %s возник конфликт слияния.\n\nРазрешите конфликт, добавьте файл в индекс и закоммитьте. Только после этого можно начать следующее слияние.\n" -#: lib/transport.tcl:18 +#: lib/merge.tcl:55 #, tcl-format -msgid "remote prune %s" -msgstr "чистка внешнего %s" +msgid "" +"You are in the middle of a change.\n" +"\n" +"File %s is modified.\n" +"\n" +"You should complete the current commit before starting a merge. Doing so will help you abort a failed merge, should the need arise.\n" +msgstr "Вы находитесь в процессе изменений.\n\nФайл %s изменён.\n\nВы должны завершить текущий коммит перед началом слияния. В случае необходимости, это позволит прервать операцию слияния.\n" -#: lib/transport.tcl:19 +#: lib/merge.tcl:108 #, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "Чистка отслеживаемых веток, удалённых из %s" +msgid "%s of %s" +msgstr "%s из %s" -#: lib/transport.tcl:26 +#: lib/merge.tcl:126 #, tcl-format -msgid "Pushing changes to %s" -msgstr "Отправка изменений в %s " +msgid "Merging %s and %s..." +msgstr "Слияние %s и %s…" + +#: lib/merge.tcl:137 +msgid "Merge completed successfully." +msgstr "Слияние успешно завершено." + +#: lib/merge.tcl:139 +msgid "Merge failed. Conflict resolution is required." +msgstr "Не удалось завершить слияние. Требуется разрешение конфликта." -#: lib/transport.tcl:64 +#: lib/merge.tcl:156 #, tcl-format -msgid "Mirroring to %s" -msgstr "Точное копирование в %s" +msgid "%s (%s): Merge" +msgstr "%s (%s): Слияние" -#: lib/transport.tcl:82 +#: lib/merge.tcl:164 #, tcl-format -msgid "Pushing %s %s to %s" -msgstr "Отправка %s %s в %s" +msgid "Merge Into %s" +msgstr "Слияние с %s" -#: lib/transport.tcl:100 -msgid "Push Branches" -msgstr "Отправить ветки" +#: lib/merge.tcl:183 +msgid "Revision To Merge" +msgstr "Версия, с которой провести слияние" -#: lib/transport.tcl:114 -msgid "Source Branches" -msgstr "Исходные ветки" +#: lib/merge.tcl:218 +msgid "" +"Cannot abort while amending.\n" +"\n" +"You must finish amending this commit.\n" +msgstr "Невозможно прервать исправление.\n\nЗавершите текущее исправление коммита.\n" -#: lib/transport.tcl:131 -msgid "Destination Repository" -msgstr "Репозиторий назначения" +#: lib/merge.tcl:228 +msgid "" +"Abort merge?\n" +"\n" +"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with aborting the current merge?" +msgstr "Прервать операцию слияния?\n\nПрерывание текущего слияния приведет к потере *ВСЕХ* несохраненных изменений.\n\nПродолжить?" -#: lib/transport.tcl:169 -msgid "Transfer Options" -msgstr "Настройки отправки" +#: lib/merge.tcl:234 +msgid "" +"Reset changes?\n" +"\n" +"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with resetting the current changes?" +msgstr "Сбросить изменения?\n\nСброс изменений приведет к потере *ВСЕХ* несохраненных изменений.\n\nПродолжить?" -#: lib/transport.tcl:171 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "Принудительно перезаписать существующую ветку (возможна потеря изменений)" +#: lib/merge.tcl:246 +msgid "Aborting" +msgstr "Прерываю" -#: lib/transport.tcl:175 -msgid "Use thin pack (for slow network connections)" -msgstr "Использовать thin pack (для медленных сетевых подключений)" +#: lib/merge.tcl:247 +msgid "files reset" +msgstr "изменения в файлах отменены" -#: lib/transport.tcl:179 -msgid "Include tags" -msgstr "Передать метки" +#: lib/merge.tcl:277 +msgid "Abort failed." +msgstr "Прервать не удалось." + +#: lib/merge.tcl:279 +msgid "Abort completed. Ready." +msgstr "Прервано." diff --git a/po/sv.po b/po/sv.po index 1b4ad83..de65c18 100644 --- a/po/sv.po +++ b/po/sv.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the git-gui package. # # Mikael Magnusson , 2008. -# Peter Krefting , 2007-2008, 2015. +# Peter Krefting , 2007-2023. # msgid "" msgstr "" -"Project-Id-Version: sv\n" +"Project-Id-Version: git-gui 0.21.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 10:15+0100\n" -"PO-Revision-Date: 2015-03-27 10:24+0100\n" +"POT-Creation-Date: 2023-10-26 21:17+0100\n" +"PO-Revision-Date: 2023-10-26 21:23+0100\n" "Last-Translator: Peter Krefting \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -18,35 +18,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Gtranslator 2.91.6\n" +"X-Generator: Gtranslator 3.38.0\n" -#: git-gui.sh:861 +#: git-gui.sh:884 #, tcl-format msgid "Invalid font specified in %s:" msgstr "Ogiltigt teckensnitt angivet i %s:" -#: git-gui.sh:915 +#: git-gui.sh:939 msgid "Main Font" msgstr "Huvudteckensnitt" -#: git-gui.sh:916 +#: git-gui.sh:940 msgid "Diff/Console Font" msgstr "Diff/konsolteckensnitt" -#: git-gui.sh:931 git-gui.sh:945 git-gui.sh:958 git-gui.sh:1048 -#: git-gui.sh:1067 git-gui.sh:3125 +#: git-gui.sh:955 git-gui.sh:969 git-gui.sh:982 git-gui.sh:1072 git-gui.sh:1091 +#: git-gui.sh:3233 msgid "git-gui: fatal error" msgstr "git-gui: ödesdigert fel" -#: git-gui.sh:932 +#: git-gui.sh:956 msgid "Cannot find git in PATH." msgstr "Hittar inte git i PATH." -#: git-gui.sh:959 +#: git-gui.sh:983 msgid "Cannot parse Git version string:" msgstr "Kan inte tolka versionssträng från Git:" -#: git-gui.sh:984 +#: git-gui.sh:1008 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -59,53 +59,53 @@ msgid "" msgstr "" "Kan inte avgöra Gits version.\n" "\n" -"%s säger att dess version är \"%s\".\n" +"%s säger att dess version är ”%s”.\n" "\n" "%s kräver minst Git 1.5.0 eller senare.\n" "\n" -"Anta att \"%s\" är version 1.5.0?\n" +"Anta att ”%s” är version 1.5.0?\n" -#: git-gui.sh:1281 +#: git-gui.sh:1302 msgid "Git directory not found:" msgstr "Git-katalogen hittades inte:" -#: git-gui.sh:1315 +#: git-gui.sh:1332 msgid "Cannot move to top of working directory:" msgstr "Kan inte gå till början på arbetskatalogen:" -#: git-gui.sh:1323 +#: git-gui.sh:1340 msgid "Cannot use bare repository:" msgstr "Kan inte använda naket arkiv:" -#: git-gui.sh:1331 +#: git-gui.sh:1348 msgid "No working directory" msgstr "Ingen arbetskatalog" -#: git-gui.sh:1503 lib/checkout_op.tcl:306 +#: git-gui.sh:1523 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "Uppdaterar filstatus..." -#: git-gui.sh:1563 +#: git-gui.sh:1567 msgid "Scanning for modified files ..." msgstr "Söker efter ändrade filer..." -#: git-gui.sh:1639 +#: git-gui.sh:1651 msgid "Calling prepare-commit-msg hook..." msgstr "" "Anropar kroken för förberedelse av incheckningsmeddelande (prepare-commit-" "msg)..." -#: git-gui.sh:1656 +#: git-gui.sh:1668 msgid "Commit declined by prepare-commit-msg hook." msgstr "" "Incheckningen avvisades av kroken för förberedelse av incheckningsmeddelande " "(prepare-commit-msg)." -#: git-gui.sh:1814 lib/browser.tcl:252 +#: git-gui.sh:1826 lib/browser.tcl:252 msgid "Ready." msgstr "Klar." -#: git-gui.sh:1978 +#: git-gui.sh:1990 #, tcl-format msgid "" "Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." @@ -113,851 +113,787 @@ msgstr "" "Visningsgräns (gui.maxfilesdisplayed = %s) nådd, visare inte samtliga %s " "filer." -#: git-gui.sh:2101 +#: git-gui.sh:2113 msgid "Unmodified" msgstr "Oförändrade" -#: git-gui.sh:2103 +#: git-gui.sh:2115 msgid "Modified, not staged" msgstr "Förändrade, ej köade" -#: git-gui.sh:2104 git-gui.sh:2116 +#: git-gui.sh:2116 git-gui.sh:2128 msgid "Staged for commit" msgstr "Köade för incheckning" -#: git-gui.sh:2105 git-gui.sh:2117 +#: git-gui.sh:2117 git-gui.sh:2129 msgid "Portions staged for commit" msgstr "Delar köade för incheckning" -#: git-gui.sh:2106 git-gui.sh:2118 +#: git-gui.sh:2118 git-gui.sh:2130 msgid "Staged for commit, missing" msgstr "Köade för incheckning, saknade" -#: git-gui.sh:2108 +#: git-gui.sh:2120 msgid "File type changed, not staged" msgstr "Filtyp ändrad, ej köade" -#: git-gui.sh:2109 git-gui.sh:2110 +#: git-gui.sh:2121 git-gui.sh:2122 msgid "File type changed, old type staged for commit" msgstr "Filtyp ändrad, gammal typ köade för incheckning" -#: git-gui.sh:2111 +#: git-gui.sh:2123 msgid "File type changed, staged" msgstr "Filtyp ändrad, köade" -#: git-gui.sh:2112 +#: git-gui.sh:2124 msgid "File type change staged, modification not staged" msgstr "Filtypsändringar köade, innehållsändringar ej köade" -#: git-gui.sh:2113 +#: git-gui.sh:2125 msgid "File type change staged, file missing" msgstr "Filtypsändringar köade, fil saknas" -#: git-gui.sh:2115 +#: git-gui.sh:2127 msgid "Untracked, not staged" msgstr "Ej spårade, ej köade" -#: git-gui.sh:2120 +#: git-gui.sh:2132 msgid "Missing" msgstr "Saknade" -#: git-gui.sh:2121 +#: git-gui.sh:2133 msgid "Staged for removal" msgstr "Köade för borttagning" -#: git-gui.sh:2122 +#: git-gui.sh:2134 msgid "Staged for removal, still present" msgstr "Köade för borttagning, fortfarande närvarande" -#: git-gui.sh:2124 git-gui.sh:2125 git-gui.sh:2126 git-gui.sh:2127 -#: git-gui.sh:2128 git-gui.sh:2129 +#: git-gui.sh:2136 git-gui.sh:2137 git-gui.sh:2138 git-gui.sh:2139 +#: git-gui.sh:2140 git-gui.sh:2141 msgid "Requires merge resolution" msgstr "Kräver konflikthantering efter sammanslagning" -#: git-gui.sh:2164 -msgid "Starting gitk... please wait..." -msgstr "Startar gitk... vänta..." - -#: git-gui.sh:2176 +#: git-gui.sh:2186 msgid "Couldn't find gitk in PATH" msgstr "Hittade inte gitk i PATH." -#: git-gui.sh:2235 +#: git-gui.sh:2233 git-gui.sh:2269 +#, tcl-format +msgid "Starting %s... please wait..." +msgstr "Startar %s... vänta..." + +#: git-gui.sh:2248 msgid "Couldn't find git gui in PATH" msgstr "Hittade inte git gui i PATH." -#: git-gui.sh:2654 lib/choose_repository.tcl:41 +#: git-gui.sh:2751 lib/choose_repository.tcl:53 msgid "Repository" msgstr "Arkiv" -#: git-gui.sh:2655 +#: git-gui.sh:2752 msgid "Edit" msgstr "Redigera" -#: git-gui.sh:2657 lib/choose_rev.tcl:567 +#: git-gui.sh:2754 lib/choose_rev.tcl:567 msgid "Branch" msgstr "Gren" -#: git-gui.sh:2660 lib/choose_rev.tcl:554 +#: git-gui.sh:2757 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "Incheckning" -#: git-gui.sh:2663 lib/merge.tcl:123 lib/merge.tcl:152 lib/merge.tcl:170 +#: git-gui.sh:2760 lib/merge.tcl:127 lib/merge.tcl:174 msgid "Merge" msgstr "Slå ihop" -#: git-gui.sh:2664 lib/choose_rev.tcl:563 +#: git-gui.sh:2761 lib/choose_rev.tcl:563 msgid "Remote" msgstr "Fjärrarkiv" -#: git-gui.sh:2667 +#: git-gui.sh:2764 msgid "Tools" msgstr "Verktyg" -#: git-gui.sh:2676 +#: git-gui.sh:2773 msgid "Explore Working Copy" msgstr "Utforska arbetskopia" -#: git-gui.sh:2682 +#: git-gui.sh:2788 msgid "Git Bash" msgstr "Git Bash" -#: git-gui.sh:2692 +#: git-gui.sh:2797 msgid "Browse Current Branch's Files" msgstr "Bläddra i grenens filer" -#: git-gui.sh:2696 +#: git-gui.sh:2801 msgid "Browse Branch Files..." msgstr "Bläddra filer på gren..." -#: git-gui.sh:2701 +#: git-gui.sh:2806 msgid "Visualize Current Branch's History" msgstr "Visualisera grenens historik" -#: git-gui.sh:2705 +#: git-gui.sh:2810 msgid "Visualize All Branch History" msgstr "Visualisera alla grenars historik" -#: git-gui.sh:2712 +#: git-gui.sh:2817 #, tcl-format msgid "Browse %s's Files" msgstr "Bläddra i filer för %s" -#: git-gui.sh:2714 +#: git-gui.sh:2819 #, tcl-format msgid "Visualize %s's History" msgstr "Visualisera historik för %s" -#: git-gui.sh:2719 lib/database.tcl:40 lib/database.tcl:66 +#: git-gui.sh:2824 lib/database.tcl:40 msgid "Database Statistics" msgstr "Databasstatistik" -#: git-gui.sh:2722 lib/database.tcl:33 +#: git-gui.sh:2827 lib/database.tcl:33 msgid "Compress Database" msgstr "Komprimera databas" -#: git-gui.sh:2725 +#: git-gui.sh:2830 msgid "Verify Database" msgstr "Verifiera databas" -#: git-gui.sh:2732 git-gui.sh:2736 git-gui.sh:2740 lib/shortcut.tcl:8 -#: lib/shortcut.tcl:40 lib/shortcut.tcl:72 +#: git-gui.sh:2837 git-gui.sh:2841 git-gui.sh:2845 msgid "Create Desktop Icon" msgstr "Skapa skrivbordsikon" -#: git-gui.sh:2748 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 +#: git-gui.sh:2853 lib/choose_repository.tcl:206 lib/choose_repository.tcl:214 msgid "Quit" msgstr "Avsluta" -#: git-gui.sh:2756 +#: git-gui.sh:2861 msgid "Undo" msgstr "Ångra" -#: git-gui.sh:2759 +#: git-gui.sh:2864 msgid "Redo" msgstr "Gör om" -#: git-gui.sh:2763 git-gui.sh:3368 +#: git-gui.sh:2868 git-gui.sh:3493 msgid "Cut" msgstr "Klipp ut" -#: git-gui.sh:2766 git-gui.sh:3371 git-gui.sh:3445 git-gui.sh:3530 +#: git-gui.sh:2871 git-gui.sh:3496 git-gui.sh:3572 git-gui.sh:3665 #: lib/console.tcl:69 msgid "Copy" msgstr "Kopiera" -#: git-gui.sh:2769 git-gui.sh:3374 +#: git-gui.sh:2874 git-gui.sh:3499 msgid "Paste" msgstr "Klistra in" -#: git-gui.sh:2772 git-gui.sh:3377 lib/remote_branch_delete.tcl:39 -#: lib/branch_delete.tcl:28 +#: git-gui.sh:2877 git-gui.sh:3502 lib/branch_delete.tcl:28 +#: lib/remote_branch_delete.tcl:39 msgid "Delete" msgstr "Ta bort" -#: git-gui.sh:2776 git-gui.sh:3381 git-gui.sh:3534 lib/console.tcl:71 +#: git-gui.sh:2881 git-gui.sh:3506 git-gui.sh:3669 lib/console.tcl:71 msgid "Select All" msgstr "Markera alla" -#: git-gui.sh:2785 +#: git-gui.sh:2890 msgid "Create..." msgstr "Skapa..." -#: git-gui.sh:2791 +#: git-gui.sh:2896 msgid "Checkout..." msgstr "Checka ut..." -#: git-gui.sh:2797 +#: git-gui.sh:2902 msgid "Rename..." msgstr "Byt namn..." -#: git-gui.sh:2802 +#: git-gui.sh:2907 msgid "Delete..." msgstr "Ta bort..." -#: git-gui.sh:2807 +#: git-gui.sh:2912 msgid "Reset..." msgstr "Återställ..." -#: git-gui.sh:2817 +#: git-gui.sh:2922 msgid "Done" msgstr "Färdig" -#: git-gui.sh:2819 +#: git-gui.sh:2924 msgid "Commit@@verb" msgstr "Checka in" -#: git-gui.sh:2828 git-gui.sh:3309 -msgid "New Commit" -msgstr "Ny incheckning" - -#: git-gui.sh:2836 git-gui.sh:3316 +#: git-gui.sh:2933 git-gui.sh:3432 msgid "Amend Last Commit" msgstr "Lägg till föregående incheckning" -#: git-gui.sh:2846 git-gui.sh:3270 lib/remote_branch_delete.tcl:101 +#: git-gui.sh:2943 git-gui.sh:3393 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "Sök på nytt" -#: git-gui.sh:2852 +#: git-gui.sh:2949 msgid "Stage To Commit" msgstr "Köa för incheckning" -#: git-gui.sh:2858 +#: git-gui.sh:2955 msgid "Stage Changed Files To Commit" msgstr "Köa ändrade filer för incheckning" -#: git-gui.sh:2864 +#: git-gui.sh:2961 msgid "Unstage From Commit" msgstr "Ta bort från incheckningskö" -#: git-gui.sh:2870 lib/index.tcl:442 +#: git-gui.sh:2967 lib/index.tcl:521 msgid "Revert Changes" msgstr "Återställ ändringar" -#: git-gui.sh:2878 git-gui.sh:3581 git-gui.sh:3612 +#: git-gui.sh:2975 git-gui.sh:3732 git-gui.sh:3763 msgid "Show Less Context" msgstr "Visa mindre sammanhang" -#: git-gui.sh:2882 git-gui.sh:3585 git-gui.sh:3616 +#: git-gui.sh:2979 git-gui.sh:3736 git-gui.sh:3767 msgid "Show More Context" msgstr "Visa mer sammanhang" -#: git-gui.sh:2889 git-gui.sh:3283 git-gui.sh:3392 +#: git-gui.sh:2986 git-gui.sh:3406 git-gui.sh:3517 msgid "Sign Off" msgstr "Skriv under" -#: git-gui.sh:2905 +#: git-gui.sh:3002 msgid "Local Merge..." msgstr "Lokal sammanslagning..." -#: git-gui.sh:2910 +#: git-gui.sh:3007 msgid "Abort Merge..." msgstr "Avbryt sammanslagning..." -#: git-gui.sh:2922 git-gui.sh:2950 +#: git-gui.sh:3019 git-gui.sh:3047 msgid "Add..." msgstr "Lägg till..." -#: git-gui.sh:2926 +#: git-gui.sh:3023 msgid "Push..." msgstr "Sänd..." -#: git-gui.sh:2930 +#: git-gui.sh:3027 msgid "Delete Branch..." msgstr "Ta bort gren..." -#: git-gui.sh:2940 git-gui.sh:3563 +#: git-gui.sh:3037 git-gui.sh:3698 msgid "Options..." msgstr "Alternativ..." -#: git-gui.sh:2951 +#: git-gui.sh:3048 msgid "Remove..." msgstr "Ta bort..." -#: git-gui.sh:2960 lib/choose_repository.tcl:55 +#: git-gui.sh:3057 lib/choose_repository.tcl:67 msgid "Help" msgstr "Hjälp" -#: git-gui.sh:2964 git-gui.sh:2968 lib/choose_repository.tcl:49 -#: lib/choose_repository.tcl:58 lib/about.tcl:14 +#: git-gui.sh:3061 git-gui.sh:3065 lib/about.tcl:14 +#: lib/choose_repository.tcl:61 lib/choose_repository.tcl:70 #, tcl-format msgid "About %s" msgstr "Om %s" -#: git-gui.sh:2992 +#: git-gui.sh:3085 msgid "Online Documentation" msgstr "Webbdokumentation" -#: git-gui.sh:2995 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 +#: git-gui.sh:3088 lib/choose_repository.tcl:64 lib/choose_repository.tcl:73 msgid "Show SSH Key" msgstr "Visa SSH-nyckel" -#: git-gui.sh:3014 git-gui.sh:3146 +#: git-gui.sh:3118 git-gui.sh:3250 +msgid "usage:" +msgstr "användning:" + +#: git-gui.sh:3122 git-gui.sh:3254 msgid "Usage" msgstr "Användning" -#: git-gui.sh:3095 lib/blame.tcl:573 +#: git-gui.sh:3203 lib/blame.tcl:576 msgid "Error" msgstr "Fel" -#: git-gui.sh:3126 +#: git-gui.sh:3234 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" msgstr "" "ödesdigert: kunde inte ta status på sökvägen %s: Fil eller katalog saknas" -#: git-gui.sh:3159 +#: git-gui.sh:3267 msgid "Current Branch:" msgstr "Aktuell gren:" -#: git-gui.sh:3185 -msgid "Staged Changes (Will Commit)" -msgstr "Köade ändringar (kommer att checkas in)" - -#: git-gui.sh:3205 +#: git-gui.sh:3292 msgid "Unstaged Changes" msgstr "Oköade ändringar" -#: git-gui.sh:3276 +#: git-gui.sh:3314 +msgid "Staged Changes (Will Commit)" +msgstr "Köade ändringar (kommer att checkas in)" + +#: git-gui.sh:3399 msgid "Stage Changed" msgstr "Köa ändrade" -#: git-gui.sh:3295 lib/transport.tcl:137 lib/transport.tcl:229 +#: git-gui.sh:3418 lib/transport.tcl:137 msgid "Push" msgstr "Sänd" -#: git-gui.sh:3330 +#: git-gui.sh:3445 msgid "Initial Commit Message:" msgstr "Inledande incheckningsmeddelande:" -#: git-gui.sh:3331 +#: git-gui.sh:3446 msgid "Amended Commit Message:" msgstr "Utökat incheckningsmeddelande:" -#: git-gui.sh:3332 +#: git-gui.sh:3447 msgid "Amended Initial Commit Message:" msgstr "Utökat inledande incheckningsmeddelande:" -#: git-gui.sh:3333 +#: git-gui.sh:3448 msgid "Amended Merge Commit Message:" msgstr "Utökat incheckningsmeddelande för sammanslagning:" -#: git-gui.sh:3334 +#: git-gui.sh:3449 msgid "Merge Commit Message:" msgstr "Incheckningsmeddelande för sammanslagning:" -#: git-gui.sh:3335 +#: git-gui.sh:3450 msgid "Commit Message:" msgstr "Incheckningsmeddelande:" -#: git-gui.sh:3384 git-gui.sh:3538 lib/console.tcl:73 +#: git-gui.sh:3509 git-gui.sh:3673 lib/console.tcl:73 msgid "Copy All" msgstr "Kopiera alla" -#: git-gui.sh:3408 lib/blame.tcl:105 +#: git-gui.sh:3533 lib/blame.tcl:106 msgid "File:" msgstr "Fil:" -#: git-gui.sh:3526 +#: git-gui.sh:3581 lib/choose_repository.tcl:1054 +msgid "Open" +msgstr "Öppna" + +#: git-gui.sh:3661 msgid "Refresh" msgstr "Uppdatera" -#: git-gui.sh:3547 +#: git-gui.sh:3682 msgid "Decrease Font Size" msgstr "Minska teckensnittsstorlek" -#: git-gui.sh:3551 +#: git-gui.sh:3686 msgid "Increase Font Size" msgstr "Öka teckensnittsstorlek" -#: git-gui.sh:3559 lib/blame.tcl:294 +#: git-gui.sh:3694 lib/blame.tcl:296 msgid "Encoding" msgstr "Teckenkodning" -#: git-gui.sh:3570 +#: git-gui.sh:3705 msgid "Apply/Reverse Hunk" msgstr "Använd/återställ del" -#: git-gui.sh:3575 +#: git-gui.sh:3710 msgid "Apply/Reverse Line" msgstr "Använd/återställ rad" -#: git-gui.sh:3594 +#: git-gui.sh:3716 git-gui.sh:3826 git-gui.sh:3837 +msgid "Revert Hunk" +msgstr "Återställ del" + +#: git-gui.sh:3721 git-gui.sh:3833 git-gui.sh:3844 +msgid "Revert Line" +msgstr "Återställ rad" + +#: git-gui.sh:3726 git-gui.sh:3823 +msgid "Undo Last Revert" +msgstr "Ångra senaste återställning" + +#: git-gui.sh:3745 msgid "Run Merge Tool" msgstr "Starta verktyg för sammanslagning" -#: git-gui.sh:3599 +#: git-gui.sh:3750 msgid "Use Remote Version" msgstr "Använd versionen från fjärrarkivet" -#: git-gui.sh:3603 +#: git-gui.sh:3754 msgid "Use Local Version" msgstr "Använd lokala versionen" -#: git-gui.sh:3607 +#: git-gui.sh:3758 msgid "Revert To Base" msgstr "Återställ till basversionen" -#: git-gui.sh:3625 +#: git-gui.sh:3776 msgid "Visualize These Changes In The Submodule" msgstr "Visualisera ändringarna i undermodulen" -#: git-gui.sh:3629 +#: git-gui.sh:3780 msgid "Visualize Current Branch History In The Submodule" msgstr "Visualisera grenens historik i undermodulen" -#: git-gui.sh:3633 +#: git-gui.sh:3784 msgid "Visualize All Branch History In The Submodule" msgstr "Visualisera alla grenars historik i undermodulen" -#: git-gui.sh:3638 +#: git-gui.sh:3789 msgid "Start git gui In The Submodule" msgstr "Starta git gui i undermodulen" -#: git-gui.sh:3673 +#: git-gui.sh:3825 msgid "Unstage Hunk From Commit" msgstr "Ta bort del ur incheckningskö" -#: git-gui.sh:3675 +#: git-gui.sh:3829 msgid "Unstage Lines From Commit" msgstr "Ta bort rader ur incheckningskö" -#: git-gui.sh:3677 +#: git-gui.sh:3830 git-gui.sh:3841 +msgid "Revert Lines" +msgstr "Återställ rader" + +#: git-gui.sh:3832 msgid "Unstage Line From Commit" msgstr "Ta bort rad ur incheckningskö" -#: git-gui.sh:3680 +#: git-gui.sh:3836 msgid "Stage Hunk For Commit" msgstr "Ställ del i incheckningskö" -#: git-gui.sh:3682 +#: git-gui.sh:3840 msgid "Stage Lines For Commit" msgstr "Ställ rader i incheckningskö" -#: git-gui.sh:3684 +#: git-gui.sh:3843 msgid "Stage Line For Commit" msgstr "Ställ rad i incheckningskö" -#: git-gui.sh:3709 +#: git-gui.sh:3893 msgid "Initializing..." msgstr "Initierar..." -#: git-gui.sh:3852 -#, tcl-format -msgid "" -"Possible environment issues exist.\n" -"\n" -"The following environment variables are probably\n" -"going to be ignored by any Git subprocess run\n" -"by %s:\n" -"\n" -msgstr "" -"Det finns möjliga problem med miljövariabler.\n" -"\n" -"Följande miljövariabler kommer troligen att\n" -"ignoreras av alla Git-underprocesser som körs\n" -"av %s:\n" -"\n" - -#: git-gui.sh:3881 -msgid "" -"\n" -"This is due to a known issue with the\n" -"Tcl binary distributed by Cygwin." -msgstr "" -"\n" -"Detta beror på ett känt problem med\n" -"Tcl-binären som följer med Cygwin." +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "git-gui - ett grafiskt användargränssnitt för Git." -#: git-gui.sh:3886 +#: lib/blame.tcl:74 #, tcl-format -msgid "" -"\n" -"\n" -"A good replacement for %s\n" -"is placing values for the user.name and\n" -"user.email settings into your personal\n" -"~/.gitconfig file.\n" -msgstr "" -"\n" -"\n" -"Du kan ersätta %s\n" -"med att lägga in värden för inställningarna\n" -"user.name och user.email i din personliga\n" -"~/.gitconfig-fil.\n" +msgid "%s (%s): File Viewer" +msgstr "%s (%s): Filvisare" -#: lib/line.tcl:17 -msgid "Goto Line:" -msgstr "Gå till rad:" +#: lib/blame.tcl:80 +msgid "Commit:" +msgstr "Incheckning:" -#: lib/line.tcl:23 -msgid "Go" -msgstr "Gå" +#: lib/blame.tcl:282 +msgid "Copy Commit" +msgstr "Kopiera incheckning" -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "Arbetar... vänta..." +#: lib/blame.tcl:286 +msgid "Find Text..." +msgstr "Sök text..." -#: lib/console.tcl:81 lib/checkout_op.tcl:146 lib/sshkey.tcl:55 -#: lib/database.tcl:30 -msgid "Close" -msgstr "Stäng" +#: lib/blame.tcl:290 +msgid "Goto Line..." +msgstr "Gå till rad..." -#: lib/console.tcl:186 -msgid "Success" -msgstr "Lyckades" +#: lib/blame.tcl:299 +msgid "Do Full Copy Detection" +msgstr "Gör full kopieringsigenkänning" -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "Fel: Kommando misslyckades" +#: lib/blame.tcl:303 +msgid "Show History Context" +msgstr "Visa historiksammanhang" -#: lib/checkout_op.tcl:85 -#, tcl-format -msgid "Fetching %s from %s" -msgstr "Hämtar %s från %s" +#: lib/blame.tcl:306 +msgid "Blame Parent Commit" +msgstr "Klandra föräldraincheckning" -#: lib/checkout_op.tcl:133 +#: lib/blame.tcl:469 #, tcl-format -msgid "fatal: Cannot resolve %s" -msgstr "ödesdigert: Kunde inte slå upp %s" +msgid "Reading %s..." +msgstr "Läser %s..." -#: lib/checkout_op.tcl:175 -#, tcl-format -msgid "Branch '%s' does not exist." -msgstr "Grenen \"%s\" finns inte." +#: lib/blame.tcl:597 +msgid "Loading copy/move tracking annotations..." +msgstr "Läser annoteringar för kopiering/flyttning..." -#: lib/checkout_op.tcl:194 -#, tcl-format -msgid "Failed to configure simplified git-pull for '%s'." -msgstr "Kunde inte konfigurera förenklad git-pull för '%s'." +#: lib/blame.tcl:614 +msgid "lines annotated" +msgstr "rader annoterade" -#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102 -#, tcl-format -msgid "Branch '%s' already exists." -msgstr "Grenen \"%s\" finns redan." +#: lib/blame.tcl:816 +msgid "Loading original location annotations..." +msgstr "Läser in annotering av originalplacering..." -#: lib/checkout_op.tcl:229 -#, tcl-format -msgid "" -"Branch '%s' already exists.\n" -"\n" -"It cannot fast-forward to %s.\n" -"A merge is required." -msgstr "" -"Grenen \"%s\" finns redan.\n" -"\n" -"Den kan inte snabbspolas till %s.\n" -"En sammanslagning krävs." +#: lib/blame.tcl:819 +msgid "Annotation complete." +msgstr "Annotering fullbordad." -#: lib/checkout_op.tcl:243 -#, tcl-format -msgid "Merge strategy '%s' not supported." -msgstr "Sammanslagningsstrategin \"%s\" stöds inte." +#: lib/blame.tcl:850 +msgid "Busy" +msgstr "Upptagen" -#: lib/checkout_op.tcl:262 -#, tcl-format -msgid "Failed to update '%s'." -msgstr "Misslyckades med att uppdatera \"%s\"." +#: lib/blame.tcl:851 +msgid "Annotation process is already running." +msgstr "Annoteringsprocess körs redan." -#: lib/checkout_op.tcl:274 -msgid "Staging area (index) is already locked." -msgstr "Köområdet (index) är redan låst." +#: lib/blame.tcl:890 +msgid "Running thorough copy detection..." +msgstr "Kör grundlig kopieringsigenkänning..." -#: lib/checkout_op.tcl:289 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before the current branch can be changed.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n" -"\n" -"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste " -"utföra en ny sökning innan den aktuella grenen kan ändras.\n" -"\n" -"Sökningen kommer att startas automatiskt nu.\n" +#: lib/blame.tcl:958 +msgid "Loading annotation..." +msgstr "Läser in annotering..." -#: lib/checkout_op.tcl:345 -#, tcl-format -msgid "Updating working directory to '%s'..." -msgstr "Uppdaterar arbetskatalogen till \"%s\"..." +#: lib/blame.tcl:1011 +msgid "Author:" +msgstr "Författare:" -#: lib/checkout_op.tcl:346 -msgid "files checked out" -msgstr "filer utcheckade" +#: lib/blame.tcl:1015 +msgid "Committer:" +msgstr "Incheckare:" -#: lib/checkout_op.tcl:376 -#, tcl-format -msgid "Aborted checkout of '%s' (file level merging is required)." -msgstr "Avbryter utcheckning av \"%s\" (sammanslagning på filnivå krävs)." +#: lib/blame.tcl:1020 +msgid "Original File:" +msgstr "Ursprunglig fil:" -#: lib/checkout_op.tcl:377 -msgid "File level merge required." -msgstr "Sammanslagning på filnivå krävs." +#: lib/blame.tcl:1068 +msgid "Cannot find HEAD commit:" +msgstr "Hittar inte incheckning för HEAD:" -#: lib/checkout_op.tcl:381 -#, tcl-format -msgid "Staying on branch '%s'." -msgstr "Stannar på grenen \"%s\"." +#: lib/blame.tcl:1123 +msgid "Cannot find parent commit:" +msgstr "Hittar inte föräldraincheckning:" -#: lib/checkout_op.tcl:452 -msgid "" -"You are no longer on a local branch.\n" -"\n" -"If you wanted to be on a branch, create one now starting from 'This Detached " -"Checkout'." -msgstr "" -"Du är inte längre på en lokal gren.\n" -"\n" -"Om du ville vara på en gren skapar du en nu, baserad på \"Denna frånkopplade " -"utcheckning\"." +#: lib/blame.tcl:1138 +msgid "Unable to display parent" +msgstr "Kan inte visa förälder" -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 -#, tcl-format -msgid "Checked out '%s'." -msgstr "Checkade ut \"%s\"." +#: lib/blame.tcl:1139 lib/diff.tcl:345 +msgid "Error loading diff:" +msgstr "Fel vid inläsning av differens:" -#: lib/checkout_op.tcl:535 -#, tcl-format -msgid "Resetting '%s' to '%s' will lose the following commits:" -msgstr "" -"Om du återställer \"%s\" till \"%s\" går följande incheckningar förlorade:" +#: lib/blame.tcl:1280 +msgid "Originally By:" +msgstr "Ursprungligen av:" -#: lib/checkout_op.tcl:557 -msgid "Recovering lost commits may not be easy." -msgstr "Det kanske inte är så enkelt att återskapa förlorade incheckningar." +#: lib/blame.tcl:1286 +msgid "In File:" +msgstr "I filen:" + +#: lib/blame.tcl:1291 +msgid "Copied Or Moved Here By:" +msgstr "Kopierad eller flyttad hit av:" -#: lib/checkout_op.tcl:562 +#: lib/branch_checkout.tcl:16 #, tcl-format -msgid "Reset '%s'?" -msgstr "Återställa \"%s\"?" +msgid "%s (%s): Checkout Branch" +msgstr "%s (%s): Checka ut gren" -#: lib/checkout_op.tcl:567 lib/merge.tcl:166 lib/tools_dlg.tcl:336 -msgid "Visualize" -msgstr "Visualisera" +#: lib/branch_checkout.tcl:21 +msgid "Checkout Branch" +msgstr "Checka ut gren" -#: lib/checkout_op.tcl:571 lib/branch_create.tcl:85 -msgid "Reset" -msgstr "Återställ" +#: lib/branch_checkout.tcl:26 +msgid "Checkout" +msgstr "Checka ut" -#: lib/checkout_op.tcl:579 lib/transport.tcl:141 lib/remote_add.tcl:34 -#: lib/browser.tcl:292 lib/merge.tcl:174 lib/branch_checkout.tcl:30 -#: lib/choose_font.tcl:45 lib/option.tcl:127 lib/tools_dlg.tcl:41 -#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/branch_rename.tcl:32 -#: lib/remote_branch_delete.tcl:43 lib/branch_create.tcl:37 -#: lib/branch_delete.tcl:34 +#: lib/branch_checkout.tcl:30 lib/branch_create.tcl:37 lib/branch_delete.tcl:34 +#: lib/branch_rename.tcl:32 lib/browser.tcl:292 lib/checkout_op.tcl:580 +#: lib/choose_font.tcl:45 lib/merge.tcl:178 lib/option.tcl:127 +#: lib/remote_add.tcl:34 lib/remote_branch_delete.tcl:43 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/transport.tcl:141 msgid "Cancel" msgstr "Avbryt" -#: lib/checkout_op.tcl:635 -#, tcl-format -msgid "" -"Failed to set current branch.\n" -"\n" -"This working directory is only partially switched. We successfully updated " -"your files, but failed to update an internal Git file.\n" -"\n" -"This should not have occurred. %s will now close and give up." -msgstr "" -"Kunde inte ställa in aktuell gren.\n" -"\n" -"Arbetskatalogen har bara växlats delvis. Vi uppdaterade filerna utan " -"problem, men kunde inte uppdatera en intern fil i Git.\n" -"\n" -"Detta skulle inte ha hänt. %s kommer nu stängas och ge upp." +#: lib/branch_checkout.tcl:35 lib/browser.tcl:297 lib/tools_dlg.tcl:321 +msgid "Revision" +msgstr "Revision" -#: lib/transport.tcl:6 lib/remote_add.tcl:132 -#, tcl-format -msgid "fetch %s" -msgstr "hämta %s" +#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 lib/option.tcl:310 +msgid "Options" +msgstr "Alternativ" -#: lib/transport.tcl:7 -#, tcl-format -msgid "Fetching new changes from %s" -msgstr "Hämtar nya ändringar från %s" +#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 +msgid "Fetch Tracking Branch" +msgstr "Hämta spårande gren" -#: lib/transport.tcl:18 -#, tcl-format -msgid "remote prune %s" -msgstr "fjärrborttagning %s" +#: lib/branch_checkout.tcl:47 +msgid "Detach From Local Branch" +msgstr "Koppla bort från lokal gren" -#: lib/transport.tcl:19 +#: lib/branch_create.tcl:23 #, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "Tar bort spårande grenar som tagits bort från %s" +msgid "%s (%s): Create Branch" +msgstr "%s (%s): Skapa gren" -#: lib/transport.tcl:25 -msgid "fetch all remotes" -msgstr "hämta alla fjärrarkiv" - -#: lib/transport.tcl:26 -msgid "Fetching new changes from all remotes" -msgstr "Hämtar nya ändringar från alla fjärrarkiv" +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "Skapa ny gren" -#: lib/transport.tcl:40 -msgid "remote prune all remotes" -msgstr "rensa alla fjärrarkiv" +#: lib/branch_create.tcl:33 lib/choose_repository.tcl:386 +msgid "Create" +msgstr "Skapa" -#: lib/transport.tcl:41 -msgid "Pruning tracking branches deleted from all remotes" -msgstr "Rensar spårande grenar som tagits bort, från alla fjärrarkiv" +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "Namn på gren" -#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110 -#: lib/remote_add.tcl:162 -#, tcl-format -msgid "push %s" -msgstr "sänd %s" +#: lib/branch_create.tcl:44 lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 +msgid "Name:" +msgstr "Namn:" -#: lib/transport.tcl:55 -#, tcl-format -msgid "Pushing changes to %s" -msgstr "Sänder ändringar till %s" +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "Använd namn på spårad gren" -#: lib/transport.tcl:93 -#, tcl-format -msgid "Mirroring to %s" -msgstr "Speglar till %s" +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "Inledande revision" -#: lib/transport.tcl:111 -#, tcl-format -msgid "Pushing %s %s to %s" -msgstr "Sänder %s %s till %s" +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "Uppdatera befintlig gren:" -#: lib/transport.tcl:132 -msgid "Push Branches" -msgstr "Sänd grenar" +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "Nej" -#: lib/transport.tcl:147 -msgid "Source Branches" -msgstr "Källgrenar" +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "Endast snabbspolning" -#: lib/transport.tcl:162 -msgid "Destination Repository" -msgstr "Destinationsarkiv" +#: lib/branch_create.tcl:85 lib/checkout_op.tcl:572 +msgid "Reset" +msgstr "Återställ" -#: lib/transport.tcl:165 lib/remote_branch_delete.tcl:51 -msgid "Remote:" -msgstr "Fjärrarkiv:" +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "Checka ut när skapad" -#: lib/transport.tcl:187 lib/remote_branch_delete.tcl:72 -msgid "Arbitrary Location:" -msgstr "Godtycklig plats:" +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "Välj en gren att spåra." -#: lib/transport.tcl:205 -msgid "Transfer Options" -msgstr "Överföringsalternativ" +#: lib/branch_create.tcl:141 +#, tcl-format +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "Den spårade grenen %s är inte en gren i fjärrarkivet." -#: lib/transport.tcl:207 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "Tvinga överskrivning av befintlig gren (kan kasta bort ändringar)" +#: lib/branch_create.tcl:154 lib/branch_rename.tcl:92 +msgid "Please supply a branch name." +msgstr "Ange ett namn för grenen." -#: lib/transport.tcl:211 -msgid "Use thin pack (for slow network connections)" -msgstr "Använd tunt paket (för långsamma nätverksanslutningar)" +#: lib/branch_create.tcl:165 lib/branch_rename.tcl:112 +#, tcl-format +msgid "'%s' is not an acceptable branch name." +msgstr "”%s” kan inte användas som namn på grenen." -#: lib/transport.tcl:215 -msgid "Include tags" -msgstr "Ta med taggar" +#: lib/branch_delete.tcl:16 +#, tcl-format +msgid "%s (%s): Delete Branch" +msgstr "%s (%s): Ta bort gren" -#: lib/remote_add.tcl:20 -msgid "Add Remote" -msgstr "Lägg till fjärrarkiv" +#: lib/branch_delete.tcl:21 +msgid "Delete Local Branch" +msgstr "Ta bort lokal gren" -#: lib/remote_add.tcl:25 -msgid "Add New Remote" -msgstr "Lägg till nytt fjärrarkiv" +#: lib/branch_delete.tcl:39 +msgid "Local Branches" +msgstr "Lokala grenar" -#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 -msgid "Add" -msgstr "Lägg till" +#: lib/branch_delete.tcl:51 +msgid "Delete Only If Merged Into" +msgstr "Ta bara bort om sammanslagen med" -#: lib/remote_add.tcl:39 -msgid "Remote Details" -msgstr "Detaljer för fjärrarkiv" +#: lib/branch_delete.tcl:53 lib/remote_branch_delete.tcl:120 +msgid "Always (Do not perform merge checks)" +msgstr "Alltid (utför inte sammanslagningstest)" -#: lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 lib/branch_create.tcl:44 -msgid "Name:" -msgstr "Namn:" +#: lib/branch_delete.tcl:103 +#, tcl-format +msgid "The following branches are not completely merged into %s:" +msgstr "Följande grenar är inte till fullo sammanslagna med %s:" -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "Plats:" +#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:218 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "" +"Det kan vara svårt att återställa borttagna grenar.\n" +"\n" +"Ta bort de valda grenarna?" -#: lib/remote_add.tcl:60 -msgid "Further Action" -msgstr "Ytterligare åtgärd" +#: lib/branch_delete.tcl:131 +#, tcl-format +msgid " - %s:" +msgstr " - %s:" -#: lib/remote_add.tcl:63 -msgid "Fetch Immediately" -msgstr "Hämta omedelbart" +#: lib/branch_delete.tcl:141 +#, tcl-format +msgid "" +"Failed to delete branches:\n" +"%s" +msgstr "" +"Kunde inte ta bort grenar:\n" +"%s" -#: lib/remote_add.tcl:69 -msgid "Initialize Remote Repository and Push" -msgstr "Initiera fjärrarkiv och sänd till" +#: lib/branch_rename.tcl:15 +#, tcl-format +msgid "%s (%s): Rename Branch" +msgstr "%s (%s): Byt namn på gren" -#: lib/remote_add.tcl:75 -msgid "Do Nothing Else Now" -msgstr "Gör ingent mer nu" +#: lib/branch_rename.tcl:23 +msgid "Rename Branch" +msgstr "Byt namn på gren" -#: lib/remote_add.tcl:100 -msgid "Please supply a remote name." -msgstr "Ange ett namn för fjärrarkivet." +#: lib/branch_rename.tcl:28 +msgid "Rename" +msgstr "Byt namn" -#: lib/remote_add.tcl:113 -#, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "\"%s\" kan inte användas som namn på fjärrarkivet." +#: lib/branch_rename.tcl:38 +msgid "Branch:" +msgstr "Gren:" -#: lib/remote_add.tcl:124 -#, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "Kunde inte lägga till fjärrarkivet \"%s\" på platsen \"%s\"." +#: lib/branch_rename.tcl:46 +msgid "New Name:" +msgstr "Nytt namn:" -#: lib/remote_add.tcl:133 -#, tcl-format -msgid "Fetching the %s" -msgstr "Hämtar %s" +#: lib/branch_rename.tcl:81 +msgid "Please select a branch to rename." +msgstr "Välj en gren att byta namn på." -#: lib/remote_add.tcl:156 +#: lib/branch_rename.tcl:102 lib/checkout_op.tcl:202 #, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "Vet inte hur arkivet på platsen \"%s\" skall initieras." +msgid "Branch '%s' already exists." +msgstr "Grenen ”%s” finns redan." -#: lib/remote_add.tcl:163 +#: lib/branch_rename.tcl:123 #, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "Konfigurerar %s (på %s)" +msgid "Failed to rename '%s'." +msgstr "Kunde inte byta namn på ”%s”." #: lib/browser.tcl:17 msgid "Starting..." msgstr "Startar..." #: lib/browser.tcl:27 -msgid "File Browser" -msgstr "Filbläddrare" +#, tcl-format +msgid "%s (%s): File Browser" +msgstr "%s (%s): Filbläddrare" #: lib/browser.tcl:132 lib/browser.tcl:149 #, tcl-format @@ -968,269 +904,743 @@ msgstr "Läser %s..." msgid "[Up To Parent]" msgstr "[Upp till förälder]" -#: lib/browser.tcl:275 lib/browser.tcl:282 +#: lib/browser.tcl:275 +#, tcl-format +msgid "%s (%s): Browse Branch Files" +msgstr "%s (%s): Bläddra filer på grenen" + +#: lib/browser.tcl:282 msgid "Browse Branch Files" msgstr "Bläddra filer på grenen" -#: lib/browser.tcl:288 lib/choose_repository.tcl:422 -#: lib/choose_repository.tcl:509 lib/choose_repository.tcl:518 -#: lib/choose_repository.tcl:1074 +#: lib/browser.tcl:288 lib/choose_repository.tcl:401 +#: lib/choose_repository.tcl:488 lib/choose_repository.tcl:497 +#: lib/choose_repository.tcl:1069 msgid "Browse" msgstr "Bläddra" -#: lib/browser.tcl:297 lib/branch_checkout.tcl:35 lib/tools_dlg.tcl:321 -msgid "Revision" -msgstr "Revision" +#: lib/checkout_op.tcl:85 +#, tcl-format +msgid "Fetching %s from %s" +msgstr "Hämtar %s från %s" -#: lib/merge.tcl:13 +#: lib/checkout_op.tcl:133 +#, tcl-format +msgid "fatal: Cannot resolve %s" +msgstr "ödesdigert: Kunde inte slå upp %s" + +#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:30 +#: lib/sshkey.tcl:58 +msgid "Close" +msgstr "Stäng" + +#: lib/checkout_op.tcl:175 +#, tcl-format +msgid "Branch '%s' does not exist." +msgstr "Grenen ”%s” finns inte." + +#: lib/checkout_op.tcl:194 +#, tcl-format +msgid "Failed to configure simplified git-pull for '%s'." +msgstr "Kunde inte konfigurera förenklad git-pull för '%s'." + +#: lib/checkout_op.tcl:229 +#, tcl-format msgid "" -"Cannot merge while amending.\n" +"Branch '%s' already exists.\n" "\n" -"You must finish amending this commit before starting any type of merge.\n" +"It cannot fast-forward to %s.\n" +"A merge is required." msgstr "" -"Kan inte slå ihop vid utökning.\n" +"Grenen ”%s” finns redan.\n" "\n" -"Du måste göra färdig utökningen av incheckningen innan du påbörjar någon " -"slags sammanslagning.\n" +"Den kan inte snabbspolas till %s.\n" +"En sammanslagning krävs." -#: lib/merge.tcl:27 +#: lib/checkout_op.tcl:243 +#, tcl-format +msgid "Merge strategy '%s' not supported." +msgstr "Sammanslagningsstrategin ”%s” stöds inte." + +#: lib/checkout_op.tcl:262 +#, tcl-format +msgid "Failed to update '%s'." +msgstr "Misslyckades med att uppdatera ”%s”." + +#: lib/checkout_op.tcl:274 +msgid "Staging area (index) is already locked." +msgstr "Köområdet (index) är redan låst." + +#: lib/checkout_op.tcl:289 msgid "" "Last scanned state does not match repository state.\n" "\n" "Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" +"rescan must be performed before the current branch can be changed.\n" "\n" "The rescan will be automatically started now.\n" msgstr "" "Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n" "\n" "Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste " -"utföra en ny sökning innan du kan utföra en sammanslagning.\n" +"utföra en ny sökning innan den aktuella grenen kan ändras.\n" "\n" "Sökningen kommer att startas automatiskt nu.\n" -#: lib/merge.tcl:45 +#: lib/checkout_op.tcl:345 #, tcl-format -msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" -"\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" -msgstr "" -"Du är mitt i en sammanslagning med konflikter.\n" -"\n" -"Filen %s har sammanslagningskonflikter.\n" -"\n" -"Du måste lösa dem, köa filen och checka in för att fullborda den aktuella " -"sammanslagningen. När du gjort det kan du påbörja en ny sammanslagning.\n" +msgid "Updating working directory to '%s'..." +msgstr "Uppdaterar arbetskatalogen till ”%s”..." -#: lib/merge.tcl:55 +#: lib/checkout_op.tcl:346 +msgid "files checked out" +msgstr "filer utcheckade" + +#: lib/checkout_op.tcl:377 +#, tcl-format +msgid "Aborted checkout of '%s' (file level merging is required)." +msgstr "Avbryter utcheckning av ”%s” (sammanslagning på filnivå krävs)." + +#: lib/checkout_op.tcl:378 +msgid "File level merge required." +msgstr "Sammanslagning på filnivå krävs." + +#: lib/checkout_op.tcl:382 #, tcl-format +msgid "Staying on branch '%s'." +msgstr "Stannar på grenen ”%s”." + +#: lib/checkout_op.tcl:453 msgid "" -"You are in the middle of a change.\n" -"\n" -"File %s is modified.\n" +"You are no longer on a local branch.\n" "\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" +"If you wanted to be on a branch, create one now starting from 'This Detached " +"Checkout'." msgstr "" -"Du är mitt i en ändring.\n" -"\n" -"Filen %s har ändringar.\n" +"Du är inte längre på en lokal gren.\n" "\n" -"Du bör fullborda den aktuella incheckningen innan du påbörjar en " -"sammanslagning. Om du gör det blir det enklare att avbryta en misslyckad " -"sammanslagning, om det skulle vara nödvändigt.\n" +"Om du ville vara på en gren skapar du en nu, baserad på ”Denna frånkopplade " +"utcheckning”." -#: lib/merge.tcl:108 +#: lib/checkout_op.tcl:504 lib/checkout_op.tcl:508 #, tcl-format -msgid "%s of %s" -msgstr "%s av %s" +msgid "Checked out '%s'." +msgstr "Checkade ut ”%s”." -#: lib/merge.tcl:122 +#: lib/checkout_op.tcl:536 #, tcl-format -msgid "Merging %s and %s..." -msgstr "Slår ihop %s och %s..." - -#: lib/merge.tcl:133 -msgid "Merge completed successfully." -msgstr "Sammanslagningen avslutades framgångsrikt." +msgid "Resetting '%s' to '%s' will lose the following commits:" +msgstr "Om du återställer ”%s” till ”%s” går följande incheckningar förlorade:" -#: lib/merge.tcl:135 -msgid "Merge failed. Conflict resolution is required." -msgstr "Sammanslagningen misslyckades. Du måste lösa konflikterna." +#: lib/checkout_op.tcl:558 +msgid "Recovering lost commits may not be easy." +msgstr "Det kanske inte är så enkelt att återskapa förlorade incheckningar." -#: lib/merge.tcl:160 +#: lib/checkout_op.tcl:563 #, tcl-format -msgid "Merge Into %s" -msgstr "Slå ihop i %s" - -#: lib/merge.tcl:179 -msgid "Revision To Merge" -msgstr "Revisioner att slå ihop" +msgid "Reset '%s'?" +msgstr "Återställa ”%s”?" -#: lib/merge.tcl:214 -msgid "" -"Cannot abort while amending.\n" -"\n" -"You must finish amending this commit.\n" -msgstr "" -"Kan inte avbryta vid utökning.\n" -"\n" -"Du måste göra dig färdig med att utöka incheckningen.\n" +#: lib/checkout_op.tcl:568 lib/merge.tcl:170 lib/tools_dlg.tcl:336 +msgid "Visualize" +msgstr "Visualisera" -#: lib/merge.tcl:224 +#: lib/checkout_op.tcl:636 +#, tcl-format msgid "" -"Abort merge?\n" +"Failed to set current branch.\n" "\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"This working directory is only partially switched. We successfully updated " +"your files, but failed to update an internal Git file.\n" "\n" -"Continue with aborting the current merge?" +"This should not have occurred. %s will now close and give up." msgstr "" -"Avbryt sammanslagning?\n" +"Kunde inte ställa in aktuell gren.\n" "\n" -"Om du avbryter sammanslagningen kommer *ALLA* ej incheckade ändringar att gå " -"förlorade.\n" +"Arbetskatalogen har bara växlats delvis. Vi uppdaterade filerna utan " +"problem, men kunde inte uppdatera en intern fil i Git.\n" "\n" -"Gå vidare med att avbryta den aktuella sammanslagningen?" +"Detta skulle inte ha hänt. %s kommer nu stängas och ge upp." + +#: lib/choose_font.tcl:41 +msgid "Select" +msgstr "Välj" + +#: lib/choose_font.tcl:55 +msgid "Font Family" +msgstr "Teckensnittsfamilj" + +#: lib/choose_font.tcl:76 +msgid "Font Size" +msgstr "Storlek" + +#: lib/choose_font.tcl:93 +msgid "Font Example" +msgstr "Exempel" -#: lib/merge.tcl:230 +#: lib/choose_font.tcl:105 msgid "" -"Reset changes?\n" -"\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with resetting the current changes?" +"This is example text.\n" +"If you like this text, it can be your font." msgstr "" -"Återställ ändringar?\n" -"\n" -"Om du återställer ändringarna kommer *ALLA* ej incheckade ändringar att gå " -"förlorade.\n" -"\n" -"Gå vidare med att återställa de aktuella ändringarna?" +"Detta är en exempeltext.\n" +"Om du tycker om den här texten kan den vara ditt teckensnitt." -#: lib/merge.tcl:241 -msgid "Aborting" -msgstr "Avbryter" +#: lib/choose_repository.tcl:45 +msgid "Git Gui" +msgstr "Git Gui" -#: lib/merge.tcl:241 -msgid "files reset" -msgstr "filer återställda" +#: lib/choose_repository.tcl:104 lib/choose_repository.tcl:391 +msgid "Create New Repository" +msgstr "Skapa nytt arkiv" -#: lib/merge.tcl:269 -msgid "Abort failed." -msgstr "Misslyckades avbryta." +#: lib/choose_repository.tcl:110 +msgid "New..." +msgstr "Nytt..." -#: lib/merge.tcl:271 -msgid "Abort completed. Ready." -msgstr "Avbrytning fullbordad. Redo." +#: lib/choose_repository.tcl:117 lib/choose_repository.tcl:475 +msgid "Clone Existing Repository" +msgstr "Klona befintligt arkiv" -#: lib/tools.tcl:75 -#, tcl-format -msgid "Running %s requires a selected file." -msgstr "För att starta %s måste du välja en fil." +#: lib/choose_repository.tcl:128 +msgid "Clone..." +msgstr "Klona..." -#: lib/tools.tcl:91 -#, tcl-format -msgid "Are you sure you want to run %1$s on file \"%2$s\"?" -msgstr "Är du säker på att du vill starta %1$s med filen \"%2$s\"?" +#: lib/choose_repository.tcl:135 lib/choose_repository.tcl:1059 +msgid "Open Existing Repository" +msgstr "Öppna befintligt arkiv" -#: lib/tools.tcl:95 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "Är du säker på att du vill starta %s?" +#: lib/choose_repository.tcl:141 +msgid "Open..." +msgstr "Öppna..." -#: lib/tools.tcl:116 -#, tcl-format -msgid "Tool: %s" -msgstr "Verktyg: %s" +#: lib/choose_repository.tcl:154 +msgid "Recent Repositories" +msgstr "Senaste arkiven" + +#: lib/choose_repository.tcl:164 +msgid "Open Recent Repository:" +msgstr "Öppna tidigare arkiv:" -#: lib/tools.tcl:117 +#: lib/choose_repository.tcl:328 lib/choose_repository.tcl:335 +#: lib/choose_repository.tcl:342 #, tcl-format -msgid "Running: %s" -msgstr "Exekverar: %s" +msgid "Failed to create repository %s:" +msgstr "Kunde inte skapa arkivet %s:" -#: lib/tools.tcl:155 +#: lib/choose_repository.tcl:396 +msgid "Directory:" +msgstr "Katalog:" + +#: lib/choose_repository.tcl:426 lib/choose_repository.tcl:552 +#: lib/choose_repository.tcl:1093 +msgid "Git Repository" +msgstr "Gitarkiv" + +#: lib/choose_repository.tcl:451 #, tcl-format -msgid "Tool completed successfully: %s" -msgstr "Verktyget avslutades framgångsrikt: %s" +msgid "Directory %s already exists." +msgstr "Katalogen %s finns redan." -#: lib/tools.tcl:157 +#: lib/choose_repository.tcl:455 #, tcl-format -msgid "Tool failed: %s" -msgstr "Verktyget misslyckades: %s" +msgid "File %s already exists." +msgstr "Filen %s finns redan." -#: lib/branch_checkout.tcl:16 lib/branch_checkout.tcl:21 -msgid "Checkout Branch" -msgstr "Checka ut gren" +#: lib/choose_repository.tcl:470 +msgid "Clone" +msgstr "Klona" -#: lib/branch_checkout.tcl:26 -msgid "Checkout" -msgstr "Checka ut" +#: lib/choose_repository.tcl:483 +msgid "Source Location:" +msgstr "Plats för källkod:" -#: lib/branch_checkout.tcl:39 lib/option.tcl:310 lib/branch_create.tcl:69 -msgid "Options" -msgstr "Alternativ" +#: lib/choose_repository.tcl:492 +msgid "Target Directory:" +msgstr "Målkatalog:" -#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "Hämta spårande gren" +#: lib/choose_repository.tcl:502 +msgid "Clone Type:" +msgstr "Typ av klon:" -#: lib/branch_checkout.tcl:47 -msgid "Detach From Local Branch" -msgstr "Koppla bort från lokal gren" +#: lib/choose_repository.tcl:507 +msgid "Standard (Fast, Semi-Redundant, Hardlinks)" +msgstr "Standard (snabb, semiredundant, hårda länkar)" -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "Stavningskontrollprogrammet stöds inte" +#: lib/choose_repository.tcl:512 +msgid "Full Copy (Slower, Redundant Backup)" +msgstr "Full kopia (långsammare, redundant säkerhetskopia)" -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "Stavningskontroll är ej tillgänglig" +#: lib/choose_repository.tcl:517 +msgid "Shared (Fastest, Not Recommended, No Backup)" +msgstr "Delad (snabbast, rekommenderas ej, ingen säkerhetskopia)" -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "Ogiltig inställning för stavningskontroll" +#: lib/choose_repository.tcl:524 +msgid "Recursively clone submodules too" +msgstr "Klona även rekursivt undermoduler" -#: lib/spellcheck.tcl:70 +#: lib/choose_repository.tcl:558 lib/choose_repository.tcl:605 +#: lib/choose_repository.tcl:744 lib/choose_repository.tcl:818 +#: lib/choose_repository.tcl:1099 lib/choose_repository.tcl:1107 #, tcl-format -msgid "Reverting dictionary to %s." -msgstr "Återställer ordlistan till %s." +msgid "Not a Git repository: %s" +msgstr "Inte ett Gitarkiv: %s" -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "Stavningskontroll misslyckades tyst vid start" +#: lib/choose_repository.tcl:594 +msgid "Standard only available for local repository." +msgstr "Standard är endast tillgängligt för lokala arkiv." -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "Stavningskontrollprogrammet känns inte igen" +#: lib/choose_repository.tcl:598 +msgid "Shared only available for local repository." +msgstr "Delat är endast tillgängligt för lokala arkiv." -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "Inga förslag" +#: lib/choose_repository.tcl:613 +#, tcl-format +msgid "Location %s already exists." +msgstr "Platsen %s finns redan." -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "Oväntat filslut från stavningskontroll" +#: lib/choose_repository.tcl:624 +msgid "Failed to configure origin" +msgstr "Kunde inte konfigurera ursprung" -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "Stavningskontroll misslyckades" +#: lib/choose_repository.tcl:636 +msgid "Counting objects" +msgstr "Räknar objekt" + +#: lib/choose_repository.tcl:637 +msgid "buckets" +msgstr "hinkar" -#: lib/status_bar.tcl:87 +#: lib/choose_repository.tcl:657 #, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%s... %*i av %*i %s (%3i%%)" +msgid "Unable to copy objects/info/alternates: %s" +msgstr "Kunde inte kopiera objekt/info/alternativ: %s" -#: lib/diff.tcl:77 +#: lib/choose_repository.tcl:694 #, tcl-format -msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" -"\n" +msgid "Nothing to clone from %s." +msgstr "Ingenting att klona från %s." + +#: lib/choose_repository.tcl:696 lib/choose_repository.tcl:916 +#: lib/choose_repository.tcl:928 +msgid "The 'master' branch has not been initialized." +msgstr "Grenen ”master” har inte initierats." + +#: lib/choose_repository.tcl:709 +msgid "Hardlinks are unavailable. Falling back to copying." +msgstr "Hårda länkar är inte tillgängliga. Faller tillbaka på kopiering." + +#: lib/choose_repository.tcl:723 +#, tcl-format +msgid "Cloning from %s" +msgstr "Klonar från %s" + +#: lib/choose_repository.tcl:754 +msgid "Copying objects" +msgstr "Kopierar objekt" + +#: lib/choose_repository.tcl:755 +msgid "KiB" +msgstr "KiB" + +#: lib/choose_repository.tcl:779 +#, tcl-format +msgid "Unable to copy object: %s" +msgstr "Kunde inte kopiera objekt: %s" + +#: lib/choose_repository.tcl:791 +msgid "Linking objects" +msgstr "Länkar objekt" + +#: lib/choose_repository.tcl:792 +msgid "objects" +msgstr "objekt" + +#: lib/choose_repository.tcl:800 +#, tcl-format +msgid "Unable to hardlink object: %s" +msgstr "Kunde inte hårdlänka objekt: %s" + +#: lib/choose_repository.tcl:857 +msgid "Cannot fetch branches and objects. See console output for details." +msgstr "Kunde inte hämta grenar och objekt. Se konsolutdata för detaljer." + +#: lib/choose_repository.tcl:868 +msgid "Cannot fetch tags. See console output for details." +msgstr "Kunde inte hämta taggar. Se konsolutdata för detaljer." + +#: lib/choose_repository.tcl:892 +msgid "Cannot determine HEAD. See console output for details." +msgstr "Kunde inte avgöra HEAD. Se konsolutdata för detaljer." + +#: lib/choose_repository.tcl:901 +#, tcl-format +msgid "Unable to cleanup %s" +msgstr "Kunde inte städa upp %s" + +#: lib/choose_repository.tcl:907 +msgid "Clone failed." +msgstr "Kloning misslyckades." + +#: lib/choose_repository.tcl:914 +msgid "No default branch obtained." +msgstr "Hämtade ingen standardgren." + +#: lib/choose_repository.tcl:925 +#, tcl-format +msgid "Cannot resolve %s as a commit." +msgstr "Kunde inte slå upp %s till någon incheckning." + +#: lib/choose_repository.tcl:952 +msgid "Creating working directory" +msgstr "Skapar arbetskatalog" + +#: lib/choose_repository.tcl:953 lib/index.tcl:77 lib/index.tcl:146 +#: lib/index.tcl:220 lib/index.tcl:589 +msgid "files" +msgstr "filer" + +#: lib/choose_repository.tcl:982 +msgid "Initial file checkout failed." +msgstr "Inledande filutcheckning misslyckades." + +#: lib/choose_repository.tcl:1026 +msgid "Cloning submodules" +msgstr "Klonar undermoduler" + +#: lib/choose_repository.tcl:1041 +msgid "Cannot clone submodules." +msgstr "Kan inte klona undermoduler." + +#: lib/choose_repository.tcl:1064 +msgid "Repository:" +msgstr "Arkiv:" + +#: lib/choose_repository.tcl:1113 +#, tcl-format +msgid "Failed to open repository %s:" +msgstr "Kunde inte öppna arkivet %s:" + +#: lib/choose_rev.tcl:52 +msgid "This Detached Checkout" +msgstr "Denna frånkopplade utcheckning" + +#: lib/choose_rev.tcl:60 +msgid "Revision Expression:" +msgstr "Revisionsuttryck:" + +#: lib/choose_rev.tcl:72 +msgid "Local Branch" +msgstr "Lokal gren" + +#: lib/choose_rev.tcl:77 +msgid "Tracking Branch" +msgstr "Spårande gren" + +#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 +msgid "Tag" +msgstr "Tagg" + +#: lib/choose_rev.tcl:321 +#, tcl-format +msgid "Invalid revision: %s" +msgstr "Ogiltig revision: %s" + +#: lib/choose_rev.tcl:342 +msgid "No revision selected." +msgstr "Ingen revision vald." + +#: lib/choose_rev.tcl:350 +msgid "Revision expression is empty." +msgstr "Revisionsuttrycket är tomt." + +#: lib/choose_rev.tcl:537 +msgid "Updated" +msgstr "Uppdaterad" + +#: lib/choose_rev.tcl:565 +msgid "URL" +msgstr "Webbadress" + +#: lib/commit.tcl:9 +msgid "" +"There is nothing to amend.\n" +"\n" +"You are about to create the initial commit. There is no commit before this " +"to amend.\n" +msgstr "" +"Det finns ingenting att utöka.\n" +"\n" +"Du håller på att skapa den inledande incheckningen. Det finns ingen tidigare " +"incheckning att utöka.\n" + +#: lib/commit.tcl:18 +msgid "" +"Cannot amend while merging.\n" +"\n" +"You are currently in the middle of a merge that has not been fully " +"completed. You cannot amend the prior commit unless you first abort the " +"current merge activity.\n" +msgstr "" +"Kan inte utöka vid sammanslagning.\n" +"\n" +"Du är i mitten av en sammanslagning som inte är fullbordad. Du kan inte " +"utöka tidigare incheckningar om du inte först avbryter den pågående " +"sammanslagningen.\n" + +#: lib/commit.tcl:56 +msgid "Error loading commit data for amend:" +msgstr "Fel vid inläsning av incheckningsdata för utökning:" + +#: lib/commit.tcl:83 +msgid "Unable to obtain your identity:" +msgstr "Kunde inte hämta din identitet:" + +#: lib/commit.tcl:88 +msgid "Invalid GIT_COMMITTER_IDENT:" +msgstr "Felaktig GIT_COMMITTER_IDENT:" + +#: lib/commit.tcl:138 +#, tcl-format +msgid "warning: Tcl does not support encoding '%s'." +msgstr "varning: Tcl stöder inte teckenkodningen ”%s”." + +#: lib/commit.tcl:158 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before another commit can be created.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n" +"\n" +"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste " +"utföra en ny sökning innan du kan göra en ny incheckning.\n" +"\n" +"Sökningen kommer att startas automatiskt nu.\n" + +#: lib/commit.tcl:182 +#, tcl-format +msgid "" +"Unmerged files cannot be committed.\n" +"\n" +"File %s has merge conflicts. You must resolve them and stage the file " +"before committing.\n" +msgstr "" +"Osammanslagna filer kan inte checkas in.\n" +"\n" +"Filen %s har sammanslagningskonflikter. Du måste lösa dem och köa filen " +"innan du checkar in den.\n" + +#: lib/commit.tcl:190 +#, tcl-format +msgid "" +"Unknown file state %s detected.\n" +"\n" +"File %s cannot be committed by this program.\n" +msgstr "" +"Okänd filstatus %s upptäckt.\n" +"\n" +"Filen %s kan inte checkas in av programmet.\n" + +#: lib/commit.tcl:198 +msgid "" +"No changes to commit.\n" +"\n" +"You must stage at least 1 file before you can commit.\n" +msgstr "" +"Inga ändringar att checka in.\n" +"\n" +"Du måste köa åtminstone en fil innan du kan checka in.\n" + +#: lib/commit.tcl:213 +msgid "" +"Please supply a commit message.\n" +"\n" +"A good commit message has the following format:\n" +"\n" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" +msgstr "" +"Ange ett incheckningsmeddelande.\n" +"\n" +"Ett bra incheckningsmeddelande har följande format:\n" +"\n" +"- Första raden: Beskriv i en mening vad du gjorde.\n" +"- Andra raden: Tom\n" +"- Följande rader: Beskriv varför det här är en bra ändring.\n" + +#: lib/commit.tcl:244 +msgid "Calling pre-commit hook..." +msgstr "Anropar kroken före incheckning (pre-commit)..." + +#: lib/commit.tcl:259 +msgid "Commit declined by pre-commit hook." +msgstr "Incheckningen avvisades av kroken före incheckning (pre-commit)." + +#: lib/commit.tcl:278 +msgid "" +"You are about to commit on a detached head. This is a potentially dangerous " +"thing to do because if you switch to another branch you will lose your " +"changes and it can be difficult to retrieve them later from the reflog. You " +"should probably cancel this commit and create a new branch to continue.\n" +" \n" +" Do you really want to proceed with your Commit?" +msgstr "" +"Du är på väg att checka in på ett frånkopplat huvud. Det kan potentiellt " +"vara farligt, eftersom du kommer förlora dina ändringar om du växlar till en " +"annan gren och det kan vara svårt att hämta dem senare från ref-loggen. Du " +"bör troligen avbryta incheckningen och skapa en ny gren för att fortsätta.\n" +" \n" +" Vill du verkligen fortsätta checka in?" + +#: lib/commit.tcl:299 +msgid "Calling commit-msg hook..." +msgstr "Anropar kroken för incheckningsmeddelande (commit-msg)..." + +#: lib/commit.tcl:314 +msgid "Commit declined by commit-msg hook." +msgstr "Incheckning avvisad av kroken för incheckningsmeddelande (commit-msg)." + +#: lib/commit.tcl:327 +msgid "Committing changes..." +msgstr "Checkar in ändringar..." + +#: lib/commit.tcl:344 +msgid "write-tree failed:" +msgstr "write-tree misslyckades:" + +#: lib/commit.tcl:345 lib/commit.tcl:395 lib/commit.tcl:422 +msgid "Commit failed." +msgstr "Incheckningen misslyckades." + +#: lib/commit.tcl:362 +#, tcl-format +msgid "Commit %s appears to be corrupt" +msgstr "Incheckningen %s verkar vara trasig" + +#: lib/commit.tcl:367 +msgid "" +"No changes to commit.\n" +"\n" +"No files were modified by this commit and it was not a merge commit.\n" +"\n" +"A rescan will be automatically started now.\n" +msgstr "" +"Inga ändringar att checka in.\n" +"\n" +"Inga filer ändrades av incheckningen och det var inte en sammanslagning.\n" +"\n" +"En sökning kommer att startas automatiskt nu.\n" + +#: lib/commit.tcl:374 +msgid "No changes to commit." +msgstr "Inga ändringar att checka in." + +#: lib/commit.tcl:394 +msgid "commit-tree failed:" +msgstr "commit-tree misslyckades:" + +#: lib/commit.tcl:421 +msgid "update-ref failed:" +msgstr "update-ref misslyckades:" + +#: lib/commit.tcl:515 +#, tcl-format +msgid "Created commit %s: %s" +msgstr "Skapade incheckningen %s: %s" + +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "Arbetar... vänta..." + +#: lib/console.tcl:186 +msgid "Success" +msgstr "Lyckades" + +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "Fel: Kommando misslyckades" + +#: lib/database.tcl:42 +msgid "Number of loose objects" +msgstr "Antal lösa objekt" + +#: lib/database.tcl:43 +msgid "Disk space used by loose objects" +msgstr "Diskutrymme använt av lösa objekt" + +#: lib/database.tcl:44 +msgid "Number of packed objects" +msgstr "Antal packade objekt" + +#: lib/database.tcl:45 +msgid "Number of packs" +msgstr "Antal paket" + +#: lib/database.tcl:46 +msgid "Disk space used by packed objects" +msgstr "Diskutrymme använt av packade objekt" + +#: lib/database.tcl:47 +msgid "Packed objects waiting for pruning" +msgstr "Packade objekt som väntar på städning" + +#: lib/database.tcl:48 +msgid "Garbage files" +msgstr "Skräpfiler" + +#: lib/database.tcl:57 lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 +#: lib/option.tcl:282 +#, tcl-format +msgid "%s:" +msgstr "%s:" + +#: lib/database.tcl:66 +#, tcl-format +msgid "%s (%s): Database Statistics" +msgstr "%s (%s): Databasstatistik" + +#: lib/database.tcl:72 +msgid "Compressing the object database" +msgstr "Komprimerar objektdatabasen" + +#: lib/database.tcl:83 +msgid "Verifying the object database with fsck-objects" +msgstr "Verifierar objektdatabasen med fsck-objects" + +#: lib/database.tcl:107 +#, tcl-format +msgid "" +"This repository currently has approximately %i loose objects.\n" +"\n" +"To maintain optimal performance it is strongly recommended that you compress " +"the database.\n" +"\n" +"Compress the database now?" +msgstr "" +"Arkivet har för närvarande omkring %i lösa objekt.\n" +"\n" +"För att bibehålla optimal prestanda rekommenderas det å det bestämdaste att " +"du komprimerar databasen.\n" +"\n" +"Komprimera databasen nu?" + +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Ogiltigt datum från Git: %s" + +#: lib/diff.tcl:77 +#, tcl-format +msgid "" +"No differences detected.\n" +"\n" +"%s has no changes.\n" +"\n" "The modification date of this file was updated by another application, but " "the content within the file was not changed.\n" "\n" @@ -1252,7 +1662,7 @@ msgstr "" msgid "Loading diff of %s..." msgstr "Läser differens för %s..." -#: lib/diff.tcl:140 +#: lib/diff.tcl:143 msgid "" "LOCAL: deleted\n" "REMOTE:\n" @@ -1260,7 +1670,7 @@ msgstr "" "LOKAL: borttagen\n" "FJÄRR:\n" -#: lib/diff.tcl:145 +#: lib/diff.tcl:148 msgid "" "REMOTE: deleted\n" "LOCAL:\n" @@ -1268,32 +1678,32 @@ msgstr "" "FJÄRR: borttagen\n" "LOKAL:\n" -#: lib/diff.tcl:152 +#: lib/diff.tcl:155 msgid "LOCAL:\n" msgstr "LOKAL:\n" -#: lib/diff.tcl:155 +#: lib/diff.tcl:158 msgid "REMOTE:\n" msgstr "FJÄRR:\n" -#: lib/diff.tcl:217 lib/diff.tcl:355 +#: lib/diff.tcl:220 lib/diff.tcl:344 #, tcl-format msgid "Unable to display %s" msgstr "Kan inte visa %s" -#: lib/diff.tcl:218 +#: lib/diff.tcl:221 msgid "Error loading file:" msgstr "Fel vid läsning av fil:" -#: lib/diff.tcl:225 +#: lib/diff.tcl:227 msgid "Git Repository (subproject)" msgstr "Gitarkiv (underprojekt)" -#: lib/diff.tcl:237 +#: lib/diff.tcl:239 msgid "* Binary file (not showing content)." msgstr "* Binärfil (visar inte innehållet)." -#: lib/diff.tcl:242 +#: lib/diff.tcl:244 #, tcl-format msgid "" "* Untracked file is %d bytes.\n" @@ -1302,7 +1712,7 @@ msgstr "" "* Den ospårade filen är %d byte.\n" "* Visar endast inledande %d byte.\n" -#: lib/diff.tcl:248 +#: lib/diff.tcl:250 #, tcl-format msgid "" "\n" @@ -1313,213 +1723,347 @@ msgstr "" "* Den ospårade filen klipptes här av %s.\n" "* För att se hela filen, använd ett externt redigeringsprogram.\n" -#: lib/diff.tcl:356 lib/blame.tcl:1128 -msgid "Error loading diff:" -msgstr "Fel vid inläsning av differens:" - -#: lib/diff.tcl:578 +#: lib/diff.tcl:583 msgid "Failed to unstage selected hunk." msgstr "Kunde inte ta bort den valda delen från kön." -#: lib/diff.tcl:585 +#: lib/diff.tcl:591 +msgid "Failed to revert selected hunk." +msgstr "Kunde inte återställa den valda delen." + +#: lib/diff.tcl:594 msgid "Failed to stage selected hunk." msgstr "Kunde inte lägga till den valda delen till kön." -#: lib/diff.tcl:664 -msgid "Failed to unstage selected line." -msgstr "Kunde inte ta bort den valda raden från kön." +#: lib/diff.tcl:687 +msgid "Failed to unstage selected line." +msgstr "Kunde inte ta bort den valda raden från kön." + +#: lib/diff.tcl:696 +msgid "Failed to revert selected line." +msgstr "Kunde inte återställa den valda raden." + +#: lib/diff.tcl:700 +msgid "Failed to stage selected line." +msgstr "Kunde inte lägga till den valda raden till kön." + +#: lib/diff.tcl:889 +msgid "Failed to undo last revert." +msgstr "Kunde inte ångra den senaste återställningen." + +#: lib/encoding.tcl:443 +msgid "Default" +msgstr "Standard" + +#: lib/encoding.tcl:448 +#, tcl-format +msgid "System (%s)" +msgstr "Systemets (%s)" + +#: lib/encoding.tcl:459 lib/encoding.tcl:465 +msgid "Other" +msgstr "Annan" + +#: lib/error.tcl:20 +#, tcl-format +msgid "%s: error" +msgstr "%s: fel" + +#: lib/error.tcl:36 +#, tcl-format +msgid "%s: warning" +msgstr "%s: varning" + +#: lib/error.tcl:80 +#, tcl-format +msgid "%s hook failed:" +msgstr "%s-krok misslyckades:" + +#: lib/error.tcl:96 +msgid "You must correct the above errors before committing." +msgstr "Du måste rätta till felen ovan innan du checkar in." -#: lib/diff.tcl:672 -msgid "Failed to stage selected line." -msgstr "Kunde inte lägga till den valda raden till kön." +#: lib/error.tcl:116 +#, tcl-format +msgid "%s (%s): error" +msgstr "%s (%s): fel" -#: lib/remote.tcl:200 -msgid "Push to" -msgstr "Sänd till" +#: lib/index.tcl:6 +msgid "Unable to unlock the index." +msgstr "Kunde inte låsa upp indexet." -#: lib/remote.tcl:218 -msgid "Remove Remote" -msgstr "Ta bort fjärrarkiv" +#: lib/index.tcl:30 +msgid "Index Error" +msgstr "Indexfel" -#: lib/remote.tcl:223 -msgid "Prune from" -msgstr "Ta bort från" +#: lib/index.tcl:32 +msgid "" +"Updating the Git index failed. A rescan will be automatically started to " +"resynchronize git-gui." +msgstr "" +"Misslyckades med att uppdatera Gitindexet. En omsökning kommer att startas " +"automatiskt för att synkronisera om git-gui." -#: lib/remote.tcl:228 -msgid "Fetch from" -msgstr "Hämta från" +#: lib/index.tcl:43 +msgid "Continue" +msgstr "Fortsätt" -#: lib/choose_font.tcl:41 -msgid "Select" -msgstr "Välj" +#: lib/index.tcl:46 +msgid "Unlock Index" +msgstr "Lås upp index" -#: lib/choose_font.tcl:55 -msgid "Font Family" -msgstr "Teckensnittsfamilj" +#: lib/index.tcl:326 +msgid "Unstaging selected files from commit" +msgstr "Tar bort valda filer från incheckningskön" -#: lib/choose_font.tcl:76 -msgid "Font Size" -msgstr "Storlek" +#: lib/index.tcl:330 +#, tcl-format +msgid "Unstaging %s from commit" +msgstr "Tar bort %s från incheckningskön" -#: lib/choose_font.tcl:93 -msgid "Font Example" -msgstr "Exempel" +#: lib/index.tcl:369 +msgid "Ready to commit." +msgstr "Redo att checka in." -#: lib/choose_font.tcl:105 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "" -"Detta är en exempeltext.\n" -"Om du tycker om den här texten kan den vara ditt teckensnitt." +#: lib/index.tcl:378 +msgid "Adding selected files" +msgstr "Lägger till valda filer" -#: lib/option.tcl:11 +#: lib/index.tcl:382 #, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "Den globala teckenkodningen \"%s\" är ogiltig" +msgid "Adding %s" +msgstr "Lägger till %s" -#: lib/option.tcl:19 +#: lib/index.tcl:412 #, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "Arkivets teckenkodning \"%s\" är ogiltig" +msgid "Stage %d untracked files?" +msgstr "Köa %d ospårade filer?" -#: lib/option.tcl:119 -msgid "Restore Defaults" -msgstr "Återställ standardvärden" +#: lib/index.tcl:420 +msgid "Adding all changed files" +msgstr "Lägger till alla ändrade filer" -#: lib/option.tcl:123 -msgid "Save" -msgstr "Spara" +#: lib/index.tcl:503 +#, tcl-format +msgid "Revert changes in file %s?" +msgstr "Återställ ändringarna i filen %s?" -#: lib/option.tcl:133 +#: lib/index.tcl:508 #, tcl-format -msgid "%s Repository" -msgstr "Arkivet %s" +msgid "Revert changes in these %i files?" +msgstr "Återställ ändringarna i dessa %i filer?" -#: lib/option.tcl:134 -msgid "Global (All Repositories)" -msgstr "Globalt (alla arkiv)" +#: lib/index.tcl:517 +msgid "Any unstaged changes will be permanently lost by the revert." +msgstr "" +"Alla oköade ändringar kommer permanent gå förlorade vid återställningen." -#: lib/option.tcl:140 -msgid "User Name" -msgstr "Användarnamn" +#: lib/index.tcl:520 lib/index.tcl:564 +msgid "Do Nothing" +msgstr "Gör ingenting" -#: lib/option.tcl:141 -msgid "Email Address" -msgstr "E-postadress" +#: lib/index.tcl:546 +#, tcl-format +msgid "Delete untracked file %s?" +msgstr "Ta bort den ospårade filen %s?" -#: lib/option.tcl:143 -msgid "Summarize Merge Commits" -msgstr "Summera sammanslagningsincheckningar" +#: lib/index.tcl:551 +#, tcl-format +msgid "Delete these %i untracked files?" +msgstr "Ta bort dessa %i ospårade filer?" -#: lib/option.tcl:144 -msgid "Merge Verbosity" -msgstr "Pratsamhet för sammanslagningar" +#: lib/index.tcl:561 +msgid "Files will be permanently deleted." +msgstr "Filerna kommer tas bort permanent." -#: lib/option.tcl:145 -msgid "Show Diffstat After Merge" -msgstr "Visa diffstatistik efter sammanslagning" +#: lib/index.tcl:565 +msgid "Delete Files" +msgstr "Ta bort filer" -#: lib/option.tcl:146 -msgid "Use Merge Tool" -msgstr "Använd verktyg för sammanslagning" +#: lib/index.tcl:588 +msgid "Deleting" +msgstr "Tar bort" -#: lib/option.tcl:148 -msgid "Trust File Modification Timestamps" -msgstr "Lita på filändringstidsstämplar" +#: lib/index.tcl:667 +msgid "Encountered errors deleting files:\n" +msgstr "Fel uppstod vid borttagning av filer:\n" -#: lib/option.tcl:149 -msgid "Prune Tracking Branches During Fetch" -msgstr "Städa spårade grenar vid hämtning" +#: lib/index.tcl:676 +#, tcl-format +msgid "None of the %d selected files could be deleted." +msgstr "Ingen av de %d valda filerna kunde tas bort." -#: lib/option.tcl:150 -msgid "Match Tracking Branches" -msgstr "Matcha spårade grenar" +#: lib/index.tcl:681 +#, tcl-format +msgid "%d of the %d selected files could not be deleted." +msgstr "%d av de %d valda filerna kunde inte tas bort." -#: lib/option.tcl:151 -msgid "Use Textconv For Diffs and Blames" -msgstr "Använd Textconv för diff och klandring" +#: lib/index.tcl:728 +msgid "Reverting selected files" +msgstr "Återställer valda filer" -#: lib/option.tcl:152 -msgid "Blame Copy Only On Changed Files" -msgstr "Klandra kopiering bara i ändrade filer" +#: lib/index.tcl:732 +#, tcl-format +msgid "Reverting %s" +msgstr "Återställer %s" -#: lib/option.tcl:153 -msgid "Maximum Length of Recent Repositories List" -msgstr "Max längd för lista över tidigare arkiv" +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "Gå till rad:" -#: lib/option.tcl:154 -msgid "Minimum Letters To Blame Copy On" -msgstr "Minsta antal tecken att klandra kopiering för" +#: lib/line.tcl:23 +msgid "Go" +msgstr "Gå" -#: lib/option.tcl:155 -msgid "Blame History Context Radius (days)" -msgstr "Historikradie för klandring (dagar)" +#: lib/merge.tcl:13 +msgid "" +"Cannot merge while amending.\n" +"\n" +"You must finish amending this commit before starting any type of merge.\n" +msgstr "" +"Kan inte slå ihop vid utökning.\n" +"\n" +"Du måste göra färdig utökningen av incheckningen innan du påbörjar någon " +"slags sammanslagning.\n" -#: lib/option.tcl:156 -msgid "Number of Diff Context Lines" -msgstr "Antal rader sammanhang i differenser" +#: lib/merge.tcl:27 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before a merge can be performed.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n" +"\n" +"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste " +"utföra en ny sökning innan du kan utföra en sammanslagning.\n" +"\n" +"Sökningen kommer att startas automatiskt nu.\n" -#: lib/option.tcl:157 -msgid "Additional Diff Parameters" -msgstr "Ytterligare diff-parametrar" +#: lib/merge.tcl:45 +#, tcl-format +msgid "" +"You are in the middle of a conflicted merge.\n" +"\n" +"File %s has merge conflicts.\n" +"\n" +"You must resolve them, stage the file, and commit to complete the current " +"merge. Only then can you begin another merge.\n" +msgstr "" +"Du är mitt i en sammanslagning med konflikter.\n" +"\n" +"Filen %s har sammanslagningskonflikter.\n" +"\n" +"Du måste lösa dem, köa filen och checka in för att fullborda den aktuella " +"sammanslagningen. När du gjort det kan du påbörja en ny sammanslagning.\n" -#: lib/option.tcl:158 -msgid "Commit Message Text Width" -msgstr "Textbredd för incheckningsmeddelande" +#: lib/merge.tcl:55 +#, tcl-format +msgid "" +"You are in the middle of a change.\n" +"\n" +"File %s is modified.\n" +"\n" +"You should complete the current commit before starting a merge. Doing so " +"will help you abort a failed merge, should the need arise.\n" +msgstr "" +"Du är mitt i en ändring.\n" +"\n" +"Filen %s har ändringar.\n" +"\n" +"Du bör fullborda den aktuella incheckningen innan du påbörjar en " +"sammanslagning. Om du gör det blir det enklare att avbryta en misslyckad " +"sammanslagning, om det skulle vara nödvändigt.\n" -#: lib/option.tcl:159 -msgid "New Branch Name Template" -msgstr "Mall för namn på nya grenar" +#: lib/merge.tcl:108 +#, tcl-format +msgid "%s of %s" +msgstr "%s av %s" -#: lib/option.tcl:160 -msgid "Default File Contents Encoding" -msgstr "Standardteckenkodning för filinnehåll" +#: lib/merge.tcl:126 +#, tcl-format +msgid "Merging %s and %s..." +msgstr "Slår ihop %s och %s..." -#: lib/option.tcl:161 -msgid "Warn before committing to a detached head" -msgstr "Varna för incheckning på frånkopplat huvud" +#: lib/merge.tcl:137 +msgid "Merge completed successfully." +msgstr "Sammanslagningen avslutades framgångsrikt." -#: lib/option.tcl:162 -msgid "Staging of untracked files" -msgstr "Köa ospårade filer" +#: lib/merge.tcl:139 +msgid "Merge failed. Conflict resolution is required." +msgstr "Sammanslagningen misslyckades. Du måste lösa konflikterna." -#: lib/option.tcl:163 -msgid "Show untracked files" -msgstr "Visa ospårade filer" +#: lib/merge.tcl:156 +#, tcl-format +msgid "%s (%s): Merge" +msgstr "%s (%s): Sammanslagning" -#: lib/option.tcl:164 -msgid "Tab spacing" -msgstr "Blanksteg för tabulatortecken" +#: lib/merge.tcl:164 +#, tcl-format +msgid "Merge Into %s" +msgstr "Slå ihop i %s" -#: lib/option.tcl:210 -msgid "Change" -msgstr "Ändra" +#: lib/merge.tcl:183 +msgid "Revision To Merge" +msgstr "Revisioner att slå ihop" + +#: lib/merge.tcl:218 +msgid "" +"Cannot abort while amending.\n" +"\n" +"You must finish amending this commit.\n" +msgstr "" +"Kan inte avbryta vid utökning.\n" +"\n" +"Du måste göra dig färdig med att utöka incheckningen.\n" -#: lib/option.tcl:254 -msgid "Spelling Dictionary:" -msgstr "Stavningsordlista:" +#: lib/merge.tcl:228 +msgid "" +"Abort merge?\n" +"\n" +"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with aborting the current merge?" +msgstr "" +"Avbryt sammanslagning?\n" +"\n" +"Om du avbryter sammanslagningen kommer *ALLA* ej incheckade ändringar att gå " +"förlorade.\n" +"\n" +"Gå vidare med att avbryta den aktuella sammanslagningen?" -#: lib/option.tcl:284 -msgid "Change Font" -msgstr "Byt teckensnitt" +#: lib/merge.tcl:234 +msgid "" +"Reset changes?\n" +"\n" +"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with resetting the current changes?" +msgstr "" +"Återställ ändringar?\n" +"\n" +"Om du återställer ändringarna kommer *ALLA* ej incheckade ändringar att gå " +"förlorade.\n" +"\n" +"Gå vidare med att återställa de aktuella ändringarna?" -#: lib/option.tcl:288 -#, tcl-format -msgid "Choose %s" -msgstr "Välj %s" +#: lib/merge.tcl:246 +msgid "Aborting" +msgstr "Avbryter" -#: lib/option.tcl:294 -msgid "pt." -msgstr "p." +#: lib/merge.tcl:247 +msgid "files reset" +msgstr "filer återställda" -#: lib/option.tcl:308 -msgid "Preferences" -msgstr "Inställningar" +#: lib/merge.tcl:277 +msgid "Abort failed." +msgstr "Misslyckades avbryta." -#: lib/option.tcl:345 -msgid "Failed to completely save options:" -msgstr "Misslyckades med att helt spara alternativ:" +#: lib/merge.tcl:279 +msgid "Abort completed. Ready." +msgstr "Avbrytning fullbordad. Redo." #: lib/mergetool.tcl:8 msgid "Force resolution to the base version?" @@ -1560,653 +2104,470 @@ msgstr "Lägger till lösning för %s" #: lib/mergetool.tcl:141 msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "Kan inte lösa borttagnings- eller länkkonflikter med ett verktyg" - -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "Konfliktfil existerar inte" - -#: lib/mergetool.tcl:246 -#, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "Inte ett grafiskt verktyg för sammanslagning: %s" - -#: lib/mergetool.tcl:275 -#, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "Verktyget \"%s\" för sammanslagning stöds inte" - -#: lib/mergetool.tcl:310 -msgid "Merge tool is already running, terminate it?" -msgstr "Verktyget för sammanslagning körs redan. Vill du avsluta det?" - -#: lib/mergetool.tcl:330 -#, tcl-format -msgid "" -"Error retrieving versions:\n" -"%s" -msgstr "" -"Fel vid hämtning av versioner:\n" -"%s" - -#: lib/mergetool.tcl:350 -#, tcl-format -msgid "" -"Could not start the merge tool:\n" -"\n" -"%s" -msgstr "" -"Kunde inte starta verktyg för sammanslagning:\n" -"\n" -"%s" - -#: lib/mergetool.tcl:354 -msgid "Running merge tool..." -msgstr "Kör verktyg för sammanslagning..." - -#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 -msgid "Merge tool failed." -msgstr "Verktyget för sammanslagning misslyckades." - -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "Lägg till verktyg" - -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "Lägg till nytt verktygskommando" - -#: lib/tools_dlg.tcl:34 -msgid "Add globally" -msgstr "Lägg till globalt" - -#: lib/tools_dlg.tcl:46 -msgid "Tool Details" -msgstr "Detaljer för verktyg" - -#: lib/tools_dlg.tcl:49 -msgid "Use '/' separators to create a submenu tree:" -msgstr "Använd \"/\"-avdelare för att skapa ett undermenyträd:" - -#: lib/tools_dlg.tcl:60 -msgid "Command:" -msgstr "Kommando:" - -#: lib/tools_dlg.tcl:71 -msgid "Show a dialog before running" -msgstr "Visa dialog innan programmet startas" - -#: lib/tools_dlg.tcl:77 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "Be användaren välja en version (sätter $REVISION)" - -#: lib/tools_dlg.tcl:82 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "Be användaren om ytterligare parametrar (sätter $ARGS)" - -#: lib/tools_dlg.tcl:89 -msgid "Don't show the command output window" -msgstr "Visa inte kommandots utdatafönster" - -#: lib/tools_dlg.tcl:94 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "Kör endast om en diff har markerats ($FILENAME är inte tomt)" - -#: lib/tools_dlg.tcl:118 -msgid "Please supply a name for the tool." -msgstr "Ange ett namn för verktyget." - -#: lib/tools_dlg.tcl:126 -#, tcl-format -msgid "Tool '%s' already exists." -msgstr "Verktyget \"%s\" finns redan." - -#: lib/tools_dlg.tcl:148 -#, tcl-format -msgid "" -"Could not add tool:\n" -"%s" -msgstr "" -"Kunde inte lägga till verktyget:\n" -"%s" - -#: lib/tools_dlg.tcl:187 -msgid "Remove Tool" -msgstr "Ta bort verktyg" - -#: lib/tools_dlg.tcl:193 -msgid "Remove Tool Commands" -msgstr "Ta bort verktygskommandon" - -#: lib/tools_dlg.tcl:198 -msgid "Remove" -msgstr "Ta bort" - -#: lib/tools_dlg.tcl:231 -msgid "(Blue denotes repository-local tools)" -msgstr "(Blått anger verktyg lokala för arkivet)" - -#: lib/tools_dlg.tcl:292 -#, tcl-format -msgid "Run Command: %s" -msgstr "Kör kommandot: %s" - -#: lib/tools_dlg.tcl:306 -msgid "Arguments" -msgstr "Argument" - -#: lib/tools_dlg.tcl:341 -msgid "OK" -msgstr "OK" - -#: lib/search.tcl:48 -msgid "Find:" -msgstr "Sök:" - -#: lib/search.tcl:50 -msgid "Next" -msgstr "Nästa" - -#: lib/search.tcl:51 -msgid "Prev" -msgstr "Föreg" - -#: lib/search.tcl:52 -msgid "RegExp" -msgstr "Reg.uttr." - -#: lib/search.tcl:54 -msgid "Case" -msgstr "Skiftläge" - -#: lib/branch_rename.tcl:15 lib/branch_rename.tcl:23 -msgid "Rename Branch" -msgstr "Byt namn på gren" - -#: lib/branch_rename.tcl:28 -msgid "Rename" -msgstr "Byt namn" - -#: lib/branch_rename.tcl:38 -msgid "Branch:" -msgstr "Gren:" - -#: lib/branch_rename.tcl:46 -msgid "New Name:" -msgstr "Nytt namn:" - -#: lib/branch_rename.tcl:81 -msgid "Please select a branch to rename." -msgstr "Välj en gren att byta namn på." - -#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 -msgid "Please supply a branch name." -msgstr "Ange ett namn för grenen." - -#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 -#, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "\"%s\" kan inte användas som namn på grenen." - -#: lib/branch_rename.tcl:123 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "Kunde inte byta namn på \"%s\"." - -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "Ta bort gren från fjärrarkiv" - -#: lib/remote_branch_delete.tcl:48 -msgid "From Repository" -msgstr "Från arkiv" - -#: lib/remote_branch_delete.tcl:88 -msgid "Branches" -msgstr "Grenar" - -#: lib/remote_branch_delete.tcl:110 -msgid "Delete Only If" -msgstr "Ta endast bort om" - -#: lib/remote_branch_delete.tcl:112 -msgid "Merged Into:" -msgstr "Sammanslagen i:" +msgstr "Kan inte lösa borttagnings- eller länkkonflikter med ett verktyg" -#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 -msgid "Always (Do not perform merge checks)" -msgstr "Alltid (utför inte sammanslagningstest)" +#: lib/mergetool.tcl:146 +msgid "Conflict file does not exist" +msgstr "Konfliktfil existerar inte" -#: lib/remote_branch_delete.tcl:153 -msgid "A branch is required for 'Merged Into'." -msgstr "En gren krävs för \"Sammanslagen i\"." +#: lib/mergetool.tcl:246 +#, tcl-format +msgid "Not a GUI merge tool: '%s'" +msgstr "Inte ett grafiskt verktyg för sammanslagning: %s" -#: lib/remote_branch_delete.tcl:185 +#: lib/mergetool.tcl:275 #, tcl-format -msgid "" -"The following branches are not completely merged into %s:\n" -"\n" -" - %s" -msgstr "" -"Följande grenar har inte helt slagits samman i %s:\n" -"\n" -" - %s" +msgid "Unsupported merge tool '%s'" +msgstr "Verktyget ”%s” för sammanslagning stöds inte" -#: lib/remote_branch_delete.tcl:190 +#: lib/mergetool.tcl:310 +msgid "Merge tool is already running, terminate it?" +msgstr "Verktyget för sammanslagning körs redan. Vill du avsluta det?" + +#: lib/mergetool.tcl:330 #, tcl-format msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." +"Error retrieving versions:\n" +"%s" msgstr "" -"En eller flera av sammanslagningstesterna misslyckades eftersom du inte har " -"hämtat de nödvändiga incheckningarna. Försök hämta från %s först." - -#: lib/remote_branch_delete.tcl:208 -msgid "Please select one or more branches to delete." -msgstr "Välj en eller flera grenar att ta bort." +"Fel vid hämtning av versioner:\n" +"%s" -#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 +#: lib/mergetool.tcl:350 +#, tcl-format msgid "" -"Recovering deleted branches is difficult.\n" +"Could not start the merge tool:\n" "\n" -"Delete the selected branches?" +"%s" msgstr "" -"Det kan vara svårt att återställa borttagna grenar.\n" +"Kunde inte starta verktyg för sammanslagning:\n" "\n" -"Ta bort de valda grenarna?" +"%s" -#: lib/remote_branch_delete.tcl:227 +#: lib/mergetool.tcl:354 +msgid "Running merge tool..." +msgstr "Kör verktyg för sammanslagning..." + +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "Verktyget för sammanslagning misslyckades." + +#: lib/option.tcl:11 #, tcl-format -msgid "Deleting branches from %s" -msgstr "Tar bort grenar från %s" +msgid "Invalid global encoding '%s'" +msgstr "Den globala teckenkodningen ”%s” är ogiltig" -#: lib/remote_branch_delete.tcl:300 -msgid "No repository selected." -msgstr "Inget arkiv markerat." +#: lib/option.tcl:19 +#, tcl-format +msgid "Invalid repo encoding '%s'" +msgstr "Arkivets teckenkodning ”%s” är ogiltig" -#: lib/remote_branch_delete.tcl:305 +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "Återställ standardvärden" + +#: lib/option.tcl:123 +msgid "Save" +msgstr "Spara" + +#: lib/option.tcl:133 #, tcl-format -msgid "Scanning %s..." -msgstr "Söker %s..." +msgid "%s Repository" +msgstr "Arkivet %s" -#: lib/choose_repository.tcl:33 -msgid "Git Gui" -msgstr "Git Gui" +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "Globalt (alla arkiv)" -#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 -msgid "Create New Repository" -msgstr "Skapa nytt arkiv" +#: lib/option.tcl:140 +msgid "User Name" +msgstr "Användarnamn" -#: lib/choose_repository.tcl:98 -msgid "New..." -msgstr "Nytt..." +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "E-postadress" -#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 -msgid "Clone Existing Repository" -msgstr "Klona befintligt arkiv" +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "Summera sammanslagningsincheckningar" -#: lib/choose_repository.tcl:116 -msgid "Clone..." -msgstr "Klona..." +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "Pratsamhet för sammanslagningar" -#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 -msgid "Open Existing Repository" -msgstr "Öppna befintligt arkiv" +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "Visa diffstatistik efter sammanslagning" -#: lib/choose_repository.tcl:129 -msgid "Open..." -msgstr "Öppna..." +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "Använd verktyg för sammanslagning" -#: lib/choose_repository.tcl:142 -msgid "Recent Repositories" -msgstr "Senaste arkiven" +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "Lita på filändringstidsstämplar" -#: lib/choose_repository.tcl:148 -msgid "Open Recent Repository:" -msgstr "Öppna tidigare arkiv:" +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "Städa spårade grenar vid hämtning" -#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 -#: lib/choose_repository.tcl:330 -#, tcl-format -msgid "Failed to create repository %s:" -msgstr "Kunde inte skapa arkivet %s:" +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "Matcha spårade grenar" -#: lib/choose_repository.tcl:407 lib/branch_create.tcl:33 -msgid "Create" -msgstr "Skapa" +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "Använd Textconv för diff och klandring" -#: lib/choose_repository.tcl:417 -msgid "Directory:" -msgstr "Katalog:" +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "Klandra kopiering bara i ändrade filer" -#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 -#: lib/choose_repository.tcl:1098 -msgid "Git Repository" -msgstr "Gitarkiv" +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "Max längd för lista över tidigare arkiv" -#: lib/choose_repository.tcl:472 -#, tcl-format -msgid "Directory %s already exists." -msgstr "Katalogen %s finns redan." +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "Minsta antal tecken att klandra kopiering för" -#: lib/choose_repository.tcl:476 -#, tcl-format -msgid "File %s already exists." -msgstr "Filen %s finns redan." +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "Historikradie för klandring (dagar)" -#: lib/choose_repository.tcl:491 -msgid "Clone" -msgstr "Klona" +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "Antal rader sammanhang i differenser" -#: lib/choose_repository.tcl:504 -msgid "Source Location:" -msgstr "Plats för källkod:" +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "Ytterligare diff-parametrar" -#: lib/choose_repository.tcl:513 -msgid "Target Directory:" -msgstr "Målkatalog:" +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "Textbredd för incheckningsmeddelande" -#: lib/choose_repository.tcl:523 -msgid "Clone Type:" -msgstr "Typ av klon:" +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "Mall för namn på nya grenar" -#: lib/choose_repository.tcl:528 -msgid "Standard (Fast, Semi-Redundant, Hardlinks)" -msgstr "Standard (snabb, semiredundant, hårda länkar)" +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "Standardteckenkodning för filinnehåll" -#: lib/choose_repository.tcl:533 -msgid "Full Copy (Slower, Redundant Backup)" -msgstr "Full kopia (långsammare, redundant säkerhetskopia)" +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "Varna för incheckning på frånkopplat huvud" -#: lib/choose_repository.tcl:538 -msgid "Shared (Fastest, Not Recommended, No Backup)" -msgstr "Delad (snabbast, rekommenderas ej, ingen säkerhetskopia)" +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "Köa ospårade filer" -#: lib/choose_repository.tcl:545 -msgid "Recursively clone submodules too" -msgstr "Klona även rekursivt undermoduler" +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "Visa ospårade filer" -#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 -#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 -#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 -#, tcl-format -msgid "Not a Git repository: %s" -msgstr "Inte ett Gitarkiv: %s" +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "Blanksteg för tabulatortecken" -#: lib/choose_repository.tcl:615 -msgid "Standard only available for local repository." -msgstr "Standard är endast tillgängligt för lokala arkiv." +#: lib/option.tcl:210 +msgid "Change" +msgstr "Ändra" -#: lib/choose_repository.tcl:619 -msgid "Shared only available for local repository." -msgstr "Delat är endast tillgängligt för lokala arkiv." +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "Stavningsordlista:" + +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "Byt teckensnitt" -#: lib/choose_repository.tcl:640 +#: lib/option.tcl:288 #, tcl-format -msgid "Location %s already exists." -msgstr "Platsen %s finns redan." +msgid "Choose %s" +msgstr "Välj %s" -#: lib/choose_repository.tcl:651 -msgid "Failed to configure origin" -msgstr "Kunde inte konfigurera ursprung" +#: lib/option.tcl:294 +msgid "pt." +msgstr "p." -#: lib/choose_repository.tcl:663 -msgid "Counting objects" -msgstr "Räknar objekt" +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "Inställningar" -#: lib/choose_repository.tcl:664 -msgid "buckets" -msgstr "hinkar" +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "Misslyckades med att helt spara alternativ:" -#: lib/choose_repository.tcl:688 +#: lib/remote_add.tcl:20 #, tcl-format -msgid "Unable to copy objects/info/alternates: %s" -msgstr "Kunde inte kopiera objekt/info/alternativ: %s" +msgid "%s (%s): Add Remote" +msgstr "%s (%s): Lägg till fjärrarkiv" -#: lib/choose_repository.tcl:724 -#, tcl-format -msgid "Nothing to clone from %s." -msgstr "Ingenting att klona från %s." +#: lib/remote_add.tcl:25 +msgid "Add New Remote" +msgstr "Lägg till nytt fjärrarkiv" -#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 -#: lib/choose_repository.tcl:952 -msgid "The 'master' branch has not been initialized." -msgstr "Grenen \"master\" har inte initierats." +#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 +msgid "Add" +msgstr "Lägg till" -#: lib/choose_repository.tcl:739 -msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "Hårda länkar är inte tillgängliga. Faller tillbaka på kopiering." +#: lib/remote_add.tcl:39 +msgid "Remote Details" +msgstr "Detaljer för fjärrarkiv" -#: lib/choose_repository.tcl:751 -#, tcl-format -msgid "Cloning from %s" -msgstr "Klonar från %s" +#: lib/remote_add.tcl:50 +msgid "Location:" +msgstr "Plats:" -#: lib/choose_repository.tcl:782 -msgid "Copying objects" -msgstr "Kopierar objekt" +#: lib/remote_add.tcl:60 +msgid "Further Action" +msgstr "Ytterligare åtgärd" -#: lib/choose_repository.tcl:783 -msgid "KiB" -msgstr "KiB" +#: lib/remote_add.tcl:63 +msgid "Fetch Immediately" +msgstr "Hämta omedelbart" -#: lib/choose_repository.tcl:807 -#, tcl-format -msgid "Unable to copy object: %s" -msgstr "Kunde inte kopiera objekt: %s" +#: lib/remote_add.tcl:69 +msgid "Initialize Remote Repository and Push" +msgstr "Initiera fjärrarkiv och sänd till" -#: lib/choose_repository.tcl:817 -msgid "Linking objects" -msgstr "Länkar objekt" +#: lib/remote_add.tcl:75 +msgid "Do Nothing Else Now" +msgstr "Gör ingent mer nu" -#: lib/choose_repository.tcl:818 -msgid "objects" -msgstr "objekt" +#: lib/remote_add.tcl:100 +msgid "Please supply a remote name." +msgstr "Ange ett namn för fjärrarkivet." -#: lib/choose_repository.tcl:826 +#: lib/remote_add.tcl:113 #, tcl-format -msgid "Unable to hardlink object: %s" -msgstr "Kunde inte hårdlänka objekt: %s" +msgid "'%s' is not an acceptable remote name." +msgstr "”%s” kan inte användas som namn på fjärrarkivet." -#: lib/choose_repository.tcl:881 -msgid "Cannot fetch branches and objects. See console output for details." -msgstr "Kunde inte hämta grenar och objekt. Se konsolutdata för detaljer." +#: lib/remote_add.tcl:124 +#, tcl-format +msgid "Failed to add remote '%s' of location '%s'." +msgstr "Kunde inte lägga till fjärrarkivet ”%s” på platsen ”%s”." -#: lib/choose_repository.tcl:892 -msgid "Cannot fetch tags. See console output for details." -msgstr "Kunde inte hämta taggar. Se konsolutdata för detaljer." +#: lib/remote_add.tcl:132 lib/transport.tcl:6 +#, tcl-format +msgid "fetch %s" +msgstr "hämta %s" -#: lib/choose_repository.tcl:916 -msgid "Cannot determine HEAD. See console output for details." -msgstr "Kunde inte avgöra HEAD. Se konsolutdata för detaljer." +#: lib/remote_add.tcl:133 +#, tcl-format +msgid "Fetching the %s" +msgstr "Hämtar %s" -#: lib/choose_repository.tcl:925 +#: lib/remote_add.tcl:156 #, tcl-format -msgid "Unable to cleanup %s" -msgstr "Kunde inte städa upp %s" +msgid "Do not know how to initialize repository at location '%s'." +msgstr "Vet inte hur arkivet på platsen ”%s” skall initieras." -#: lib/choose_repository.tcl:931 -msgid "Clone failed." -msgstr "Kloning misslyckades." +#: lib/remote_add.tcl:162 lib/transport.tcl:54 lib/transport.tcl:92 +#: lib/transport.tcl:110 +#, tcl-format +msgid "push %s" +msgstr "sänd %s" -#: lib/choose_repository.tcl:938 -msgid "No default branch obtained." -msgstr "Hämtade ingen standardgren." +#: lib/remote_add.tcl:163 +#, tcl-format +msgid "Setting up the %s (at %s)" +msgstr "Konfigurerar %s (på %s)" -#: lib/choose_repository.tcl:949 +#: lib/remote_branch_delete.tcl:29 #, tcl-format -msgid "Cannot resolve %s as a commit." -msgstr "Kunde inte slå upp %s till någon incheckning." +msgid "%s (%s): Delete Branch Remotely" +msgstr "%s (%s): Ta bort gren från fjärrarkiv" -#: lib/choose_repository.tcl:961 -msgid "Creating working directory" -msgstr "Skapar arbetskatalog" +#: lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "Ta bort gren från fjärrarkiv" -#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 -#: lib/index.tcl:207 -msgid "files" -msgstr "filer" +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "Från arkiv" -#: lib/choose_repository.tcl:981 -msgid "Cannot clone submodules." -msgstr "Kan inte klona undermoduler." +#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165 +msgid "Remote:" +msgstr "Fjärrarkiv:" -#: lib/choose_repository.tcl:990 -msgid "Cloning submodules" -msgstr "Klonar undermoduler" +#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187 +msgid "Arbitrary Location:" +msgstr "Godtycklig plats:" -#: lib/choose_repository.tcl:1015 -msgid "Initial file checkout failed." -msgstr "Inledande filutcheckning misslyckades." +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "Grenar" -#: lib/choose_repository.tcl:1059 -msgid "Open" -msgstr "Öppna" +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "Ta endast bort om" -#: lib/choose_repository.tcl:1069 -msgid "Repository:" -msgstr "Arkiv:" +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "Sammanslagen i:" + +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "En gren krävs för ”Sammanslagen i”." -#: lib/choose_repository.tcl:1118 +#: lib/remote_branch_delete.tcl:185 #, tcl-format -msgid "Failed to open repository %s:" -msgstr "Kunde inte öppna arkivet %s:" +msgid "" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" +msgstr "" +"Följande grenar har inte helt slagits samman i %s:\n" +"\n" +" - %s" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "git-gui - ett grafiskt användargränssnitt för Git." +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "" +"En eller flera av sammanslagningstesterna misslyckades eftersom du inte har " +"hämtat de nödvändiga incheckningarna. Försök hämta från %s först." -#: lib/blame.tcl:73 -msgid "File Viewer" -msgstr "Filvisare" +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "Välj en eller flera grenar att ta bort." -#: lib/blame.tcl:79 -msgid "Commit:" -msgstr "Incheckning:" +#: lib/remote_branch_delete.tcl:227 +#, tcl-format +msgid "Deleting branches from %s" +msgstr "Tar bort grenar från %s" -#: lib/blame.tcl:280 -msgid "Copy Commit" -msgstr "Kopiera incheckning" +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "Inget arkiv markerat." -#: lib/blame.tcl:284 -msgid "Find Text..." -msgstr "Sök text..." +#: lib/remote_branch_delete.tcl:305 +#, tcl-format +msgid "Scanning %s..." +msgstr "Söker %s..." -#: lib/blame.tcl:288 -msgid "Goto Line..." -msgstr "Gå till rad..." +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "Sänd till" -#: lib/blame.tcl:297 -msgid "Do Full Copy Detection" -msgstr "Gör full kopieringsigenkänning" +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "Ta bort fjärrarkiv" -#: lib/blame.tcl:301 -msgid "Show History Context" -msgstr "Visa historiksammanhang" +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "Ta bort från" -#: lib/blame.tcl:304 -msgid "Blame Parent Commit" -msgstr "Klandra föräldraincheckning" +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "Hämta från" -#: lib/blame.tcl:466 -#, tcl-format -msgid "Reading %s..." -msgstr "Läser %s..." +#: lib/remote.tcl:249 lib/remote.tcl:253 lib/remote.tcl:258 lib/remote.tcl:264 +msgid "All" +msgstr "Alla" -#: lib/blame.tcl:594 -msgid "Loading copy/move tracking annotations..." -msgstr "Läser annoteringar för kopiering/flyttning..." +#: lib/search.tcl:48 +msgid "Find:" +msgstr "Sök:" -#: lib/blame.tcl:614 -msgid "lines annotated" -msgstr "rader annoterade" +#: lib/search.tcl:50 +msgid "Next" +msgstr "Nästa" -#: lib/blame.tcl:806 -msgid "Loading original location annotations..." -msgstr "Läser in annotering av originalplacering..." +#: lib/search.tcl:51 +msgid "Prev" +msgstr "Föreg" -#: lib/blame.tcl:809 -msgid "Annotation complete." -msgstr "Annotering fullbordad." +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "Reg.uttr." -#: lib/blame.tcl:839 -msgid "Busy" -msgstr "Upptagen" +#: lib/search.tcl:54 +msgid "Case" +msgstr "Skiftläge" -#: lib/blame.tcl:840 -msgid "Annotation process is already running." -msgstr "Annoteringsprocess körs redan." +#: lib/shortcut.tcl:8 lib/shortcut.tcl:40 lib/shortcut.tcl:72 +#, tcl-format +msgid "%s (%s): Create Desktop Icon" +msgstr "%s (%s): Skapa skrivbordsikon" -#: lib/blame.tcl:879 -msgid "Running thorough copy detection..." -msgstr "Kör grundlig kopieringsigenkänning..." +#: lib/shortcut.tcl:24 lib/shortcut.tcl:62 +msgid "Cannot write shortcut:" +msgstr "Kan inte skriva genväg:" -#: lib/blame.tcl:947 -msgid "Loading annotation..." -msgstr "Läser in annotering..." +#: lib/shortcut.tcl:137 +msgid "Cannot write icon:" +msgstr "Kan inte skriva ikon:" -#: lib/blame.tcl:1000 -msgid "Author:" -msgstr "Författare:" +#: lib/spellcheck.tcl:57 +msgid "Unsupported spell checker" +msgstr "Stavningskontrollprogrammet stöds inte" -#: lib/blame.tcl:1004 -msgid "Committer:" -msgstr "Incheckare:" +#: lib/spellcheck.tcl:65 +msgid "Spell checking is unavailable" +msgstr "Stavningskontroll är ej tillgänglig" -#: lib/blame.tcl:1009 -msgid "Original File:" -msgstr "Ursprunglig fil:" +#: lib/spellcheck.tcl:68 +msgid "Invalid spell checking configuration" +msgstr "Ogiltig inställning för stavningskontroll" -#: lib/blame.tcl:1057 -msgid "Cannot find HEAD commit:" -msgstr "Hittar inte incheckning för HEAD:" +#: lib/spellcheck.tcl:70 +#, tcl-format +msgid "Reverting dictionary to %s." +msgstr "Återställer ordlistan till %s." -#: lib/blame.tcl:1112 -msgid "Cannot find parent commit:" -msgstr "Hittar inte föräldraincheckning:" +#: lib/spellcheck.tcl:73 +msgid "Spell checker silently failed on startup" +msgstr "Stavningskontroll misslyckades tyst vid start" -#: lib/blame.tcl:1127 -msgid "Unable to display parent" -msgstr "Kan inte visa förälder" +#: lib/spellcheck.tcl:80 +msgid "Unrecognized spell checker" +msgstr "Stavningskontrollprogrammet känns inte igen" -#: lib/blame.tcl:1269 -msgid "Originally By:" -msgstr "Ursprungligen av:" +#: lib/spellcheck.tcl:186 +msgid "No Suggestions" +msgstr "Inga förslag" -#: lib/blame.tcl:1275 -msgid "In File:" -msgstr "I filen:" +#: lib/spellcheck.tcl:388 +msgid "Unexpected EOF from spell checker" +msgstr "Oväntat filslut från stavningskontroll" -#: lib/blame.tcl:1280 -msgid "Copied Or Moved Here By:" -msgstr "Kopierad eller flyttad hit av:" +#: lib/spellcheck.tcl:392 +msgid "Spell Checker Failed" +msgstr "Stavningskontroll misslyckades" -#: lib/sshkey.tcl:31 +#: lib/sshkey.tcl:34 msgid "No keys found." msgstr "Inga nycklar hittades." -#: lib/sshkey.tcl:34 +#: lib/sshkey.tcl:37 #, tcl-format msgid "Found a public key in: %s" msgstr "Hittade öppen nyckel i: %s" -#: lib/sshkey.tcl:40 +#: lib/sshkey.tcl:43 msgid "Generate Key" msgstr "Skapa nyckel" -#: lib/sshkey.tcl:58 +#: lib/sshkey.tcl:61 msgid "Copy To Clipboard" msgstr "Kopiera till Urklipp" -#: lib/sshkey.tcl:72 +#: lib/sshkey.tcl:75 msgid "Your OpenSSH Public Key" msgstr "Din öppna OpenSSH-nyckel" -#: lib/sshkey.tcl:80 +#: lib/sshkey.tcl:83 msgid "Generating..." msgstr "Skapar..." -#: lib/sshkey.tcl:86 +#: lib/sshkey.tcl:89 #, tcl-format msgid "" "Could not start ssh-keygen:\n" @@ -2217,520 +2578,232 @@ msgstr "" "\n" "%s" -#: lib/sshkey.tcl:113 +#: lib/sshkey.tcl:116 msgid "Generation failed." msgstr "Misslyckades med att skapa." -#: lib/sshkey.tcl:120 +#: lib/sshkey.tcl:123 msgid "Generation succeeded, but no keys found." msgstr "Lyckades skapa nyckeln, men hittar inte någon nyckel." -#: lib/sshkey.tcl:123 +#: lib/sshkey.tcl:126 #, tcl-format msgid "Your key is in: %s" msgstr "Din nyckel finns i: %s" -#: lib/branch_create.tcl:23 -msgid "Create Branch" -msgstr "Skapa gren" - -#: lib/branch_create.tcl:28 -msgid "Create New Branch" -msgstr "Skapa ny gren" - -#: lib/branch_create.tcl:42 -msgid "Branch Name" -msgstr "Namn på gren" - -#: lib/branch_create.tcl:57 -msgid "Match Tracking Branch Name" -msgstr "Använd namn på spårad gren" - -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "Inledande revision" - -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "Uppdatera befintlig gren:" - -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "Nej" - -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "Endast snabbspolning" - -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "Checka ut när skapad" - -#: lib/branch_create.tcl:132 -msgid "Please select a tracking branch." -msgstr "Välj en gren att spåra." - -#: lib/branch_create.tcl:141 -#, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "Den spårade grenen %s är inte en gren i fjärrarkivet." - -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "Kan inte skriva genväg:" - -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "Kan inte skriva ikon:" - -#: lib/choose_rev.tcl:52 -msgid "This Detached Checkout" -msgstr "Denna frånkopplade utcheckning" - -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "Revisionsuttryck:" - -#: lib/choose_rev.tcl:72 -msgid "Local Branch" -msgstr "Lokal gren" - -#: lib/choose_rev.tcl:77 -msgid "Tracking Branch" -msgstr "Spårande gren" - -#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 -msgid "Tag" -msgstr "Tagg" - -#: lib/choose_rev.tcl:321 -#, tcl-format -msgid "Invalid revision: %s" -msgstr "Ogiltig revision: %s" - -#: lib/choose_rev.tcl:342 -msgid "No revision selected." -msgstr "Ingen revision vald." - -#: lib/choose_rev.tcl:350 -msgid "Revision expression is empty." -msgstr "Revisionsuttrycket är tomt." - -#: lib/choose_rev.tcl:537 -msgid "Updated" -msgstr "Uppdaterad" - -#: lib/choose_rev.tcl:565 -msgid "URL" -msgstr "Webbadress" - -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" -"Det finns ingenting att utöka.\n" -"\n" -"Du håller på att skapa den inledande incheckningen. Det finns ingen tidigare " -"incheckning att utöka.\n" - -#: lib/commit.tcl:18 -msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" -msgstr "" -"Kan inte utöka vid sammanslagning.\n" -"\n" -"Du är i mitten av en sammanslagning som inte är fullbordad. Du kan inte " -"utöka tidigare incheckningar om du inte först avbryter den pågående " -"sammanslagningen.\n" - -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "Fel vid inläsning av incheckningsdata för utökning:" - -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "Kunde inte hämta din identitet:" - -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "Felaktig GIT_COMMITTER_IDENT:" - -#: lib/commit.tcl:129 -#, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "varning: Tcl stöder inte teckenkodningen \"%s\"." - -#: lib/commit.tcl:149 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"Det senaste inlästa tillståndet motsvarar inte tillståndet i arkivet.\n" -"\n" -"Ett annat Git-program har ändrat arkivet sedan senaste avsökningen. Du måste " -"utföra en ny sökning innan du kan göra en ny incheckning.\n" -"\n" -"Sökningen kommer att startas automatiskt nu.\n" - -#: lib/commit.tcl:173 +#: lib/status_bar.tcl:263 #, tcl-format -msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" -msgstr "" -"Osammanslagna filer kan inte checkas in.\n" -"\n" -"Filen %s har sammanslagningskonflikter. Du måste lösa dem och köa filen " -"innan du checkar in den.\n" +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%s... %*i av %*i %s (%3i%%)" -#: lib/commit.tcl:181 +#: lib/tools_dlg.tcl:22 #, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "" -"Okänd filstatus %s upptäckt.\n" -"\n" -"Filen %s kan inte checkas in av programmet.\n" - -#: lib/commit.tcl:189 -msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" -msgstr "" -"Inga ändringar att checka in.\n" -"\n" -"Du måste köa åtminstone en fil innan du kan checka in.\n" - -#: lib/commit.tcl:204 -msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" -msgstr "" -"Ange ett incheckningsmeddelande.\n" -"\n" -"Ett bra incheckningsmeddelande har följande format:\n" -"\n" -"- Första raden: Beskriv i en mening vad du gjorde.\n" -"- Andra raden: Tom\n" -"- Följande rader: Beskriv varför det här är en bra ändring.\n" - -#: lib/commit.tcl:235 -msgid "Calling pre-commit hook..." -msgstr "Anropar kroken före incheckning (pre-commit)..." - -#: lib/commit.tcl:250 -msgid "Commit declined by pre-commit hook." -msgstr "Incheckningen avvisades av kroken före incheckning (pre-commit)." - -#: lib/commit.tcl:269 -msgid "" -"You are about to commit on a detached head. This is a potentially dangerous " -"thing to do because if you switch to another branch you will lose your " -"changes and it can be difficult to retrieve them later from the reflog. You " -"should probably cancel this commit and create a new branch to continue.\n" -" \n" -" Do you really want to proceed with your Commit?" -msgstr "" -"Du är på väg att checka in på ett frånkopplat huvud. Det kan potentiellt " -"vara farligt, eftersom du kommer förlora dina ändringar om du växlar till en " -"annan gren och det kan vara svårt att hämta dem senare från ref-loggen. Du " -"bör troligen avbryta incheckningen och skapa en ny gren för att fortsätta.\n" -" \n" -" Vill du verkligen fortsätta checka in?" - -#: lib/commit.tcl:290 -msgid "Calling commit-msg hook..." -msgstr "Anropar kroken för incheckningsmeddelande (commit-msg)..." - -#: lib/commit.tcl:305 -msgid "Commit declined by commit-msg hook." -msgstr "Incheckning avvisad av kroken för incheckningsmeddelande (commit-msg)." - -#: lib/commit.tcl:318 -msgid "Committing changes..." -msgstr "Checkar in ändringar..." +msgid "%s (%s): Add Tool" +msgstr "%s (%s): Lägg till verktyg" -#: lib/commit.tcl:334 -msgid "write-tree failed:" -msgstr "write-tree misslyckades:" - -#: lib/commit.tcl:335 lib/commit.tcl:379 lib/commit.tcl:400 -msgid "Commit failed." -msgstr "Incheckningen misslyckades." - -#: lib/commit.tcl:352 -#, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "Incheckningen %s verkar vara trasig" +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "Lägg till nytt verktygskommando" -#: lib/commit.tcl:357 -msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" -msgstr "" -"Inga ändringar att checka in.\n" -"\n" -"Inga filer ändrades av incheckningen och det var inte en sammanslagning.\n" -"\n" -"En sökning kommer att startas automatiskt nu.\n" +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "Lägg till globalt" -#: lib/commit.tcl:364 -msgid "No changes to commit." -msgstr "Inga ändringar att checka in." +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "Detaljer för verktyg" -#: lib/commit.tcl:378 -msgid "commit-tree failed:" -msgstr "commit-tree misslyckades:" +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "Använd ”/”-avdelare för att skapa ett undermenyträd:" -#: lib/commit.tcl:399 -msgid "update-ref failed:" -msgstr "update-ref misslyckades:" +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "Kommando:" -#: lib/commit.tcl:492 -#, tcl-format -msgid "Created commit %s: %s" -msgstr "Skapade incheckningen %s: %s" +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "Visa dialog innan programmet startas" -#: lib/branch_delete.tcl:16 -msgid "Delete Branch" -msgstr "Ta bort gren" +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "Be användaren välja en version (sätter $REVISION)" -#: lib/branch_delete.tcl:21 -msgid "Delete Local Branch" -msgstr "Ta bort lokal gren" +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" +msgstr "Be användaren om ytterligare parametrar (sätter $ARGS)" -#: lib/branch_delete.tcl:39 -msgid "Local Branches" -msgstr "Lokala grenar" +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "Visa inte kommandots utdatafönster" -#: lib/branch_delete.tcl:51 -msgid "Delete Only If Merged Into" -msgstr "Ta bara bort om sammanslagen med" +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "Kör endast om en diff har markerats ($FILENAME är inte tomt)" -#: lib/branch_delete.tcl:103 +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "Ange ett namn för verktyget." + +#: lib/tools_dlg.tcl:126 #, tcl-format -msgid "The following branches are not completely merged into %s:" -msgstr "Följande grenar är inte till fullo sammanslagna med %s:" +msgid "Tool '%s' already exists." +msgstr "Verktyget ”%s” finns redan." -#: lib/branch_delete.tcl:141 +#: lib/tools_dlg.tcl:148 #, tcl-format msgid "" -"Failed to delete branches:\n" +"Could not add tool:\n" "%s" msgstr "" -"Kunde inte ta bort grenar:\n" +"Kunde inte lägga till verktyget:\n" "%s" -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "Kunde inte låsa upp indexet." +#: lib/tools_dlg.tcl:187 +#, tcl-format +msgid "%s (%s): Remove Tool" +msgstr "%s (%s): Ta bort verktyg" -#: lib/index.tcl:17 -msgid "Index Error" -msgstr "Indexfel" +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "Ta bort verktygskommandon" -#: lib/index.tcl:19 -msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." -msgstr "" -"Misslyckades med att uppdatera Gitindexet. En omsökning kommer att startas " -"automatiskt för att synkronisera om git-gui." +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "Ta bort" -#: lib/index.tcl:30 -msgid "Continue" -msgstr "Fortsätt" +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(Blått anger verktyg lokala för arkivet)" -#: lib/index.tcl:33 -msgid "Unlock Index" -msgstr "Lås upp index" +#: lib/tools_dlg.tcl:283 +#, tcl-format +msgid "%s (%s):" +msgstr "%s (%s):" -#: lib/index.tcl:298 +#: lib/tools_dlg.tcl:292 #, tcl-format -msgid "Unstaging %s from commit" -msgstr "Tar bort %s för incheckningskön" +msgid "Run Command: %s" +msgstr "Kör kommandot: %s" -#: lib/index.tcl:337 -msgid "Ready to commit." -msgstr "Redo att checka in." +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "Argument" -#: lib/index.tcl:350 -#, tcl-format -msgid "Adding %s" -msgstr "Lägger till %s" +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "OK" -#: lib/index.tcl:380 +#: lib/tools.tcl:76 #, tcl-format -msgid "Stage %d untracked files?" -msgstr "Köa %d ospårade filer?" +msgid "Running %s requires a selected file." +msgstr "För att starta %s måste du välja en fil." -#: lib/index.tcl:428 +#: lib/tools.tcl:92 #, tcl-format -msgid "Revert changes in file %s?" -msgstr "Återställ ändringarna i filen %s?" +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "Är du säker på att du vill starta %1$s med filen ”%2$s”?" -#: lib/index.tcl:430 +#: lib/tools.tcl:96 #, tcl-format -msgid "Revert changes in these %i files?" -msgstr "Återställ ändringarna i dessa %i filer?" - -#: lib/index.tcl:438 -msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "" -"Alla oköade ändringar kommer permanent gå förlorade vid återställningen." - -#: lib/index.tcl:441 -msgid "Do Nothing" -msgstr "Gör ingenting" - -#: lib/index.tcl:459 -msgid "Reverting selected files" -msgstr "Återställer valda filer" +msgid "Are you sure you want to run %s?" +msgstr "Är du säker på att du vill starta %s?" -#: lib/index.tcl:463 +#: lib/tools.tcl:118 #, tcl-format -msgid "Reverting %s" -msgstr "Återställer %s" - -#: lib/encoding.tcl:443 -msgid "Default" -msgstr "Standard" +msgid "Tool: %s" +msgstr "Verktyg: %s" -#: lib/encoding.tcl:448 +#: lib/tools.tcl:119 #, tcl-format -msgid "System (%s)" -msgstr "Systemets (%s)" - -#: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "Annan" +msgid "Running: %s" +msgstr "Exekverar: %s" -#: lib/date.tcl:25 +#: lib/tools.tcl:158 #, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Ogiltigt datum från Git: %s" - -#: lib/database.tcl:42 -msgid "Number of loose objects" -msgstr "Antal lösa objekt" +msgid "Tool completed successfully: %s" +msgstr "Verktyget avslutades framgångsrikt: %s" -#: lib/database.tcl:43 -msgid "Disk space used by loose objects" -msgstr "Diskutrymme använt av lösa objekt" +#: lib/tools.tcl:160 +#, tcl-format +msgid "Tool failed: %s" +msgstr "Verktyget misslyckades: %s" -#: lib/database.tcl:44 -msgid "Number of packed objects" -msgstr "Antal packade objekt" +#: lib/transport.tcl:7 +#, tcl-format +msgid "Fetching new changes from %s" +msgstr "Hämtar nya ändringar från %s" -#: lib/database.tcl:45 -msgid "Number of packs" -msgstr "Antal paket" +#: lib/transport.tcl:18 +#, tcl-format +msgid "remote prune %s" +msgstr "fjärrborttagning %s" -#: lib/database.tcl:46 -msgid "Disk space used by packed objects" -msgstr "Diskutrymme använt av packade objekt" +#: lib/transport.tcl:19 +#, tcl-format +msgid "Pruning tracking branches deleted from %s" +msgstr "Tar bort spårande grenar som tagits bort från %s" -#: lib/database.tcl:47 -msgid "Packed objects waiting for pruning" -msgstr "Packade objekt som väntar på städning" +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "hämta alla fjärrarkiv" -#: lib/database.tcl:48 -msgid "Garbage files" -msgstr "Skräpfiler" +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "Hämtar nya ändringar från alla fjärrarkiv" -#: lib/database.tcl:72 -msgid "Compressing the object database" -msgstr "Komprimerar objektdatabasen" +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "rensa alla fjärrarkiv" -#: lib/database.tcl:83 -msgid "Verifying the object database with fsck-objects" -msgstr "Verifierar objektdatabasen med fsck-objects" +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" +msgstr "Rensar spårande grenar som tagits bort, från alla fjärrarkiv" -#: lib/database.tcl:107 +#: lib/transport.tcl:55 #, tcl-format -msgid "" -"This repository currently has approximately %i loose objects.\n" -"\n" -"To maintain optimal performance it is strongly recommended that you compress " -"the database.\n" -"\n" -"Compress the database now?" -msgstr "" -"Arkivet har för närvarande omkring %i lösa objekt.\n" -"\n" -"För att bibehålla optimal prestanda rekommenderas det å det bestämdaste att " -"du komprimerar databasen.\n" -"\n" -"Komprimera databasen nu?" - -#: lib/error.tcl:20 lib/error.tcl:116 -msgid "error" -msgstr "fel" - -#: lib/error.tcl:36 -msgid "warning" -msgstr "varning" - -#: lib/error.tcl:96 -msgid "You must correct the above errors before committing." -msgstr "Du måste rätta till felen ovan innan du checkar in." +msgid "Pushing changes to %s" +msgstr "Sänder ändringar till %s" -#~ msgid "Displaying only %s of %s files." -#~ msgstr "Visar endast %s av %s filer." +#: lib/transport.tcl:93 +#, tcl-format +msgid "Mirroring to %s" +msgstr "Speglar till %s" -#~ msgid "Case-Sensitive" -#~ msgstr "Skilj på VERSALER/gemener" +#: lib/transport.tcl:111 +#, tcl-format +msgid "Pushing %s %s to %s" +msgstr "Sänder %s %s till %s" -#~ msgid "Cannot use funny .git directory:" -#~ msgstr "Kan inte använda underlig .git-katalog:" +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "Sänd grenar" -#~ msgid "Preferences..." -#~ msgstr "Inställningar..." +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "Källgrenar" -#~ msgid "Always (Do not perform merge test.)" -#~ msgstr "Alltid (utför inte sammanslagningstest)." +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "Destinationsarkiv" -#~ msgid "URL:" -#~ msgstr "Webbadress:" +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "Överföringsalternativ" -#~ msgid "Delete Remote Branch" -#~ msgstr "Ta bort fjärrgren" +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" +msgstr "Tvinga överskrivning av befintlig gren (kan kasta bort ändringar)" -#~ msgid "" -#~ "Unable to start gitk:\n" -#~ "\n" -#~ "%s does not exist" -#~ msgstr "" -#~ "Kan inte starta gitk:\n" -#~ "\n" -#~ "%s finns inte" +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "Använd tunt paket (för långsamma nätverksanslutningar)" -#~ msgid "Apple" -#~ msgstr "Äpple" +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "Ta med taggar" -#~ msgid "Not connected to aspell" -#~ msgstr "Inte ansluten till aspell" +#: lib/transport.tcl:229 +#, tcl-format +msgid "%s (%s): Push" +msgstr "%s (%s): Sänd" diff --git a/windows/git-gui.sh b/windows/git-gui.sh index b1845c5..38debe3 100755 --- a/windows/git-gui.sh +++ b/windows/git-gui.sh @@ -13,13 +13,5 @@ if { $argc >=2 && [lindex $argv 0] == "--working-dir" } { incr argc -2 } -set basedir [file dirname \ - [file dirname \ - [file dirname [info script]]]] -set bindir [file join $basedir bin] -set bindir "$bindir;[file join $basedir mingw bin]" -regsub -all ";" $bindir "\\;" bindir -set env(PATH) "$bindir;$env(PATH)" -unset bindir - -source [file join [file dirname [info script]] git-gui.tcl] +set thisdir [file normalize [file dirname [info script]]] +source [file join $thisdir git-gui.tcl]