Code

Merge branch 'bg/fix-t7003'
authorJunio C Hamano <gitster@pobox.com>
Thu, 16 Sep 2010 14:43:41 +0000 (07:43 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Sep 2010 14:43:41 +0000 (07:43 -0700)
* bg/fix-t7003:
  t7003: Use test_commit instead of custom function

53 files changed:
Documentation/RelNotes/1.7.3.txt
Documentation/git-filter-branch.txt
GIT-VERSION-GEN
builtin/ls-tree.c
bundle.c
git-filter-branch.sh
git-gui/GIT-VERSION-GEN
git-gui/Makefile
git-gui/git-gui--askpass
git-gui/git-gui.sh
git-gui/lib/blame.tcl
git-gui/po/sv.po
git-rebase.sh
merge-recursive.c
t/t1020-subdirectory.sh
t/t1302-repo-version.sh
t/t1450-fsck.sh
t/t2016-checkout-patch.sh
t/t2101-update-index-reupdate.sh
t/t2105-update-index-gitfile.sh
t/t3030-merge-recursive.sh
t/t3060-ls-files-with-tree.sh
t/t3100-ls-tree-restrict.sh
t/t3409-rebase-preserve-merges.sh
t/t3903-stash.sh
t/t4041-diff-submodule-option.sh
t/t5510-fetch.sh
t/t5704-bundle.sh
t/t6050-replace.sh
t/t7003-filter-branch.sh
t/t7400-submodule-basic.sh
t/t7401-submodule-summary.sh
t/t9100-git-svn-basic.sh
t/t9101-git-svn-props.sh
t/t9102-git-svn-deep-rmdir.sh
t/t9104-git-svn-follow-parent.sh
t/t9105-git-svn-commit-diff.sh
t/t9106-git-svn-commit-diff-clobber.sh
t/t9107-git-svn-migrate.sh
t/t9114-git-svn-dcommit-merge.sh
t/t9115-git-svn-dcommit-funky-renames.sh
t/t9116-git-svn-log.sh
t/t9119-git-svn-info.sh
t/t9120-git-svn-clone-with-percent-escapes.sh
t/t9123-git-svn-rebuild-with-rewriteroot.sh
t/t9125-git-svn-multi-glob-branch-names.sh
t/t9127-git-svn-partial-rebuild.sh
t/t9128-git-svn-cmd-branch.sh
t/t9137-git-svn-dcommit-clobber-series.sh
t/t9300-fast-import.sh
t/t9401-git-cvsserver-crlf.sh
t/t9600-cvsimport.sh
t/t9603-cvsimport-patchsets.sh

index f1243ff112ad86324e3f41cea88af7087aa0cc7a..b55731f23f90ff3a1750d8a4f1d70b2d3632ed9b 100644 (file)
@@ -4,7 +4,8 @@ Git v1.7.3 Release Notes (draft)
 Updates since v1.7.2
 --------------------
 
- * git-gui got various updates and a new maintainer, Pat Thoyts.
+ * git-gui, now at version 0.13.0, got various updates and a new
+   maintainer, Pat Thoyts.
 
  * Gitweb allows its configuration to change per each request; it used to
    read the configuration once upon startup.
@@ -63,16 +64,21 @@ release, unless otherwise noted.
  * "git fetch $url" (i.e. without refspecs) was broken for quite some
    time, if the current branch happen to be tracking some remote.
 
+ * "git ls-tree dir dirgarbage", when "dir" was a directory,
+   incorrectly recursed into "dir".
+
  * "git note remove" created unnecessary extra commit when named object
    did not have any note to begin with.
 
+ * "git rebase" did not work well if you had diff.noprefix configured.
+
  * "git -c foo=bar subcmd" did not work well for subcmd that is not
    implemented as a built-in command.
 
 ---
 exec >/var/tmp/1
 echo O=$(git describe master)
-O=v1.7.3-rc0
+O=v1.7.3-rc2
 git shortlog --no-merges $O..master ^maint
 exit 0
 
index 020028cf9a54540f5e0e403b52e08dd2921a644e..7357c8879a941537fa6aee084b572e8aacced89d 100644 (file)
@@ -159,18 +159,7 @@ to other tags will be rewritten to point to the underlying commit.
 --subdirectory-filter <directory>::
        Only look at the history which touches the given subdirectory.
        The result will contain that directory (and only that) as its
-       project root.  Implies --remap-to-ancestor.
-
---remap-to-ancestor::
-       Rewrite refs to the nearest rewritten ancestor instead of
-       ignoring them.
-+
-Normally, positive refs on the command line are only changed if the
-commit they point to was rewritten.  However, you can limit the extent
-of this rewriting by using linkgit:rev-list[1] arguments, e.g., path
-limiters.  Refs pointing to such excluded commits would then normally
-be ignored.  With this option, they are instead rewritten to point at
-the nearest ancestor that was not excluded.
+       project root. Implies <<Remap_to_ancestor>>.
 
 --prune-empty::
        Some kind of filters will generate empty commits, that left the tree
@@ -204,7 +193,18 @@ the nearest ancestor that was not excluded.
        Arguments for 'git rev-list'.  All positive refs included by
        these options are rewritten.  You may also specify options
        such as '--all', but you must use '--' to separate them from
-       the 'git filter-branch' options.
+       the 'git filter-branch' options. Implies <<Remap_to_ancestor>>.
+
+
+[[Remap_to_ancestor]]
+Remap to ancestor
+~~~~~~~~~~~~~~~~~
+
+By using linkgit:rev-list[1] arguments, e.g., path limiters, you can limit the
+set of revisions which get rewritten. However, positive refs on the command
+line are distinguished: we don't let them be excluded by such limiters. For
+this purpose, they are instead rewritten to point at the nearest ancestor that
+was not excluded.
 
 
 Examples
index 0cbf04373151f8415593824642a28f175e37b642..556cee1ca7e6c95fb27137af045464b94ebaaeb2 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v1.7.3-rc1
+DEF_VER=v1.7.3-rc2
 
 LF='
 '
index dc86b0d9a997f98ad43ca2897055a92b8a3eb7d0..a8187568bf99872e717c389b031331838544fe04 100644 (file)
@@ -52,6 +52,8 @@ static int show_recursive(const char *base, int baselen, const char *pathname)
                speclen = strlen(spec);
                if (speclen <= len)
                        continue;
+               if (spec[len] && spec[len] != '/')
+                       continue;
                if (memcmp(pathname, spec, len))
                        continue;
                return 1;
index ff97adcb891caf98dcc655e71e29eaec5dae0135..65ea26bdb8c2cef671030c3a62d87d84612e8144 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -372,8 +372,10 @@ int create_bundle(struct bundle_header *header, const char *path,
        close(rls.in);
        if (finish_command(&rls))
                return error ("pack-objects died");
-       if (!bundle_to_stdout)
-               commit_lock_file(&lock);
+       if (!bundle_to_stdout) {
+               if (commit_lock_file(&lock))
+                       die_errno("cannot create '%s'", path);
+       }
        return 0;
 }
 
index 88fb0f070e5f32c62ae47f90f1f27ffeef836d8f..962a93b586571eb6fc60aae53c77f6e6b9fb281f 100755 (executable)
@@ -139,6 +139,7 @@ do
                continue
                ;;
        --remap-to-ancestor)
+               # deprecated ($remap_to_ancestor is set now automatically)
                shift
                remap_to_ancestor=t
                continue
@@ -265,7 +266,14 @@ mkdir ../map || die "Could not create map/ directory"
 
 # we need "--" only if there are no path arguments in $@
 nonrevs=$(git rev-parse --no-revs "$@") || exit
-test -z "$nonrevs" && dashdash=-- || dashdash=
+if test -z "$nonrevs"
+then
+       dashdash=--
+else
+       dashdash=
+       remap_to_ancestor=t
+fi
+
 rev_args=$(git rev-parse --revs-only "$@")
 
 case "$filter_subdir" in
index b3f937eace99ce1e25afbdbea678e9f6926dbc75..1fb4d9b4b7393d2c803457365127692fb093338f 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=0.12.GITGUI
+DEF_VER=0.13.GITGUI
 
 LF='
 '
index 197b55edf3eeeaec345d88227825cc550e6de72d..e22ba5c321dc47fdf512f30c5e6c741c41fb99eb 100644 (file)
@@ -215,6 +215,7 @@ 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' \
index 12e117ecb11afabef1d0d751ebee442ce515dc1e..4277f30c4116faf2788243af4ec23f1d077698e8 100755 (executable)
@@ -5,6 +5,8 @@ exec wish "$0" -- "$@"
 # This is a trivial implementation of an SSH_ASKPASS handler.
 # Git-gui uses this script if none are already configured.
 
+package require Tk
+
 set answer {}
 set yesno  0
 set rc     255
@@ -30,16 +32,20 @@ if {!$yesno} {
 
 frame .b
 button .b.ok     -text OK     -command finish
-button .b.cancel -text Cancel -command {destroy .}
+button .b.cancel -text Cancel -command cancel
 
 pack .b.ok -side left -expand 1
 pack .b.cancel -side right -expand 1
 pack .b -side bottom -fill x -padx 10 -pady 10
 
 bind . <Visibility> {focus -force .e}
-bind . <Key-Return> finish
-bind . <Key-Escape> {destroy .}
-bind . <Destroy>    {exit $rc}
+bind . <Key-Return> [list .b.ok invoke]
+bind . <Key-Escape> [list .b.cancel invoke]
+bind . <Destroy>    {set rc $rc}
+
+proc cancel {} {
+       set ::rc 255
+}
 
 proc finish {} {
        if {$::yesno} {
@@ -50,10 +56,11 @@ proc finish {} {
                }
        }
 
-       set ::rc 0
        puts $::answer
-       destroy .
+       set ::rc 0
 }
 
 wm title . "OpenSSH"
 tk::PlaceWindow .
+vwait rc
+exit $rc
index bb104895a94450a2ade7446c8fda52910bae0868..4617f29c26726c2cd438f160be21a8422e66b352 100755 (executable)
@@ -10,8 +10,8 @@
  exec wish "$argv0" -- "$@"
 
 set appvers {@@GITGUI_VERSION@@}
-set copyright [encoding convertfrom utf-8 {
-Copyright Â© 2006, 2007 Shawn Pearce, et. al.
+set copyright [string map [list (c) \u00a9] {
+Copyright (c) 2006-2010 Shawn Pearce, et. al.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -128,6 +128,7 @@ set _githtmldir {}
 set _reponame {}
 set _iscygwin {}
 set _search_path {}
+set _shellpath {@@SHELL_PATH@@}
 
 set _trace [lsearch -exact $argv --trace]
 if {$_trace >= 0} {
@@ -137,6 +138,18 @@ if {$_trace >= 0} {
        set _trace 0
 }
 
+proc shellpath {} {
+       global _shellpath env
+       if {[string match @@* $_shellpath]} {
+               if {[info exists env(SHELL)]} {
+                       return $env(SHELL)
+               } else {
+                       return /bin/sh
+               }
+       }
+       return $_shellpath
+}
+
 proc appname {} {
        global _appname
        return $_appname
@@ -2845,7 +2858,13 @@ bind all <$M1B-Key-W> {destroy [winfo toplevel %W]}
 
 set subcommand_args {}
 proc usage {} {
-       puts stderr "usage: $::argv0 $::subcommand $::subcommand_args"
+       set s "usage: $::argv0 $::subcommand $::subcommand_args"
+       if {[tk windowingsystem] eq "win32"} {
+               wm withdraw .
+               tk_messageBox -icon info -title "Usage" -message $s
+       } else {
+               puts stderr $s
+       }
        exit 1
 }
 
@@ -2938,7 +2957,12 @@ blame {
        }
        blame   {
                if {$head eq {} && ![file exists $path]} {
-                       puts stderr [mc "fatal: cannot stat path %s: No such file or directory" $path]
+                       catch {wm withdraw .}
+                       tk_messageBox \
+                               -icon error \
+                               -type ok \
+                               -title [mc "git-gui: fatal error"] \
+                               -message [mc "fatal: cannot stat path %s: No such file or directory" $path]
                        exit 1
                }
                blame::new $head $path $jump_spec
index 2137ec9684d0acdb386e6b50e1b41aa7705c9746..61e358f960ca949cac5664c67442b82d0afca65f 100644 (file)
@@ -460,7 +460,14 @@ method _load {jump} {
        }
        if {$commit eq {}} {
                if {$do_textconv ne 0} {
-                       set fd [open |[list $textconv $path] r]
+                       # Run textconv with sh -c "..." to allow it to
+                       # contain command + arguments. On windows, just
+                       # call the filter command.
+                       if {![file executable [shellpath]]} {
+                               set fd [open |[linsert $textconv end $path] r]
+                       } else {
+                               set fd [open |[list [shellpath] -c "$textconv \"\$0\"" $path] r]
+                       }
                } else {
                        set fd [open $path r]
                }
index d8d73acf2cdc770a794fa348aace0963dd7844ff..8bd3c5d75feea3dfe310adbfab705d8045aa8367 100644 (file)
@@ -8,41 +8,41 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-26 15:47-0800\n"
-"PO-Revision-Date: 2010-01-28 13:57+0100\n"
+"POT-Creation-Date: 2010-09-12 21:11+0100\n"
+"PO-Revision-Date: 2010-09-12 21:12+0100\n"
 "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit"
 
-#: 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: Ã¶desdigert fel"
-
-#: git-gui.sh:743
+#: git-gui.sh:781
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "Ogiltigt teckensnitt angivet i %s:"
 
-#: git-gui.sh:779
+#: git-gui.sh:831
 msgid "Main Font"
 msgstr "Huvudteckensnitt"
 
-#: git-gui.sh:780
+#: git-gui.sh:832
 msgid "Diff/Console Font"
 msgstr "Diff/konsolteckensnitt"
 
-#: git-gui.sh:794
+#: git-gui.sh:845 git-gui.sh:859 git-gui.sh:872 git-gui.sh:955 git-gui.sh:974
+#: git-gui.sh:2964
+msgid "git-gui: fatal error"
+msgstr "git-gui: Ã¶desdigert fel"
+
+#: git-gui.sh:846
 msgid "Cannot find git in PATH."
 msgstr "Hittar inte git i PATH."
 
-#: git-gui.sh:821
+#: git-gui.sh:873
 msgid "Cannot parse Git version string:"
 msgstr "Kan inte tolka versionssträng frÃ¥n Git:"
 
-#: git-gui.sh:839
+#: git-gui.sh:891
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -61,478 +61,478 @@ msgstr ""
 "\n"
 "Anta att \"%s\" Ã¤r version 1.5.0?\n"
 
-#: git-gui.sh:1128
+#: git-gui.sh:1180
 msgid "Git directory not found:"
 msgstr "Git-katalogen hittades inte:"
 
-#: git-gui.sh:1146
+#: git-gui.sh:1201
 msgid "Cannot move to top of working directory:"
 msgstr "Kan inte gÃ¥ till början pÃ¥ arbetskatalogen:"
 
-#: git-gui.sh:1154
+#: git-gui.sh:1209
 msgid "Cannot use bare repository:"
 msgstr "Kan inte använda naket arkiv:"
 
-#: git-gui.sh:1162
+#: git-gui.sh:1217
 msgid "No working directory"
 msgstr "Ingen arbetskatalog"
 
-#: git-gui.sh:1334 lib/checkout_op.tcl:306
+#: git-gui.sh:1389 lib/checkout_op.tcl:306
 msgid "Refreshing file status..."
 msgstr "Uppdaterar filstatus..."
 
-#: git-gui.sh:1390
+#: git-gui.sh:1445
 msgid "Scanning for modified files ..."
 msgstr "Söker efter Ã¤ndrade filer..."
 
-#: git-gui.sh:1454
+#: git-gui.sh:1509
 msgid "Calling prepare-commit-msg hook..."
 msgstr ""
 "Anropar kroken för förberedelse av incheckningsmeddelande (prepare-commit-"
 "msg)..."
 
-#: git-gui.sh:1471
+#: git-gui.sh:1526
 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:1629 lib/browser.tcl:246
+#: git-gui.sh:1684 lib/browser.tcl:246
 msgid "Ready."
 msgstr "Klar."
 
-#: git-gui.sh:1787
+#: git-gui.sh:1842
 #, tcl-format
 msgid "Displaying only %s of %s files."
 msgstr "Visar endast %s av %s filer."
 
-#: git-gui.sh:1913
+#: git-gui.sh:1968
 msgid "Unmodified"
 msgstr "Oförändrade"
 
-#: git-gui.sh:1915
+#: git-gui.sh:1970
 msgid "Modified, not staged"
 msgstr "Förändrade, ej köade"
 
-#: git-gui.sh:1916 git-gui.sh:1924
+#: git-gui.sh:1971 git-gui.sh:1979
 msgid "Staged for commit"
 msgstr "Köade för incheckning"
 
-#: git-gui.sh:1917 git-gui.sh:1925
+#: git-gui.sh:1972 git-gui.sh:1980
 msgid "Portions staged for commit"
 msgstr "Delar köade för incheckning"
 
-#: git-gui.sh:1918 git-gui.sh:1926
+#: git-gui.sh:1973 git-gui.sh:1981
 msgid "Staged for commit, missing"
 msgstr "Köade för incheckning, saknade"
 
-#: git-gui.sh:1920
+#: git-gui.sh:1975
 msgid "File type changed, not staged"
 msgstr "Filtyp Ã¤ndrad, ej köade"
 
-#: git-gui.sh:1921
+#: git-gui.sh:1976
 msgid "File type changed, staged"
 msgstr "Filtyp Ã¤ndrad, köade"
 
-#: git-gui.sh:1923
+#: git-gui.sh:1978
 msgid "Untracked, not staged"
 msgstr "Ej spÃ¥rade, ej köade"
 
-#: git-gui.sh:1928
+#: git-gui.sh:1983
 msgid "Missing"
 msgstr "Saknade"
 
-#: git-gui.sh:1929
+#: git-gui.sh:1984
 msgid "Staged for removal"
 msgstr "Köade för borttagning"
 
-#: git-gui.sh:1930
+#: git-gui.sh:1985
 msgid "Staged for removal, still present"
 msgstr "Köade för borttagning, fortfarande närvarande"
 
-#: 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:1987 git-gui.sh:1988 git-gui.sh:1989 git-gui.sh:1990
+#: git-gui.sh:1991 git-gui.sh:1992
 msgid "Requires merge resolution"
 msgstr "Kräver konflikthantering efter sammanslagning"
 
-#: git-gui.sh:1972
+#: git-gui.sh:2027
 msgid "Starting gitk... please wait..."
 msgstr "Startar gitk... vänta..."
 
-#: git-gui.sh:1984
+#: git-gui.sh:2039
 msgid "Couldn't find gitk in PATH"
 msgstr "Hittade inte gitk i PATH."
 
-#: git-gui.sh:2043
+#: git-gui.sh:2098
 msgid "Couldn't find git gui in PATH"
 msgstr "Hittade inte git gui i PATH."
 
-#: git-gui.sh:2455 lib/choose_repository.tcl:36
+#: git-gui.sh:2515 lib/choose_repository.tcl:36
 msgid "Repository"
 msgstr "Arkiv"
 
-#: git-gui.sh:2456
+#: git-gui.sh:2516
 msgid "Edit"
 msgstr "Redigera"
 
-#: git-gui.sh:2458 lib/choose_rev.tcl:561
+#: git-gui.sh:2518 lib/choose_rev.tcl:566
 msgid "Branch"
 msgstr "Gren"
 
-#: git-gui.sh:2461 lib/choose_rev.tcl:548
+#: git-gui.sh:2521 lib/choose_rev.tcl:553
 msgid "Commit@@noun"
 msgstr "Incheckning"
 
-#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:2524 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
 msgid "Merge"
 msgstr "SlÃ¥ ihop"
 
-#: git-gui.sh:2465 lib/choose_rev.tcl:557
+#: git-gui.sh:2525 lib/choose_rev.tcl:562
 msgid "Remote"
 msgstr "Fjärrarkiv"
 
-#: git-gui.sh:2468
+#: git-gui.sh:2528
 msgid "Tools"
 msgstr "Verktyg"
 
-#: git-gui.sh:2477
+#: git-gui.sh:2537
 msgid "Explore Working Copy"
 msgstr "Utforska arbetskopia"
 
-#: git-gui.sh:2483
+#: git-gui.sh:2543
 msgid "Browse Current Branch's Files"
 msgstr "Bläddra i grenens filer"
 
-#: git-gui.sh:2487
+#: git-gui.sh:2547
 msgid "Browse Branch Files..."
 msgstr "Bläddra filer pÃ¥ gren..."
 
-#: git-gui.sh:2492
+#: git-gui.sh:2552
 msgid "Visualize Current Branch's History"
 msgstr "Visualisera grenens historik"
 
-#: git-gui.sh:2496
+#: git-gui.sh:2556
 msgid "Visualize All Branch History"
 msgstr "Visualisera alla grenars historik"
 
-#: git-gui.sh:2503
+#: git-gui.sh:2563
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Bläddra i filer för %s"
 
-#: git-gui.sh:2505
+#: git-gui.sh:2565
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "Visualisera historik för %s"
 
-#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:2570 lib/database.tcl:40 lib/database.tcl:66
 msgid "Database Statistics"
 msgstr "Databasstatistik"
 
-#: git-gui.sh:2513 lib/database.tcl:34
+#: git-gui.sh:2573 lib/database.tcl:33
 msgid "Compress Database"
 msgstr "Komprimera databas"
 
-#: git-gui.sh:2516
+#: git-gui.sh:2576
 msgid "Verify Database"
 msgstr "Verifiera databas"
 
-#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8
+#: git-gui.sh:2583 git-gui.sh:2587 git-gui.sh:2591 lib/shortcut.tcl:8
 #: lib/shortcut.tcl:40 lib/shortcut.tcl:72
 msgid "Create Desktop Icon"
 msgstr "Skapa skrivbordsikon"
 
-#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191
+#: git-gui.sh:2599 lib/choose_repository.tcl:188 lib/choose_repository.tcl:196
 msgid "Quit"
 msgstr "Avsluta"
 
-#: git-gui.sh:2547
+#: git-gui.sh:2607
 msgid "Undo"
 msgstr "Ã…ngra"
 
-#: git-gui.sh:2550
+#: git-gui.sh:2610
 msgid "Redo"
 msgstr "Gör om"
 
-#: git-gui.sh:2554 git-gui.sh:3109
+#: git-gui.sh:2614 git-gui.sh:3190
 msgid "Cut"
 msgstr "Klipp ut"
 
-#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259
+#: git-gui.sh:2617 git-gui.sh:3193 git-gui.sh:3267 git-gui.sh:3340
 #: lib/console.tcl:69
 msgid "Copy"
 msgstr "Kopiera"
 
-#: git-gui.sh:2560 git-gui.sh:3115
+#: git-gui.sh:2620 git-gui.sh:3196
 msgid "Paste"
 msgstr "Klistra in"
 
-#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26
-#: lib/remote_branch_delete.tcl:38
+#: git-gui.sh:2623 git-gui.sh:3199 lib/branch_delete.tcl:28
+#: lib/remote_branch_delete.tcl:39
 msgid "Delete"
 msgstr "Ta bort"
 
-#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71
+#: git-gui.sh:2627 git-gui.sh:3203 git-gui.sh:3344 lib/console.tcl:71
 msgid "Select All"
 msgstr "Markera alla"
 
-#: git-gui.sh:2576
+#: git-gui.sh:2636
 msgid "Create..."
 msgstr "Skapa..."
 
-#: git-gui.sh:2582
+#: git-gui.sh:2642
 msgid "Checkout..."
 msgstr "Checka ut..."
 
-#: git-gui.sh:2588
+#: git-gui.sh:2648
 msgid "Rename..."
 msgstr "Byt namn..."
 
-#: git-gui.sh:2593
+#: git-gui.sh:2653
 msgid "Delete..."
 msgstr "Ta bort..."
 
-#: git-gui.sh:2598
+#: git-gui.sh:2658
 msgid "Reset..."
 msgstr "Ã…terställ..."
 
-#: git-gui.sh:2608
+#: git-gui.sh:2668
 msgid "Done"
 msgstr "Färdig"
 
-#: git-gui.sh:2610
+#: git-gui.sh:2670
 msgid "Commit@@verb"
 msgstr "Checka in"
 
-#: git-gui.sh:2619 git-gui.sh:3050
+#: git-gui.sh:2679 git-gui.sh:3131
 msgid "New Commit"
 msgstr "Ny incheckning"
 
-#: git-gui.sh:2627 git-gui.sh:3057
+#: git-gui.sh:2687 git-gui.sh:3138
 msgid "Amend Last Commit"
 msgstr "Lägg till föregÃ¥ende incheckning"
 
-#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2697 git-gui.sh:3092 lib/remote_branch_delete.tcl:101
 msgid "Rescan"
 msgstr "Sök pÃ¥ nytt"
 
-#: git-gui.sh:2643
+#: git-gui.sh:2703
 msgid "Stage To Commit"
 msgstr "Köa för incheckning"
 
-#: git-gui.sh:2649
+#: git-gui.sh:2709
 msgid "Stage Changed Files To Commit"
 msgstr "Köa Ã¤ndrade filer för incheckning"
 
-#: git-gui.sh:2655
+#: git-gui.sh:2715
 msgid "Unstage From Commit"
 msgstr "Ta bort frÃ¥n incheckningskö"
 
-#: git-gui.sh:2661 lib/index.tcl:412
+#: git-gui.sh:2721 lib/index.tcl:415
 msgid "Revert Changes"
 msgstr "Ã…terställ Ã¤ndringar"
 
-#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341
+#: git-gui.sh:2729 git-gui.sh:3391 git-gui.sh:3422
 msgid "Show Less Context"
 msgstr "Visa mindre sammanhang"
 
-#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345
+#: git-gui.sh:2733 git-gui.sh:3395 git-gui.sh:3426
 msgid "Show More Context"
 msgstr "Visa mer sammanhang"
 
-#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133
+#: git-gui.sh:2740 git-gui.sh:3105 git-gui.sh:3214
 msgid "Sign Off"
 msgstr "Skriv under"
 
-#: git-gui.sh:2696
+#: git-gui.sh:2756
 msgid "Local Merge..."
 msgstr "Lokal sammanslagning..."
 
-#: git-gui.sh:2701
+#: git-gui.sh:2761
 msgid "Abort Merge..."
 msgstr "Avbryt sammanslagning..."
 
-#: git-gui.sh:2713 git-gui.sh:2741
+#: git-gui.sh:2773 git-gui.sh:2801
 msgid "Add..."
 msgstr "Lägg till..."
 
-#: git-gui.sh:2717
+#: git-gui.sh:2777
 msgid "Push..."
 msgstr "Sänd..."
 
-#: git-gui.sh:2721
+#: git-gui.sh:2781
 msgid "Delete Branch..."
 msgstr "Ta bort gren..."
 
-#: git-gui.sh:2731 git-gui.sh:3292
+#: git-gui.sh:2791 git-gui.sh:3373
 msgid "Options..."
 msgstr "Alternativ..."
 
-#: git-gui.sh:2742
+#: git-gui.sh:2802
 msgid "Remove..."
 msgstr "Ta bort..."
 
-#: git-gui.sh:2751 lib/choose_repository.tcl:50
+#: git-gui.sh:2811 lib/choose_repository.tcl:50
 msgid "Help"
 msgstr "Hjälp"
 
-#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14
+#: git-gui.sh:2815 git-gui.sh:2819 lib/about.tcl:14
 #: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53
 #, tcl-format
 msgid "About %s"
 msgstr "Om %s"
 
-#: git-gui.sh:2783
+#: git-gui.sh:2843
 msgid "Online Documentation"
 msgstr "Webbdokumentation"
 
-#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56
+#: git-gui.sh:2846 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56
 msgid "Show SSH Key"
 msgstr "Visa SSH-nyckel"
 
-#: git-gui.sh:2893
+#: git-gui.sh:2965
 #, 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:2926
+#: git-gui.sh:2997
 msgid "Current Branch:"
 msgstr "Aktuell gren:"
 
-#: git-gui.sh:2947
+#: git-gui.sh:3023
 msgid "Staged Changes (Will Commit)"
 msgstr "Köade Ã¤ndringar (kommer att checkas in)"
 
-#: git-gui.sh:2967
+#: git-gui.sh:3043
 msgid "Unstaged Changes"
 msgstr "Oköade Ã¤ndringar"
 
-#: git-gui.sh:3017
+#: git-gui.sh:3098
 msgid "Stage Changed"
 msgstr "Köa Ã¤ndrade"
 
-#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193
+#: git-gui.sh:3117 lib/transport.tcl:107 lib/transport.tcl:196
 msgid "Push"
 msgstr "Sänd"
 
-#: git-gui.sh:3071
+#: git-gui.sh:3152
 msgid "Initial Commit Message:"
 msgstr "Inledande incheckningsmeddelande:"
 
-#: git-gui.sh:3072
+#: git-gui.sh:3153
 msgid "Amended Commit Message:"
 msgstr "Utökat incheckningsmeddelande:"
 
-#: git-gui.sh:3073
+#: git-gui.sh:3154
 msgid "Amended Initial Commit Message:"
 msgstr "Utökat inledande incheckningsmeddelande:"
 
-#: git-gui.sh:3074
+#: git-gui.sh:3155
 msgid "Amended Merge Commit Message:"
 msgstr "Utökat incheckningsmeddelande för sammanslagning:"
 
-#: git-gui.sh:3075
+#: git-gui.sh:3156
 msgid "Merge Commit Message:"
 msgstr "Incheckningsmeddelande för sammanslagning:"
 
-#: git-gui.sh:3076
+#: git-gui.sh:3157
 msgid "Commit Message:"
 msgstr "Incheckningsmeddelande:"
 
-#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73
+#: git-gui.sh:3206 git-gui.sh:3348 lib/console.tcl:73
 msgid "Copy All"
 msgstr "Kopiera alla"
 
-#: git-gui.sh:3149 lib/blame.tcl:104
+#: git-gui.sh:3230 lib/blame.tcl:104
 msgid "File:"
 msgstr "Fil:"
 
-#: git-gui.sh:3255
+#: git-gui.sh:3336
 msgid "Refresh"
 msgstr "Uppdatera"
 
-#: git-gui.sh:3276
+#: git-gui.sh:3357
 msgid "Decrease Font Size"
 msgstr "Minska teckensnittsstorlek"
 
-#: git-gui.sh:3280
+#: git-gui.sh:3361
 msgid "Increase Font Size"
 msgstr "Öka teckensnittsstorlek"
 
-#: git-gui.sh:3288 lib/blame.tcl:281
+#: git-gui.sh:3369 lib/blame.tcl:281
 msgid "Encoding"
 msgstr "Teckenkodning"
 
-#: git-gui.sh:3299
+#: git-gui.sh:3380
 msgid "Apply/Reverse Hunk"
 msgstr "Använd/Ã¥terställ del"
 
-#: git-gui.sh:3304
+#: git-gui.sh:3385
 msgid "Apply/Reverse Line"
 msgstr "Använd/Ã¥terställ rad"
 
-#: git-gui.sh:3323
+#: git-gui.sh:3404
 msgid "Run Merge Tool"
 msgstr "Starta verktyg för sammanslagning"
 
-#: git-gui.sh:3328
+#: git-gui.sh:3409
 msgid "Use Remote Version"
 msgstr "Använd versionen frÃ¥n fjärrarkivet"
 
-#: git-gui.sh:3332
+#: git-gui.sh:3413
 msgid "Use Local Version"
 msgstr "Använd lokala versionen"
 
-#: git-gui.sh:3336
+#: git-gui.sh:3417
 msgid "Revert To Base"
 msgstr "Ã…terställ till basversionen"
 
-#: git-gui.sh:3354
+#: git-gui.sh:3435
 msgid "Visualize These Changes In The Submodule"
 msgstr "Visualisera Ã¤ndringarna i undermodulen"
 
-#: git-gui.sh:3358
+#: git-gui.sh:3439
 msgid "Visualize Current Branch History In The Submodule"
 msgstr "Visualisera grenens historik i undermodulen"
 
-#: git-gui.sh:3362
+#: git-gui.sh:3443
 msgid "Visualize All Branch History In The Submodule"
 msgstr "Visualisera alla grenars historik i undermodulen"
 
-#: git-gui.sh:3367
+#: git-gui.sh:3448
 msgid "Start git gui In The Submodule"
 msgstr "Starta git gui i undermodulen"
 
-#: git-gui.sh:3389
+#: git-gui.sh:3483
 msgid "Unstage Hunk From Commit"
 msgstr "Ta bort del ur incheckningskö"
 
-#: git-gui.sh:3391
+#: git-gui.sh:3485
 msgid "Unstage Lines From Commit"
 msgstr "Ta bort rader ur incheckningskö"
 
-#: git-gui.sh:3393
+#: git-gui.sh:3487
 msgid "Unstage Line From Commit"
 msgstr "Ta bort rad ur incheckningskö"
 
-#: git-gui.sh:3396
+#: git-gui.sh:3490
 msgid "Stage Hunk For Commit"
 msgstr "Ställ del i incheckningskö"
 
-#: git-gui.sh:3398
+#: git-gui.sh:3492
 msgid "Stage Lines For Commit"
 msgstr "Ställ rader i incheckningskö"
 
-#: git-gui.sh:3400
+#: git-gui.sh:3494
 msgid "Stage Line For Commit"
 msgstr "Ställ rad i incheckningskö"
 
-#: git-gui.sh:3424
+#: git-gui.sh:3519
 msgid "Initializing..."
 msgstr "Initierar..."
 
-#: git-gui.sh:3541
+#: git-gui.sh:3658
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -549,7 +549,7 @@ msgstr ""
 "av %s:\n"
 "\n"
 
-#: git-gui.sh:3570
+#: git-gui.sh:3687
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -559,7 +559,7 @@ msgstr ""
 "Detta beror pÃ¥ ett känt problem med\n"
 "Tcl-binären som följer med Cygwin."
 
-#: git-gui.sh:3575
+#: git-gui.sh:3692
 #, tcl-format
 msgid ""
 "\n"
@@ -613,132 +613,132 @@ msgstr "Klandra föräldraincheckning"
 msgid "Reading %s..."
 msgstr "Läser %s..."
 
-#: lib/blame.tcl:557
+#: lib/blame.tcl:581
 msgid "Loading copy/move tracking annotations..."
 msgstr "Läser annoteringar för kopiering/flyttning..."
 
-#: lib/blame.tcl:577
+#: lib/blame.tcl:601
 msgid "lines annotated"
 msgstr "rader annoterade"
 
-#: lib/blame.tcl:769
+#: lib/blame.tcl:793
 msgid "Loading original location annotations..."
 msgstr "Läser in annotering av originalplacering..."
 
-#: lib/blame.tcl:772
+#: lib/blame.tcl:796
 msgid "Annotation complete."
 msgstr "Annotering fullbordad."
 
-#: lib/blame.tcl:802
+#: lib/blame.tcl:826
 msgid "Busy"
 msgstr "Upptagen"
 
-#: lib/blame.tcl:803
+#: lib/blame.tcl:827
 msgid "Annotation process is already running."
 msgstr "Annoteringsprocess körs redan."
 
-#: lib/blame.tcl:842
+#: lib/blame.tcl:866
 msgid "Running thorough copy detection..."
 msgstr "Kör grundlig kopieringsigenkänning..."
 
-#: lib/blame.tcl:910
+#: lib/blame.tcl:934
 msgid "Loading annotation..."
 msgstr "Läser in annotering..."
 
-#: lib/blame.tcl:963
+#: lib/blame.tcl:987
 msgid "Author:"
 msgstr "Författare:"
 
-#: lib/blame.tcl:967
+#: lib/blame.tcl:991
 msgid "Committer:"
 msgstr "Incheckare:"
 
-#: lib/blame.tcl:972
+#: lib/blame.tcl:996
 msgid "Original File:"
 msgstr "Ursprunglig fil:"
 
-#: lib/blame.tcl:1020
+#: lib/blame.tcl:1044
 msgid "Cannot find HEAD commit:"
 msgstr "Hittar inte incheckning för HEAD:"
 
-#: lib/blame.tcl:1075
+#: lib/blame.tcl:1099
 msgid "Cannot find parent commit:"
 msgstr "Hittar inte föräldraincheckning:"
 
-#: lib/blame.tcl:1090
+#: lib/blame.tcl:1114
 msgid "Unable to display parent"
 msgstr "Kan inte visa förälder"
 
-#: lib/blame.tcl:1091 lib/diff.tcl:320
+#: lib/blame.tcl:1115 lib/diff.tcl:323
 msgid "Error loading diff:"
 msgstr "Fel vid inläsning av differens:"
 
-#: lib/blame.tcl:1231
+#: lib/blame.tcl:1255
 msgid "Originally By:"
 msgstr "Ursprungligen av:"
 
-#: lib/blame.tcl:1237
+#: lib/blame.tcl:1261
 msgid "In File:"
 msgstr "I filen:"
 
-#: lib/blame.tcl:1242
+#: lib/blame.tcl:1266
 msgid "Copied Or Moved Here By:"
 msgstr "Kopierad eller flyttad hit av:"
 
-#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19
+#: lib/branch_checkout.tcl:16 lib/branch_checkout.tcl:21
 msgid "Checkout Branch"
 msgstr "Checka ut gren"
 
-#: lib/branch_checkout.tcl:23
+#: lib/branch_checkout.tcl:26
 msgid "Checkout"
 msgstr "Checka ut"
 
-#: 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/branch_checkout.tcl:30 lib/branch_create.tcl:37
+#: lib/branch_delete.tcl:34 lib/branch_rename.tcl:32 lib/browser.tcl:286
+#: lib/checkout_op.tcl:579 lib/choose_font.tcl:45 lib/merge.tcl:172
+#: 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:111
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328
+#: lib/branch_checkout.tcl:35 lib/browser.tcl:291 lib/tools_dlg.tcl:321
 msgid "Revision"
 msgstr "Revision"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280
+#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 lib/option.tcl:287
 msgid "Options"
 msgstr "Alternativ"
 
-#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92
+#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92
 msgid "Fetch Tracking Branch"
 msgstr "Hämta spÃ¥rande gren"
 
-#: lib/branch_checkout.tcl:44
+#: lib/branch_checkout.tcl:47
 msgid "Detach From Local Branch"
 msgstr "Koppla bort frÃ¥n lokal gren"
 
-#: lib/branch_create.tcl:22
+#: lib/branch_create.tcl:23
 msgid "Create Branch"
 msgstr "Skapa gren"
 
-#: lib/branch_create.tcl:27
+#: lib/branch_create.tcl:28
 msgid "Create New Branch"
 msgstr "Skapa ny gren"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381
+#: lib/branch_create.tcl:33 lib/choose_repository.tcl:389
 msgid "Create"
 msgstr "Skapa"
 
-#: lib/branch_create.tcl:40
+#: lib/branch_create.tcl:42
 msgid "Branch Name"
 msgstr "Namn pÃ¥ gren"
 
-#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50
+#: lib/branch_create.tcl:44 lib/remote_add.tcl:41 lib/tools_dlg.tcl:51
 msgid "Name:"
 msgstr "Namn:"
 
-#: lib/branch_create.tcl:58
+#: lib/branch_create.tcl:57
 msgid "Match Tracking Branch Name"
 msgstr "Använd namn pÃ¥ spÃ¥rad gren"
 
@@ -766,41 +766,41 @@ msgstr "Ã…terställ"
 msgid "Checkout After Creation"
 msgstr "Checka ut när skapad"
 
-#: lib/branch_create.tcl:131
+#: lib/branch_create.tcl:132
 msgid "Please select a tracking branch."
 msgstr "Välj en gren att spÃ¥ra."
 
-#: lib/branch_create.tcl:140
+#: 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/branch_create.tcl:153 lib/branch_rename.tcl:86
+#: lib/branch_create.tcl:154 lib/branch_rename.tcl:92
 msgid "Please supply a branch name."
 msgstr "Ange ett namn för grenen."
 
-#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106
+#: 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/branch_delete.tcl:15
+#: lib/branch_delete.tcl:16
 msgid "Delete Branch"
 msgstr "Ta bort gren"
 
-#: lib/branch_delete.tcl:20
+#: lib/branch_delete.tcl:21
 msgid "Delete Local Branch"
 msgstr "Ta bort lokal gren"
 
-#: lib/branch_delete.tcl:37
+#: lib/branch_delete.tcl:39
 msgid "Local Branches"
 msgstr "Lokala grenar"
 
-#: lib/branch_delete.tcl:52
+#: lib/branch_delete.tcl:51
 msgid "Delete Only If Merged Into"
 msgstr "Ta bara bort om sammanslagen med"
 
-#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119
+#: lib/branch_delete.tcl:53 lib/remote_branch_delete.tcl:120
 msgid "Always (Do not perform merge checks)"
 msgstr "Alltid (utför inte sammanslagningstest)"
 
@@ -809,7 +809,7 @@ msgstr "Alltid (utför inte sammanslagningstest)"
 msgid "The following branches are not completely merged into %s:"
 msgstr "Följande grenar Ã¤r inte till fullo sammanslagna med %s:"
 
-#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217
+#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:218
 msgid ""
 "Recovering deleted branches is difficult.\n"
 "\n"
@@ -828,32 +828,32 @@ msgstr ""
 "Kunde inte ta bort grenar:\n"
 "%s"
 
-#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22
+#: lib/branch_rename.tcl:15 lib/branch_rename.tcl:23
 msgid "Rename Branch"
 msgstr "Byt namn pÃ¥ gren"
 
-#: lib/branch_rename.tcl:26
+#: lib/branch_rename.tcl:28
 msgid "Rename"
 msgstr "Byt namn"
 
-#: lib/branch_rename.tcl:36
+#: lib/branch_rename.tcl:38
 msgid "Branch:"
 msgstr "Gren:"
 
-#: lib/branch_rename.tcl:39
+#: lib/branch_rename.tcl:46
 msgid "New Name:"
 msgstr "Nytt namn:"
 
-#: lib/branch_rename.tcl:75
+#: 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:96 lib/checkout_op.tcl:202
+#: lib/branch_rename.tcl:102 lib/checkout_op.tcl:202
 #, tcl-format
 msgid "Branch '%s' already exists."
 msgstr "Grenen \"%s\" finns redan."
 
-#: lib/branch_rename.tcl:117
+#: lib/branch_rename.tcl:123
 #, tcl-format
 msgid "Failed to rename '%s'."
 msgstr "Kunde inte byta namn pÃ¥ \"%s\"."
@@ -862,7 +862,7 @@ msgstr "Kunde inte byta namn pÃ¥ \"%s\"."
 msgid "Starting..."
 msgstr "Startar..."
 
-#: lib/browser.tcl:26
+#: lib/browser.tcl:27
 msgid "File Browser"
 msgstr "Filbläddrare"
 
@@ -875,13 +875,13 @@ msgstr "Läser %s..."
 msgid "[Up To Parent]"
 msgstr "[Upp till förälder]"
 
-#: lib/browser.tcl:267 lib/browser.tcl:273
+#: lib/browser.tcl:269 lib/browser.tcl:276
 msgid "Browse Branch Files"
 msgstr "Bläddra filer pÃ¥ grenen"
 
-#: lib/browser.tcl:278 lib/choose_repository.tcl:398
-#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497
-#: lib/choose_repository.tcl:1028
+#: lib/browser.tcl:282 lib/choose_repository.tcl:404
+#: lib/choose_repository.tcl:491 lib/choose_repository.tcl:500
+#: lib/choose_repository.tcl:1027
 msgid "Browse"
 msgstr "Bläddra"
 
@@ -895,8 +895,8 @@ msgstr "Hämtar %s frÃ¥n %s"
 msgid "fatal: Cannot resolve %s"
 msgstr "ödesdigert: Kunde inte slÃ¥ upp %s"
 
-#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31
-#: lib/sshkey.tcl:53
+#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:30
+#: lib/sshkey.tcl:55
 msgid "Close"
 msgstr "Stäng"
 
@@ -1008,7 +1008,7 @@ msgstr "Det kanske inte Ã¤r sÃ¥ enkelt att Ã¥terskapa förlorade incheckningar."
 msgid "Reset '%s'?"
 msgstr "Ã…terställa \"%s\"?"
 
-#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343
+#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:336
 msgid "Visualize"
 msgstr "Visualisera"
 
@@ -1029,23 +1029,23 @@ msgstr ""
 "\n"
 "Detta skulle inte ha hänt. %s kommer nu stängas och ge upp."
 
-#: lib/choose_font.tcl:39
+#: lib/choose_font.tcl:41
 msgid "Select"
 msgstr "Välj"
 
-#: lib/choose_font.tcl:53
+#: lib/choose_font.tcl:55
 msgid "Font Family"
 msgstr "Teckensnittsfamilj"
 
-#: lib/choose_font.tcl:74
+#: lib/choose_font.tcl:76
 msgid "Font Size"
 msgstr "Storlek"
 
-#: lib/choose_font.tcl:91
+#: lib/choose_font.tcl:93
 msgid "Font Example"
 msgstr "Exempel"
 
-#: lib/choose_font.tcl:103
+#: lib/choose_font.tcl:105
 msgid ""
 "This is example text.\n"
 "If you like this text, it can be your font."
@@ -1057,7 +1057,7 @@ msgstr ""
 msgid "Git Gui"
 msgstr "Git Gui"
 
-#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386
+#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:394
 msgid "Create New Repository"
 msgstr "Skapa nytt arkiv"
 
@@ -1065,76 +1065,76 @@ msgstr "Skapa nytt arkiv"
 msgid "New..."
 msgstr "Nytt..."
 
-#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471
+#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:478
 msgid "Clone Existing Repository"
 msgstr "Klona befintligt arkiv"
 
-#: lib/choose_repository.tcl:106
+#: lib/choose_repository.tcl:111
 msgid "Clone..."
 msgstr "Klona..."
 
-#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016
+#: lib/choose_repository.tcl:118 lib/choose_repository.tcl:1017
 msgid "Open Existing Repository"
 msgstr "Öppna befintligt arkiv"
 
-#: lib/choose_repository.tcl:119
+#: lib/choose_repository.tcl:124
 msgid "Open..."
 msgstr "Öppna..."
 
-#: lib/choose_repository.tcl:132
+#: lib/choose_repository.tcl:137
 msgid "Recent Repositories"
 msgstr "Senaste arkiven"
 
-#: lib/choose_repository.tcl:138
+#: lib/choose_repository.tcl:143
 msgid "Open Recent Repository:"
 msgstr "Öppna tidigare arkiv:"
 
-#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313
-#: lib/choose_repository.tcl:320
+#: lib/choose_repository.tcl:313 lib/choose_repository.tcl:320
+#: lib/choose_repository.tcl:327
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Kunde inte skapa arkivet %s:"
 
-#: lib/choose_repository.tcl:391
+#: lib/choose_repository.tcl:399
 msgid "Directory:"
 msgstr "Katalog:"
 
-#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550
-#: lib/choose_repository.tcl:1052
+#: lib/choose_repository.tcl:429 lib/choose_repository.tcl:550
+#: lib/choose_repository.tcl:1051
 msgid "Git Repository"
 msgstr "Gitarkiv"
 
-#: lib/choose_repository.tcl:448
+#: lib/choose_repository.tcl:454
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "Katalogen %s finns redan."
 
-#: lib/choose_repository.tcl:452
+#: lib/choose_repository.tcl:458
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Filen %s finns redan."
 
-#: lib/choose_repository.tcl:466
+#: lib/choose_repository.tcl:473
 msgid "Clone"
 msgstr "Klona"
 
-#: lib/choose_repository.tcl:479
+#: lib/choose_repository.tcl:486
 msgid "Source Location:"
 msgstr "Plats för källkod:"
 
-#: lib/choose_repository.tcl:490
+#: lib/choose_repository.tcl:495
 msgid "Target Directory:"
 msgstr "MÃ¥lkatalog:"
 
-#: lib/choose_repository.tcl:502
+#: lib/choose_repository.tcl:505
 msgid "Clone Type:"
 msgstr "Typ av klon:"
 
-#: lib/choose_repository.tcl:508
+#: lib/choose_repository.tcl:510
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Standard (snabb, semiredundant, hÃ¥rda länkar)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:515
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Full kopia (lÃ¥ngsammare, redundant säkerhetskopia)"
 
@@ -1144,7 +1144,7 @@ msgstr "Delad (snabbast, rekommenderas ej, ingen säkerhetskopia)"
 
 #: 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
+#: lib/choose_repository.tcl:1057 lib/choose_repository.tcl:1065
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Inte ett Gitarkiv: %s"
@@ -1258,8 +1258,8 @@ msgstr "Kunde inte slÃ¥ upp %s till nÃ¥gon incheckning."
 msgid "Creating working directory"
 msgstr "Skapar arbetskatalog"
 
-#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130
-#: lib/index.tcl:198
+#: lib/choose_repository.tcl:939 lib/index.tcl:70 lib/index.tcl:133
+#: lib/index.tcl:201
 msgid "files"
 msgstr "filer"
 
@@ -1267,20 +1267,20 @@ msgstr "filer"
 msgid "Initial file checkout failed."
 msgstr "Inledande filutcheckning misslyckades."
 
-#: lib/choose_repository.tcl:1011
+#: lib/choose_repository.tcl:1012
 msgid "Open"
 msgstr "Öppna"
 
-#: lib/choose_repository.tcl:1021
+#: lib/choose_repository.tcl:1022
 msgid "Repository:"
 msgstr "Arkiv:"
 
-#: lib/choose_repository.tcl:1072
+#: lib/choose_repository.tcl:1071
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Kunde inte Ã¶ppna arkivet %s:"
 
-#: lib/choose_rev.tcl:53
+#: lib/choose_rev.tcl:52
 msgid "This Detached Checkout"
 msgstr "Denna frÃ¥nkopplade utcheckning"
 
@@ -1288,36 +1288,36 @@ msgstr "Denna frÃ¥nkopplade utcheckning"
 msgid "Revision Expression:"
 msgstr "Revisionsuttryck:"
 
-#: lib/choose_rev.tcl:74
+#: lib/choose_rev.tcl:72
 msgid "Local Branch"
 msgstr "Lokal gren"
 
-#: lib/choose_rev.tcl:79
+#: lib/choose_rev.tcl:77
 msgid "Tracking Branch"
 msgstr "SpÃ¥rande gren"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
+#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:543
 msgid "Tag"
 msgstr "Tagg"
 
-#: lib/choose_rev.tcl:317
+#: lib/choose_rev.tcl:321
 #, tcl-format
 msgid "Invalid revision: %s"
 msgstr "Ogiltig revision: %s"
 
-#: lib/choose_rev.tcl:338
+#: lib/choose_rev.tcl:342
 msgid "No revision selected."
 msgstr "Ingen revision vald."
 
-#: lib/choose_rev.tcl:346
+#: lib/choose_rev.tcl:350
 msgid "Revision expression is empty."
 msgstr "Revisionsuttrycket Ã¤r tomt."
 
-#: lib/choose_rev.tcl:531
+#: lib/choose_rev.tcl:536
 msgid "Updated"
 msgstr "Uppdaterad"
 
-#: lib/choose_rev.tcl:559
+#: lib/choose_rev.tcl:564
 msgid "URL"
 msgstr "Webbadress"
 
@@ -1508,31 +1508,31 @@ msgstr "Lyckades"
 msgid "Error: Command Failed"
 msgstr "Fel: Kommando misslyckades"
 
-#: lib/database.tcl:43
+#: lib/database.tcl:42
 msgid "Number of loose objects"
 msgstr "Antal lösa objekt"
 
-#: lib/database.tcl:44
+#: lib/database.tcl:43
 msgid "Disk space used by loose objects"
 msgstr "Diskutrymme använt av lösa objekt"
 
-#: lib/database.tcl:45
+#: lib/database.tcl:44
 msgid "Number of packed objects"
 msgstr "Antal packade objekt"
 
-#: lib/database.tcl:46
+#: lib/database.tcl:45
 msgid "Number of packs"
 msgstr "Antal paket"
 
-#: lib/database.tcl:47
+#: lib/database.tcl:46
 msgid "Disk space used by packed objects"
 msgstr "Diskutrymme använt av packade objekt"
 
-#: lib/database.tcl:48
+#: lib/database.tcl:47
 msgid "Packed objects waiting for pruning"
 msgstr "Packade objekt som väntar pÃ¥ städning"
 
-#: lib/database.tcl:49
+#: lib/database.tcl:48
 msgid "Garbage files"
 msgstr "Skräpfiler"
 
@@ -1618,7 +1618,7 @@ msgstr "LOKAL:\n"
 msgid "REMOTE:\n"
 msgstr "FJÄRR:\n"
 
-#: lib/diff.tcl:202 lib/diff.tcl:319
+#: lib/diff.tcl:202 lib/diff.tcl:322
 #, tcl-format
 msgid "Unable to display %s"
 msgstr "Kan inte visa %s"
@@ -1655,19 +1655,19 @@ 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:482
+#: lib/diff.tcl:485
 msgid "Failed to unstage selected hunk."
 msgstr "Kunde inte ta bort den valda delen frÃ¥n kön."
 
-#: lib/diff.tcl:489
+#: lib/diff.tcl:492
 msgid "Failed to stage selected hunk."
 msgstr "Kunde inte lägga till den valda delen till kön."
 
-#: lib/diff.tcl:568
+#: lib/diff.tcl:571
 msgid "Failed to unstage selected line."
 msgstr "Kunde inte ta bort den valda raden frÃ¥n kön."
 
-#: lib/diff.tcl:576
+#: lib/diff.tcl:579
 msgid "Failed to stage selected line."
 msgstr "Kunde inte lägga till den valda raden till kön."
 
@@ -1684,7 +1684,7 @@ msgstr "Systemets (%s)"
 msgid "Other"
 msgstr "Annan"
 
-#: lib/error.tcl:20 lib/error.tcl:114
+#: lib/error.tcl:20 lib/error.tcl:116
 msgid "error"
 msgstr "fel"
 
@@ -1692,7 +1692,7 @@ msgstr "fel"
 msgid "warning"
 msgstr "varning"
 
-#: lib/error.tcl:94
+#: 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."
 
@@ -1700,11 +1700,11 @@ msgstr "Du mÃ¥ste rätta till felen ovan innan du checkar in."
 msgid "Unable to unlock the index."
 msgstr "Kunde inte lÃ¥sa upp indexet."
 
-#: lib/index.tcl:15
+#: lib/index.tcl:17
 msgid "Index Error"
 msgstr "Indexfel"
 
-#: lib/index.tcl:17
+#: lib/index.tcl:19
 msgid ""
 "Updating the Git index failed.  A rescan will be automatically started to "
 "resynchronize git-gui."
@@ -1712,52 +1712,52 @@ msgstr ""
 "Misslyckades med att uppdatera Gitindexet. En omsökning kommer att startas "
 "automatiskt för att synkronisera om git-gui."
 
-#: lib/index.tcl:28
+#: lib/index.tcl:30
 msgid "Continue"
 msgstr "Forstätt"
 
-#: lib/index.tcl:31
+#: lib/index.tcl:33
 msgid "Unlock Index"
 msgstr "LÃ¥s upp index"
 
-#: lib/index.tcl:289
+#: lib/index.tcl:292
 #, tcl-format
 msgid "Unstaging %s from commit"
 msgstr "Tar bort %s för incheckningskön"
 
-#: lib/index.tcl:328
+#: lib/index.tcl:331
 msgid "Ready to commit."
 msgstr "Redo att checka in."
 
-#: lib/index.tcl:341
+#: lib/index.tcl:344
 #, tcl-format
 msgid "Adding %s"
 msgstr "Lägger till %s"
 
-#: lib/index.tcl:398
+#: lib/index.tcl:401
 #, tcl-format
 msgid "Revert changes in file %s?"
 msgstr "Ã…terställ Ã¤ndringarna i filen %s?"
 
-#: lib/index.tcl:400
+#: lib/index.tcl:403
 #, tcl-format
 msgid "Revert changes in these %i files?"
 msgstr "Ã…terställ Ã¤ndringarna i dessa %i filer?"
 
-#: lib/index.tcl:408
+#: lib/index.tcl:411
 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:411
+#: lib/index.tcl:414
 msgid "Do Nothing"
 msgstr "Gör ingenting"
 
-#: lib/index.tcl:429
+#: lib/index.tcl:432
 msgid "Reverting selected files"
 msgstr "Ã…terställer valda filer"
 
-#: lib/index.tcl:433
+#: lib/index.tcl:436
 #, tcl-format
 msgid "Reverting %s"
 msgstr "Ã…terställer %s"
@@ -2004,145 +2004,133 @@ msgstr "Den globala teckenkodningen \"%s\" Ã¤r ogiltig"
 msgid "Invalid repo encoding '%s'"
 msgstr "Arkivets teckenkodning \"%s\" Ã¤r ogiltig"
 
-#: lib/option.tcl:117
+#: lib/option.tcl:119
 msgid "Restore Defaults"
 msgstr "Ã…terställ standardvärden"
 
-#: lib/option.tcl:121
+#: lib/option.tcl:123
 msgid "Save"
 msgstr "Spara"
 
-#: lib/option.tcl:131
+#: lib/option.tcl:133
 #, tcl-format
 msgid "%s Repository"
 msgstr "Arkivet %s"
 
-#: lib/option.tcl:132
+#: lib/option.tcl:134
 msgid "Global (All Repositories)"
 msgstr "Globalt (alla arkiv)"
 
-#: lib/option.tcl:138
+#: lib/option.tcl:140
 msgid "User Name"
 msgstr "Användarnamn"
 
-#: lib/option.tcl:139
+#: lib/option.tcl:141
 msgid "Email Address"
 msgstr "E-postadress"
 
-#: lib/option.tcl:141
+#: lib/option.tcl:143
 msgid "Summarize Merge Commits"
 msgstr "Summera sammanslagningsincheckningar"
 
-#: lib/option.tcl:142
+#: lib/option.tcl:144
 msgid "Merge Verbosity"
 msgstr "Pratsamhet för sammanslagningar"
 
-#: lib/option.tcl:143
+#: lib/option.tcl:145
 msgid "Show Diffstat After Merge"
 msgstr "Visa diffstatistik efter sammanslagning"
 
-#: lib/option.tcl:144
+#: lib/option.tcl:146
 msgid "Use Merge Tool"
 msgstr "Använd verktyg för sammanslagning"
 
-#: lib/option.tcl:146
+#: lib/option.tcl:148
 msgid "Trust File Modification Timestamps"
 msgstr "Lita pÃ¥ filändringstidsstämplar"
 
-#: lib/option.tcl:147
+#: lib/option.tcl:149
 msgid "Prune Tracking Branches During Fetch"
 msgstr "Städa spÃ¥rade grenar vid hämtning"
 
-#: lib/option.tcl:148
+#: lib/option.tcl:150
 msgid "Match Tracking Branches"
 msgstr "Matcha spÃ¥rade grenar"
 
-#: lib/option.tcl:149
+#: lib/option.tcl:151
+msgid "Use Textconv For Diffs and Blames"
+msgstr "Använd Textconv för diff och klandring"
+
+#: lib/option.tcl:152
 msgid "Blame Copy Only On Changed Files"
 msgstr "Klandra kopiering bara i Ã¤ndrade filer"
 
-#: lib/option.tcl:150
+#: lib/option.tcl:153
 msgid "Minimum Letters To Blame Copy On"
 msgstr "Minsta antal tecken att klandra kopiering för"
 
-#: lib/option.tcl:151
+#: lib/option.tcl:154
 msgid "Blame History Context Radius (days)"
 msgstr "Historikradie för klandring (dagar)"
 
-#: lib/option.tcl:152
+#: lib/option.tcl:155
 msgid "Number of Diff Context Lines"
 msgstr "Antal rader sammanhang i differenser"
 
-#: lib/option.tcl:153
+#: lib/option.tcl:156
 msgid "Commit Message Text Width"
 msgstr "Textbredd för incheckningsmeddelande"
 
-#: lib/option.tcl:154
+#: lib/option.tcl:157
 msgid "New Branch Name Template"
 msgstr "Mall för namn pÃ¥ nya grenar"
 
-#: lib/option.tcl:155
+#: lib/option.tcl:158
 msgid "Default File Contents Encoding"
 msgstr "Standardteckenkodning för filinnehÃ¥ll"
 
-#: lib/option.tcl:203
+#: lib/option.tcl:204
 msgid "Change"
 msgstr "Ändra"
 
-#: lib/option.tcl:230
+#: lib/option.tcl:231
 msgid "Spelling Dictionary:"
 msgstr "Stavningsordlista:"
 
-#: lib/option.tcl:254
+#: lib/option.tcl:261
 msgid "Change Font"
 msgstr "Byt teckensnitt"
 
-#: lib/option.tcl:258
+#: lib/option.tcl:265
 #, tcl-format
 msgid "Choose %s"
 msgstr "Välj %s"
 
-#: lib/option.tcl:264
+#: lib/option.tcl:271
 msgid "pt."
 msgstr "p."
 
-#: lib/option.tcl:278
+#: lib/option.tcl:285
 msgid "Preferences"
 msgstr "Inställningar"
 
-#: lib/option.tcl:314
+#: lib/option.tcl:322
 msgid "Failed to completely save options:"
 msgstr "Misslyckades med att helt spara alternativ:"
 
-#: lib/remote.tcl:163
-msgid "Remove Remote"
-msgstr "Ta bort fjärrarkiv"
-
-#: lib/remote.tcl:168
-msgid "Prune from"
-msgstr "Ta bort frÃ¥n"
-
-#: lib/remote.tcl:173
-msgid "Fetch from"
-msgstr "Hämta frÃ¥n"
-
-#: lib/remote.tcl:215
-msgid "Push to"
-msgstr "Sänd till"
-
-#: lib/remote_add.tcl:19
+#: lib/remote_add.tcl:20
 msgid "Add Remote"
 msgstr "Lägg till fjärrarkiv"
 
-#: lib/remote_add.tcl:24
+#: lib/remote_add.tcl:25
 msgid "Add New Remote"
 msgstr "Lägg till nytt fjärrarkiv"
 
-#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36
+#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37
 msgid "Add"
 msgstr "Lägg till"
 
-#: lib/remote_add.tcl:37
+#: lib/remote_add.tcl:39
 msgid "Remote Details"
 msgstr "Detaljer för fjärrarkiv"
 
@@ -2150,58 +2138,58 @@ msgstr "Detaljer för fjärrarkiv"
 msgid "Location:"
 msgstr "Plats:"
 
-#: lib/remote_add.tcl:62
+#: lib/remote_add.tcl:60
 msgid "Further Action"
 msgstr "Ytterligare Ã¥tgärd"
 
-#: lib/remote_add.tcl:65
+#: lib/remote_add.tcl:63
 msgid "Fetch Immediately"
 msgstr "Hämta omedelbart"
 
-#: lib/remote_add.tcl:71
+#: lib/remote_add.tcl:69
 msgid "Initialize Remote Repository and Push"
 msgstr "Initiera fjärrarkiv och sänd till"
 
-#: lib/remote_add.tcl:77
+#: lib/remote_add.tcl:75
 msgid "Do Nothing Else Now"
 msgstr "Gör ingent mer nu"
 
-#: lib/remote_add.tcl:101
+#: lib/remote_add.tcl:100
 msgid "Please supply a remote name."
 msgstr "Ange ett namn för fjärrarkivet."
 
-#: lib/remote_add.tcl:114
+#: 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/remote_add.tcl:125
+#: 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/remote_add.tcl:133 lib/transport.tcl:6
+#: lib/remote_add.tcl:132 lib/transport.tcl:6
 #, tcl-format
 msgid "fetch %s"
 msgstr "hämta %s"
 
-#: lib/remote_add.tcl:134
+#: lib/remote_add.tcl:133
 #, tcl-format
 msgid "Fetching the %s"
 msgstr "Hämtar %s"
 
-#: lib/remote_add.tcl:157
+#: lib/remote_add.tcl:156
 #, tcl-format
 msgid "Do not know how to initialize repository at location '%s'."
 msgstr "Vet inte hur arkivet pÃ¥ platsen \"%s\" skall initieras."
 
-#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63
+#: lib/remote_add.tcl:162 lib/transport.tcl:25 lib/transport.tcl:63
 #: lib/transport.tcl:81
 #, tcl-format
 msgid "push %s"
 msgstr "sänd %s"
 
-#: lib/remote_add.tcl:164
+#: lib/remote_add.tcl:163
 #, tcl-format
 msgid "Setting up the %s (at %s)"
 msgstr "Konfigurerar %s (pÃ¥ %s)"
@@ -2210,35 +2198,35 @@ msgstr "Konfigurerar %s (pÃ¥ %s)"
 msgid "Delete Branch Remotely"
 msgstr "Ta bort gren frÃ¥n fjärrarkiv"
 
-#: lib/remote_branch_delete.tcl:47
+#: lib/remote_branch_delete.tcl:48
 msgid "From Repository"
 msgstr "FrÃ¥n arkiv"
 
-#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134
+#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:134
 msgid "Remote:"
 msgstr "Fjärrarkiv:"
 
-#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149
+#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:154
 msgid "Arbitrary Location:"
 msgstr "Godtycklig plats:"
 
-#: lib/remote_branch_delete.tcl:84
+#: lib/remote_branch_delete.tcl:88
 msgid "Branches"
 msgstr "Grenar"
 
-#: lib/remote_branch_delete.tcl:109
+#: lib/remote_branch_delete.tcl:110
 msgid "Delete Only If"
 msgstr "Ta endast bort om"
 
-#: lib/remote_branch_delete.tcl:111
+#: lib/remote_branch_delete.tcl:112
 msgid "Merged Into:"
 msgstr "Sammanslagen i:"
 
-#: lib/remote_branch_delete.tcl:152
+#: lib/remote_branch_delete.tcl:153
 msgid "A branch is required for 'Merged Into'."
 msgstr "En gren krävs för \"Sammanslagen i\"."
 
-#: lib/remote_branch_delete.tcl:184
+#: lib/remote_branch_delete.tcl:185
 #, tcl-format
 msgid ""
 "The following branches are not completely merged into %s:\n"
@@ -2249,7 +2237,7 @@ msgstr ""
 "\n"
 " - %s"
 
-#: lib/remote_branch_delete.tcl:189
+#: lib/remote_branch_delete.tcl:190
 #, tcl-format
 msgid ""
 "One or more of the merge tests failed because you have not fetched the "
@@ -2258,37 +2246,53 @@ 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:207
+#: 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/remote_branch_delete.tcl:226
+#: lib/remote_branch_delete.tcl:227
 #, tcl-format
 msgid "Deleting branches from %s"
 msgstr "Tar bort grenar frÃ¥n %s"
 
-#: lib/remote_branch_delete.tcl:292
+#: lib/remote_branch_delete.tcl:293
 msgid "No repository selected."
 msgstr "Inget arkiv markerat."
 
-#: lib/remote_branch_delete.tcl:297
+#: lib/remote_branch_delete.tcl:298
 #, tcl-format
 msgid "Scanning %s..."
 msgstr "Söker %s..."
 
-#: lib/search.tcl:21
+#: lib/remote.tcl:163
+msgid "Remove Remote"
+msgstr "Ta bort fjärrarkiv"
+
+#: lib/remote.tcl:168
+msgid "Prune from"
+msgstr "Ta bort frÃ¥n"
+
+#: lib/remote.tcl:173
+msgid "Fetch from"
+msgstr "Hämta frÃ¥n"
+
+#: lib/remote.tcl:215
+msgid "Push to"
+msgstr "Sänd till"
+
+#: lib/search.tcl:22
 msgid "Find:"
 msgstr "Sök:"
 
-#: lib/search.tcl:23
+#: lib/search.tcl:24
 msgid "Next"
 msgstr "Nästa"
 
-#: lib/search.tcl:24
+#: lib/search.tcl:25
 msgid "Prev"
 msgstr "Föreg"
 
-#: lib/search.tcl:25
+#: lib/search.tcl:26
 msgid "Case-Sensitive"
 msgstr "Skilj pÃ¥ VERSALER/gemener"
 
@@ -2350,19 +2354,19 @@ msgstr "Hittade Ã¶ppen nyckel i: %s"
 msgid "Generate Key"
 msgstr "Skapa nyckel"
 
-#: lib/sshkey.tcl:56
+#: lib/sshkey.tcl:58
 msgid "Copy To Clipboard"
 msgstr "Kopiera till Urklipp"
 
-#: lib/sshkey.tcl:70
+#: lib/sshkey.tcl:72
 msgid "Your OpenSSH Public Key"
 msgstr "Din Ã¶ppna OpenSSH-nyckel"
 
-#: lib/sshkey.tcl:78
+#: lib/sshkey.tcl:80
 msgid "Generating..."
 msgstr "Skapar..."
 
-#: lib/sshkey.tcl:84
+#: lib/sshkey.tcl:86
 #, tcl-format
 msgid ""
 "Could not start ssh-keygen:\n"
@@ -2373,54 +2377,24 @@ msgstr ""
 "\n"
 "%s"
 
-#: lib/sshkey.tcl:111
+#: lib/sshkey.tcl:113
 msgid "Generation failed."
 msgstr "Misslyckades med att skapa."
 
-#: lib/sshkey.tcl:118
+#: lib/sshkey.tcl:120
 msgid "Generation succeded, but no keys found."
 msgstr "Lyckades skapa nyckeln, men hittar inte nÃ¥gon nyckel."
 
-#: lib/sshkey.tcl:121
+#: lib/sshkey.tcl:123
 #, tcl-format
 msgid "Your key is in: %s"
 msgstr "Din nyckel finns i: %s"
 
-#: lib/status_bar.tcl:83
+#: lib/status_bar.tcl:86
 #, tcl-format
 msgid "%s ... %*i of %*i %s (%3i%%)"
 msgstr "%s... %*i av %*i %s (%3i%%)"
 
-#: 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/tools.tcl:90
-#, tcl-format
-msgid "Are you sure you want to run %s?"
-msgstr "Är du säker pÃ¥ att du vill starta %s?"
-
-#: lib/tools.tcl:110
-#, tcl-format
-msgid "Tool: %s"
-msgstr "Verktyg: %s"
-
-#: lib/tools.tcl:111
-#, tcl-format
-msgid "Running: %s"
-msgstr "Exekverar: %s"
-
-#: lib/tools.tcl:149
-#, tcl-format
-msgid "Tool completed successfully: %s"
-msgstr "Verktyget avslutades framgÃ¥ngsrikt: %s"
-
-#: lib/tools.tcl:151
-#, tcl-format
-msgid "Tool failed: %s"
-msgstr "Verktyget misslyckades: %s"
-
 #: lib/tools_dlg.tcl:22
 msgid "Add Tool"
 msgstr "Lägg till verktyg"
@@ -2429,52 +2403,52 @@ msgstr "Lägg till verktyg"
 msgid "Add New Tool Command"
 msgstr "Lägg till nytt verktygskommando"
 
-#: lib/tools_dlg.tcl:33
+#: lib/tools_dlg.tcl:34
 msgid "Add globally"
 msgstr "Lägg till globalt"
 
-#: lib/tools_dlg.tcl:45
+#: lib/tools_dlg.tcl:46
 msgid "Tool Details"
 msgstr "Detaljer för verktyg"
 
-#: lib/tools_dlg.tcl:48
+#: 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:61
+#: lib/tools_dlg.tcl:60
 msgid "Command:"
 msgstr "Kommando:"
 
-#: lib/tools_dlg.tcl:74
+#: lib/tools_dlg.tcl:71
 msgid "Show a dialog before running"
 msgstr "Visa dialog innan programmet startas"
 
-#: lib/tools_dlg.tcl:80
+#: 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:85
+#: 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:92
+#: lib/tools_dlg.tcl:89
 msgid "Don't show the command output window"
 msgstr "Visa inte kommandots utdatafönster"
 
-#: lib/tools_dlg.tcl:97
+#: 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:121
+#: lib/tools_dlg.tcl:118
 msgid "Please supply a name for the tool."
 msgstr "Ange ett namn för verktyget."
 
-#: lib/tools_dlg.tcl:129
+#: lib/tools_dlg.tcl:126
 #, tcl-format
 msgid "Tool '%s' already exists."
 msgstr "Verktyget \"%s\" finns redan."
 
-#: lib/tools_dlg.tcl:151
+#: lib/tools_dlg.tcl:148
 #, tcl-format
 msgid ""
 "Could not add tool:\n"
@@ -2483,35 +2457,65 @@ msgstr ""
 "Kunde inte lägga till verktyget:\n"
 "%s"
 
-#: lib/tools_dlg.tcl:190
+#: lib/tools_dlg.tcl:187
 msgid "Remove Tool"
 msgstr "Ta bort verktyg"
 
-#: lib/tools_dlg.tcl:196
+#: lib/tools_dlg.tcl:193
 msgid "Remove Tool Commands"
 msgstr "Ta bort verktygskommandon"
 
-#: lib/tools_dlg.tcl:200
+#: lib/tools_dlg.tcl:198
 msgid "Remove"
 msgstr "Ta bort"
 
-#: lib/tools_dlg.tcl:236
+#: lib/tools_dlg.tcl:231
 msgid "(Blue denotes repository-local tools)"
 msgstr "(BlÃ¥tt anger verktyg lokala för arkivet)"
 
-#: lib/tools_dlg.tcl:297
+#: lib/tools_dlg.tcl:292
 #, tcl-format
 msgid "Run Command: %s"
 msgstr "Kör kommandot: %s"
 
-#: lib/tools_dlg.tcl:311
+#: lib/tools_dlg.tcl:306
 msgid "Arguments"
 msgstr "Argument"
 
-#: lib/tools_dlg.tcl:348
+#: lib/tools_dlg.tcl:341
 msgid "OK"
 msgstr "OK"
 
+#: 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/tools.tcl:90
+#, tcl-format
+msgid "Are you sure you want to run %s?"
+msgstr "Är du säker pÃ¥ att du vill starta %s?"
+
+#: lib/tools.tcl:110
+#, tcl-format
+msgid "Tool: %s"
+msgstr "Verktyg: %s"
+
+#: lib/tools.tcl:111
+#, tcl-format
+msgid "Running: %s"
+msgstr "Exekverar: %s"
+
+#: lib/tools.tcl:149
+#, tcl-format
+msgid "Tool completed successfully: %s"
+msgstr "Verktyget avslutades framgÃ¥ngsrikt: %s"
+
+#: lib/tools.tcl:151
+#, tcl-format
+msgid "Tool failed: %s"
+msgstr "Verktyget misslyckades: %s"
+
 #: lib/transport.tcl:7
 #, tcl-format
 msgid "Fetching new changes from %s"
@@ -2542,11 +2546,11 @@ msgstr "Speglar till %s"
 msgid "Pushing %s %s to %s"
 msgstr "Sänder %s %s till %s"
 
-#: lib/transport.tcl:100
+#: lib/transport.tcl:102
 msgid "Push Branches"
 msgstr "Sänd grenar"
 
-#: lib/transport.tcl:114
+#: lib/transport.tcl:117
 msgid "Source Branches"
 msgstr "Källgrenar"
 
@@ -2554,19 +2558,19 @@ msgstr "Källgrenar"
 msgid "Destination Repository"
 msgstr "Destinationsarkiv"
 
-#: lib/transport.tcl:169
+#: lib/transport.tcl:172
 msgid "Transfer Options"
 msgstr "Överföringsalternativ"
 
-#: lib/transport.tcl:171
+#: lib/transport.tcl:174
 msgid "Force overwrite existing branch (may discard changes)"
 msgstr "Tvinga Ã¶verskrivning av befintlig gren (kan kasta bort Ã¤ndringar)"
 
-#: lib/transport.tcl:175
+#: lib/transport.tcl:178
 msgid "Use thin pack (for slow network connections)"
 msgstr "Använd tunt paket (för lÃ¥ngsamma nätverksanslutningar)"
 
-#: lib/transport.tcl:179
+#: lib/transport.tcl:182
 msgid "Include tags"
 msgstr "Ta med taggar"
 
index 7508463b30e7d1659ac9423a19d195e494600bd3..3335cee70b8ea5510f109da83d8470d3bbabab52 100755 (executable)
@@ -566,6 +566,7 @@ fi
 if test -z "$do_merge"
 then
        git format-patch -k --stdout --full-index --ignore-if-in-upstream \
+               --src-prefix=a/ --dst-prefix=b/ \
                --no-renames $root_flag "$revisions" |
        git am $git_am_opt --rebasing --resolvemsg="$RESOLVEMSG" &&
        move_to_original_branch
index 20e1779428ee553a940592c09bbabe9ca9800a39..c5746988196b8139ca3234f8b30d03af56d33324 100644 (file)
@@ -955,6 +955,12 @@ static int process_renames(struct merge_options *o,
                                                        ren1->pair->two : NULL,
                                                        branch1 == o->branch1 ?
                                                        NULL : ren1->pair->two, 1);
+                       } else if ((dst_other.mode == ren1->pair->two->mode) &&
+                                  sha_eq(dst_other.sha1, ren1->pair->two->sha1)) {
+                               /* Added file on the other side
+                                  identical to the file being
+                                  renamed: clean merge */
+                               update_file(o, 1, ren1->pair->two->sha1, ren1->pair->two->mode, ren1_dst);
                        } else if (!sha_eq(dst_other.sha1, null_sha1)) {
                                const char *new_path;
                                clean_merge = 0;
index 56874996a6df278202c0bc476abec4bca3ce99c5..a3ac33801a28fe7bd2ce67d4d4ae306c1050f5c1 100755 (executable)
@@ -16,24 +16,23 @@ test_expect_success setup '
        cp one original.one &&
        cp dir/two original.two
 '
-HERE=`pwd`
 LF='
 '
 
 test_expect_success 'update-index and ls-files' '
-       cd "$HERE" &&
        git update-index --add one &&
        case "`git ls-files`" in
        one) echo pass one ;;
        *) echo bad one; exit 1 ;;
        esac &&
-       cd dir &&
-       git update-index --add two &&
-       case "`git ls-files`" in
-       two) echo pass two ;;
-       *) echo bad two; exit 1 ;;
-       esac &&
-       cd .. &&
+       (
+               cd dir &&
+               git update-index --add two &&
+               case "`git ls-files`" in
+               two) echo pass two ;;
+               *) echo bad two; exit 1 ;;
+               esac
+       ) &&
        case "`git ls-files`" in
        dir/two"$LF"one) echo pass both ;;
        *) echo bad; exit 1 ;;
@@ -41,20 +40,20 @@ test_expect_success 'update-index and ls-files' '
 '
 
 test_expect_success 'cat-file' '
-       cd "$HERE" &&
        two=`git ls-files -s dir/two` &&
        two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` &&
        echo "$two" &&
        git cat-file -p "$two" >actual &&
        cmp dir/two actual &&
-       cd dir &&
-       git cat-file -p "$two" >actual &&
-       cmp two actual
+       (
+               cd dir &&
+               git cat-file -p "$two" >actual &&
+               cmp two actual
+       )
 '
 rm -f actual dir/actual
 
 test_expect_success 'diff-files' '
-       cd "$HERE" &&
        echo a >>one &&
        echo d >>dir/two &&
        case "`git diff-files --name-only`" in
@@ -62,77 +61,88 @@ test_expect_success 'diff-files' '
        *) echo bad top; exit 1 ;;
        esac &&
        # diff should not omit leading paths
-       cd dir &&
-       case "`git diff-files --name-only`" in
-       dir/two"$LF"one) echo pass subdir ;;
-       *) echo bad subdir; exit 1 ;;
-       esac &&
-       case "`git diff-files --name-only .`" in
-       dir/two) echo pass subdir limited ;;
-       *) echo bad subdir limited; exit 1 ;;
-       esac
+       (
+               cd dir &&
+               case "`git diff-files --name-only`" in
+               dir/two"$LF"one) echo pass subdir ;;
+               *) echo bad subdir; exit 1 ;;
+               esac &&
+               case "`git diff-files --name-only .`" in
+               dir/two) echo pass subdir limited ;;
+               *) echo bad subdir limited; exit 1 ;;
+               esac
+       )
 '
 
 test_expect_success 'write-tree' '
-       cd "$HERE" &&
        top=`git write-tree` &&
        echo $top &&
-       cd dir &&
-       sub=`git write-tree` &&
-       echo $sub &&
-       test "z$top" = "z$sub"
+       (
+               cd dir &&
+               sub=`git write-tree` &&
+               echo $sub &&
+               test "z$top" = "z$sub"
+       )
 '
 
 test_expect_success 'checkout-index' '
-       cd "$HERE" &&
        git checkout-index -f -u one &&
        cmp one original.one &&
-       cd dir &&
-       git checkout-index -f -u two &&
-       cmp two ../original.two
+       (
+               cd dir &&
+               git checkout-index -f -u two &&
+               cmp two ../original.two
+       )
 '
 
 test_expect_success 'read-tree' '
-       cd "$HERE" &&
        rm -f one dir/two &&
        tree=`git write-tree` &&
        git read-tree --reset -u "$tree" &&
        cmp one original.one &&
        cmp dir/two original.two &&
-       cd dir &&
-       rm -f two &&
-       git read-tree --reset -u "$tree" &&
-       cmp two ../original.two &&
-       cmp ../one ../original.one
+       (
+               cd dir &&
+               rm -f two &&
+               git read-tree --reset -u "$tree" &&
+               cmp two ../original.two &&
+               cmp ../one ../original.one
+       )
 '
 
 test_expect_success 'no file/rev ambiguity check inside .git' '
-       cd "$HERE" &&
        git commit -a -m 1 &&
-       cd "$HERE"/.git &&
-       git show -s HEAD
+       (
+               cd .git &&
+               git show -s HEAD
+       )
 '
 
 test_expect_success 'no file/rev ambiguity check inside a bare repo' '
-       cd "$HERE" &&
        git clone -s --bare .git foo.git &&
-       cd foo.git && GIT_DIR=. git show -s HEAD
+       (
+               cd foo.git &&
+               GIT_DIR=. git show -s HEAD
+       )
 '
 
 # This still does not work as it should...
 : test_expect_success 'no file/rev ambiguity check inside a bare repo' '
-       cd "$HERE" &&
        git clone -s --bare .git foo.git &&
-       cd foo.git && git show -s HEAD
+       (
+               cd foo.git &&
+               git show -s HEAD
+       )
 '
 
 test_expect_success SYMLINKS 'detection should not be fooled by a symlink' '
-       cd "$HERE" &&
        rm -fr foo.git &&
        git clone -s .git another &&
        ln -s another yetanother &&
-       cd yetanother/.git &&
-       git show -s HEAD
+       (
+               cd yetanother/.git &&
+               git show -s HEAD
+       )
 '
 
 test_done
index 8d305b43725f8cf60e7ee802df1923feb98eeae5..a6bf1bf4d6182f0883ea858e28aa8a9b3dd79024 100755 (executable)
@@ -7,41 +7,64 @@ test_description='Test repository version check'
 
 . ./test-lib.sh
 
-cat >test.patch <<EOF
-diff --git a/test.txt b/test.txt
-new file mode 100644
---- /dev/null
-+++ b/test.txt
-@@ -0,0 +1 @@
-+123
-EOF
+test_expect_success 'setup' '
+       cat >test.patch <<-\EOF &&
+       diff --git a/test.txt b/test.txt
+       new file mode 100644
+       --- /dev/null
+       +++ b/test.txt
+       @@ -0,0 +1 @@
+       +123
+       EOF
 
-test_create_repo "test"
-test_create_repo "test2"
-
-GIT_CONFIG=test2/.git/config git config core.repositoryformatversion 99 || exit 1
+       test_create_repo "test" &&
+       test_create_repo "test2" &&
+       GIT_CONFIG=test2/.git/config git config core.repositoryformatversion 99
+'
 
 test_expect_success 'gitdir selection on normal repos' '
-       (test "$(git config core.repositoryformatversion)" = 0 &&
-       cd test &&
-       test "$(git config core.repositoryformatversion)" = 0)'
+       echo 0 >expect &&
+       git config core.repositoryformatversion >actual &&
+       (
+               cd test &&
+               git config core.repositoryformatversion >../actual2
+       ) &&
+       test_cmp expect actual &&
+       test_cmp expect actual2
+'
 
-# Make sure it would stop at test2, not trash
 test_expect_success 'gitdir selection on unsupported repo' '
-       (cd test2 &&
-       test "$(git config core.repositoryformatversion)" = 99)'
+       # Make sure it would stop at test2, not trash
+       echo 99 >expect &&
+       (
+               cd test2 &&
+               git config core.repositoryformatversion >../actual
+       )
+       test_cmp expect actual
+'
 
 test_expect_success 'gitdir not required mode' '
-       (git apply --stat test.patch &&
-       cd test && git apply --stat ../test.patch &&
-       cd ../test2 && git apply --stat ../test.patch)'
-
-test_expect_success 'gitdir required mode on normal repos' '
-       (git apply --check --index test.patch &&
-       cd test && git apply --check --index ../test.patch)'
+       git apply --stat test.patch &&
+       (
+               cd test &&
+               git apply --stat ../test.patch
+       ) &&
+       (
+               cd test2 &&
+               git apply --stat ../test.patch
+       )
+'
 
-test_expect_success 'gitdir required mode on unsupported repo' '
-       (cd test2 && test_must_fail git apply --check --index ../test.patch)
+test_expect_success 'gitdir required mode' '
+       git apply --check --index test.patch &&
+       (
+               cd test &&
+               git apply --check --index ../test.patch
+       ) &&
+       (
+               cd test2 &&
+               test_must_fail git apply --check --index ../test.patch
+       )
 '
 
 test_done
index 759cf12e16bcddc3dab9d6b3ad8abd5590245a94..1be415e334330b2fea398cc58a0f054b6b876da1 100755 (executable)
@@ -1,21 +1,23 @@
 #!/bin/sh
 
-test_description='git fsck random collection of tests'
+test_description='git fsck random collection of tests
+
+* (HEAD) B
+* (master) A
+'
 
 . ./test-lib.sh
 
 test_expect_success setup '
+       git config gc.auto 0 &&
        git config i18n.commitencoding ISO-8859-1 &&
        test_commit A fileA one &&
        git config --unset i18n.commitencoding &&
        git checkout HEAD^0 &&
        test_commit B fileB two &&
        git tag -d A B &&
-       git reflog expire --expire=now --all
-'
-
-test_expect_success 'HEAD is part of refs' '
-       test 0 = $(git fsck | wc -l)
+       git reflog expire --expire=now --all &&
+       >empty
 '
 
 test_expect_success 'loose objects borrowed from alternate are not missing' '
@@ -25,110 +27,132 @@ test_expect_success 'loose objects borrowed from alternate are not missing' '
                git init &&
                echo ../../../.git/objects >.git/objects/info/alternates &&
                test_commit C fileC one &&
-               git fsck >out &&
-               ! grep "missing blob" out
-       )
+               git fsck >../out 2>&1
+       ) &&
+       {
+               grep -v dangling out >actual ||
+               :
+       } &&
+       test_cmp empty actual
 '
 
-test_expect_success 'valid objects appear valid' '
-       { git fsck 2>out; true; } &&
-       ! grep error out &&
-       ! grep fatal out
+test_expect_success 'HEAD is part of refs, valid objects appear valid' '
+       git fsck >actual 2>&1 &&
+       test_cmp empty actual
 '
 
 # Corruption tests follow.  Make sure to remove all traces of the
 # specific corruption you test afterwards, lest a later test trip over
 # it.
 
+test_expect_success 'setup: helpers for corruption tests' '
+       sha1_file() {
+               echo "$*" | sed "s#..#.git/objects/&/#"
+       } &&
+
+       remove_object() {
+               file=$(sha1_file "$*") &&
+               test -e "$file" &&
+               rm -f "$file"
+       }
+'
+
 test_expect_success 'object with bad sha1' '
        sha=$(echo blob | git hash-object -w --stdin) &&
-       echo $sha &&
        old=$(echo $sha | sed "s+^..+&/+") &&
        new=$(dirname $old)/ffffffffffffffffffffffffffffffffffffff &&
        sha="$(dirname $new)$(basename $new)"
        mv .git/objects/$old .git/objects/$new &&
+       test_when_finished "remove_object $sha" &&
        git update-index --add --cacheinfo 100644 $sha foo &&
+       test_when_finished "git read-tree -u --reset HEAD" &&
        tree=$(git write-tree) &&
+       test_when_finished "remove_object $tree" &&
        cmt=$(echo bogus | git commit-tree $tree) &&
+       test_when_finished "remove_object $cmt" &&
        git update-ref refs/heads/bogus $cmt &&
-       (git fsck 2>out; true) &&
-       grep "$sha.*corrupt" out &&
-       rm -f .git/objects/$new &&
-       git update-ref -d refs/heads/bogus &&
-       git read-tree -u --reset HEAD
+       test_when_finished "git update-ref -d refs/heads/bogus" &&
+
+       test_might_fail git fsck 2>out &&
+       cat out &&
+       grep "$sha.*corrupt" out
 '
 
 test_expect_success 'branch pointing to non-commit' '
-       git rev-parse HEAD^{tree} > .git/refs/heads/invalid &&
+       git rev-parse HEAD^{tree} >.git/refs/heads/invalid &&
+       test_when_finished "git update-ref -d refs/heads/invalid" &&
        git fsck 2>out &&
-       grep "not a commit" out &&
-       git update-ref -d refs/heads/invalid
+       cat out &&
+       grep "not a commit" out
 '
 
-new=nothing
 test_expect_success 'email without @ is okay' '
        git cat-file commit HEAD >basis &&
        sed "s/@/AT/" basis >okay &&
        new=$(git hash-object -t commit -w --stdin <okay) &&
-       echo "$new" &&
+       test_when_finished "remove_object $new" &&
        git update-ref refs/heads/bogus "$new" &&
+       test_when_finished "git update-ref -d refs/heads/bogus" &&
        git fsck 2>out &&
        cat out &&
-       ! grep "error in commit $new" out
+       ! grep "commit $new" out
 '
-git update-ref -d refs/heads/bogus
-rm -f ".git/objects/$new"
 
-new=nothing
 test_expect_success 'email with embedded > is not okay' '
        git cat-file commit HEAD >basis &&
        sed "s/@[a-z]/&>/" basis >bad-email &&
        new=$(git hash-object -t commit -w --stdin <bad-email) &&
-       echo "$new" &&
+       test_when_finished "remove_object $new" &&
        git update-ref refs/heads/bogus "$new" &&
+       test_when_finished "git update-ref -d refs/heads/bogus" &&
        git fsck 2>out &&
        cat out &&
        grep "error in commit $new" out
 '
-git update-ref -d refs/heads/bogus
-rm -f ".git/objects/$new"
-
-cat > invalid-tag <<EOF
-object ffffffffffffffffffffffffffffffffffffffff
-type commit
-tag invalid
-tagger T A Gger <tagger@example.com> 1234567890 -0000
-
-This is an invalid tag.
-EOF
 
 test_expect_success 'tag pointing to nonexistent' '
-       tag=$(git hash-object -t tag -w --stdin < invalid-tag) &&
-       echo $tag > .git/refs/tags/invalid &&
+       cat >invalid-tag <<-\EOF
+       object ffffffffffffffffffffffffffffffffffffffff
+       type commit
+       tag invalid
+       tagger T A Gger <tagger@example.com> 1234567890 -0000
+
+       This is an invalid tag.
+       EOF
+
+       tag=$(git hash-object -t tag -w --stdin <invalid-tag) &&
+       test_when_finished "remove_object $tag" &&
+       echo $tag >.git/refs/tags/invalid &&
+       test_when_finished "git update-ref -d refs/tags/invalid" &&
        test_must_fail git fsck --tags >out &&
        cat out &&
-       grep "broken link" out &&
-       rm .git/refs/tags/invalid
+       grep "broken link" out
 '
 
-cat > wrong-tag <<EOF
-object $(echo blob | git hash-object -w --stdin)
-type commit
-tag wrong
-tagger T A Gger <tagger@example.com> 1234567890 -0000
-
-This is an invalid tag.
-EOF
-
 test_expect_success 'tag pointing to something else than its type' '
-       tag=$(git hash-object -t tag -w --stdin < wrong-tag) &&
-       echo $tag > .git/refs/tags/wrong &&
+       sha=$(echo blob | git hash-object -w --stdin) &&
+       test_when_finished "remove_object $sha" &&
+       cat >wrong-tag <<-EOF &&
+       object $sha
+       type commit
+       tag wrong
+       tagger T A Gger <tagger@example.com> 1234567890 -0000
+
+       This is an invalid tag.
+       EOF
+
+       tag=$(git hash-object -t tag -w --stdin <wrong-tag) &&
+       test_when_finished "remove_object $tag" &&
+       echo $tag >.git/refs/tags/wrong &&
+       test_when_finished "git update-ref -d refs/tags/wrong" &&
        test_must_fail git fsck --tags 2>out &&
        cat out &&
-       grep "error in tag.*broken links" out &&
-       rm .git/refs/tags/wrong
+       grep "error in tag.*broken links" out
 '
 
-
+test_expect_success 'cleaned up' '
+       git fsck >actual 2>&1 &&
+       test_cmp empty actual
+'
 
 test_done
index 7657ec190c2620b1eda03522c0f392a2c6f78f5a..a463b13b27fec87e0f4adb1154fea26b0eee73d9 100755 (executable)
@@ -52,7 +52,7 @@ test_expect_success PERL 'git checkout -p HEAD with NO staged changes: apply' '
 '
 
 test_expect_success PERL 'git checkout -p HEAD with change already staged' '
-       set_state dir/foo index index
+       set_state dir/foo index index &&
        # the third n is to get out in case it mistakenly does not apply
        (echo n; echo y; echo n) | git checkout -p HEAD &&
        verify_saved_state bar &&
index 648184fd983512be57b46fb5903b42e4de5e4704..76ad7c344c0546603fb198a9ffb907d6142cbe84 100755 (executable)
@@ -63,10 +63,10 @@ cat > expected <<\EOF
 EOF
 test_expect_success 'update-index --update from subdir' \
        'echo not so happy >file2 &&
-       cd dir1 &&
+       (cd dir1 &&
        cat ../file2 >file3 &&
-       git update-index --again &&
-       cd .. &&
+       git update-index --again
+       ) &&
        git ls-files -s >current &&
        cmp current expected'
 
index 641607d89ae400f5fbce9dba0f42ee185d3ecd6a..a7f3d47aec2591f9da19ce24b2796005ddf87096 100755 (executable)
@@ -13,7 +13,7 @@ test_expect_success 'submodule with absolute .git file' '
        (cd sub1 &&
         git init &&
         REAL="$(pwd)/.real" &&
-        mv .git "$REAL"
+        mv .git "$REAL" &&
         echo "gitdir: $REAL" >.git &&
         test_commit first)
 '
index efe2900a372601848248de33188bda292185ba40..e66e550b2449e76435a0bf16c6a9889c0794f858 100755 (executable)
@@ -23,6 +23,8 @@ test_expect_success 'setup 1' '
        git branch df-3 &&
        git branch remove &&
        git branch submod &&
+       git branch copy &&
+       git branch rename &&
 
        echo hello >>a &&
        cp a d/e &&
@@ -248,6 +250,22 @@ test_expect_success 'setup 7' '
        git commit -m "make d/ a submodule"
 '
 
+test_expect_success 'setup 8' '
+       git checkout rename &&
+       git mv a e &&
+       git add e &&
+       test_tick &&
+       git commit -m "rename a->e"
+'
+
+test_expect_success 'setup 9' '
+       git checkout copy &&
+       cp a e &&
+       git add e &&
+       test_tick &&
+       git commit -m "copy a->e"
+'
+
 test_expect_success 'merge-recursive simple' '
 
        rm -fr [abcd] &&
@@ -580,4 +598,21 @@ test_expect_failure 'merge-recursive simple w/submodule result' '
        test_cmp expected actual
 '
 
+test_expect_success 'merge-recursive copy vs. rename' '
+       git checkout -f copy &&
+       git merge rename &&
+       ( git ls-tree -r HEAD && git ls-files -s ) >actual &&
+       (
+               echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
+               echo "100644 blob $o0   d/e"
+               echo "100644 blob $o0   e"
+               echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
+               echo "100644 $o0 0      d/e"
+               echo "100644 $o0 0      e"
+       ) >expected &&
+       test_cmp expected actual
+'
+
 test_done
index 3ce501bb9794900b99fbbf2f2ccfbb330f7947a7..61c1f53d1b75302be60396d2e01ccd5da5b6e5b4 100755 (executable)
@@ -53,17 +53,15 @@ test_expect_success setup '
        git add .
 '
 
-# We have to run from a sub-directory to trigger prune_path
-# Then we finally get to run our --with-tree test
-cd sub
-
 test_expect_success 'git -ls-files --with-tree should succeed from subdir' '
-
-       git ls-files --with-tree=HEAD~1 >../output
-
+       # We have to run from a sub-directory to trigger prune_path
+       # Then we finally get to run our --with-tree test
+       (
+               cd sub &&
+               git ls-files --with-tree=HEAD~1 >../output
+       )
 '
 
-cd ..
 test_expect_success \
     'git -ls-files --with-tree should add entries from named tree.' \
     'test_cmp expected output'
index eee0d344d24623ad9928366729c8efaea699fcd7..81d90b66c50e75323a44aaf5e2e067d5a3569e6a 100755 (executable)
@@ -165,4 +165,13 @@ test_expect_success \
 EOF
      test_output'
 
+test_expect_success \
+    'ls-tree with one path a prefix of the other' \
+    'git ls-tree $tree path2/baz path2/bazbo >current &&
+     make_expected <<\EOF &&
+040000 tree X  path2/baz
+120000 blob X  path2/bazbo
+EOF
+     test_output'
+
 test_done
index 8f785e7957519eaa3dd1ef946c905054c4fa0e6c..74161a42ec34c2d33780a80425ec1be5a4028f03 100755 (executable)
@@ -42,23 +42,24 @@ test_expect_success 'setup for merge-preserving rebase' \
        git commit -a -m "Modify A2" &&
 
        git clone ./. clone1 &&
-       cd clone1 &&
+       (cd clone1 &&
        git checkout -b topic origin/topic &&
-       git merge origin/master &&
-       cd .. &&
+       git merge origin/master
+       ) &&
 
        echo Fifth > B &&
        git add B &&
        git commit -m "Add different B" &&
 
        git clone ./. clone2 &&
-       cd clone2 &&
-       git checkout -b topic origin/topic &&
-       test_must_fail git merge origin/master &&
-       echo Resolved > B &&
-       git add B &&
-       git commit -m "Merge origin/master into topic" &&
-       cd .. &&
+       (
+               cd clone2 &&
+               git checkout -b topic origin/topic &&
+               test_must_fail git merge origin/master &&
+               echo Resolved >B &&
+               git add B &&
+               git commit -m "Merge origin/master into topic"
+       ) &&
 
        git checkout topic &&
        echo Fourth >> B &&
index d99f27a12f40d73094ef286a067f3c6771e61865..a283dca25fe9b5d75841626337e0e68244fdbbf2 100755 (executable)
@@ -69,9 +69,10 @@ test_expect_success 'apply stashed changes (including index)' '
 test_expect_success 'unstashing in a subdirectory' '
        git reset --hard HEAD &&
        mkdir subdir &&
-       cd subdir &&
-       git stash apply &&
-       cd ..
+       (
+               cd subdir &&
+               git stash apply
+       )
 '
 
 test_expect_success 'drop top stash' '
index 8e391cf9a72c6518217526155cbea93d74b9e626..995bdfafecedf6b629acdb3300732a4bb691f23c 100755 (executable)
@@ -85,10 +85,11 @@ EOF
 "
 
 commit_file sm1 &&
-cd sm1 &&
-git reset --hard HEAD~2 >/dev/null &&
-head3=$(git rev-parse --verify HEAD | cut -c1-7) &&
-cd ..
+head3=$(
+       cd sm1 &&
+       git reset --hard HEAD~2 >/dev/null &&
+       git rev-parse --verify HEAD | cut -c1-7
+)
 
 test_expect_success 'modified submodule(backward)' "
        git diff-index -p --submodule=log HEAD >actual &&
index efb42d154035fa8abdc10874151048c5e73546fa..9a884751ec73ff721d658ebb69cbfe1f0270be85 100755 (executable)
@@ -21,27 +21,30 @@ test_expect_success setup '
 
 test_expect_success "clone and setup child repos" '
        git clone . one &&
-       cd one &&
-       echo >file updated by one &&
-       git commit -a -m "updated by one" &&
-       cd .. &&
+       (
+               cd one &&
+               echo >file updated by one &&
+               git commit -a -m "updated by one"
+       ) &&
        git clone . two &&
-       cd two &&
-       git config branch.master.remote one &&
-       git config remote.one.url ../one/.git/ &&
-       git config remote.one.fetch refs/heads/master:refs/heads/one &&
-       cd .. &&
+       (
+               cd two &&
+               git config branch.master.remote one &&
+               git config remote.one.url ../one/.git/ &&
+               git config remote.one.fetch refs/heads/master:refs/heads/one
+       ) &&
        git clone . three &&
-       cd three &&
-       git config branch.master.remote two &&
-       git config branch.master.merge refs/heads/one &&
-       mkdir -p .git/remotes &&
-       {
-               echo "URL: ../two/.git/"
-               echo "Pull: refs/heads/master:refs/heads/two"
-               echo "Pull: refs/heads/one:refs/heads/one"
-       } >.git/remotes/two &&
-       cd .. &&
+       (
+               cd three &&
+               git config branch.master.remote two &&
+               git config branch.master.merge refs/heads/one &&
+               mkdir -p .git/remotes &&
+               {
+                       echo "URL: ../two/.git/"
+                       echo "Pull: refs/heads/master:refs/heads/two"
+                       echo "Pull: refs/heads/one:refs/heads/one"
+               } >.git/remotes/two
+       ) &&
        git clone . bundle &&
        git clone . seven
 '
index ddc3dc52f497d05e20cf4034d544df6d08632935..728ccd88c3d69f06bff2c3593ddc325f9186402c 100755 (executable)
@@ -30,6 +30,13 @@ test_expect_success 'tags can be excluded by rev-list options' '
 
 '
 
+test_expect_success 'die if bundle file cannot be created' '
+
+       mkdir adir &&
+       test_must_fail git bundle create adir --all
+
+'
+
 test_expect_failure 'bundle --stdin' '
 
        echo master | git bundle create stdin-bundle.bdl --stdin &&
index dd917d76da4f30ee8079caa17766c71513670d2e..c907523e7e04542c6aada74f9b355ebcbae8c562 100755 (executable)
@@ -104,17 +104,18 @@ test_expect_success '"git fsck" works' '
 test_expect_success 'repack, clone and fetch work' '
      git repack -a -d &&
      git clone --no-hardlinks . clone_dir &&
-     cd clone_dir &&
-     git show HEAD~5 | grep "A U Thor" &&
-     git show $HASH2 | grep "A U Thor" &&
-     git cat-file commit $R &&
-     git repack -a -d &&
-     test_must_fail git cat-file commit $R &&
-     git fetch ../ "refs/replace/*:refs/replace/*" &&
-     git show HEAD~5 | grep "O Thor" &&
-     git show $HASH2 | grep "O Thor" &&
-     git cat-file commit $R &&
-     cd ..
+     (
+         cd clone_dir &&
+         git show HEAD~5 | grep "A U Thor" &&
+         git show $HASH2 | grep "A U Thor" &&
+         git cat-file commit $R &&
+         git repack -a -d &&
+         test_must_fail git cat-file commit $R &&
+         git fetch ../ "refs/replace/*:refs/replace/*" &&
+         git show HEAD~5 | grep "O Thor" &&
+         git show $HASH2 | grep "O Thor" &&
+         git cat-file commit $R
+     )
 '
 
 test_expect_success '"git replace" listing and deleting' '
@@ -177,10 +178,11 @@ test_expect_success 'create parallel branch without the bug' '
 
 test_expect_success 'push to cloned repo' '
      git push cloned $HASH6^:refs/heads/parallel &&
-     cd clone_dir &&
-     git checkout parallel &&
-     git log --pretty=oneline | grep $PARA2 &&
-     cd ..
+     (
+         cd clone_dir &&
+         git checkout parallel &&
+         git log --pretty=oneline | grep $PARA2
+     )
 '
 
 test_expect_success 'push branch with replacement' '
@@ -191,20 +193,22 @@ test_expect_success 'push branch with replacement' '
      git show $HASH6~2 | grep "O Thor" &&
      git show $PARA3 | grep "O Thor" &&
      git push cloned $HASH6^:refs/heads/parallel2 &&
-     cd clone_dir &&
-     git checkout parallel2 &&
-     git log --pretty=oneline | grep $PARA3 &&
-     git show $PARA3 | grep "A U Thor" &&
-     cd ..
+     (
+         cd clone_dir &&
+         git checkout parallel2 &&
+         git log --pretty=oneline | grep $PARA3 &&
+         git show $PARA3 | grep "A U Thor"
+     )
 '
 
 test_expect_success 'fetch branch with replacement' '
      git branch tofetch $HASH6 &&
-     cd clone_dir &&
-     git fetch origin refs/heads/tofetch:refs/heads/parallel3
-     git log --pretty=oneline parallel3 | grep $PARA3
-     git show $PARA3 | grep "A U Thor"
-     cd ..
+     (
+         cd clone_dir &&
+         git fetch origin refs/heads/tofetch:refs/heads/parallel3
+         git log --pretty=oneline parallel3 | grep $PARA3
+         git show $PARA3 | grep "A U Thor"
+     )
 '
 
 test_expect_success 'bisect and replacements' '
index 501c207321265cc0603a8070dccb04423bfb97c5..e0227730deb88413301b37501fdb165a2c90460e 100755 (executable)
@@ -310,6 +310,24 @@ test_expect_success '--remap-to-ancestor with filename filters' '
        test $orig_invariant = $(git rev-parse invariant)
 '
 
+test_expect_success 'automatic remapping to ancestor with filename filters' '
+       git checkout master &&
+       git reset --hard A &&
+       test_commit add-foo2 foo 1 &&
+       git branch moved-foo2 &&
+       test_commit add-bar2 bar a &&
+       git branch invariant2 &&
+       orig_invariant=$(git rev-parse invariant2) &&
+       git branch moved-bar2 &&
+       test_commit change-foo2 foo 2 &&
+       git filter-branch -f \
+               moved-foo2 moved-bar2 A..master \
+               -- -- foo &&
+       test $(git rev-parse moved-foo2) = $(git rev-parse moved-bar2) &&
+       test $(git rev-parse moved-foo2) = $(git rev-parse master^) &&
+       test $orig_invariant = $(git rev-parse invariant2)
+'
+
 test_expect_success 'setup submodule' '
        rm -fr ?* .git &&
        git init &&
index 9bda97058499ecab88dc6de7551d7909e1ad5a2e..782b0a3ece7724bf8df7cf4d405715a42ad21d44 100755 (executable)
@@ -413,12 +413,13 @@ test_expect_success 'submodule <invalid-path> warns' '
 
 test_expect_success 'add submodules without specifying an explicit path' '
        mkdir repo &&
-       cd repo &&
-       git init &&
-       echo r >r &&
-       git add r &&
-       git commit -m "repo commit 1" &&
-       cd .. &&
+       (
+               cd repo &&
+               git init &&
+               echo r >r &&
+               git add r &&
+               git commit -m "repo commit 1"
+       ) &&
        git clone --bare repo/ bare.git &&
        cd addtest &&
        git submodule add "$submodurl/repo" &&
index cee319da0ae6ef9ec3b220adbb178e116713db2a..294584452bbc3226e631ce0b81c546b04cd8d992 100755 (executable)
@@ -66,10 +66,11 @@ EOF
 "
 
 commit_file sm1 &&
-cd sm1 &&
-git reset --hard HEAD~2 >/dev/null &&
-head3=$(git rev-parse --verify HEAD | cut -c1-7) &&
-cd ..
+head3=$(
+       cd sm1 &&
+       git reset --hard HEAD~2 >/dev/null &&
+       git rev-parse --verify HEAD | cut -c1-7
+)
 
 test_expect_success 'modified submodule(backward)' "
     git submodule summary >actual &&
index d5adae640b0b92e049de3c5d5e8996e1db06bcc4..2f458f7a999a69c623052898726567b9d7ce67c9 100755 (executable)
@@ -22,17 +22,18 @@ esac
 test_expect_success \
     'initialize git svn' '
        mkdir import &&
-       cd import &&
-       echo foo > foo &&
-       ln -s foo foo.link
-       mkdir -p dir/a/b/c/d/e &&
-       echo "deep dir" > dir/a/b/c/d/e/file &&
-       mkdir bar &&
-       echo "zzz" > bar/zzz &&
-       echo "#!/bin/sh" > exec.sh &&
-       chmod +x exec.sh &&
-       svn_cmd import -m "import for git svn" . "$svnrepo" >/dev/null &&
-       cd .. &&
+       (
+               cd import &&
+               echo foo >foo &&
+               ln -s foo foo.link
+               mkdir -p dir/a/b/c/d/e &&
+               echo "deep dir" >dir/a/b/c/d/e/file &&
+               mkdir bar &&
+               echo "zzz" >bar/zzz &&
+               echo "#!/bin/sh" >exec.sh &&
+               chmod +x exec.sh &&
+               svn_cmd import -m "import for git svn" . "$svnrepo" >/dev/null
+       ) &&
        rm -rf import &&
        git svn init "$svnrepo"'
 
index 929499e996bc33d96ebab0b01ebcac8240e689b7..8869f5018ecd06636dc3e722cb518af88a6919d9 100755 (executable)
@@ -53,8 +53,9 @@ cd ..
 
 rm -rf import
 test_expect_success 'checkout working copy from svn' 'svn co "$svnrepo" test_wc'
-test_expect_success 'setup some commits to svn' \
-       'cd test_wc &&
+test_expect_success 'setup some commits to svn' '
+       (
+               cd test_wc &&
                echo Greetings >> kw.c &&
                poke kw.c &&
                svn_cmd commit -m "Not yet an Id" &&
@@ -63,8 +64,9 @@ test_expect_success 'setup some commits to svn' \
                svn_cmd commit -m "Modified file, but still not yet an Id" &&
                svn_cmd propset svn:keywords Id kw.c &&
                poke kw.c &&
-               svn_cmd commit -m "Propset Id" &&
-       cd ..'
+               svn_cmd commit -m "Propset Id"
+       )
+'
 
 test_expect_success 'initialize git svn' 'git svn init "$svnrepo"'
 test_expect_success 'fetch revisions from svn' 'git svn fetch'
@@ -81,13 +83,15 @@ expect='/* $Id$ */'
 got="`sed -ne 2p kw.c`"
 test_expect_success 'raw $Id$ found in kw.c' "test '$expect' = '$got'"
 
-test_expect_success "propset CR on crlf files" \
-       'cd test_wc &&
+test_expect_success "propset CR on crlf files" '
+       (
+               cd test_wc &&
                svn_cmd propset svn:eol-style CR empty &&
                svn_cmd propset svn:eol-style CR crlf &&
                svn_cmd propset svn:eol-style CR ne_crlf &&
-               svn_cmd commit -m "propset CR on crlf files" &&
-        cd ..'
+               svn_cmd commit -m "propset CR on crlf files"
+        )
+'
 
 test_expect_success 'fetch and pull latest from svn and checkout a new wc' \
        'git svn fetch &&
@@ -137,19 +141,20 @@ cat > show-ignore.expect <<\EOF
 EOF
 
 test_expect_success 'test show-ignore' "
-       cd test_wc &&
-       mkdir -p deeply/nested/directory &&
-       touch deeply/nested/directory/.keep &&
-       svn_cmd add deeply &&
-       svn_cmd up &&
-       svn_cmd propset -R svn:ignore '
+       (
+               cd test_wc &&
+               mkdir -p deeply/nested/directory &&
+               touch deeply/nested/directory/.keep &&
+               svn_cmd add deeply &&
+               svn_cmd up &&
+               svn_cmd propset -R svn:ignore '
 no-such-file*
 ' .
-       svn_cmd commit -m 'propset svn:ignore'
-       cd .. &&
+               svn_cmd commit -m 'propset svn:ignore'
+       ) &&
        git svn show-ignore > show-ignore.got &&
        cmp show-ignore.expect show-ignore.got
-       "
+"
 
 cat >create-ignore.expect <<\EOF
 /no-such-file*
index 028fb19e09bbb9e2720e95a5e0b4ddb221f4a0e1..eb70f4839ccb065425b5ad8d40b270178dedef1b 100755 (executable)
@@ -4,13 +4,14 @@ test_description='git svn rmdir'
 
 test_expect_success 'initialize repo' '
        mkdir import &&
-       cd import &&
-       mkdir -p deeply/nested/directory/number/1 &&
-       mkdir -p deeply/nested/directory/number/2 &&
-       echo foo > deeply/nested/directory/number/1/file &&
-       echo foo > deeply/nested/directory/number/2/another &&
-       svn_cmd import -m "import for git svn" . "$svnrepo" &&
-       cd ..
+       (
+               cd import &&
+               mkdir -p deeply/nested/directory/number/1 &&
+               mkdir -p deeply/nested/directory/number/2 &&
+               echo foo >deeply/nested/directory/number/1/file &&
+               echo foo >deeply/nested/directory/number/2/another &&
+               svn_cmd import -m "import for git svn" . "$svnrepo"
+       )
        '
 
 test_expect_success 'mirror via git svn' '
index bbfd7f4793ab41118e7060bf7c0512309f81a546..f7f3c5ab8ef8dd822a51d6c97281ba077c511642 100755 (executable)
@@ -8,22 +8,24 @@ test_description='git svn fetching'
 
 test_expect_success 'initialize repo' '
        mkdir import &&
-       cd import &&
-       mkdir -p trunk &&
-       echo hello > trunk/readme &&
-       svn_cmd import -m "initial" . "$svnrepo" &&
-       cd .. &&
+       (
+               cd import &&
+               mkdir -p trunk &&
+               echo hello >trunk/readme &&
+               svn_cmd import -m "initial" . "$svnrepo"
+       ) &&
        svn_cmd co "$svnrepo" wc &&
-       cd wc &&
-       echo world >> trunk/readme &&
-       poke trunk/readme &&
-       svn_cmd commit -m "another commit" &&
-       svn_cmd up &&
-       svn_cmd mv trunk thunk &&
-       echo goodbye >> thunk/readme &&
-       poke thunk/readme &&
-       svn_cmd commit -m "bye now" &&
-       cd ..
+       (
+               cd wc &&
+               echo world >>trunk/readme &&
+               poke trunk/readme &&
+               svn_cmd commit -m "another commit" &&
+               svn_cmd up &&
+               svn_cmd mv trunk thunk &&
+               echo goodbye >>thunk/readme &&
+               poke thunk/readme &&
+               svn_cmd commit -m "bye now"
+       )
        '
 
 test_expect_success 'init and fetch a moved directory' '
@@ -83,16 +85,17 @@ test_expect_success 'follow larger parent' '
         '
 
 test_expect_success 'follow higher-level parent' '
-        svn mkdir -m "follow higher-level parent" "$svnrepo"/blob &&
-        svn co "$svnrepo"/blob blob &&
-        cd blob &&
-                echo hi > hi &&
-                svn add hi &&
-                svn commit -m "hihi" &&
-                cd ..
-        svn mkdir -m "new glob at top level" "$svnrepo"/glob &&
-        svn mv -m "move blob down a level" "$svnrepo"/blob "$svnrepo"/glob/blob &&
-        git svn init --minimize-url -i blob "$svnrepo"/glob/blob &&
+       svn mkdir -m "follow higher-level parent" "$svnrepo"/blob &&
+       svn co "$svnrepo"/blob blob &&
+       (
+               cd blob &&
+               echo hi > hi &&
+               svn add hi &&
+               svn commit -m "hihi"
+       ) &&
+       svn mkdir -m "new glob at top level" "$svnrepo"/glob &&
+       svn mv -m "move blob down a level" "$svnrepo"/blob "$svnrepo"/glob/blob &&
+       git svn init --minimize-url -i blob "$svnrepo"/glob/blob &&
         git svn fetch -i blob
         '
 
@@ -117,18 +120,23 @@ test_expect_success 'follow-parent avoids deleting relevant info' '
           import/trunk/subversion/bindings/swig/perl/t/larger-parent &&
          echo "bad delete test 2" > \
           import/trunk/subversion/bindings/swig/perl/another-larger &&
-       cd import &&
-         svn import -m "r9270 test" . "$svnrepo"/r9270 &&
-       cd .. &&
+       (
+               cd import &&
+               svn import -m "r9270 test" . "$svnrepo"/r9270
+       ) &&
        svn_cmd co "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl r9270 &&
-       cd r9270 &&
-         svn mkdir native &&
-         svn mv t native/t &&
-         for i in a b c; do svn mv $i.pm native/$i.pm; done &&
-         echo z >> native/t/c.t &&
-         poke native/t/c.t &&
-         svn commit -m "reorg test" &&
-       cd .. &&
+       (
+               cd r9270 &&
+               svn mkdir native &&
+               svn mv t native/t &&
+               for i in a b c
+               do
+                       svn mv $i.pm native/$i.pm
+               done &&
+               echo z >>native/t/c.t &&
+               poke native/t/c.t &&
+               svn commit -m "reorg test"
+       ) &&
        git svn init --minimize-url -i r9270-t \
          "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl/native/t &&
        git svn fetch -i r9270-t &&
index dd48e9cba832a06a34fd1e2c895bb1b19792168f..5d0afeae6caf03ca34d7ef883baed512bcbcec51 100755 (executable)
@@ -6,10 +6,11 @@ test_description='git svn commit-diff'
 
 test_expect_success 'initialize repo' '
        mkdir import &&
-       cd import &&
-       echo hello > readme &&
-       svn_cmd import -m "initial" . "$svnrepo" &&
-       cd .. &&
+       (
+               cd import &&
+               echo hello >readme &&
+               svn_cmd import -m "initial" . "$svnrepo"
+       ) &&
        echo hello > readme &&
        git update-index --add readme &&
        git commit -a -m "initial" &&
index 12f21b700ec5216b6aeaa886f862d3e3b1f6682f..f6d7ac7c5f67871ce332716561ea6aba7a6f920f 100755 (executable)
@@ -6,21 +6,23 @@ test_description='git svn commit-diff clobber'
 
 test_expect_success 'initialize repo' '
        mkdir import &&
-       cd import &&
-       echo initial > file &&
-       svn_cmd import -m "initial" . "$svnrepo" &&
-       cd .. &&
+       (
+               cd import &&
+               echo initial >file &&
+               svn_cmd import -m "initial" . "$svnrepo"
+       ) &&
        echo initial > file &&
        git update-index --add file &&
        git commit -a -m "initial"
        '
 test_expect_success 'commit change from svn side' '
        svn_cmd co "$svnrepo" t.svn &&
-       cd t.svn &&
-       echo second line from svn >> file &&
-       poke file &&
-       svn_cmd commit -m "second line from svn" &&
-       cd .. &&
+       (
+               cd t.svn &&
+               echo second line from svn >>file &&
+               poke file &&
+               svn_cmd commit -m "second line from svn"
+       ) &&
        rm -rf t.svn
        '
 
@@ -44,11 +46,12 @@ test_expect_success 'dcommit fails to commit because of conflict' '
        git svn fetch &&
        git reset --hard refs/${remotes_git_svn} &&
        svn_cmd co "$svnrepo" t.svn &&
-       cd t.svn &&
-       echo fourth line from svn >> file &&
-       poke file &&
-       svn_cmd commit -m "fourth line from svn" &&
-       cd .. &&
+       (
+               cd t.svn &&
+               echo fourth line from svn >>file &&
+               poke file &&
+               svn_cmd commit -m "fourth line from svn"
+       ) &&
        rm -rf t.svn &&
        echo "fourth line from git" >> file &&
        git commit -a -m "fourth line from git" &&
@@ -68,11 +71,12 @@ test_expect_success 'dcommit does the svn equivalent of an index merge' "
 
 test_expect_success 'commit another change from svn side' '
        svn_cmd co "$svnrepo" t.svn &&
-       cd t.svn &&
-               echo third line from svn >> file &&
+       (
+               cd t.svn &&
+               echo third line from svn >>file &&
                poke file &&
-               svn_cmd commit -m "third line from svn" &&
-       cd .. &&
+               svn_cmd commit -m "third line from svn"
+       ) &&
        rm -rf t.svn
        '
 
index 901b8e09fbc6660456311c04b4b88c20e108c313..289fc313fb737ac7895580fd8407cff758b085e7 100755 (executable)
@@ -6,14 +6,16 @@ test_description='git svn metadata migrations from previous versions'
 test_expect_success 'setup old-looking metadata' '
        cp "$GIT_DIR"/config "$GIT_DIR"/config-old-git-svn &&
        mkdir import &&
-       cd import &&
-               for i in trunk branches/a branches/b \
-                        tags/0.1 tags/0.2 tags/0.3; do
-                       mkdir -p $i && \
-                       echo hello >> $i/README || exit 1
-               done && \
+       (
+               cd import &&
+               for i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3
+               do
+                       mkdir -p $i &&
+                       echo hello >>$i/README ||
+                       exit 1
+               done &&
                svn_cmd import -m test . "$svnrepo"
-               cd .. &&
+       ) &&
        git svn init "$svnrepo" &&
        git svn fetch &&
        rm -rf "$GIT_DIR"/svn &&
index 84f7c9b4bb00931b57740be32ce7ee29bbb26694..3077851015879fc147ded9bb573d02c13967eec9 100755 (executable)
@@ -37,11 +37,12 @@ EOF
 test_expect_success 'setup svn repository' '
        svn_cmd co "$svnrepo" mysvnwork &&
        mkdir -p mysvnwork/trunk &&
-       cd mysvnwork &&
-               big_text_block >> trunk/README &&
+       (
+               cd mysvnwork &&
+               big_text_block >>trunk/README &&
                svn_cmd add trunk &&
-               svn_cmd ci -m "first commit" trunk &&
-               cd ..
+               svn_cmd ci -m "first commit" trunk
+       )
        '
 
 test_expect_success 'setup git mirror and merge' '
index 767799e7a70b91ef6f4e3f4007529f1cb0fd919c..6a48e4042996549e40843186783e2215beee9cca 100755 (executable)
@@ -61,11 +61,12 @@ test_expect_success 'add a file with plus signs' '
 
 test_expect_success 'clone the repository to test rebase' '
        git svn clone "$svnrepo" test-rebase &&
-       cd test-rebase &&
-               echo test-rebase > test-rebase &&
+       (
+               cd test-rebase &&
+               echo test-rebase >test-rebase &&
                git add test-rebase &&
-               git commit -m test-rebase &&
-               cd ..
+               git commit -m test-rebase
+       )
        '
 
 test_expect_success 'make a commit to test rebase' '
index 0374a7476bcc5b254aa1464d468434ae3205f114..5d477e4bdadd2168d0331e2ab809c5c86c8fa532 100755 (executable)
@@ -8,14 +8,16 @@ test_description='git svn log tests'
 
 test_expect_success 'setup repository and import' '
        mkdir import &&
-       cd import &&
-               for i in trunk branches/a branches/b \
-                        tags/0.1 tags/0.2 tags/0.3; do
-                       mkdir -p $i && \
-                       echo hello >> $i/README || exit 1
-               done && \
+       (
+               cd import &&
+               for i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3
+               do
+                       mkdir -p $i &&
+                       echo hello >>$i/README ||
+                       exit 1
+               done &&
                svn_cmd import -m test . "$svnrepo"
-               cd .. &&
+       ) &&
        git svn init "$svnrepo" -T trunk -b branches -t tags &&
        git svn fetch &&
        git reset --hard trunk &&
index 5fb94fb3d61c2e26dcd448ac5106ec0f9a3a2283..f3f397cdda4766ce6c02beac13e492d406ca14c4 100755 (executable)
@@ -39,27 +39,30 @@ quoted_svnrepo="$(echo $svnrepo | sed 's/ /%20/')"
 
 test_expect_success 'setup repository and import' '
        mkdir info &&
-       cd info &&
-               echo FIRST > A &&
-               echo one > file &&
+       (
+               cd info &&
+               echo FIRST >A &&
+               echo one >file &&
                ln -s file symlink-file &&
                mkdir directory &&
                touch directory/.placeholder &&
                ln -s directory symlink-directory &&
-               svn_cmd import -m "initial" . "$svnrepo" &&
-       cd .. &&
+               svn_cmd import -m "initial" . "$svnrepo"
+       ) &&
        svn_cmd co "$svnrepo" svnwc &&
-       cd svnwc &&
-               echo foo > foo &&
+       (
+               cd svnwc &&
+               echo foo >foo &&
                svn_cmd add foo &&
                svn_cmd commit -m "change outside directory" &&
-               svn_cmd update &&
-       cd .. &&
+               svn_cmd update
+       ) &&
        mkdir gitwc &&
-       cd gitwc &&
+       (
+               cd gitwc &&
                git svn init "$svnrepo" &&
-               git svn fetch &&
-       cd .. &&
+               git svn fetch
+       ) &&
        ptouch gitwc/file svnwc/file &&
        ptouch gitwc/directory svnwc/directory &&
        ptouch gitwc/symlink-file svnwc/symlink-file &&
@@ -138,14 +141,16 @@ test_expect_success 'info --url symlink-directory' '
 
 test_expect_success 'info added-file' "
        echo two > gitwc/added-file &&
-       cd gitwc &&
-               git add added-file &&
-       cd .. &&
+       (
+               cd gitwc &&
+               git add added-file
+       ) &&
        cp gitwc/added-file svnwc/added-file &&
        ptouch gitwc/added-file svnwc/added-file &&
-       cd svnwc &&
-               svn_cmd add added-file > /dev/null &&
-       cd .. &&
+       (
+               cd svnwc &&
+               svn_cmd add added-file > /dev/null
+       ) &&
        (cd svnwc; svn info added-file) > expected.info-added-file &&
        (cd gitwc; git svn info added-file) > actual.info-added-file &&
        test_cmp expected.info-added-file actual.info-added-file
@@ -160,12 +165,14 @@ test_expect_success 'info added-directory' "
        mkdir gitwc/added-directory svnwc/added-directory &&
        ptouch gitwc/added-directory svnwc/added-directory &&
        touch gitwc/added-directory/.placeholder &&
-       cd svnwc &&
-               svn_cmd add added-directory > /dev/null &&
-       cd .. &&
-       cd gitwc &&
-               git add added-directory &&
-       cd .. &&
+       (
+               cd svnwc &&
+               svn_cmd add added-directory > /dev/null
+       ) &&
+       (
+               cd gitwc &&
+               git add added-directory
+       ) &&
        (cd svnwc; svn info added-directory) \
                > expected.info-added-directory &&
        (cd gitwc; git svn info added-directory) \
@@ -179,14 +186,16 @@ test_expect_success 'info --url added-directory' '
        '
 
 test_expect_success 'info added-symlink-file' "
-       cd gitwc &&
+       (
+               cd gitwc &&
                ln -s added-file added-symlink-file &&
-               git add added-symlink-file &&
-       cd .. &&
-       cd svnwc &&
+               git add added-symlink-file
+       ) &&
+       (
+               cd svnwc &&
                ln -s added-file added-symlink-file &&
-               svn_cmd add added-symlink-file > /dev/null &&
-       cd .. &&
+               svn_cmd add added-symlink-file > /dev/null
+       ) &&
        ptouch gitwc/added-symlink-file svnwc/added-symlink-file &&
        (cd svnwc; svn info added-symlink-file) \
                > expected.info-added-symlink-file &&
@@ -202,14 +211,16 @@ test_expect_success 'info --url added-symlink-file' '
        '
 
 test_expect_success 'info added-symlink-directory' "
-       cd gitwc &&
+       (
+               cd gitwc &&
                ln -s added-directory added-symlink-directory &&
-               git add added-symlink-directory &&
-       cd .. &&
-       cd svnwc &&
+               git add added-symlink-directory
+       ) &&
+       (
+               cd svnwc &&
                ln -s added-directory added-symlink-directory &&
-               svn_cmd add added-symlink-directory > /dev/null &&
-       cd .. &&
+               svn_cmd add added-symlink-directory > /dev/null
+       ) &&
        ptouch gitwc/added-symlink-directory svnwc/added-symlink-directory &&
        (cd svnwc; svn info added-symlink-directory) \
                > expected.info-added-symlink-directory &&
@@ -230,12 +241,14 @@ test_expect_success 'info --url added-symlink-directory' '
 # simply reuses the Last Changed Date.
 
 test_expect_success 'info deleted-file' "
-       cd gitwc &&
-               git rm -f file > /dev/null &&
-       cd .. &&
-       cd svnwc &&
-               svn_cmd rm --force file > /dev/null &&
-       cd .. &&
+       (
+               cd gitwc &&
+               git rm -f file > /dev/null
+       ) &&
+       (
+               cd svnwc &&
+               svn_cmd rm --force file > /dev/null
+       ) &&
        (cd svnwc; svn info file) |
        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
                > expected.info-deleted-file &&
@@ -251,12 +264,14 @@ test_expect_success 'info --url file (deleted)' '
        '
 
 test_expect_success 'info deleted-directory' "
-       cd gitwc &&
-               git rm -r -f directory > /dev/null &&
-       cd .. &&
-       cd svnwc &&
-               svn_cmd rm --force directory > /dev/null &&
-       cd .. &&
+       (
+               cd gitwc &&
+               git rm -r -f directory > /dev/null
+       ) &&
+       (
+               cd svnwc &&
+               svn_cmd rm --force directory > /dev/null
+       ) &&
        (cd svnwc; svn info directory) |
        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
                > expected.info-deleted-directory &&
@@ -272,12 +287,14 @@ test_expect_success 'info --url directory (deleted)' '
        '
 
 test_expect_success 'info deleted-symlink-file' "
-       cd gitwc &&
-               git rm -f symlink-file > /dev/null &&
-       cd .. &&
-       cd svnwc &&
-               svn_cmd rm --force symlink-file > /dev/null &&
-       cd .. &&
+       (
+               cd gitwc &&
+               git rm -f symlink-file > /dev/null
+       ) &&
+       (
+               cd svnwc &&
+               svn_cmd rm --force symlink-file > /dev/null
+       ) &&
        (cd svnwc; svn info symlink-file) |
        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
                > expected.info-deleted-symlink-file &&
@@ -294,12 +311,14 @@ test_expect_success 'info --url symlink-file (deleted)' '
        '
 
 test_expect_success 'info deleted-symlink-directory' "
-       cd gitwc &&
-               git rm -f symlink-directory > /dev/null &&
-       cd .. &&
-       cd svnwc &&
-               svn_cmd rm --force symlink-directory > /dev/null &&
-       cd .. &&
+       (
+               cd gitwc &&
+               git rm -f symlink-directory > /dev/null
+       ) &&
+       (
+               cd svnwc &&
+               svn_cmd rm --force symlink-directory > /dev/null
+       ) &&
        (cd svnwc; svn info symlink-directory) |
        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
                 > expected.info-deleted-symlink-directory &&
@@ -346,9 +365,10 @@ test_expect_success 'info --url unknown-directory' '
        '
 
 test_expect_success 'info unknown-symlink-file' "
-       cd gitwc &&
-               ln -s unknown-file unknown-symlink-file &&
-       cd .. &&
+       (
+               cd gitwc &&
+               ln -s unknown-file unknown-symlink-file
+       ) &&
        (cd gitwc; test_must_fail git svn info unknown-symlink-file) \
                 2> actual.info-unknown-symlink-file &&
        grep unknown-symlink-file actual.info-unknown-symlink-file
@@ -361,9 +381,10 @@ test_expect_success 'info --url unknown-symlink-file' '
        '
 
 test_expect_success 'info unknown-symlink-directory' "
-       cd gitwc &&
-               ln -s unknown-directory unknown-symlink-directory &&
-       cd .. &&
+       (
+               cd gitwc &&
+               ln -s unknown-directory unknown-symlink-directory
+       ) &&
        (cd gitwc; test_must_fail git svn info unknown-symlink-directory) \
                 2> actual.info-unknown-symlink-directory &&
        grep unknown-symlink-directory actual.info-unknown-symlink-directory
index 9d9ebd533cbcbcfc1e23be51bad1e63f4f08c53b..1d92c05035f8fe68885a6338ceca4307f19e8663 100755 (executable)
@@ -20,9 +20,10 @@ test_expect_success 'setup svnrepo' '
 
 test_expect_success 'test clone with percent escapes' '
        git svn clone "$svnrepo/pr%20ject" clone &&
-       cd clone &&
-               git rev-parse refs/${remotes_git_svn} &&
-       cd ..
+       (
+               cd clone &&
+               git rev-parse refs/${remotes_git_svn}
+       )
 '
 
 # SVN works either way, so should we...
index 045521615c64d1ae938524b0424e1e4260ca8c54..0ed90d982d28810c4f7a018fab3d2f8699b78d95 100755 (executable)
@@ -8,10 +8,10 @@ test_description='git svn respects rewriteRoot during rebuild'
 . ./lib-git-svn.sh
 
 mkdir import
-cd import
+(cd import
        touch foo
        svn_cmd import -m 'import for git svn' . "$svnrepo" >/dev/null
-cd ..
+)
 rm -rf import
 
 test_expect_success 'init, fetch and checkout repository' '
index c19418614fc8946b5be5f0014559e53fcc15c060..096abd1fe5e37444a442e698a5d5734823a45798 100755 (executable)
@@ -19,19 +19,19 @@ test_expect_success 'setup svnrepo' '
 test_expect_success 'test clone with multi-glob in branch names' '
        git svn clone -T trunk -b branches/*/* -t tags \
                      "$svnrepo/project" project &&
-       cd project &&
+       (cd project &&
                git rev-parse "refs/remotes/v14.1/beta" &&
-               git rev-parse "refs/remotes/v14.1/gold" &&
-       cd ..
+               git rev-parse "refs/remotes/v14.1/gold"
+       )
        '
 
 test_expect_success 'test dcommit to multi-globbed branch' "
-       cd project &&
+       (cd project &&
        git reset --hard 'refs/remotes/v14.1/gold' &&
        echo hello >> foo &&
        git commit -m 'hello' -- foo &&
-       git svn dcommit &&
-       cd ..
+       git svn dcommit
+       )
        "
 
 test_done
index 4aab8ecc142d9719fd83b064445fa297cc10a520..2e4789d061fe084024b621708ee27e629c2a004a 100755 (executable)
@@ -9,27 +9,27 @@ test_description='git svn partial-rebuild tests'
 test_expect_success 'initialize svnrepo' '
        mkdir import &&
        (
-               cd import &&
+               (cd import &&
                mkdir trunk branches tags &&
-               cd trunk &&
-               echo foo > foo &&
-               cd .. &&
+               (cd trunk &&
+               echo foo > foo
+               ) &&
                svn_cmd import -m "import for git-svn" . "$svnrepo" >/dev/null &&
                svn_cmd copy "$svnrepo"/trunk "$svnrepo"/branches/a \
-                       -m "created branch a" &&
-               cd .. &&
+                       -m "created branch a"
+               ) &&
                rm -rf import &&
                svn_cmd co "$svnrepo"/trunk trunk &&
-               cd trunk &&
+               (cd trunk &&
                echo bar >> foo &&
-               svn_cmd ci -m "updated trunk" &&
-               cd .. &&
+               svn_cmd ci -m "updated trunk"
+               ) &&
                svn_cmd co "$svnrepo"/branches/a a &&
-               cd a &&
+               (cd a &&
                echo baz >> a &&
                svn_cmd add a &&
-               svn_cmd ci -m "updated a" &&
-               cd .. &&
+               svn_cmd ci -m "updated a"
+               ) &&
                git svn init --stdlayout "$svnrepo"
        )
 '
@@ -41,11 +41,11 @@ test_expect_success 'import an early SVN revision into git' '
 test_expect_success 'make full git mirror of SVN' '
        mkdir mirror &&
        (
-               cd mirror &&
+               (cd mirror &&
                git init &&
                git svn init --stdlayout "$svnrepo" &&
-               git svn fetch &&
-               cd ..
+               git svn fetch
+               )
        )
 '
 
index 807e494a3af4eb889711cbd7bb8d20c160557301..4b034a67f305622f146e66914139e58045e2457e 100755 (executable)
@@ -9,19 +9,19 @@ test_description='git svn partial-rebuild tests'
 test_expect_success 'initialize svnrepo' '
        mkdir import &&
        (
-               cd import &&
+               (cd import &&
                mkdir trunk branches tags &&
-               cd trunk &&
-               echo foo > foo &&
-               cd .. &&
-               svn_cmd import -m "import for git-svn" . "$svnrepo" >/dev/null &&
-               cd .. &&
+               (cd trunk &&
+               echo foo > foo
+               ) &&
+               svn_cmd import -m "import for git-svn" . "$svnrepo" >/dev/null
+               ) &&
                rm -rf import &&
                svn_cmd co "$svnrepo"/trunk trunk &&
-               cd trunk &&
+               (cd trunk &&
                echo bar >> foo &&
-               svn_cmd ci -m "updated trunk" &&
-               cd .. &&
+               svn_cmd ci -m "updated trunk"
+               ) &&
                rm -rf trunk
        )
 '
index 636ca0abb965ad2462a2e1e1ebea2a4183aa19e6..d60da63f7aced3e13a411eee661509ae3790e68f 100755 (executable)
@@ -6,10 +6,10 @@ test_description='git svn dcommit clobber series'
 
 test_expect_success 'initialize repo' '
        mkdir import &&
-       cd import &&
+       (cd import &&
        awk "BEGIN { for (i = 1; i < 64; i++) { print i } }" > file
-       svn_cmd import -m "initial" . "$svnrepo" &&
-       cd .. &&
+       svn_cmd import -m "initial" . "$svnrepo"
+       ) &&
        git svn init "$svnrepo" &&
        git svn fetch &&
        test -e file
@@ -19,14 +19,14 @@ test_expect_success '(supposedly) non-conflicting change from SVN' '
        test x"`sed -n -e 58p < file`" = x58 &&
        test x"`sed -n -e 61p < file`" = x61 &&
        svn_cmd co "$svnrepo" tmp &&
-       cd tmp &&
+       (cd tmp &&
                perl -i.bak -p -e "s/^58$/5588/" file &&
                perl -i.bak -p -e "s/^61$/6611/" file &&
                poke file &&
                test x"`sed -n -e 58p < file`" = x5588 &&
                test x"`sed -n -e 61p < file`" = x6611 &&
-               svn_cmd commit -m "58 => 5588, 61 => 6611" &&
-               cd ..
+               svn_cmd commit -m "58 => 5588, 61 => 6611"
+       )
        '
 
 test_expect_success 'some unrelated changes to git' "
index 96d07f183377f8822257cb3a1dad29023b391462..7c059204e90722db20bae1d10a0988853f852262 100755 (executable)
@@ -1110,11 +1110,10 @@ test_expect_success \
        'P: supermodule & submodule mix' \
        'git fast-import <input &&
         git checkout subuse1 &&
-        rm -rf sub && mkdir sub && cd sub &&
+        rm -rf sub && mkdir sub && (cd sub &&
         git init &&
         git fetch --update-head-ok .. refs/heads/sub:refs/heads/master &&
-        git checkout master &&
-        cd .. &&
+        git checkout master) &&
         git submodule init &&
         git submodule update'
 
index 925bd0fbedf9865cef834460969c0a9fd2262437..1bbfd824e50ba44f6684cbce3f220a99f17f6cc6 100755 (executable)
@@ -129,21 +129,22 @@ test_expect_success 'cvs co (use attributes)' '
 '
 
 test_expect_success 'adding files' '
-    cd cvswork/subdir &&
+    (cd cvswork &&
+    (cd subdir &&
     echo "more text" > src.c &&
     GIT_CONFIG="$git_config" cvs -Q add src.c >cvs.log 2>&1 &&
     marked_as . src.c "" &&
-    echo "psuedo-binary" > temp.bin &&
-    cd .. &&
+    echo "psuedo-binary" > temp.bin
+    ) &&
     GIT_CONFIG="$git_config" cvs -Q add subdir/temp.bin >cvs.log 2>&1 &&
     marked_as subdir temp.bin "-kb" &&
     cd subdir &&
     GIT_CONFIG="$git_config" cvs -Q ci -m "adding files" >cvs.log 2>&1 &&
     marked_as . temp.bin "-kb" &&
     marked_as . src.c ""
+    )
 '
 
-cd "$WORKDIR"
 test_expect_success 'updating' '
     git pull gitcvs.git &&
     echo 'hi' > subdir/newfile.bin &&
@@ -153,9 +154,9 @@ test_expect_success 'updating' '
     git add subdir/newfile.bin subdir/file.h subdir/newfile.c binfile.bin &&
     git commit -q -m "Add and change some files" &&
     git push gitcvs.git >/dev/null &&
-    cd cvswork &&
-    GIT_CONFIG="$git_config" cvs -Q update &&
-    cd .. &&
+    (cd cvswork &&
+    GIT_CONFIG="$git_config" cvs -Q update
+    ) &&
     marked_as cvswork textfile.c "" &&
     marked_as cvswork binfile.bin -kb &&
     marked_as cvswork .gitattributes "" &&
@@ -233,35 +234,35 @@ test_expect_success 'cvs co another copy (guess)' '
 '
 
 test_expect_success 'add text (guess)' '
-    cd cvswork &&
+    (cd cvswork &&
     echo "simpleText" > simpleText.c &&
-    GIT_CONFIG="$git_config" cvs -Q add simpleText.c &&
-    cd .. &&
+    GIT_CONFIG="$git_config" cvs -Q add simpleText.c
+    ) &&
     marked_as cvswork simpleText.c ""
 '
 
 test_expect_success 'add bin (guess)' '
-    cd cvswork &&
+    (cd cvswork &&
     echo "simpleBin: NUL: Q <- there" | q_to_nul > simpleBin.bin &&
-    GIT_CONFIG="$git_config" cvs -Q add simpleBin.bin &&
-    cd .. &&
+    GIT_CONFIG="$git_config" cvs -Q add simpleBin.bin
+    ) &&
     marked_as cvswork simpleBin.bin -kb
 '
 
 test_expect_success 'remove files (guess)' '
-    cd cvswork &&
+    (cd cvswork &&
     GIT_CONFIG="$git_config" cvs -Q rm -f subdir/file.h &&
-    cd subdir &&
-    GIT_CONFIG="$git_config" cvs -Q rm -f withCr.bin &&
-    cd ../.. &&
+    (cd subdir &&
+    GIT_CONFIG="$git_config" cvs -Q rm -f withCr.bin
+    )) &&
     marked_as cvswork/subdir withCr.bin -kb &&
     marked_as cvswork/subdir file.h ""
 '
 
 test_expect_success 'cvs ci (guess)' '
-    cd cvswork &&
-    GIT_CONFIG="$git_config" cvs -Q ci -m "add/rm files" >cvs.log 2>&1 &&
-    cd .. &&
+    (cd cvswork &&
+    GIT_CONFIG="$git_config" cvs -Q ci -m "add/rm files" >cvs.log 2>&1
+    ) &&
     marked_as cvswork textfile.c "" &&
     marked_as cvswork binfile.bin -kb &&
     marked_as cvswork .gitattributes "" &&
@@ -278,9 +279,9 @@ test_expect_success 'cvs ci (guess)' '
 '
 
 test_expect_success 'update subdir of other copy (guess)' '
-    cd cvswork2/subdir &&
-    GIT_CONFIG="$git_config" cvs -Q update &&
-    cd ../.. &&
+    (cd cvswork2/subdir &&
+    GIT_CONFIG="$git_config" cvs -Q update
+    ) &&
     marked_as cvswork2 textfile.c "" &&
     marked_as cvswork2 binfile.bin -kb &&
     marked_as cvswork2 .gitattributes "" &&
@@ -304,11 +305,11 @@ test_expect_success 'update/merge full other copy (guess)' '
     git add multilineTxt.c &&
     git commit -q -m "modify multiline file" >> "${WORKDIR}/marked.log" &&
     git push gitcvs.git >/dev/null &&
-    cd cvswork2 &&
+    (cd cvswork2 &&
     sed "s/1/replaced_1/" < multilineTxt.c > ml.temp &&
     mv ml.temp multilineTxt.c &&
-    GIT_CONFIG="$git_config" cvs update > cvs.log 2>&1 &&
-    cd .. &&
+    GIT_CONFIG="$git_config" cvs update > cvs.log 2>&1
+    ) &&
     marked_as cvswork2 textfile.c "" &&
     marked_as cvswork2 binfile.bin -kb &&
     marked_as cvswork2 .gitattributes "" &&
index 559ce417954e1ef8276efc860ca63eb0bdcce284..432b82e3d5a361d0eba329f5d5c56c17009738db 100755 (executable)
@@ -14,7 +14,7 @@ test_expect_success PERL 'setup a cvs module' '
 
        mkdir "$CVSROOT/module" &&
        $CVS co -d module-cvs module &&
-       cd module-cvs &&
+       (cd module-cvs &&
        cat <<EOF >o_fortuna &&
 O Fortuna
 velut luna
@@ -38,8 +38,8 @@ add "O Fortuna" lyrics
 
 These public domain lyrics make an excellent sample text.
 EOF
-       $CVS commit -F message &&
-       cd ..
+       $CVS commit -F message
+       )
 '
 
 test_expect_success PERL 'import a trivial module' '
@@ -49,7 +49,7 @@ test_expect_success PERL 'import a trivial module' '
 
 '
 
-test_expect_success PERL 'pack refs' 'cd module-git && git gc && cd ..'
+test_expect_success PERL 'pack refs' '(cd module-git && git gc)'
 
 test_expect_success PERL 'initial import has correct .git/cvs-revisions' '
 
@@ -59,8 +59,7 @@ test_expect_success PERL 'initial import has correct .git/cvs-revisions' '
 '
 
 test_expect_success PERL 'update cvs module' '
-
-       cd module-cvs &&
+       (cd module-cvs &&
        cat <<EOF >o_fortuna &&
 O Fortune,
 like the moon
@@ -83,16 +82,16 @@ translate to English
 
 My Latin is terrible.
 EOF
-       $CVS commit -F message &&
-       cd ..
+       $CVS commit -F message
+       )
 '
 
 test_expect_success PERL 'update git module' '
 
-       cd module-git &&
+       (cd module-git &&
        git cvsimport -a -R -z 0 module &&
-       git merge origin &&
-       cd .. &&
+       git merge origin
+       ) &&
        test_cmp module-cvs/o_fortuna module-git/o_fortuna
 
 '
@@ -107,21 +106,20 @@ test_expect_success PERL 'update has correct .git/cvs-revisions' '
 
 test_expect_success PERL 'update cvs module' '
 
-       cd module-cvs &&
+       (cd module-cvs &&
                echo 1 >tick &&
                $CVS add tick &&
                $CVS commit -m 1
-       cd ..
-
+       )
 '
 
 test_expect_success PERL 'cvsimport.module config works' '
 
-       cd module-git &&
+       (cd module-git &&
                git config cvsimport.module module &&
                git cvsimport -a -R -z0 &&
-               git merge origin &&
-       cd .. &&
+               git merge origin
+       ) &&
        test_cmp module-cvs/tick module-git/tick
 
 '
@@ -138,12 +136,12 @@ test_expect_success PERL 'second update has correct .git/cvs-revisions' '
 test_expect_success PERL 'import from a CVS working tree' '
 
        $CVS co -d import-from-wt module &&
-       cd import-from-wt &&
+       (cd import-from-wt &&
                git cvsimport -a -z0 &&
                echo 1 >expect &&
                git log -1 --pretty=format:%s%n >actual &&
-               test_cmp actual expect &&
-       cd ..
+               test_cmp actual expect
+       )
 
 '
 
index 93c4fa885eeff16c57a58d8dc4fa7537cde54ea9..52034c8f77abd2eb0079866331c49a2f5f34e20d 100755 (executable)
@@ -19,12 +19,12 @@ setup_cvs_test_repository t9603
 test_expect_failure 'import with criss cross times on revisions' '
 
     git cvsimport -p"-x" -C module-git module &&
-    cd module-git &&
+    (cd module-git &&
         git log --pretty=format:%s > ../actual-master &&
         git log A~2..A --pretty="format:%s %ad" -- > ../actual-A &&
         echo "" >> ../actual-master &&
-        echo "" >> ../actual-A &&
-    cd .. &&
+       echo "" >> ../actual-A
+    ) &&
     echo "Rev 4
 Rev 3
 Rev 2