* Re: [PATCH] Fix typo in filter-branch example
From: Michael J Gruber @ 2009-08-13 16:36 UTC (permalink / raw)
To: Ori Avtalion; +Cc: git
In-Reply-To: <4a843cdf.1608c00a.504c.0eed@mx.google.com>
Ori Avtalion venit, vidit, dixit 13.08.2009 18:16:
> ---
> Documentation/git-filter-branch.txt | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
> index ab527b5..8cda87c 100644
> --- a/Documentation/git-filter-branch.txt
> +++ b/Documentation/git-filter-branch.txt
> @@ -336,7 +336,7 @@ To move the whole tree into a subdirectory, or remove it from there:
>
> ---------------------------------------------------------------
> git filter-branch --index-filter \
> - 'git ls-files -s | sed "s-\t-&newsubdir/-" |
> + 'git ls-files -s | sed "s-\t-\tnewsubdir/-" |
> GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
> git update-index --index-info &&
> mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
If \t is matched then isn't & == \t?
Michael
^ permalink raw reply
* Re: [PATCH 2/4] fast-import: define a new option command
From: Sverre Rabbelier @ 2009-08-13 16:26 UTC (permalink / raw)
To: Shawn O. Pearce; +Cc: Git List, Junio C Hamano, Johannes Schindelin
In-Reply-To: <20090813152419.GN1033@spearce.org>
Heya,
On Thu, Aug 13, 2009 at 08:24, Shawn O. Pearce<spearce@spearce.org> wrote:
> Why shouldn't I be able to (easily) override the marks location
> locally, without resorting to stream editing?
You convinced me, I'll store argv and argc in global_argv/global_argc
and move the option parsing to parse_argv(), which is then called when
the first non_option command is parsed.
--
Cheers,
Sverre Rabbelier
^ permalink raw reply
* [PATCH] Fix typo in filter-branch example
From: Ori Avtalion @ 2009-08-13 16:16 UTC (permalink / raw)
To: git
---
Documentation/git-filter-branch.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index ab527b5..8cda87c 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -336,7 +336,7 @@ To move the whole tree into a subdirectory, or remove it from there:
---------------------------------------------------------------
git filter-branch --index-filter \
- 'git ls-files -s | sed "s-\t-&newsubdir/-" |
+ 'git ls-files -s | sed "s-\t-\tnewsubdir/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
--
1.6.4.114.gefd1.dirty
^ permalink raw reply related
* Re: rebase-with-history -- a technique for rebasing without trashing your repo history
From: Björn Steinbrink @ 2009-08-13 16:12 UTC (permalink / raw)
To: Michael Haggerty; +Cc: Bazaar, Git Mailing List, mercurial mailing list
In-Reply-To: <4A840B0F.9060003@alum.mit.edu>
On 2009.08.13 14:46:07 +0200, Michael Haggerty wrote:
> Sorry to cross-post, but I think this might be interesting to all three
> projects...
>
> I've been thinking a lot about the problems of tracking upstream changes
> while developing a feature branch. As I think everybody knows, both
> rebasing and merging have serious disadvantages for this use case.
> Rebasing discards history and makes it difficult to share
> work-in-progress with others, whereas merging makes it difficult to
> prepare a clean patch series that is suitable for submission upstream.
>
> I've written some articles describing another possibility, which
> combines the advantages of both methods. The key idea is to retain
> rebase history correctly, on a patch-by-patch level. The resulting DAG
> retains enough history to prevent problems with merge conflicts
> downstream, while also allowing the patch series to be kept tidy.
>
> (Please note that this technique only works for the typical "tracking
> upstream" type of rebase; it doesn't help with rebases whose goals are
> changing the order of commits, moving only part of a branch, rewriting
> commits, etc.)
Hm, so that pretty much doesn't work at all for creating a clean patch
series, which usually involves rewriting commits, squasing bug fixes
into the original commits that introduced the bug etc.
And even for just continously forward porting a series of commits, a
common case might be that upstream applied some patches, but not all.
Can you deal with that?
Example:
A---B---C (upstream)
\
H---I---J---K (yours)
Upstream takes some changes:
A---B---C---I'--K'--D (upstream)
\
H---I---J---K (yours)
rebase leads to:
A---B---C---I'--K'--D (upstream)
\
H'--J' (yours)
What would your approach generate in that case?
> For more information, please see the full articles:
>
> * Upstream rebase Just Works™ if history is retained [2]
In this one you have two DAGs:
(I fixed the second one to also have the merge commit in "subsystem"
instead of "topic", so they only differ WRT to the rebased stuff)
A)
m---N---m---m---m---m---m---M (master)
\ \
o---o---O---o---o o'--o'--o'--o'--o'--S (subsystem)
\ /
*---*---*-..........-*--T (topic)
B)
m---N---m---m---m---m---m---M (master)
\ \
\ o'--o'--o'--o'--o'----------S (subsystem)
\ / / / / / /
--------------------o---o---O---o---o---*---*---T (topic)
And you say that the former creates problems when you want to merge
again. How so?
Merging "master" to "subsystem" is a no-op in both cases.
Merging "subsystem" to "master" is a fast-forward in both cases.
Merging "subsystem" to "topic" is a fast-forward in both cases.
Merging "topic" to "subsystem" is a no-op in both cases.
Merging "topic" and "master" (in either direction) has merge base N in
both cases.
Let's assume that there's another dev, having his own history based on
the old "O" commit. So:
A)
m---N---m---m---m---m---m---M (master)
\ \
o---o---O---o---o o'--o'--o'--o'--o'--S (subsystem)
\ \ /
\ *---*---*-..........-*--T (topic)
\
X---Y---Z (outsider)
B)
m---N---m---m---m---m---m---M (master)
\ \
\ o'--o'--o'--o'--o'----------S (subsystem)
\ / / / / / /
--------------------o---o---O---o---o---*---*---T (topic)
\
X---Y---Z (outsider)
Merging "master" and "outsider" has merge base N in both cases.
Merging "subsystem" and "outsider" has merge base O in both cases.
Merging "topic" and "outsider" has merge base O in both cases.
The only thing that really makes a difference is when you have another
dev having based his history upon one of the o' commits. If that history
is merged with "topic", then you get merge base N in A) and one of the
o's in B).
But, in that case, merging "topic" is basically just a complicated way
of merging "subsystem". Both contain the full series of "o" commits, and
all the "topic" commits (due to the merge). So you could just trivially
merge "subsystem" instead, which leads the o' commit as the merge base
in both cases.
And, that merge of "topic" to "subsystem" was wrong to begin with. If
you rewrite history, that has to trickle down. So A) should really have
been:
m---m---m---m-...--m---m (master)
\
o'--o'-...-o'--*'--*'--*' (topic) (subsystem)
(topic was rebased, and subsystem fast-forwarded)
So AFAICT, what your system achieves WRT ease of rebasing is that it
obsoletes the need to use "--onto" with git's rebase.
Instead of "git rebase --onto subsystem old_subsystem", you can just say
"git rebase subsystem", at the cost of a very complicated DAG.
Björn
^ permalink raw reply
* Re: [PATCH 2/4] fast-import: define a new option command
From: Shawn O. Pearce @ 2009-08-13 15:24 UTC (permalink / raw)
To: Sverre Rabbelier; +Cc: Git List, Junio C Hamano, Johannes Schindelin
In-Reply-To: <fabb9a1e0908130812s297ccfc6vd6b746daf1dcc69a@mail.gmail.com>
Sverre Rabbelier <srabbelier@gmail.com> wrote:
> Actually I was thinking that the frontend should allow the user to override
> these options. Assuming it is, say, specifying a marks file, if the user
> wishes to change that, the frontend would probably need to know about the
> new location too.
>
> So not only is it easier to implement, it makes sense from an ui
> perspective. No?
My point is, most of the options are about paths to local files.
If I export something from hg on machine A, then copy the
fast-import stream to machine B, the marks file on B might not be
in the same path. I might not even control machine A, maybe you
emailed me that stream file. I may not be able to use an option
on the source tool to alter the path.
Why shouldn't I be able to (easily) override the marks location
locally, without resorting to stream editing?
Same with --force. Which probably now demands a counter option,
--no-force. If you send me a stream with "option force\n" in the
header, why can't I try to import it with "--no-force" first?
--
Shawn.
^ permalink raw reply
* Re: [PATCH 2/4] fast-import: define a new option command
From: Shawn O. Pearce @ 2009-08-13 15:04 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Sverre Rabbelier, Junio C Hamano, Git List
In-Reply-To: <alpine.DEB.1.00.0908131652190.7429@intel-tinevez-2-302>
Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> On Thu, 13 Aug 2009, Shawn O. Pearce wrote:
> > Sverre Rabbelier <srabbelier@gmail.com> wrote:
> >
> > > +Note that options specified by the frontend override any options the
> > > +user may specify to git fast-import itself.
> >
> > Hmmph. Do we really want that? I would think the command line options
> > should override the stream, such that we can then do something like:
> >
> > hg fast-export >foo
> > git fast-import --export-marks=mymarks <foo
> >
> > even though 'option export-marks=bar' appears in foo.
>
> I guess the reason is that this is harder to implement. The problem is
> that you _have_ to parse the command line options first. So you need to
> record with every option you set that it has been set by the command line,
> and must not be overridden by the in-stream options.
It might be easy enough to just save the argv into a global, and
reparse the argv immediately before the first non-option command.
> OTOH,
>
> hg fast-export |
> sed '1,/^blob/s/^option export-marks=.*$//' > foo
>
> is relatively easy.
Just for the archives, but that sed expression won't catch inline
data under a file command. Its legal for a stream to not use the
blob command at all. I guess it would need to be:
hg fast-export |
sed '1,/^(blob|commit)/s/^option export-marks=.*$//' > foo
--
Shawn.
^ permalink raw reply
* Re: [PATCH 2/4] fast-import: define a new option command
From: Johannes Schindelin @ 2009-08-13 14:56 UTC (permalink / raw)
To: Shawn O. Pearce; +Cc: Sverre Rabbelier, Junio C Hamano, Git List
In-Reply-To: <20090813144327.GK1033@spearce.org>
Hi,
On Thu, 13 Aug 2009, Shawn O. Pearce wrote:
> Sverre Rabbelier <srabbelier@gmail.com> wrote:
>
> > +Note that options specified by the frontend override any options the
> > +user may specify to git fast-import itself.
>
> Hmmph. Do we really want that? I would think the command line options
> should override the stream, such that we can then do something like:
>
> hg fast-export >foo
> git fast-import --export-marks=mymarks <foo
>
> even though 'option export-marks=bar' appears in foo.
I guess the reason is that this is harder to implement. The problem is
that you _have_ to parse the command line options first. So you need to
record with every option you set that it has been set by the command line,
and must not be overridden by the in-stream options.
OTOH,
hg fast-export |
sed '1,/^blob/s/^option export-marks=.*$//' > foo
is relatively easy.
Ciao,
Dscho
^ permalink raw reply
* Re: [PATCH 3/4] fast-import: add option command
From: Shawn O. Pearce @ 2009-08-13 14:45 UTC (permalink / raw)
To: Sverre Rabbelier; +Cc: Junio C Hamano, Johannes Schindelin, Git List
In-Reply-To: <1250140186-12363-4-git-send-email-srabbelier@gmail.com>
Sverre Rabbelier <srabbelier@gmail.com> wrote:
> This allows the frontend to specify any of the supported options as
> long as no non-option command has been given. This way the
> user does not have to include any frontend-specific options, but
> instead she can rely on the frontend to tell fast-import what it
> needs.
> ---
Missing Signed-off-by.
> @@ -2460,6 +2465,16 @@ static void parse_one_option(const char *option)
> }
> }
>
> +static void parse_option(void)
> +{
> + char* option = command_buf.buf + 7;
Git style is "char *option", isn't it?
> +
> + if (seen_non_option_command)
> + die("Got option command '%s' after non-option command", option);
Indentation is messed up here. 1 tab per level, please.
--
Shawn.
^ permalink raw reply
* Re: [PATCH 2/4] fast-import: define a new option command
From: Shawn O. Pearce @ 2009-08-13 14:43 UTC (permalink / raw)
To: Sverre Rabbelier; +Cc: Junio C Hamano, Johannes Schindelin, Git List
In-Reply-To: <1250140186-12363-3-git-send-email-srabbelier@gmail.com>
Sverre Rabbelier <srabbelier@gmail.com> wrote:
> This allows the frontend to specify any of the supported options as
> long as no non-option command has been given.
> ---
>
> As requested, updated the documentation of the language format
>
> Documentation/git-fast-import.txt | 23 +++++++++++++++++++++++
> 1 files changed, 23 insertions(+), 0 deletions(-)
Why isn't this new 'option' command actually implemented by this
patch? Please introduce docs and code in the same patch if you can,
especially when it is this simple.
> diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
> index c2f483a..6b5bc1b 100644
> --- a/Documentation/git-fast-import.txt
> +++ b/Documentation/git-fast-import.txt
> @@ -303,6 +303,11 @@ and control the current import process. More detailed discussion
> standard output. This command is optional and is not needed
> to perform an import.
>
> +`option`::
> + Specify any of the options listed under OPTIONS to change
> + fast-import's behavior to suit the frontends needs. This command
> + is optional and is not needed to perform an import.
s/frontends/frontend's/
> +`option`
> +~~~~~~~~
> +Processes the specified option so that git fast-import behaves in a
> +way that suits the front-ends needs.
s/front-ends/frontend's/
> +Note that options specified by the frontend override any options the
> +user may specify to git fast-import itself.
Hmmph. Do we really want that? I would think the command line
options should override the stream, such that we can then do
something like:
hg fast-export >foo
git fast-import --export-marks=mymarks <foo
even though 'option export-marks=bar' appears in foo.
--
Shawn.
^ permalink raw reply
* Re: [PATCH 1/4] fast-import: put option parsing code in seperate functions
From: Shawn O. Pearce @ 2009-08-13 14:40 UTC (permalink / raw)
To: Sverre Rabbelier; +Cc: Johannes Schindelin, Junio C Hamano, Git List
In-Reply-To: <alpine.DEB.1.00.0908131208400.7429@intel-tinevez-2-302>
Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> On Wed, 12 Aug 2009, Sverre Rabbelier wrote:
>
> > +static void option_export_marks(const char *marks)
> > +{
> > + struct strbuf buf = STRBUF_INIT;
> > + strbuf_addstr(&buf, marks);
> > + mark_file = strbuf_detach(&buf, NULL);
> > +}
>
> Heh, this is a pretty convoluted way to write
>
> mark_file = xstrdup(marks);
>
> ;-)
Agreed.
> > +static void option_force()
> > +{
> > + force_update = 1;
> > +}
>
> I'm not sure that I would put these simple assignments in separate
> functions, but that's certainly up to you!
Oh, good point. Yes, please don't do that, please just write these
directly into the option parser.
Aside from these remarks, this patch looks good to me.
--
Shawn.
^ permalink raw reply
* [PATCH] gitk: Update Swedish translation (280t0f0u).
From: Peter Krefting @ 2009-07-10 7:08 UTC (permalink / raw)
To: Git; +Cc: Paul Mackerras
In-Reply-To: <19075.65114.64967.831062@cargo.ozlabs.ibm.com>
Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
---
Use this version instead, I forgot to add the last changes in the last
version (it just had the updated commit message.)
po/sv.po | 795 +++++++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 559 insertions(+), 236 deletions(-)
diff --git a/po/sv.po b/po/sv.po
index 947b53f..624eb22 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,32 +1,40 @@
# Swedish translation for gitk
-# Copyright (C) 2005-2008 Paul Mackerras
+# Copyright (C) 2005-2009 Paul Mackerras
# This file is distributed under the same license as the gitk package.
#
-# Peter Karlsson <peter@softwolves.pp.se>, 2008.
+# Peter Krefting <peter@softwolves.pp.se>, 2008-2009.
# Mikael Magnusson <mikachu@gmail.com>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: sv\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-18 22:03+1100\n"
-"PO-Revision-Date: 2008-08-03 19:03+0200\n"
-"Last-Translator: Mikael Magnusson <mikachu@gmail.com>\n"
-"Language-Team: Swedish <sv@li.org>\n"
+"POT-Creation-Date: 2009-08-13 13:38+0100\n"
+"PO-Revision-Date: 2009-08-13 13:40+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\n"
+"Content-Transfer-Encoding: 8bit"
#: gitk:113
msgid "Couldn't get list of unmerged files:"
-msgstr "Kunde inta hämta lista över ej sammanslagna filer:"
+msgstr "Kunde inte hämta lista över ej sammanslagna filer:"
-#: gitk:340
+#: gitk:269
+msgid "Error parsing revisions:"
+msgstr "Fel vid tolkning av revisioner:"
+
+#: gitk:324
+msgid "Error executing --argscmd command:"
+msgstr "Fel vid körning av --argscmd-kommando:"
+
+#: gitk:337
msgid "No files selected: --merge specified but no files are unmerged."
msgstr ""
"Inga filer valdes: --merge angavs men det finns inga filer som inte har "
"slagits samman."
-#: gitk:343
+#: gitk:340
msgid ""
"No files selected: --merge specified but no unmerged files are within file "
"limit."
@@ -34,261 +42,290 @@ msgstr ""
"Inga filer valdes: --merge angavs men det finns inga filer inom "
"filbegränsningen."
-#: gitk:365 gitk:503
+#: gitk:362 gitk:509
msgid "Error executing git log:"
msgstr "Fel vid körning av git log:"
-#: gitk:378
+#: gitk:380 gitk:525
msgid "Reading"
msgstr "Läser"
-#: gitk:438 gitk:3462
+#: gitk:440 gitk:4123
msgid "Reading commits..."
msgstr "Läser incheckningar..."
-#: gitk:441 gitk:1528 gitk:3465
+#: gitk:443 gitk:1561 gitk:4126
msgid "No commits selected"
msgstr "Inga incheckningar markerade"
-#: gitk:1399
+#: gitk:1437
msgid "Can't parse git log output:"
msgstr "Kan inte tolka utdata från git log:"
-#: gitk:1605
+#: gitk:1657
msgid "No commit information available"
msgstr "Ingen incheckningsinformation är tillgänglig"
-#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466
+#: gitk:1793 gitk:1817 gitk:3916 gitk:8786 gitk:10322 gitk:10498
msgid "OK"
msgstr "OK"
-#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766
-#: gitk:9294 gitk:9467
+#: gitk:1819 gitk:3918 gitk:8383 gitk:8457 gitk:8567 gitk:8616 gitk:8788
+#: gitk:10323 gitk:10499
msgid "Cancel"
msgstr "Avbryt"
-#: gitk:1811
+#: gitk:1919
msgid "Update"
msgstr "Uppdatera"
-#: gitk:1812
+#: gitk:1920
msgid "Reload"
msgstr "Ladda om"
-#: gitk:1813
+#: gitk:1921
msgid "Reread references"
msgstr "Läs om referenser"
-#: gitk:1814
+#: gitk:1922
msgid "List references"
msgstr "Visa referenser"
-#: gitk:1815
+#: gitk:1924
+msgid "Start git gui"
+msgstr "Starta git gui"
+
+#: gitk:1926
msgid "Quit"
msgstr "Avsluta"
-#: gitk:1810
+#: gitk:1918
msgid "File"
msgstr "Arkiv"
-#: gitk:1818
+#: gitk:1930
msgid "Preferences"
msgstr "Inställningar"
-#: gitk:1817
+#: gitk:1929
msgid "Edit"
msgstr "Redigera"
-#: gitk:1821
+#: gitk:1934
msgid "New view..."
msgstr "Ny vy..."
-#: gitk:1822
+#: gitk:1935
msgid "Edit view..."
msgstr "Ändra vy..."
-#: gitk:1823
+#: gitk:1936
msgid "Delete view"
msgstr "Ta bort vy"
-#: gitk:1825
+#: gitk:1938
msgid "All files"
msgstr "Alla filer"
-#: gitk:1820 gitk:3196
+#: gitk:1933 gitk:3670
msgid "View"
msgstr "Visa"
-#: gitk:1828 gitk:2487
+#: gitk:1943 gitk:1953 gitk:2654
msgid "About gitk"
msgstr "Om gitk"
-#: gitk:1829
+#: gitk:1944 gitk:1958
msgid "Key bindings"
msgstr "Tangentbordsbindningar"
-#: gitk:1827
+#: gitk:1942 gitk:1957
msgid "Help"
msgstr "Hjälp"
-#: gitk:1887
+#: gitk:2018
msgid "SHA1 ID: "
msgstr "SHA1-id: "
-#: gitk:1918
+#: gitk:2049
msgid "Row"
msgstr "Rad"
-#: gitk:1949
+#: gitk:2080
msgid "Find"
msgstr "Sök"
-#: gitk:1950
+#: gitk:2081
msgid "next"
msgstr "nästa"
-#: gitk:1951
+#: gitk:2082
msgid "prev"
msgstr "föreg"
-#: gitk:1952
+#: gitk:2083
msgid "commit"
msgstr "incheckning"
-#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621
+#: gitk:2086 gitk:2088 gitk:4284 gitk:4307 gitk:4331 gitk:6272 gitk:6344
+#: gitk:6428
msgid "containing:"
msgstr "som innehåller:"
-#: gitk:1958 gitk:2954 gitk:2959 gitk:3692
+#: gitk:2089 gitk:3162 gitk:3167 gitk:4359
msgid "touching paths:"
msgstr "som rör sökväg:"
-#: gitk:1959 gitk:3697
+#: gitk:2090 gitk:4364
msgid "adding/removing string:"
msgstr "som lägger/till tar bort sträng:"
-#: gitk:1968 gitk:1970
+#: gitk:2099 gitk:2101
msgid "Exact"
msgstr "Exakt"
-#: gitk:1970 gitk:3773 gitk:5518
+#: gitk:2101 gitk:4439 gitk:6240
msgid "IgnCase"
msgstr "IgnVersaler"
-#: gitk:1970 gitk:3666 gitk:3771 gitk:5514
+#: gitk:2101 gitk:4333 gitk:4437 gitk:6236
msgid "Regexp"
msgstr "Reg.uttr."
-#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708
+#: gitk:2103 gitk:2104 gitk:4458 gitk:4488 gitk:4495 gitk:6364 gitk:6432
msgid "All fields"
msgstr "Alla fält"
-#: gitk:1973 gitk:3790 gitk:3822 gitk:5580
+#: gitk:2104 gitk:4456 gitk:4488 gitk:6303
msgid "Headline"
msgstr "Rubrik"
-#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109
+#: gitk:2105 gitk:4456 gitk:6303 gitk:6432 gitk:6866
msgid "Comments"
msgstr "Kommentarer"
-#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285
-#: gitk:7300
+#: gitk:2105 gitk:4456 gitk:4460 gitk:4495 gitk:6303 gitk:6801 gitk:8063
+#: gitk:8078
msgid "Author"
msgstr "Författare"
-#: gitk:1974 gitk:3790 gitk:5580 gitk:6047
+#: gitk:2105 gitk:4456 gitk:6303 gitk:6803
msgid "Committer"
msgstr "Incheckare"
-#: gitk:2003
+#: gitk:2134
msgid "Search"
msgstr "Sök"
-#: gitk:2010
+#: gitk:2141
msgid "Diff"
msgstr "Diff"
-#: gitk:2012
+#: gitk:2143
msgid "Old version"
msgstr "Gammal version"
-#: gitk:2014
+#: gitk:2145
msgid "New version"
msgstr "Ny version"
-#: gitk:2016
+#: gitk:2147
msgid "Lines of context"
msgstr "Rader sammanhang"
-#: gitk:2026
+#: gitk:2157
msgid "Ignore space change"
msgstr "Ignorera ändringar i blanksteg"
-#: gitk:2084
+#: gitk:2215
msgid "Patch"
msgstr "Patch"
-#: gitk:2086
+#: gitk:2217
msgid "Tree"
msgstr "Träd"
-#: gitk:2213 gitk:2226
+#: gitk:2361 gitk:2378
msgid "Diff this -> selected"
msgstr "Diff denna -> markerad"
-#: gitk:2214 gitk:2227
+#: gitk:2362 gitk:2379
msgid "Diff selected -> this"
msgstr "Diff markerad -> denna"
-#: gitk:2215 gitk:2228
+#: gitk:2363 gitk:2380
msgid "Make patch"
msgstr "Skapa patch"
-#: gitk:2216 gitk:7494
+#: gitk:2364 gitk:8441
msgid "Create tag"
msgstr "Skapa tagg"
-#: gitk:2217 gitk:7593
+#: gitk:2365 gitk:8547
msgid "Write commit to file"
msgstr "Skriv incheckning till fil"
-#: gitk:2218 gitk:7647
+#: gitk:2366 gitk:8604
msgid "Create new branch"
msgstr "Skapa ny gren"
-#: gitk:2219
+#: gitk:2367
msgid "Cherry-pick this commit"
msgstr "Plocka denna incheckning"
-#: gitk:2220
+#: gitk:2368
msgid "Reset HEAD branch to here"
msgstr "Återställ HEAD-grenen hit"
-#: gitk:2234
+#: gitk:2369
+msgid "Mark this commit"
+msgstr "Markera denna incheckning"
+
+#: gitk:2370
+msgid "Return to mark"
+msgstr "Återgå till markering"
+
+#: gitk:2371
+msgid "Find descendant of this and mark"
+msgstr "Hitta efterföljare till denna och markera"
+
+#: gitk:2372
+msgid "Compare with marked commit"
+msgstr "Jämför med markerad incheckning"
+
+#: gitk:2386
msgid "Check out this branch"
msgstr "Checka ut denna gren"
-#: gitk:2235
+#: gitk:2387
msgid "Remove this branch"
msgstr "Ta bort denna gren"
-#: gitk:2242
+#: gitk:2394
msgid "Highlight this too"
msgstr "Markera även detta"
-#: gitk:2243
+#: gitk:2395
msgid "Highlight this only"
msgstr "Markera bara detta"
-#: gitk:2244
+#: gitk:2396
msgid "External diff"
msgstr "Extern diff"
-#: gitk:2245
+#: gitk:2397
msgid "Blame parent commit"
-msgstr ""
+msgstr "Klandra föräldraincheckning"
-#: gitk:2488
+#: gitk:2404
+msgid "Show origin of this line"
+msgstr "Visa ursprunget för den här raden"
+
+#: gitk:2405
+msgid "Run git gui blame on this line"
+msgstr "Kör git gui blame på den här raden"
+
+#: gitk:2656
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
@@ -304,427 +341,672 @@ msgstr ""
"\n"
"Använd och vidareförmedla enligt villkoren i GNU General Public License"
-#: gitk:2496 gitk:2557 gitk:7943
+#: gitk:2664 gitk:2726 gitk:8969
msgid "Close"
msgstr "Stäng"
-#: gitk:2515
+#: gitk:2683
msgid "Gitk key bindings"
msgstr "Tangentbordsbindningar för Gitk"
-#: gitk:2517
+#: gitk:2686
msgid "Gitk key bindings:"
msgstr "Tangentbordsbindningar för Gitk:"
-#: gitk:2519
+#: gitk:2688
#, tcl-format
msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tAvsluta"
-#: gitk:2520
+#: gitk:2689
msgid "<Home>\t\tMove to first commit"
msgstr "<Home>\t\tGå till första incheckning"
-#: gitk:2521
+#: gitk:2690
msgid "<End>\t\tMove to last commit"
msgstr "<End>\t\tGå till sista incheckning"
-#: gitk:2522
+#: gitk:2691
msgid "<Up>, p, i\tMove up one commit"
msgstr "<Upp>, p, i\tGå en incheckning upp"
-#: gitk:2523
+#: gitk:2692
msgid "<Down>, n, k\tMove down one commit"
msgstr "<Ned>, n, k\tGå en incheckning ned"
-#: gitk:2524
+#: gitk:2693
msgid "<Left>, z, j\tGo back in history list"
msgstr "<Vänster>, z, j\tGå bakåt i historiken"
-#: gitk:2525
+#: gitk:2694
msgid "<Right>, x, l\tGo forward in history list"
msgstr "<Höger>, x, l\tGå framåt i historiken"
-#: gitk:2526
+#: gitk:2695
msgid "<PageUp>\tMove up one page in commit list"
msgstr "<PageUp>\tGå upp en sida i incheckningslistan"
-#: gitk:2527
+#: gitk:2696
msgid "<PageDown>\tMove down one page in commit list"
msgstr "<PageDown>\tGå ned en sida i incheckningslistan"
-#: gitk:2528
+#: gitk:2697
#, tcl-format
msgid "<%s-Home>\tScroll to top of commit list"
msgstr "<%s-Home>\tRulla till början av incheckningslistan"
-#: gitk:2529
+#: gitk:2698
#, tcl-format
msgid "<%s-End>\tScroll to bottom of commit list"
msgstr "<%s-End>\tRulla till slutet av incheckningslistan"
-#: gitk:2530
+#: gitk:2699
#, tcl-format
msgid "<%s-Up>\tScroll commit list up one line"
msgstr "<%s-Upp>\tRulla incheckningslistan upp ett steg"
-#: gitk:2531
+#: gitk:2700
#, tcl-format
msgid "<%s-Down>\tScroll commit list down one line"
msgstr "<%s-Ned>\tRulla incheckningslistan ned ett steg"
-#: gitk:2532
+#: gitk:2701
#, tcl-format
msgid "<%s-PageUp>\tScroll commit list up one page"
msgstr "<%s-PageUp>\tRulla incheckningslistan upp en sida"
-#: gitk:2533
+#: gitk:2702
#, tcl-format
msgid "<%s-PageDown>\tScroll commit list down one page"
msgstr "<%s-PageDown>\tRulla incheckningslistan ned en sida"
-#: gitk:2534
+#: gitk:2703
msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
msgstr "<Skift-Upp>\tSök bakåt (uppåt, senare incheckningar)"
-#: gitk:2535
+#: gitk:2704
msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
msgstr "<Skift-Ned>\tSök framåt (nedåt, tidigare incheckningar)"
-#: gitk:2536
+#: gitk:2705
msgid "<Delete>, b\tScroll diff view up one page"
msgstr "<Delete>, b\tRulla diffvisningen upp en sida"
-#: gitk:2537
+#: gitk:2706
msgid "<Backspace>\tScroll diff view up one page"
msgstr "<Baksteg>\tRulla diffvisningen upp en sida"
-#: gitk:2538
+#: gitk:2707
msgid "<Space>\t\tScroll diff view down one page"
msgstr "<Blanksteg>\tRulla diffvisningen ned en sida"
-#: gitk:2539
+#: gitk:2708
msgid "u\t\tScroll diff view up 18 lines"
msgstr "u\t\tRulla diffvisningen upp 18 rader"
-#: gitk:2540
+#: gitk:2709
msgid "d\t\tScroll diff view down 18 lines"
msgstr "d\t\tRulla diffvisningen ned 18 rader"
-#: gitk:2541
+#: gitk:2710
#, tcl-format
msgid "<%s-F>\t\tFind"
msgstr "<%s-F>\t\tSök"
-#: gitk:2542
+#: gitk:2711
#, tcl-format
msgid "<%s-G>\t\tMove to next find hit"
msgstr "<%s-G>\t\tGå till nästa sökträff"
-#: gitk:2543
+#: gitk:2712
msgid "<Return>\tMove to next find hit"
msgstr "<Return>\t\tGå till nästa sökträff"
-#: gitk:2544
-msgid "/\t\tMove to next find hit, or redo find"
-msgstr "/\t\tGå till nästa sökträff, eller sök på nytt"
+#: gitk:2713
+msgid "/\t\tFocus the search box"
+msgstr "/\t\tFokusera sökrutan"
-#: gitk:2545
+#: gitk:2714
msgid "?\t\tMove to previous find hit"
msgstr "?\t\tGå till föregående sökträff"
-#: gitk:2546
+#: gitk:2715
msgid "f\t\tScroll diff view to next file"
msgstr "f\t\tRulla diffvisningen till nästa fil"
-#: gitk:2547
+#: gitk:2716
#, tcl-format
msgid "<%s-S>\t\tSearch for next hit in diff view"
msgstr "<%s-S>\t\tGå till nästa sökträff i diffvisningen"
-#: gitk:2548
+#: gitk:2717
#, tcl-format
msgid "<%s-R>\t\tSearch for previous hit in diff view"
msgstr "<%s-R>\t\tGå till föregående sökträff i diffvisningen"
-#: gitk:2549
+#: gitk:2718
#, tcl-format
msgid "<%s-KP+>\tIncrease font size"
msgstr "<%s-Num+>\tÖka teckenstorlek"
-#: gitk:2550
+#: gitk:2719
#, tcl-format
msgid "<%s-plus>\tIncrease font size"
msgstr "<%s-plus>\tÖka teckenstorlek"
-#: gitk:2551
+#: gitk:2720
#, tcl-format
msgid "<%s-KP->\tDecrease font size"
msgstr "<%s-Num->\tMinska teckenstorlek"
-#: gitk:2552
+#: gitk:2721
#, tcl-format
msgid "<%s-minus>\tDecrease font size"
msgstr "<%s-minus>\tMinska teckenstorlek"
-#: gitk:2553
+#: gitk:2722
msgid "<F5>\t\tUpdate"
msgstr "<F5>\t\tUppdatera"
-#: gitk:3200
+#: gitk:3177
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "Fel vid hämtning av \"%s\" från %s:"
+
+#: gitk:3234 gitk:3243
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "Fel vid skapande av temporär katalog %s:"
+
+#: gitk:3255
+msgid "command failed:"
+msgstr "kommando misslyckades:"
+
+#: gitk:3401
+msgid "No such commit"
+msgstr "Incheckning saknas"
+
+#: gitk:3415
+msgid "git gui blame: command failed:"
+msgstr "git gui blame: kommando misslyckades:"
+
+#: gitk:3446
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "Kunde inte läsa sammanslagningshuvud: %s"
+
+#: gitk:3454
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "Fel vid läsning av index: %s"
+
+#: gitk:3479
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "Kunde inte starta git blame: %s"
+
+#: gitk:3482 gitk:6271
+msgid "Searching"
+msgstr "Söker"
+
+#: gitk:3514
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "Fel vid körning av git blame: %s"
+
+#: gitk:3542
+#, tcl-format
+msgid "That line comes from commit %s, which is not in this view"
+msgstr "Raden kommer från incheckningen %s, som inte finns i denna vy"
+
+#: gitk:3556
+msgid "External diff viewer failed:"
+msgstr "Externt diff-verktyg misslyckades:"
+
+#: gitk:3674
msgid "Gitk view definition"
msgstr "Definition av Gitk-vy"
-#: gitk:3225
-msgid "Name"
-msgstr "Namn"
-
-#: gitk:3228
+#: gitk:3678
msgid "Remember this view"
msgstr "Spara denna vy"
-#: gitk:3232
-msgid "Commits to include (arguments to git log):"
-msgstr "Incheckningar att ta med (argument till git log):"
+#: gitk:3679
+msgid "References (space separated list):"
+msgstr "Referenser (blankstegsavdelad lista):"
-#: gitk:3239
-msgid "Command to generate more commits to include:"
-msgstr "Kommando för att generera fler incheckningar att ta med:"
+#: gitk:3680
+msgid "Branches & tags:"
+msgstr "Grenar & taggar:"
+
+#: gitk:3681
+msgid "All refs"
+msgstr "Alla referenser"
+
+#: gitk:3682
+msgid "All (local) branches"
+msgstr "Alla (lokala) grenar"
+
+#: gitk:3683
+msgid "All tags"
+msgstr "Alla taggar"
+
+#: gitk:3684
+msgid "All remote-tracking branches"
+msgstr "Alla fjärrspårande grenar"
+
+#: gitk:3685
+msgid "Commit Info (regular expressions):"
+msgstr "Incheckningsinfo (reguljära uttryck):"
-#: gitk:3246
+#: gitk:3686
+msgid "Author:"
+msgstr "Författare:"
+
+#: gitk:3687
+msgid "Committer:"
+msgstr "Incheckare:"
+
+#: gitk:3688
+msgid "Commit Message:"
+msgstr "Incheckningsmeddelande:"
+
+#: gitk:3689
+msgid "Matches all Commit Info criteria"
+msgstr "Motsvarar alla kriterier för incheckningsinfo"
+
+#: gitk:3690
+msgid "Changes to Files:"
+msgstr "Ändringar av filer:"
+
+#: gitk:3691
+msgid "Fixed String"
+msgstr "Fast sträng"
+
+#: gitk:3692
+msgid "Regular Expression"
+msgstr "Reguljärt uttryck"
+
+#: gitk:3693
+msgid "Search string:"
+msgstr "Söksträng:"
+
+#: gitk:3694
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+msgstr ""
+"Incheckingsdatum (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+
+#: gitk:3695
+msgid "Since:"
+msgstr "Från:"
+
+#: gitk:3696
+msgid "Until:"
+msgstr "Till:"
+
+#: gitk:3697
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr "Begränsa och/eller hoppa över ett antal revisioner (positivt heltal):"
+
+#: gitk:3698
+msgid "Number to show:"
+msgstr "Antal att visa:"
+
+#: gitk:3699
+msgid "Number to skip:"
+msgstr "Antal att hoppa över:"
+
+#: gitk:3700
+msgid "Miscellaneous options:"
+msgstr "Diverse alternativ:"
+
+#: gitk:3701
+msgid "Strictly sort by date"
+msgstr "Strikt datumsortering"
+
+#: gitk:3702
+msgid "Mark branch sides"
+msgstr "Markera sidogrenar"
+
+#: gitk:3703
+msgid "Limit to first parent"
+msgstr "Begränsa till första förälder"
+
+#: gitk:3704
+msgid "Simple history"
+msgstr "Enkel historik"
+
+#: gitk:3705
+msgid "Additional arguments to git log:"
+msgstr "Ytterligare argument till git log:"
+
+#: gitk:3706
msgid "Enter files and directories to include, one per line:"
msgstr "Ange filer och kataloger att ta med, en per rad:"
-#: gitk:3293
+#: gitk:3707
+msgid "Command to generate more commits to include:"
+msgstr "Kommando för att generera fler incheckningar att ta med:"
+
+#: gitk:3829
+msgid "Gitk: edit view"
+msgstr "Gitk: redigera vy"
+
+#: gitk:3837
+msgid "-- criteria for selecting revisions"
+msgstr " - kriterier för val av revisioner"
+
+#: gitk:3842
+msgid "View Name:"
+msgstr "Namn på vy:"
+
+#: gitk:3917
+msgid "Apply (F5)"
+msgstr "Använd (F5)"
+
+#: gitk:3955
msgid "Error in commit selection arguments:"
msgstr "Fel i argument för val av incheckningar:"
-#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142
+#: gitk:4008 gitk:4060 gitk:4508 gitk:4522 gitk:5783 gitk:11196 gitk:11197
msgid "None"
msgstr "Inget"
-#: gitk:3790 gitk:5580 gitk:7287 gitk:7302
+#: gitk:4456 gitk:6303 gitk:8065 gitk:8080
msgid "Date"
msgstr "Datum"
-#: gitk:3790 gitk:5580
+#: gitk:4456 gitk:6303
msgid "CDate"
msgstr "Skapat datum"
-#: gitk:3939 gitk:3944
+#: gitk:4605 gitk:4610
msgid "Descendant"
msgstr "Avkomling"
-#: gitk:3940
+#: gitk:4606
msgid "Not descendant"
msgstr "Inte avkomling"
-#: gitk:3947 gitk:3952
+#: gitk:4613 gitk:4618
msgid "Ancestor"
msgstr "Förfader"
-#: gitk:3948
+#: gitk:4614
msgid "Not ancestor"
msgstr "Inte förfader"
-#: gitk:4187
+#: gitk:4904
msgid "Local changes checked in to index but not committed"
msgstr "Lokala ändringar sparade i indexet men inte incheckade"
-#: gitk:4220
+#: gitk:4940
msgid "Local uncommitted changes, not checked in to index"
msgstr "Lokala ändringar, ej sparade i indexet"
-#: gitk:5549
-msgid "Searching"
-msgstr "Söker"
+#: gitk:6621
+msgid "many"
+msgstr "många"
-#: gitk:6049
+#: gitk:6805
msgid "Tags:"
msgstr "Taggar:"
-#: gitk:6066 gitk:6072 gitk:7280
+#: gitk:6822 gitk:6828 gitk:8058
msgid "Parent"
msgstr "Förälder"
-#: gitk:6077
+#: gitk:6833
msgid "Child"
msgstr "Barn"
-#: gitk:6086
+#: gitk:6842
msgid "Branch"
msgstr "Gren"
-#: gitk:6089
+#: gitk:6845
msgid "Follows"
msgstr "Följer"
-#: gitk:6092
+#: gitk:6848
msgid "Precedes"
msgstr "Föregår"
-#: gitk:6378
-msgid "Error getting merge diffs:"
-msgstr "Fel vid hämtning av sammanslagningsdiff:"
+#: gitk:7346
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "Fel vid hämtning av diff: %s"
-#: gitk:7113
+#: gitk:7886
msgid "Goto:"
msgstr "Gå till:"
-#: gitk:7115
+#: gitk:7888
msgid "SHA1 ID:"
msgstr "SHA1-id:"
-#: gitk:7134
+#: gitk:7907
#, tcl-format
msgid "Short SHA1 id %s is ambiguous"
msgstr "Förkortat SHA1-id %s är tvetydigt"
-#: gitk:7146
+#: gitk:7914
+#, tcl-format
+msgid "Revision %s is not known"
+msgstr "Revisionen %s är inte känd"
+
+#: gitk:7924
#, tcl-format
msgid "SHA1 id %s is not known"
msgstr "SHA-id:t %s är inte känt"
-#: gitk:7148
+#: gitk:7926
#, tcl-format
-msgid "Tag/Head %s is not known"
-msgstr "Tagg/huvud %s är okänt"
+msgid "Revision %s is not in the current view"
+msgstr "Revisionen %s finns inte i den nuvarande vyn"
-#: gitk:7290
+#: gitk:8068
msgid "Children"
msgstr "Barn"
-#: gitk:7347
+#: gitk:8125
#, tcl-format
msgid "Reset %s branch to here"
msgstr "Återställ grenen %s hit"
-#: gitk:7349
+#: gitk:8127
msgid "Detached head: can't reset"
msgstr "Frånkopplad head: kan inte återställa"
-#: gitk:7381
+#: gitk:8236 gitk:8242
+msgid "Skipping merge commit "
+msgstr "Hoppar över sammanslagningsincheckning "
+
+#: gitk:8251 gitk:8256
+msgid "Error getting patch ID for "
+msgstr "Fel vid hämtning av patch-id för "
+
+#: gitk:8252 gitk:8257
+msgid " - stopping\n"
+msgstr " - stannar\n"
+
+#: gitk:8262 gitk:8265 gitk:8273 gitk:8283 gitk:8292
+msgid "Commit "
+msgstr "Incheckning "
+
+#: gitk:8266
+msgid ""
+" is the same patch as\n"
+" "
+msgstr ""
+" är samma patch som\n"
+" "
+
+#: gitk:8274
+msgid ""
+" differs from\n"
+" "
+msgstr ""
+" skiljer sig från\n"
+" "
+
+#: gitk:8276
+msgid "- stopping\n"
+msgstr "- stannar\n"
+
+#: gitk:8284 gitk:8293
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr " har %s barn - stannar\n"
+
+#: gitk:8324
msgid "Top"
msgstr "Topp"
-#: gitk:7382
+#: gitk:8325
msgid "From"
msgstr "Från"
-#: gitk:7387
+#: gitk:8330
msgid "To"
msgstr "Till"
-#: gitk:7410
+#: gitk:8354
msgid "Generate patch"
msgstr "Generera patch"
-#: gitk:7412
+#: gitk:8356
msgid "From:"
msgstr "Från:"
-#: gitk:7421
+#: gitk:8365
msgid "To:"
msgstr "Till:"
-#: gitk:7430
+#: gitk:8374
msgid "Reverse"
msgstr "Vänd"
-#: gitk:7432 gitk:7607
+#: gitk:8376 gitk:8561
msgid "Output file:"
msgstr "Utdatafil:"
-#: gitk:7438
+#: gitk:8382
msgid "Generate"
msgstr "Generera"
-#: gitk:7474
+#: gitk:8420
msgid "Error creating patch:"
msgstr "Fel vid generering av patch:"
-#: gitk:7496 gitk:7595 gitk:7649
+#: gitk:8443 gitk:8549 gitk:8606
msgid "ID:"
msgstr "Id:"
-#: gitk:7505
+#: gitk:8452
msgid "Tag name:"
msgstr "Taggnamn:"
-#: gitk:7509 gitk:7659
+#: gitk:8456 gitk:8615
msgid "Create"
msgstr "Skapa"
-#: gitk:7524
+#: gitk:8473
msgid "No tag name specified"
msgstr "Inget taggnamn angavs"
-#: gitk:7528
+#: gitk:8477
#, tcl-format
msgid "Tag \"%s\" already exists"
msgstr "Taggen \"%s\" finns redan"
-#: gitk:7534
+#: gitk:8483
msgid "Error creating tag:"
msgstr "Fel vid skapande av tagg:"
-#: gitk:7604
+#: gitk:8558
msgid "Command:"
msgstr "Kommando:"
-#: gitk:7612
+#: gitk:8566
msgid "Write"
msgstr "Skriv"
-#: gitk:7628
+#: gitk:8584
msgid "Error writing commit:"
msgstr "Fel vid skrivning av incheckning:"
-#: gitk:7654
+#: gitk:8611
msgid "Name:"
msgstr "Namn:"
-#: gitk:7674
+#: gitk:8634
msgid "Please specify a name for the new branch"
msgstr "Ange ett namn för den nya grenen"
-#: gitk:7703
+#: gitk:8639
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "Grenen \"%s\" finns redan. Skriva över?"
+
+#: gitk:8705
#, tcl-format
msgid "Commit %s is already included in branch %s -- really re-apply it?"
msgstr ""
"Incheckningen %s finns redan på grenen %s -- skall den verkligen appliceras "
"på nytt?"
-#: gitk:7708
+#: gitk:8710
msgid "Cherry-picking"
msgstr "Plockar"
-#: gitk:7720
+#: gitk:8719
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr ""
+"Cherry-pick misslyckades på grund av lokala ändringar i filen \"%s\".\n"
+"Checka in, återställ eller spara undan (stash) dina ändringar och försök "
+"igen."
+
+#: gitk:8725
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr ""
+"Cherry-pick misslyckades på grund av en sammanslagningskonflikt.\n"
+"Vill du köra git citool för att lösa den?"
+
+#: gitk:8741
msgid "No changes committed"
msgstr "Inga ändringar incheckade"
-#: gitk:7745
+#: gitk:8767
msgid "Confirm reset"
msgstr "Bekräfta återställning"
-#: gitk:7747
+#: gitk:8769
#, tcl-format
msgid "Reset branch %s to %s?"
msgstr "Återställa grenen %s till %s?"
-#: gitk:7751
+#: gitk:8773
msgid "Reset type:"
msgstr "Typ av återställning:"
-#: gitk:7755
+#: gitk:8777
msgid "Soft: Leave working tree and index untouched"
msgstr "Mjuk: Rör inte utcheckning och index"
-#: gitk:7758
+#: gitk:8780
msgid "Mixed: Leave working tree untouched, reset index"
msgstr "Blandad: Rör inte utcheckning, återställ index"
-#: gitk:7761
+#: gitk:8783
msgid ""
"Hard: Reset working tree and index\n"
"(discard ALL local changes)"
@@ -732,19 +1014,19 @@ msgstr ""
"Hård: Återställ utcheckning och index\n"
"(förkastar ALLA lokala ändringar)"
-#: gitk:7777
+#: gitk:8800
msgid "Resetting"
msgstr "Återställer"
-#: gitk:7834
+#: gitk:8857
msgid "Checking out"
msgstr "Checkar ut"
-#: gitk:7885
+#: gitk:8910
msgid "Cannot delete the currently checked-out branch"
msgstr "Kan inte ta bort den just nu utcheckade grenen"
-#: gitk:7891
+#: gitk:8916
#, tcl-format
msgid ""
"The commits on branch %s aren't on any other branch.\n"
@@ -753,16 +1035,16 @@ msgstr ""
"Incheckningarna på grenen %s existerar inte på någon annan gren.\n"
"Vill du verkligen ta bort grenen %s?"
-#: gitk:7922
+#: gitk:8947
#, tcl-format
msgid "Tags and heads: %s"
msgstr "Taggar och huvuden: %s"
-#: gitk:7936
+#: gitk:8962
msgid "Filter"
msgstr "Filter"
-#: gitk:8230
+#: gitk:9257
msgid ""
"Error reading commit topology information; branch and preceding/following "
"tag information will be incomplete."
@@ -770,129 +1052,161 @@ msgstr ""
"Fel vid läsning av information om incheckningstopologi; information om "
"grenar och föregående/senare taggar kommer inte vara komplett."
-#: gitk:9216
+#: gitk:10243
msgid "Tag"
msgstr "Tagg"
-#: gitk:9216
+#: gitk:10243
msgid "Id"
msgstr "Id"
-#: gitk:9262
+#: gitk:10291
msgid "Gitk font chooser"
msgstr "Teckensnittsväljare för Gitk"
-#: gitk:9279
+#: gitk:10308
msgid "B"
msgstr "F"
-#: gitk:9282
+#: gitk:10311
msgid "I"
msgstr "K"
-#: gitk:9375
+#: gitk:10407
msgid "Gitk preferences"
msgstr "Inställningar för Gitk"
-#: gitk:9376
+#: gitk:10409
msgid "Commit list display options"
msgstr "Alternativ för incheckningslistvy"
-#: gitk:9379
+#: gitk:10412
msgid "Maximum graph width (lines)"
msgstr "Maximal grafbredd (rader)"
-#: gitk:9383
+#: gitk:10416
#, tcl-format
msgid "Maximum graph width (% of pane)"
msgstr "Maximal grafbredd (% av ruta)"
-#: gitk:9388
+#: gitk:10420
msgid "Show local changes"
msgstr "Visa lokala ändringar"
-#: gitk:9393
+#: gitk:10423
msgid "Auto-select SHA1"
msgstr "Välj SHA1 automatiskt"
-#: gitk:9398
+#: gitk:10427
msgid "Diff display options"
msgstr "Alternativ för diffvy"
-#: gitk:9400
+#: gitk:10429
msgid "Tab spacing"
msgstr "Blanksteg för tabulatortecken"
-#: gitk:9404
+#: gitk:10432
msgid "Display nearby tags"
msgstr "Visa närliggande taggar"
-#: gitk:9409
+#: gitk:10435
+msgid "Hide remote refs"
+msgstr "Dölj fjärr-referenser"
+
+#: gitk:10438
msgid "Limit diffs to listed paths"
msgstr "Begränsa diff till listade sökvägar"
-#: gitk:9414
+#: gitk:10441
msgid "Support per-file encodings"
-msgstr ""
+msgstr "Stöd för filspecifika teckenkodningar"
-#: gitk:9421
+#: gitk:10447 gitk:10512
msgid "External diff tool"
msgstr "Externt diff-verktyg"
-#: gitk:9423
+#: gitk:10449
msgid "Choose..."
msgstr "Välj..."
-#: gitk:9428
+#: gitk:10454
msgid "Colors: press to choose"
msgstr "Färger: tryck för att välja"
-#: gitk:9431
+#: gitk:10457
msgid "Background"
msgstr "Bakgrund"
-#: gitk:9435
+#: gitk:10458 gitk:10488
+msgid "background"
+msgstr "bakgrund"
+
+#: gitk:10461
msgid "Foreground"
msgstr "Förgrund"
-#: gitk:9439
+#: gitk:10462
+msgid "foreground"
+msgstr "förgrund"
+
+#: gitk:10465
msgid "Diff: old lines"
msgstr "Diff: gamla rader"
-#: gitk:9444
+#: gitk:10466
+msgid "diff old lines"
+msgstr "diff gamla rader"
+
+#: gitk:10470
msgid "Diff: new lines"
msgstr "Diff: nya rader"
-#: gitk:9449
+#: gitk:10471
+msgid "diff new lines"
+msgstr "diff nya rader"
+
+#: gitk:10475
msgid "Diff: hunk header"
msgstr "Diff: delhuvud"
-#: gitk:9455
+#: gitk:10477
+msgid "diff hunk header"
+msgstr "diff delhuvud"
+
+#: gitk:10481
+msgid "Marked line bg"
+msgstr "Markerad rad bakgrund"
+
+#: gitk:10483
+msgid "marked line background"
+msgstr "markerad rad bakgrund"
+
+#: gitk:10487
msgid "Select bg"
msgstr "Markerad bakgrund"
-#: gitk:9459
+#: gitk:10491
msgid "Fonts: press to choose"
msgstr "Teckensnitt: tryck för att välja"
-#: gitk:9461
+#: gitk:10493
msgid "Main font"
msgstr "Huvudteckensnitt"
-#: gitk:9462
+#: gitk:10494
msgid "Diff display font"
msgstr "Teckensnitt för diffvisning"
-#: gitk:9463
+#: gitk:10495
msgid "User interface font"
msgstr "Teckensnitt för användargränssnitt"
-#: gitk:9488
+#: gitk:10522
#, tcl-format
msgid "Gitk: choose color for %s"
msgstr "Gitk: välj färg för %s"
-#: gitk:9934
+#: gitk:10973
msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
@@ -900,24 +1214,33 @@ msgstr ""
"Gitk kan tyvärr inte köra med denna version av Tcl/Tk.\n"
" Gitk kräver åtminstone Tcl/Tk 8.4."
-#: gitk:10047
+#: gitk:11101
msgid "Cannot find a git repository here."
msgstr "Hittar inget gitk-arkiv här."
-#: gitk:10051
+#: gitk:11105
#, tcl-format
msgid "Cannot find the git directory \"%s\"."
msgstr "Hittar inte git-katalogen \"%s\"."
-#: gitk:10098
+#: gitk:11152
#, tcl-format
msgid "Ambiguous argument '%s': both revision and filename"
msgstr "Tvetydigt argument \"%s\": både revision och filnamn"
-#: gitk:10110
+#: gitk:11164
msgid "Bad arguments to gitk:"
msgstr "Felaktiga argument till gitk:"
-#: gitk:10170
+#: gitk:11249
msgid "Command line"
msgstr "Kommandorad"
+
+#~ msgid "Tag/Head %s is not known"
+#~ msgstr "Tagg/huvud %s är okänt"
+
+#~ msgid "/\t\tMove to next find hit, or redo find"
+#~ msgstr "/\t\tGå till nästa sökträff, eller sök på nytt"
+
+#~ msgid "Name"
+#~ msgstr "Namn"
--
1.6.3.3
^ permalink raw reply related
* Re: [PATCH] gitk: Update Swedish translation (278t0f0u).
From: Peter Krefting @ 2009-08-13 12:47 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Git Mailing List
In-Reply-To: <19075.65114.64967.831062@cargo.ozlabs.ibm.com>
Paul Mackerras:
> Yes, but your mailer managed to munge the whitespace. It came through
> as format=flowed and charset=ISO-8859-15 again. Please resend.
It looked good in Alpine's postponed folder until I actually sent it... This
time, I just basically piped the format-patch output to postfix. Hopefully
that works better.
I get an error if I try to run msgfmt:
$ LC_ALL=C msgfmt -o /dev/null --check --statistics sv.po
sv.po:1090: 'msgstr' is not a valid Tcl format string, unlike 'msgid'.
Reason: In the directive number 1, the character 'a' is not a valid
conversion specifier.
msgfmt: found 1 fatal error
280 translated messages.
This is for the message "Maximum graph width (% of pane)" which
(incorrectly?) is marked as tcl-format.
--
\\// Peter - http://www.softwolves.pp.se/
^ permalink raw reply
* rebase-with-history -- a technique for rebasing without trashing your repo history
From: Michael Haggerty @ 2009-08-13 12:46 UTC (permalink / raw)
To: Bazaar, Git Mailing List, mercurial mailing list
Sorry to cross-post, but I think this might be interesting to all three
projects...
I've been thinking a lot about the problems of tracking upstream changes
while developing a feature branch. As I think everybody knows, both
rebasing and merging have serious disadvantages for this use case.
Rebasing discards history and makes it difficult to share
work-in-progress with others, whereas merging makes it difficult to
prepare a clean patch series that is suitable for submission upstream.
I've written some articles describing another possibility, which
combines the advantages of both methods. The key idea is to retain
rebase history correctly, on a patch-by-patch level. The resulting DAG
retains enough history to prevent problems with merge conflicts
downstream, while also allowing the patch series to be kept tidy.
(Please note that this technique only works for the typical "tracking
upstream" type of rebase; it doesn't help with rebases whose goals are
changing the order of commits, moving only part of a branch, rewriting
commits, etc.)
For more information, please see the full articles:
* A truce in the merge vs. rebase war? [1]
* Upstream rebase Just Works™ if history is retained [2]
* Rebase with history -- implementation ideas [3]
I'd appreciate feedback!
Michael
[1]
http://softwareswirl.blogspot.com/2009/04/truce-in-merge-vs-rebase-war.html
[2]
http://softwareswirl.blogspot.com/2009/08/upstream-rebase-just-works-if-history.html
[3]
http://softwareswirl.blogspot.com/2009/08/rebase-with-history-implementation.html
^ permalink raw reply
* [PATCH] gitk: Update Swedish translation (280t0f0u).
From: Peter Krefting @ 2009-07-10 7:08 UTC (permalink / raw)
To: Git
In-Reply-To: <19075.65114.64967.831062@cargo.ozlabs.ibm.com>
Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
---
po/sv.po | 775 +++++++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 542 insertions(+), 233 deletions(-)
diff --git a/po/sv.po b/po/sv.po
index 947b53f..7a20bc0 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,32 +1,40 @@
# Swedish translation for gitk
-# Copyright (C) 2005-2008 Paul Mackerras
+# Copyright (C) 2005-2009 Paul Mackerras
# This file is distributed under the same license as the gitk package.
#
-# Peter Karlsson <peter@softwolves.pp.se>, 2008.
+# Peter Krefting <peter@softwolves.pp.se>, 2008-2009.
# Mikael Magnusson <mikachu@gmail.com>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: sv\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-18 22:03+1100\n"
-"PO-Revision-Date: 2008-08-03 19:03+0200\n"
-"Last-Translator: Mikael Magnusson <mikachu@gmail.com>\n"
-"Language-Team: Swedish <sv@li.org>\n"
+"POT-Creation-Date: 2009-07-10 07:50+0100\n"
+"PO-Revision-Date: 2009-07-10 08:04+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\n"
#: gitk:113
msgid "Couldn't get list of unmerged files:"
-msgstr "Kunde inta hämta lista över ej sammanslagna filer:"
+msgstr "Kunde inte hämta lista över ej sammanslagna filer:"
-#: gitk:340
+#: gitk:269
+msgid "Error parsing revisions:"
+msgstr "Fel vid tolkning av revisioner:"
+
+#: gitk:324
+msgid "Error executing --argscmd command:"
+msgstr "Fel vid körning av --argscmd-kommando:"
+
+#: gitk:337
msgid "No files selected: --merge specified but no files are unmerged."
msgstr ""
"Inga filer valdes: --merge angavs men det finns inga filer som inte har "
"slagits samman."
-#: gitk:343
+#: gitk:340
msgid ""
"No files selected: --merge specified but no unmerged files are within file "
"limit."
@@ -34,261 +42,290 @@ msgstr ""
"Inga filer valdes: --merge angavs men det finns inga filer inom "
"filbegränsningen."
-#: gitk:365 gitk:503
+#: gitk:362 gitk:509
msgid "Error executing git log:"
msgstr "Fel vid körning av git log:"
-#: gitk:378
+#: gitk:380 gitk:525
msgid "Reading"
msgstr "Läser"
-#: gitk:438 gitk:3462
+#: gitk:440 gitk:4120
msgid "Reading commits..."
msgstr "Läser incheckningar..."
-#: gitk:441 gitk:1528 gitk:3465
+#: gitk:443 gitk:1561 gitk:4123
msgid "No commits selected"
msgstr "Inga incheckningar markerade"
-#: gitk:1399
+#: gitk:1437
msgid "Can't parse git log output:"
msgstr "Kan inte tolka utdata från git log:"
-#: gitk:1605
+#: gitk:1657
msgid "No commit information available"
msgstr "Ingen incheckningsinformation är tillgänglig"
-#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466
+#: gitk:1792 gitk:1816 gitk:3913 gitk:8778 gitk:10314 gitk:10486
msgid "OK"
msgstr "OK"
-#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766
-#: gitk:9294 gitk:9467
+#: gitk:1818 gitk:3915 gitk:8375 gitk:8449 gitk:8559 gitk:8608 gitk:8780
+#: gitk:10315 gitk:10487
msgid "Cancel"
msgstr "Avbryt"
-#: gitk:1811
+#: gitk:1918
msgid "Update"
msgstr "Uppdatera"
-#: gitk:1812
+#: gitk:1919
msgid "Reload"
msgstr "Ladda om"
-#: gitk:1813
+#: gitk:1920
msgid "Reread references"
msgstr "Läs om referenser"
-#: gitk:1814
+#: gitk:1921
msgid "List references"
msgstr "Visa referenser"
-#: gitk:1815
+#: gitk:1923
+msgid "Start git gui"
+msgstr "Starta git gui"
+
+#: gitk:1925
msgid "Quit"
msgstr "Avsluta"
-#: gitk:1810
+#: gitk:1917
msgid "File"
msgstr "Arkiv"
-#: gitk:1818
+#: gitk:1929
msgid "Preferences"
msgstr "Inställningar"
-#: gitk:1817
+#: gitk:1928
msgid "Edit"
msgstr "Redigera"
-#: gitk:1821
+#: gitk:1933
msgid "New view..."
msgstr "Ny vy..."
-#: gitk:1822
+#: gitk:1934
msgid "Edit view..."
msgstr "Ändra vy..."
-#: gitk:1823
+#: gitk:1935
msgid "Delete view"
msgstr "Ta bort vy"
-#: gitk:1825
+#: gitk:1937
msgid "All files"
msgstr "Alla filer"
-#: gitk:1820 gitk:3196
+#: gitk:1932 gitk:3667
msgid "View"
msgstr "Visa"
-#: gitk:1828 gitk:2487
+#: gitk:1942 gitk:1952 gitk:2651
msgid "About gitk"
msgstr "Om gitk"
-#: gitk:1829
+#: gitk:1943 gitk:1957
msgid "Key bindings"
msgstr "Tangentbordsbindningar"
-#: gitk:1827
+#: gitk:1941 gitk:1956
msgid "Help"
msgstr "Hjälp"
-#: gitk:1887
+#: gitk:2017
msgid "SHA1 ID: "
msgstr "SHA1-id: "
-#: gitk:1918
+#: gitk:2048
msgid "Row"
msgstr "Rad"
-#: gitk:1949
+#: gitk:2079
msgid "Find"
msgstr "Sök"
-#: gitk:1950
+#: gitk:2080
msgid "next"
msgstr "nästa"
-#: gitk:1951
+#: gitk:2081
msgid "prev"
msgstr "föreg"
-#: gitk:1952
+#: gitk:2082
msgid "commit"
msgstr "incheckning"
-#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621
+#: gitk:2085 gitk:2087 gitk:4281 gitk:4304 gitk:4328 gitk:6269 gitk:6341
+#: gitk:6425
msgid "containing:"
msgstr "som innehåller:"
-#: gitk:1958 gitk:2954 gitk:2959 gitk:3692
+#: gitk:2088 gitk:3159 gitk:3164 gitk:4356
msgid "touching paths:"
msgstr "som rör sökväg:"
-#: gitk:1959 gitk:3697
+#: gitk:2089 gitk:4361
msgid "adding/removing string:"
msgstr "som lägger/till tar bort sträng:"
-#: gitk:1968 gitk:1970
+#: gitk:2098 gitk:2100
msgid "Exact"
msgstr "Exakt"
-#: gitk:1970 gitk:3773 gitk:5518
+#: gitk:2100 gitk:4436 gitk:6237
msgid "IgnCase"
msgstr "IgnVersaler"
-#: gitk:1970 gitk:3666 gitk:3771 gitk:5514
+#: gitk:2100 gitk:4330 gitk:4434 gitk:6233
msgid "Regexp"
msgstr "Reg.uttr."
-#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708
+#: gitk:2102 gitk:2103 gitk:4455 gitk:4485 gitk:4492 gitk:6361 gitk:6429
msgid "All fields"
msgstr "Alla fält"
-#: gitk:1973 gitk:3790 gitk:3822 gitk:5580
+#: gitk:2103 gitk:4453 gitk:4485 gitk:6300
msgid "Headline"
msgstr "Rubrik"
-#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109
+#: gitk:2104 gitk:4453 gitk:6300 gitk:6429 gitk:6863
msgid "Comments"
msgstr "Kommentarer"
-#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285
-#: gitk:7300
+#: gitk:2104 gitk:4453 gitk:4457 gitk:4492 gitk:6300 gitk:6798 gitk:8055
+#: gitk:8070
msgid "Author"
msgstr "Författare"
-#: gitk:1974 gitk:3790 gitk:5580 gitk:6047
+#: gitk:2104 gitk:4453 gitk:6300 gitk:6800
msgid "Committer"
msgstr "Incheckare"
-#: gitk:2003
+#: gitk:2133
msgid "Search"
msgstr "Sök"
-#: gitk:2010
+#: gitk:2140
msgid "Diff"
msgstr "Diff"
-#: gitk:2012
+#: gitk:2142
msgid "Old version"
msgstr "Gammal version"
-#: gitk:2014
+#: gitk:2144
msgid "New version"
msgstr "Ny version"
-#: gitk:2016
+#: gitk:2146
msgid "Lines of context"
msgstr "Rader sammanhang"
-#: gitk:2026
+#: gitk:2156
msgid "Ignore space change"
msgstr "Ignorera ändringar i blanksteg"
-#: gitk:2084
+#: gitk:2214
msgid "Patch"
msgstr "Patch"
-#: gitk:2086
+#: gitk:2216
msgid "Tree"
msgstr "Träd"
-#: gitk:2213 gitk:2226
+#: gitk:2360 gitk:2377
msgid "Diff this -> selected"
msgstr "Diff denna -> markerad"
-#: gitk:2214 gitk:2227
+#: gitk:2361 gitk:2378
msgid "Diff selected -> this"
msgstr "Diff markerad -> denna"
-#: gitk:2215 gitk:2228
+#: gitk:2362 gitk:2379
msgid "Make patch"
msgstr "Skapa patch"
-#: gitk:2216 gitk:7494
+#: gitk:2363 gitk:8433
msgid "Create tag"
msgstr "Skapa tagg"
-#: gitk:2217 gitk:7593
+#: gitk:2364 gitk:8539
msgid "Write commit to file"
msgstr "Skriv incheckning till fil"
-#: gitk:2218 gitk:7647
+#: gitk:2365 gitk:8596
msgid "Create new branch"
msgstr "Skapa ny gren"
-#: gitk:2219
+#: gitk:2366
msgid "Cherry-pick this commit"
msgstr "Plocka denna incheckning"
-#: gitk:2220
+#: gitk:2367
msgid "Reset HEAD branch to here"
msgstr "Återställ HEAD-grenen hit"
-#: gitk:2234
+#: gitk:2368
+msgid "Mark this commit"
+msgstr "Markera denna incheckning"
+
+#: gitk:2369
+msgid "Return to mark"
+msgstr "Återgå till markering"
+
+#: gitk:2370
+msgid "Find descendant of this and mark"
+msgstr "Hitta efterföljare till denna och markera"
+
+#: gitk:2371
+msgid "Compare with marked commit"
+msgstr "Jämför med markerad incheckning"
+
+#: gitk:2385
msgid "Check out this branch"
msgstr "Checka ut denna gren"
-#: gitk:2235
+#: gitk:2386
msgid "Remove this branch"
msgstr "Ta bort denna gren"
-#: gitk:2242
+#: gitk:2393
msgid "Highlight this too"
msgstr "Markera även detta"
-#: gitk:2243
+#: gitk:2394
msgid "Highlight this only"
msgstr "Markera bara detta"
-#: gitk:2244
+#: gitk:2395
msgid "External diff"
msgstr "Extern diff"
-#: gitk:2245
+#: gitk:2396
msgid "Blame parent commit"
-msgstr ""
+msgstr "Klandra föräldraincheckning"
+
+#: gitk:2403
+msgid "Show origin of this line"
+msgstr "Visa ursprunget för den här raden"
+
+#: gitk:2404
+msgid "Run git gui blame on this line"
+msgstr "Kör git gui blame på den här raden"
-#: gitk:2488
+#: gitk:2653
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
@@ -304,427 +341,665 @@ msgstr ""
"\n"
"Använd och vidareförmedla enligt villkoren i GNU General Public License"
-#: gitk:2496 gitk:2557 gitk:7943
+#: gitk:2661 gitk:2723 gitk:8961
msgid "Close"
msgstr "Stäng"
-#: gitk:2515
+#: gitk:2680
msgid "Gitk key bindings"
msgstr "Tangentbordsbindningar för Gitk"
-#: gitk:2517
+#: gitk:2683
msgid "Gitk key bindings:"
msgstr "Tangentbordsbindningar för Gitk:"
-#: gitk:2519
+#: gitk:2685
#, tcl-format
msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tAvsluta"
-#: gitk:2520
+#: gitk:2686
msgid "<Home>\t\tMove to first commit"
msgstr "<Home>\t\tGå till första incheckning"
-#: gitk:2521
+#: gitk:2687
msgid "<End>\t\tMove to last commit"
msgstr "<End>\t\tGå till sista incheckning"
-#: gitk:2522
+#: gitk:2688
msgid "<Up>, p, i\tMove up one commit"
msgstr "<Upp>, p, i\tGå en incheckning upp"
-#: gitk:2523
+#: gitk:2689
msgid "<Down>, n, k\tMove down one commit"
msgstr "<Ned>, n, k\tGå en incheckning ned"
-#: gitk:2524
+#: gitk:2690
msgid "<Left>, z, j\tGo back in history list"
msgstr "<Vänster>, z, j\tGå bakåt i historiken"
-#: gitk:2525
+#: gitk:2691
msgid "<Right>, x, l\tGo forward in history list"
msgstr "<Höger>, x, l\tGå framåt i historiken"
-#: gitk:2526
+#: gitk:2692
msgid "<PageUp>\tMove up one page in commit list"
msgstr "<PageUp>\tGå upp en sida i incheckningslistan"
-#: gitk:2527
+#: gitk:2693
msgid "<PageDown>\tMove down one page in commit list"
msgstr "<PageDown>\tGå ned en sida i incheckningslistan"
-#: gitk:2528
+#: gitk:2694
#, tcl-format
msgid "<%s-Home>\tScroll to top of commit list"
msgstr "<%s-Home>\tRulla till början av incheckningslistan"
-#: gitk:2529
+#: gitk:2695
#, tcl-format
msgid "<%s-End>\tScroll to bottom of commit list"
msgstr "<%s-End>\tRulla till slutet av incheckningslistan"
-#: gitk:2530
+#: gitk:2696
#, tcl-format
msgid "<%s-Up>\tScroll commit list up one line"
msgstr "<%s-Upp>\tRulla incheckningslistan upp ett steg"
-#: gitk:2531
+#: gitk:2697
#, tcl-format
msgid "<%s-Down>\tScroll commit list down one line"
msgstr "<%s-Ned>\tRulla incheckningslistan ned ett steg"
-#: gitk:2532
+#: gitk:2698
#, tcl-format
msgid "<%s-PageUp>\tScroll commit list up one page"
msgstr "<%s-PageUp>\tRulla incheckningslistan upp en sida"
-#: gitk:2533
+#: gitk:2699
#, tcl-format
msgid "<%s-PageDown>\tScroll commit list down one page"
msgstr "<%s-PageDown>\tRulla incheckningslistan ned en sida"
-#: gitk:2534
+#: gitk:2700
msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
msgstr "<Skift-Upp>\tSök bakåt (uppåt, senare incheckningar)"
-#: gitk:2535
+#: gitk:2701
msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
msgstr "<Skift-Ned>\tSök framåt (nedåt, tidigare incheckningar)"
-#: gitk:2536
+#: gitk:2702
msgid "<Delete>, b\tScroll diff view up one page"
msgstr "<Delete>, b\tRulla diffvisningen upp en sida"
-#: gitk:2537
+#: gitk:2703
msgid "<Backspace>\tScroll diff view up one page"
msgstr "<Baksteg>\tRulla diffvisningen upp en sida"
-#: gitk:2538
+#: gitk:2704
msgid "<Space>\t\tScroll diff view down one page"
msgstr "<Blanksteg>\tRulla diffvisningen ned en sida"
-#: gitk:2539
+#: gitk:2705
msgid "u\t\tScroll diff view up 18 lines"
msgstr "u\t\tRulla diffvisningen upp 18 rader"
-#: gitk:2540
+#: gitk:2706
msgid "d\t\tScroll diff view down 18 lines"
msgstr "d\t\tRulla diffvisningen ned 18 rader"
-#: gitk:2541
+#: gitk:2707
#, tcl-format
msgid "<%s-F>\t\tFind"
msgstr "<%s-F>\t\tSök"
-#: gitk:2542
+#: gitk:2708
#, tcl-format
msgid "<%s-G>\t\tMove to next find hit"
msgstr "<%s-G>\t\tGå till nästa sökträff"
-#: gitk:2543
+#: gitk:2709
msgid "<Return>\tMove to next find hit"
msgstr "<Return>\t\tGå till nästa sökträff"
-#: gitk:2544
-msgid "/\t\tMove to next find hit, or redo find"
-msgstr "/\t\tGå till nästa sökträff, eller sök på nytt"
+#: gitk:2710
+msgid "/\t\tFocus the search box"
+msgstr "/\t\tFokusera sökrutan"
-#: gitk:2545
+#: gitk:2711
msgid "?\t\tMove to previous find hit"
msgstr "?\t\tGå till föregående sökträff"
-#: gitk:2546
+#: gitk:2712
msgid "f\t\tScroll diff view to next file"
msgstr "f\t\tRulla diffvisningen till nästa fil"
-#: gitk:2547
+#: gitk:2713
#, tcl-format
msgid "<%s-S>\t\tSearch for next hit in diff view"
msgstr "<%s-S>\t\tGå till nästa sökträff i diffvisningen"
-#: gitk:2548
+#: gitk:2714
#, tcl-format
msgid "<%s-R>\t\tSearch for previous hit in diff view"
msgstr "<%s-R>\t\tGå till föregående sökträff i diffvisningen"
-#: gitk:2549
+#: gitk:2715
#, tcl-format
msgid "<%s-KP+>\tIncrease font size"
msgstr "<%s-Num+>\tÖka teckenstorlek"
-#: gitk:2550
+#: gitk:2716
#, tcl-format
msgid "<%s-plus>\tIncrease font size"
msgstr "<%s-plus>\tÖka teckenstorlek"
-#: gitk:2551
+#: gitk:2717
#, tcl-format
msgid "<%s-KP->\tDecrease font size"
msgstr "<%s-Num->\tMinska teckenstorlek"
-#: gitk:2552
+#: gitk:2718
#, tcl-format
msgid "<%s-minus>\tDecrease font size"
msgstr "<%s-minus>\tMinska teckenstorlek"
-#: gitk:2553
+#: gitk:2719
msgid "<F5>\t\tUpdate"
msgstr "<F5>\t\tUppdatera"
-#: gitk:3200
+#: gitk:3174
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "Fel vid hämtning av \"%s\" från %s:"
+
+#: gitk:3231 gitk:3240
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "Fel vid skapande av temporär katalog %s:"
+
+#: gitk:3252
+msgid "command failed:"
+msgstr "kommando misslyckades:"
+
+#: gitk:3398
+msgid "No such commit"
+msgstr "Incheckning saknas"
+
+#: gitk:3412
+msgid "git gui blame: command failed:"
+msgstr "git gui blame: kommando misslyckades:"
+
+#: gitk:3443
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "Kunde inte läsa sammanslagningshuvud: %s"
+
+#: gitk:3451
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "Fel vid läsning av index: %s"
+
+#: gitk:3476
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "Kunde inte starta git blame: %s"
+
+#: gitk:3479 gitk:6268
+msgid "Searching"
+msgstr "Söker"
+
+#: gitk:3511
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "Fel vid körning av git blame: %s"
+
+#: gitk:3539
+#, tcl-format
+msgid "That line comes from commit %s, which is not in this view"
+msgstr "Raden kommer från incheckningen %s, som inte finns i denna vy"
+
+#: gitk:3553
+msgid "External diff viewer failed:"
+msgstr "Externt diff-verktyg misslyckades:"
+
+#: gitk:3671
msgid "Gitk view definition"
msgstr "Definition av Gitk-vy"
-#: gitk:3225
-msgid "Name"
-msgstr "Namn"
-
-#: gitk:3228
+#: gitk:3675
msgid "Remember this view"
msgstr "Spara denna vy"
-#: gitk:3232
-msgid "Commits to include (arguments to git log):"
-msgstr "Incheckningar att ta med (argument till git log):"
+#: gitk:3676
+msgid "References (space separated list):"
+msgstr "Referenser (blankstegsavdelad lista):"
-#: gitk:3239
-msgid "Command to generate more commits to include:"
-msgstr "Kommando för att generera fler incheckningar att ta med:"
+#: gitk:3677
+msgid "Branches & tags:"
+msgstr "Grenar & taggar:"
+
+#: gitk:3678
+msgid "All refs"
+msgstr "Alla referenser"
+
+#: gitk:3679
+msgid "All (local) branches"
+msgstr "Alla (lokala) grenar"
+
+#: gitk:3680
+msgid "All tags"
+msgstr "Alla taggar"
+
+#: gitk:3681
+msgid "All remote-tracking branches"
+msgstr "Alla fjärrspårande grenar"
+
+#: gitk:3682
+msgid "Commit Info (regular expressions):"
+msgstr "Incheckningsinfo (reguljära uttryck):"
+
+#: gitk:3683
+msgid "Author:"
+msgstr "Författare:"
+
+#: gitk:3684
+msgid "Committer:"
+msgstr "Incheckare:"
+
+#: gitk:3685
+msgid "Commit Message:"
+msgstr "Incheckningsmeddelande:"
+
+#: gitk:3686
+msgid "Matches all Commit Info criteria"
+msgstr "Motsvarar alla kriterier för incheckningsinfo"
+
+#: gitk:3687
+msgid "Changes to Files:"
+msgstr "Ändringar av filer:"
+
+#: gitk:3688
+msgid "Fixed String"
+msgstr "Fast sträng"
+
+#: gitk:3689
+msgid "Regular Expression"
+msgstr "Reguljärt uttryck"
+
+#: gitk:3690
+msgid "Search string:"
+msgstr "Söksträng:"
+
+#: gitk:3691
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+msgstr ""
+"Incheckingsdatum (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+
+#: gitk:3692
+msgid "Since:"
+msgstr "Från:"
+
+#: gitk:3693
+msgid "Until:"
+msgstr "Till:"
+
+#: gitk:3694
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr "Begränsa och/eller hoppa över ett antal revisioner (positivt heltal):"
+
+#: gitk:3695
+msgid "Number to show:"
+msgstr "Antal att visa:"
+
+#: gitk:3696
+msgid "Number to skip:"
+msgstr "Antal att hoppa över:"
+
+#: gitk:3697
+msgid "Miscellaneous options:"
+msgstr "Diverse alternativ:"
-#: gitk:3246
+#: gitk:3698
+msgid "Strictly sort by date"
+msgstr "Strikt datumsortering"
+
+#: gitk:3699
+msgid "Mark branch sides"
+msgstr "Markera sidogrenar"
+
+#: gitk:3700
+msgid "Limit to first parent"
+msgstr "Begränsa till första förälder"
+
+#: gitk:3701
+msgid "Simple history"
+msgstr "Enkel historik"
+
+#: gitk:3702
+msgid "Additional arguments to git log:"
+msgstr "Ytterligare argument till git log:"
+
+#: gitk:3703
msgid "Enter files and directories to include, one per line:"
msgstr "Ange filer och kataloger att ta med, en per rad:"
-#: gitk:3293
+#: gitk:3704
+msgid "Command to generate more commits to include:"
+msgstr "Kommando för att generera fler incheckningar att ta med:"
+
+#: gitk:3826
+msgid "Gitk: edit view"
+msgstr "Gitk: redigera vy"
+
+#: gitk:3834
+msgid "-- criteria for selecting revisions"
+msgstr " - kriterier för val av revisioner"
+
+#: gitk:3839
+msgid "View Name:"
+msgstr "Namn på vy:"
+
+#: gitk:3914
+msgid "Apply (F5)"
+msgstr "Använd (F5)"
+
+#: gitk:3952
msgid "Error in commit selection arguments:"
msgstr "Fel i argument för val av incheckningar:"
-#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142
+#: gitk:4005 gitk:4057 gitk:4505 gitk:4519 gitk:5780 gitk:11179 gitk:11180
msgid "None"
msgstr "Inget"
-#: gitk:3790 gitk:5580 gitk:7287 gitk:7302
+#: gitk:4453 gitk:6300 gitk:8057 gitk:8072
msgid "Date"
msgstr "Datum"
-#: gitk:3790 gitk:5580
+#: gitk:4453 gitk:6300
msgid "CDate"
msgstr "Skapat datum"
-#: gitk:3939 gitk:3944
+#: gitk:4602 gitk:4607
msgid "Descendant"
msgstr "Avkomling"
-#: gitk:3940
+#: gitk:4603
msgid "Not descendant"
msgstr "Inte avkomling"
-#: gitk:3947 gitk:3952
+#: gitk:4610 gitk:4615
msgid "Ancestor"
msgstr "Förfader"
-#: gitk:3948
+#: gitk:4611
msgid "Not ancestor"
msgstr "Inte förfader"
-#: gitk:4187
+#: gitk:4901
msgid "Local changes checked in to index but not committed"
msgstr "Lokala ändringar sparade i indexet men inte incheckade"
-#: gitk:4220
+#: gitk:4937
msgid "Local uncommitted changes, not checked in to index"
msgstr "Lokala ändringar, ej sparade i indexet"
-#: gitk:5549
-msgid "Searching"
-msgstr "Söker"
+#: gitk:6618
+msgid "many"
+msgstr "många"
-#: gitk:6049
+#: gitk:6802
msgid "Tags:"
msgstr "Taggar:"
-#: gitk:6066 gitk:6072 gitk:7280
+#: gitk:6819 gitk:6825 gitk:8050
msgid "Parent"
msgstr "Förälder"
-#: gitk:6077
+#: gitk:6830
msgid "Child"
msgstr "Barn"
-#: gitk:6086
+#: gitk:6839
msgid "Branch"
msgstr "Gren"
-#: gitk:6089
+#: gitk:6842
msgid "Follows"
msgstr "Följer"
-#: gitk:6092
+#: gitk:6845
msgid "Precedes"
msgstr "Föregår"
-#: gitk:6378
-msgid "Error getting merge diffs:"
-msgstr "Fel vid hämtning av sammanslagningsdiff:"
+#: gitk:7343
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "Fel vid hämtning av diff: %s"
-#: gitk:7113
+#: gitk:7883
msgid "Goto:"
msgstr "Gå till:"
-#: gitk:7115
+#: gitk:7885
msgid "SHA1 ID:"
msgstr "SHA1-id:"
-#: gitk:7134
+#: gitk:7904
#, tcl-format
msgid "Short SHA1 id %s is ambiguous"
msgstr "Förkortat SHA1-id %s är tvetydigt"
-#: gitk:7146
+#: gitk:7916
#, tcl-format
msgid "SHA1 id %s is not known"
msgstr "SHA-id:t %s är inte känt"
-#: gitk:7148
+#: gitk:7918
#, tcl-format
msgid "Tag/Head %s is not known"
msgstr "Tagg/huvud %s är okänt"
-#: gitk:7290
+#: gitk:8060
msgid "Children"
msgstr "Barn"
-#: gitk:7347
+#: gitk:8117
#, tcl-format
msgid "Reset %s branch to here"
msgstr "Återställ grenen %s hit"
-#: gitk:7349
+#: gitk:8119
msgid "Detached head: can't reset"
msgstr "Frånkopplad head: kan inte återställa"
-#: gitk:7381
+#: gitk:8228 gitk:8234
+msgid "Skipping merge commit "
+msgstr "Hoppar över sammanslagningsincheckning "
+
+#: gitk:8243 gitk:8248
+msgid "Error getting patch ID for "
+msgstr "Fel vid hämtning av patch-id för "
+
+#: gitk:8244 gitk:8249
+msgid " - stopping\n"
+msgstr " - stannar\n"
+
+#: gitk:8254 gitk:8257 gitk:8265 gitk:8275 gitk:8284
+msgid "Commit "
+msgstr "Incheckning "
+
+#: gitk:8258
+msgid ""
+" is the same patch as\n"
+" "
+msgstr " är samma patch som\n"
+" "
+
+#: gitk:8266
+msgid ""
+" differs from\n"
+" "
+msgstr ""
+" skiljer sig från\n"
+" "
+
+#: gitk:8268
+msgid "- stopping\n"
+msgstr "- stannar\n"
+
+#: gitk:8276 gitk:8285
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr " har %s barn - stannar\n"
+
+#: gitk:8316
msgid "Top"
msgstr "Topp"
-#: gitk:7382
+#: gitk:8317
msgid "From"
msgstr "Från"
-#: gitk:7387
+#: gitk:8322
msgid "To"
msgstr "Till"
-#: gitk:7410
+#: gitk:8346
msgid "Generate patch"
msgstr "Generera patch"
-#: gitk:7412
+#: gitk:8348
msgid "From:"
msgstr "Från:"
-#: gitk:7421
+#: gitk:8357
msgid "To:"
msgstr "Till:"
-#: gitk:7430
+#: gitk:8366
msgid "Reverse"
msgstr "Vänd"
-#: gitk:7432 gitk:7607
+#: gitk:8368 gitk:8553
msgid "Output file:"
msgstr "Utdatafil:"
-#: gitk:7438
+#: gitk:8374
msgid "Generate"
msgstr "Generera"
-#: gitk:7474
+#: gitk:8412
msgid "Error creating patch:"
msgstr "Fel vid generering av patch:"
-#: gitk:7496 gitk:7595 gitk:7649
+#: gitk:8435 gitk:8541 gitk:8598
msgid "ID:"
msgstr "Id:"
-#: gitk:7505
+#: gitk:8444
msgid "Tag name:"
msgstr "Taggnamn:"
-#: gitk:7509 gitk:7659
+#: gitk:8448 gitk:8607
msgid "Create"
msgstr "Skapa"
-#: gitk:7524
+#: gitk:8465
msgid "No tag name specified"
msgstr "Inget taggnamn angavs"
-#: gitk:7528
+#: gitk:8469
#, tcl-format
msgid "Tag \"%s\" already exists"
msgstr "Taggen \"%s\" finns redan"
-#: gitk:7534
+#: gitk:8475
msgid "Error creating tag:"
msgstr "Fel vid skapande av tagg:"
-#: gitk:7604
+#: gitk:8550
msgid "Command:"
msgstr "Kommando:"
-#: gitk:7612
+#: gitk:8558
msgid "Write"
msgstr "Skriv"
-#: gitk:7628
+#: gitk:8576
msgid "Error writing commit:"
msgstr "Fel vid skrivning av incheckning:"
-#: gitk:7654
+#: gitk:8603
msgid "Name:"
msgstr "Namn:"
-#: gitk:7674
+#: gitk:8626
msgid "Please specify a name for the new branch"
msgstr "Ange ett namn för den nya grenen"
-#: gitk:7703
+#: gitk:8631
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "Grenen \"%s\" finns redan. Skriva över?"
+
+#: gitk:8697
#, tcl-format
msgid "Commit %s is already included in branch %s -- really re-apply it?"
msgstr ""
"Incheckningen %s finns redan på grenen %s -- skall den verkligen appliceras "
"på nytt?"
-#: gitk:7708
+#: gitk:8702
msgid "Cherry-picking"
msgstr "Plockar"
-#: gitk:7720
+#: gitk:8711
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr ""
+"Cherry-pick misslyckades på grund av lokala ändringar i filen \"%s\".\n"
+"Checka in, återställ eller spara undan (stash) dina ändringar och försök igen."
+
+#: gitk:8717
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr ""
+"Cherry-pick misslyckades på grund av en sammanslagningskonflikt.\n"
+"Vill du köra git citool för att lösa den?"
+
+#: gitk:8733
msgid "No changes committed"
msgstr "Inga ändringar incheckade"
-#: gitk:7745
+#: gitk:8759
msgid "Confirm reset"
msgstr "Bekräfta återställning"
-#: gitk:7747
+#: gitk:8761
#, tcl-format
msgid "Reset branch %s to %s?"
msgstr "Återställa grenen %s till %s?"
-#: gitk:7751
+#: gitk:8765
msgid "Reset type:"
msgstr "Typ av återställning:"
-#: gitk:7755
+#: gitk:8769
msgid "Soft: Leave working tree and index untouched"
msgstr "Mjuk: Rör inte utcheckning och index"
-#: gitk:7758
+#: gitk:8772
msgid "Mixed: Leave working tree untouched, reset index"
msgstr "Blandad: Rör inte utcheckning, återställ index"
-#: gitk:7761
+#: gitk:8775
msgid ""
"Hard: Reset working tree and index\n"
"(discard ALL local changes)"
@@ -732,19 +1007,19 @@ msgstr ""
"Hård: Återställ utcheckning och index\n"
"(förkastar ALLA lokala ändringar)"
-#: gitk:7777
+#: gitk:8792
msgid "Resetting"
msgstr "Återställer"
-#: gitk:7834
+#: gitk:8849
msgid "Checking out"
msgstr "Checkar ut"
-#: gitk:7885
+#: gitk:8902
msgid "Cannot delete the currently checked-out branch"
msgstr "Kan inte ta bort den just nu utcheckade grenen"
-#: gitk:7891
+#: gitk:8908
#, tcl-format
msgid ""
"The commits on branch %s aren't on any other branch.\n"
@@ -753,16 +1028,16 @@ msgstr ""
"Incheckningarna på grenen %s existerar inte på någon annan gren.\n"
"Vill du verkligen ta bort grenen %s?"
-#: gitk:7922
+#: gitk:8939
#, tcl-format
msgid "Tags and heads: %s"
msgstr "Taggar och huvuden: %s"
-#: gitk:7936
+#: gitk:8954
msgid "Filter"
msgstr "Filter"
-#: gitk:8230
+#: gitk:9249
msgid ""
"Error reading commit topology information; branch and preceding/following "
"tag information will be incomplete."
@@ -770,129 +1045,157 @@ msgstr ""
"Fel vid läsning av information om incheckningstopologi; information om "
"grenar och föregående/senare taggar kommer inte vara komplett."
-#: gitk:9216
+#: gitk:10235
msgid "Tag"
msgstr "Tagg"
-#: gitk:9216
+#: gitk:10235
msgid "Id"
msgstr "Id"
-#: gitk:9262
+#: gitk:10283
msgid "Gitk font chooser"
msgstr "Teckensnittsväljare för Gitk"
-#: gitk:9279
+#: gitk:10300
msgid "B"
msgstr "F"
-#: gitk:9282
+#: gitk:10303
msgid "I"
msgstr "K"
-#: gitk:9375
+#: gitk:10398
msgid "Gitk preferences"
msgstr "Inställningar för Gitk"
-#: gitk:9376
+#: gitk:10400
msgid "Commit list display options"
msgstr "Alternativ för incheckningslistvy"
-#: gitk:9379
+#: gitk:10403
msgid "Maximum graph width (lines)"
msgstr "Maximal grafbredd (rader)"
-#: gitk:9383
+#: gitk:10407
#, tcl-format
msgid "Maximum graph width (% of pane)"
msgstr "Maximal grafbredd (% av ruta)"
-#: gitk:9388
+#: gitk:10411
msgid "Show local changes"
msgstr "Visa lokala ändringar"
-#: gitk:9393
+#: gitk:10414
msgid "Auto-select SHA1"
msgstr "Välj SHA1 automatiskt"
-#: gitk:9398
+#: gitk:10418
msgid "Diff display options"
msgstr "Alternativ för diffvy"
-#: gitk:9400
+#: gitk:10420
msgid "Tab spacing"
msgstr "Blanksteg för tabulatortecken"
-#: gitk:9404
+#: gitk:10423
msgid "Display nearby tags"
msgstr "Visa närliggande taggar"
-#: gitk:9409
+#: gitk:10426
msgid "Limit diffs to listed paths"
msgstr "Begränsa diff till listade sökvägar"
-#: gitk:9414
+#: gitk:10429
msgid "Support per-file encodings"
-msgstr ""
+msgstr "Stöd för filspecifika teckenkodningar"
-#: gitk:9421
+#: gitk:10435 gitk:10500
msgid "External diff tool"
msgstr "Externt diff-verktyg"
-#: gitk:9423
+#: gitk:10437
msgid "Choose..."
msgstr "Välj..."
-#: gitk:9428
+#: gitk:10442
msgid "Colors: press to choose"
msgstr "Färger: tryck för att välja"
-#: gitk:9431
+#: gitk:10445
msgid "Background"
msgstr "Bakgrund"
-#: gitk:9435
+#: gitk:10446 gitk:10476
+msgid "background"
+msgstr "bakgrund"
+
+#: gitk:10449
msgid "Foreground"
msgstr "Förgrund"
-#: gitk:9439
+#: gitk:10450
+msgid "foreground"
+msgstr "förgrund"
+
+#: gitk:10453
msgid "Diff: old lines"
msgstr "Diff: gamla rader"
-#: gitk:9444
+#: gitk:10454
+msgid "diff old lines"
+msgstr "diff gamla rader"
+
+#: gitk:10458
msgid "Diff: new lines"
msgstr "Diff: nya rader"
-#: gitk:9449
+#: gitk:10459
+msgid "diff new lines"
+msgstr "diff nya rader"
+
+#: gitk:10463
msgid "Diff: hunk header"
msgstr "Diff: delhuvud"
-#: gitk:9455
+#: gitk:10465
+msgid "diff hunk header"
+msgstr "diff delhuvud"
+
+#: gitk:10469
+msgid "Marked line bg"
+msgstr "Markerad rad bakgrund"
+
+#: gitk:10471
+msgid "marked line background"
+msgstr "markerad rad bakgrund"
+
+#: gitk:10475
msgid "Select bg"
msgstr "Markerad bakgrund"
-#: gitk:9459
+#: gitk:10479
msgid "Fonts: press to choose"
msgstr "Teckensnitt: tryck för att välja"
-#: gitk:9461
+#: gitk:10481
msgid "Main font"
msgstr "Huvudteckensnitt"
-#: gitk:9462
+#: gitk:10482
msgid "Diff display font"
msgstr "Teckensnitt för diffvisning"
-#: gitk:9463
+#: gitk:10483
msgid "User interface font"
msgstr "Teckensnitt för användargränssnitt"
-#: gitk:9488
+#: gitk:10510
#, tcl-format
msgid "Gitk: choose color for %s"
msgstr "Gitk: välj färg för %s"
-#: gitk:9934
+#: gitk:10957
msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
@@ -900,24 +1203,30 @@ msgstr ""
"Gitk kan tyvärr inte köra med denna version av Tcl/Tk.\n"
" Gitk kräver åtminstone Tcl/Tk 8.4."
-#: gitk:10047
+#: gitk:11084
msgid "Cannot find a git repository here."
msgstr "Hittar inget gitk-arkiv här."
-#: gitk:10051
+#: gitk:11088
#, tcl-format
msgid "Cannot find the git directory \"%s\"."
msgstr "Hittar inte git-katalogen \"%s\"."
-#: gitk:10098
+#: gitk:11135
#, tcl-format
msgid "Ambiguous argument '%s': both revision and filename"
msgstr "Tvetydigt argument \"%s\": både revision och filnamn"
-#: gitk:10110
+#: gitk:11147
msgid "Bad arguments to gitk:"
msgstr "Felaktiga argument till gitk:"
-#: gitk:10170
+#: gitk:11232
msgid "Command line"
msgstr "Kommandorad"
+
+#~ msgid "/\t\tMove to next find hit, or redo find"
+#~ msgstr "/\t\tGå till nästa sökträff, eller sök på nytt"
+
+#~ msgid "Name"
+#~ msgstr "Namn"
--
1.6.3.3
^ permalink raw reply related
* Re: [RFC PATCH v3 8/8] --sparse for porcelains
From: Nguyen Thai Ngoc Duy @ 2009-08-13 12:38 UTC (permalink / raw)
To: Jakub Narebski; +Cc: Junio C Hamano, git, Johannes Schindelin
In-Reply-To: <m3skfwnihn.fsf@localhost.localdomain>
On 8/13/09, Jakub Narebski <jnareb@gmail.com> wrote:
> Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
> > 2009/8/12 Junio C Hamano <gitster@pobox.com>:
>
> > > It could also require core.sparseworktree configuration set to true if we
> > > are really paranoid, but without the actual sparse specification file
> > > flipping that configuration to true would not be useful anyway, so in
> > > practice, giving --sparse-work-tree option to these Porcelain commands
> > > would be no-op, but --no-sparse-work-tree option would be useful to
> > > ignore $GIT_DIR/info/sparse and populate the work tree fully.
> >
> > Only part "ignore $GIT_DIR/info/sparse" is correct.
> > "--no-sparse-work-tree" would not clear CE_VALID from all entries in
> > index (which is good, if you are using CE_VALID for another purpose).
> >
> > To quit sparse checkout, you must create an empty
> > $GIT_DIR/info/sparse, then do "git checkout" or "git read-tree -m -u
> > HEAD" so that the tree is full populated, then you can remove
> > $GIT_DIR/info/sparse. Quite unintuitive..
>
>
> Hmmm... this looks like either argument for introducing --full option
> to git-checkout (ignore CE_VALID bit, checkout everything, and clean
> CE_VALID (?))...
>
> ...or for going with _separate_ bit for partial checkout, like in the
> very first version of this series, which otherwise functions like
> CE_VALID, or is just used to mark that CE_VALID was set using sparse.
In my opinion, making an empty .git/info/sparse to fully populate
worktree is not too bad. I wanted to have plumbing-level support in
git so that you could try sparse checkout on your projects (possibly
with a few additional scripts to make your life easier). Then good
Porcelain UI may emerge later (or in worst case, people would roll
their own sparse checkout).
--
Duy
^ permalink raw reply
* [PATCH v5 6/6] Implement 'git stash save --patch'
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
This adds a hunk-based mode to git-stash. You can select hunks from
the difference between HEAD and worktree, and git-stash will build a
stash that reflects these changes. The index state of the stash is
the same as your current index, and we also let --patch imply
--keep-index.
Note that because the selected hunks are rolled back from the worktree
but not the index, the resulting state may appear somewhat confusing
if you had also staged these changes. This is not entirely
satisfactory, but due to the way stashes are applied, other solutions
would require a change to the stash format.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Documentation/git-stash.txt | 14 ++++++-
git-add--interactive.perl | 14 ++++++-
git-stash.sh | 80 +++++++++++++++++++++++++++++++++++-------
t/t3904-stash-patch.sh | 55 +++++++++++++++++++++++++++++
4 files changed, 145 insertions(+), 18 deletions(-)
create mode 100755 t/t3904-stash-patch.sh
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 2f5ca7b..d206297 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -13,7 +13,7 @@ SYNOPSIS
'git stash' drop [-q|--quiet] [<stash>]
'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
'git stash' branch <branchname> [<stash>]
-'git stash' [save [--keep-index] [-q|--quiet] [<message>]]
+'git stash' [save [--patch] [--[no-]keep-index] [-q|--quiet] [<message>]]
'git stash' clear
'git stash' create
@@ -42,7 +42,7 @@ is also possible).
OPTIONS
-------
-save [--keep-index] [-q|--quiet] [<message>]::
+save [--patch] [--[no-]keep-index] [-q|--quiet] [<message>]::
Save your local modifications to a new 'stash', and run `git reset
--hard` to revert them. This is the default action when no
@@ -51,6 +51,16 @@ save [--keep-index] [-q|--quiet] [<message>]::
+
If the `--keep-index` option is used, all changes already added to the
index are left intact.
++
+With `--patch`, you can interactively select hunks from in the diff
+between HEAD and the working tree to be stashed. The stash entry is
+constructed such that its index state is the same as the index state
+of your repository, and its worktree contains only the changes you
+selected interactively. The selected changes are then rolled back
+from your worktree.
++
+The `--patch` option implies `--keep-index`. You can use
+`--no-keep-index` to override this.
list [<options>]::
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 9c202fc..c5e0586 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -76,6 +76,7 @@
sub apply_patch;
sub apply_patch_for_checkout_commit;
+sub apply_patch_for_stash;
my %patch_modes = (
'stage' => {
@@ -87,6 +88,15 @@
PARTICIPLE => 'staging',
FILTER => 'file-only',
},
+ 'stash' => {
+ DIFF => 'diff-index -p HEAD',
+ APPLY => sub { apply_patch 'apply --cached', @_; },
+ APPLY_CHECK => 'apply --cached',
+ VERB => 'Stash',
+ TARGET => '',
+ PARTICIPLE => 'stashing',
+ FILTER => undef,
+ },
'reset_head' => {
DIFF => 'diff-index -p --cached',
APPLY => sub { apply_patch 'apply -R --cached', @_; },
@@ -1493,8 +1503,8 @@
'checkout_head' : 'checkout_nothead');
$arg = shift @ARGV or die "missing --";
}
- } elsif ($1 eq 'stage') {
- $patch_mode = 'stage';
+ } elsif ($1 eq 'stage' or $1 eq 'stash') {
+ $patch_mode = $1;
$arg = shift @ARGV or die "missing --";
} else {
die "unknown --patch mode: $1";
diff --git a/git-stash.sh b/git-stash.sh
index 03e589f..567aa5d 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -21,6 +21,14 @@ trap 'rm -f "$TMP-*"' 0
ref_stash=refs/stash
+if git config --get-colorbool color.interactive; then
+ help_color="$(git config --get-color color.interactive.help 'red bold')"
+ reset_color="$(git config --get-color '' reset)"
+else
+ help_color=
+ reset_color=
+fi
+
no_changes () {
git diff-index --quiet --cached HEAD --ignore-submodules -- &&
git diff-files --quiet --ignore-submodules
@@ -68,19 +76,44 @@ create_stash () {
git commit-tree $i_tree -p $b_commit) ||
die "Cannot save the current index state"
- # state of the working tree
- w_tree=$( (
+ if test -z "$patch_mode"
+ then
+
+ # state of the working tree
+ w_tree=$( (
+ rm -f "$TMP-index" &&
+ cp -p ${GIT_INDEX_FILE-"$GIT_DIR/index"} "$TMP-index" &&
+ GIT_INDEX_FILE="$TMP-index" &&
+ export GIT_INDEX_FILE &&
+ git read-tree -m $i_tree &&
+ git add -u &&
+ git write-tree &&
+ rm -f "$TMP-index"
+ ) ) ||
+ die "Cannot save the current worktree state"
+
+ else
+
rm -f "$TMP-index" &&
- cp -p ${GIT_INDEX_FILE-"$GIT_DIR/index"} "$TMP-index" &&
- GIT_INDEX_FILE="$TMP-index" &&
- export GIT_INDEX_FILE &&
- git read-tree -m $i_tree &&
- git add -u &&
- git write-tree &&
- rm -f "$TMP-index"
- ) ) ||
+ GIT_INDEX_FILE="$TMP-index" git read-tree HEAD &&
+
+ # find out what the user wants
+ GIT_INDEX_FILE="$TMP-index" \
+ git add--interactive --patch=stash -- &&
+
+ # state of the working tree
+ w_tree=$(GIT_INDEX_FILE="$TMP-index" git write-tree) ||
die "Cannot save the current worktree state"
+ git diff-tree -p HEAD $w_tree > "$TMP-patch" &&
+ test -s "$TMP-patch" ||
+ die "No changes selected"
+
+ rm -f "$TMP-index" ||
+ die "Cannot remove temporary index (can't happen)"
+
+ fi
+
# create the stash
if test -z "$stash_msg"
then
@@ -95,12 +128,20 @@ create_stash () {
save_stash () {
keep_index=
+ patch_mode=
while test $# != 0
do
case "$1" in
--keep-index)
keep_index=t
;;
+ --no-keep-index)
+ keep_index=
+ ;;
+ -p|--patch)
+ patch_mode=t
+ keep_index=t
+ ;;
-q|--quiet)
GIT_QUIET=t
;;
@@ -131,11 +172,22 @@ save_stash () {
die "Cannot save the current status"
say Saved working directory and index state "$stash_msg"
- git reset --hard ${GIT_QUIET:+-q}
-
- if test -n "$keep_index" && test -n $i_tree
+ if test -z "$patch_mode"
then
- git read-tree --reset -u $i_tree
+ git reset --hard ${GIT_QUIET:+-q}
+
+ if test -n "$keep_index" && test -n $i_tree
+ then
+ git read-tree --reset -u $i_tree
+ fi
+ else
+ git apply -R < "$TMP-patch" ||
+ die "Cannot remove worktree changes"
+
+ if test -z "$keep_index"
+ then
+ git reset
+ fi
fi
}
diff --git a/t/t3904-stash-patch.sh b/t/t3904-stash-patch.sh
new file mode 100755
index 0000000..f37e3bc
--- /dev/null
+++ b/t/t3904-stash-patch.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+test_description='git checkout --patch'
+. ./lib-patch-mode.sh
+
+test_expect_success 'setup' '
+ mkdir dir &&
+ echo parent > dir/foo &&
+ echo dummy > bar &&
+ git add bar dir/foo &&
+ git commit -m initial &&
+ test_tick &&
+ test_commit second dir/foo head &&
+ echo index > dir/foo &&
+ git add dir/foo &&
+ set_and_save_state bar bar_work bar_index &&
+ save_head
+'
+
+# note: bar sorts before dir, so the first 'n' is always to skip 'bar'
+
+test_expect_success 'saying "n" does nothing' '
+ set_state dir/foo work index
+ (echo n; echo n) | test_must_fail git stash save -p &&
+ verify_state dir/foo work index &&
+ verify_saved_state bar
+'
+
+test_expect_success 'git stash -p' '
+ (echo n; echo y) | git stash save -p &&
+ verify_state dir/foo head index &&
+ verify_saved_state bar &&
+ git reset --hard &&
+ git stash apply &&
+ verify_state dir/foo work head &&
+ verify_state bar dummy dummy
+'
+
+test_expect_success 'git stash -p --no-keep-index' '
+ set_state dir/foo work index &&
+ set_state bar bar_work bar_index &&
+ (echo n; echo y) | git stash save -p --no-keep-index &&
+ verify_state dir/foo head head &&
+ verify_state bar bar_work dummy &&
+ git reset --hard &&
+ git stash apply --index &&
+ verify_state dir/foo work index &&
+ verify_state bar dummy bar_index
+'
+
+test_expect_success 'none of this moved HEAD' '
+ verify_saved_head
+'
+
+test_done
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 3/6] builtin-add: refactor the meat of interactive_add()
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
This moves the call setup for 'git add--interactive' to a separate
function, as other users will call it without running
validate_pathspec() first.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
builtin-add.c | 43 +++++++++++++++++++++++++++++--------------
commit.h | 2 ++
2 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/builtin-add.c b/builtin-add.c
index 581a2a1..c422a62 100644
--- a/builtin-add.c
+++ b/builtin-add.c
@@ -131,27 +131,27 @@ static void refresh(int verbose, const char **pathspec)
return pathspec;
}
-int interactive_add(int argc, const char **argv, const char *prefix)
+int run_add_interactive(const char *revision, const char *patch_mode,
+ const char **pathspec)
{
- int status, ac;
+ int status, ac, pc = 0;
const char **args;
- const char **pathspec = NULL;
- if (argc) {
- pathspec = validate_pathspec(argc, argv, prefix);
- if (!pathspec)
- return -1;
- }
+ if (pathspec)
+ while (pathspec[pc])
+ pc++;
- args = xcalloc(sizeof(const char *), (argc + 4));
+ args = xcalloc(sizeof(const char *), (pc + 5));
ac = 0;
args[ac++] = "add--interactive";
- if (patch_interactive)
- args[ac++] = "--patch";
+ if (patch_mode)
+ args[ac++] = patch_mode;
+ if (revision)
+ args[ac++] = revision;
args[ac++] = "--";
- if (argc) {
- memcpy(&(args[ac]), pathspec, sizeof(const char *) * argc);
- ac += argc;
+ if (pc) {
+ memcpy(&(args[ac]), pathspec, sizeof(const char *) * pc);
+ ac += pc;
}
args[ac] = NULL;
@@ -160,6 +160,21 @@ int interactive_add(int argc, const char **argv, const char *prefix)
return status;
}
+int interactive_add(int argc, const char **argv, const char *prefix)
+{
+ const char **pathspec = NULL;
+
+ if (argc) {
+ pathspec = validate_pathspec(argc, argv, prefix);
+ if (!pathspec)
+ return -1;
+ }
+
+ return run_add_interactive(NULL,
+ patch_interactive ? "--patch" : NULL,
+ pathspec);
+}
+
static int edit_patch(int argc, const char **argv, const char *prefix)
{
char *file = xstrdup(git_path("ADD_EDIT.patch"));
diff --git a/commit.h b/commit.h
index ba9f638..339f1f6 100644
--- a/commit.h
+++ b/commit.h
@@ -137,6 +137,8 @@ struct commit_graft {
int in_merge_bases(struct commit *, struct commit **, int);
extern int interactive_add(int argc, const char **argv, const char *prefix);
+extern int run_add_interactive(const char *revision, const char *patch_mode,
+ const char **pathspec);
static inline int single_parent(struct commit *commit)
{
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 5/6] Implement 'git checkout --patch'
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
This introduces a --patch mode for git-checkout. In the index usage
git checkout --patch -- [files...]
it lets the user discard edits from the <files> at the granularity of
hunks (by selecting hunks from 'git diff' and then reverse applying
them to the worktree).
We also accept a revision argument. In the case
git checkout --patch HEAD -- [files...]
we offer hunks from the difference between HEAD and the worktree, and
reverse applies them to both index and worktree, allowing you to
discard staged changes completely. In the non-HEAD usage
git checkout --patch <revision> -- [files...]
it offers hunks from the difference between the worktree and
<revision>. The chosen hunks are then applied to both index and
worktree.
The application to worktree and index is done "atomically" in the
sense that we first check if the patch applies to the index (it should
always apply to the worktree). If it does not, we give the user a
choice to either abort or apply to the worktree anyway.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Documentation/git-checkout.txt | 13 +++++-
builtin-checkout.c | 19 +++++++
git-add--interactive.perl | 61 +++++++++++++++++++++++
t/t2015-checkout-patch.sh | 107 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 199 insertions(+), 1 deletions(-)
create mode 100755 t/t2015-checkout-patch.sh
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index ad4b31e..26a5447 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -11,6 +11,7 @@ SYNOPSIS
'git checkout' [-q] [-f] [-m] [<branch>]
'git checkout' [-q] [-f] [-m] [-b <new_branch>] [<start_point>]
'git checkout' [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
+'git checkout' --patch [<tree-ish>] [--] [<paths>...]
DESCRIPTION
-----------
@@ -25,7 +26,7 @@ use the --track or --no-track options, which will be passed to `git
branch`. As a convenience, --track without `-b` implies branch
creation; see the description of --track below.
-When <paths> are given, this command does *not* switch
+When <paths> or --patch are given, this command does *not* switch
branches. It updates the named paths in the working tree from
the index file, or from a named <tree-ish> (most often a commit). In
this case, the `-b` and `--track` options are meaningless and giving
@@ -113,6 +114,16 @@ the conflicted merge in the specified paths.
"merge" (default) and "diff3" (in addition to what is shown by
"merge" style, shows the original contents).
+-p::
+--patch::
+ Interactively select hunks in the difference between the
+ <tree-ish> (or the index, if unspecified) and the working
+ tree. The chosen hunks are then applied in reverse to the
+ working tree (and if a <tree-ish> was specified, the index).
++
+This means that you can use `git checkout -p` to selectively discard
+edits from your current working tree.
+
<branch>::
Branch to checkout; if it refers to a branch (i.e., a name that,
when prepended with "refs/heads/", is a valid ref), then that
diff --git a/builtin-checkout.c b/builtin-checkout.c
index 8a9a474..8b942ba 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -572,6 +572,13 @@ static int git_checkout_config(const char *var, const char *value, void *cb)
return git_xmerge_config(var, value, cb);
}
+static int interactive_checkout(const char *revision, const char **pathspec,
+ struct checkout_opts *opts)
+{
+ return run_add_interactive(revision, "--patch=checkout", pathspec);
+}
+
+
int cmd_checkout(int argc, const char **argv, const char *prefix)
{
struct checkout_opts opts;
@@ -580,6 +587,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
struct branch_info new;
struct tree *source_tree = NULL;
char *conflict_style = NULL;
+ int patch_mode = 0;
struct option options[] = {
OPT__QUIET(&opts.quiet),
OPT_STRING('b', NULL, &opts.new_branch, "new branch", "branch"),
@@ -594,6 +602,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
OPT_BOOLEAN('m', "merge", &opts.merge, "merge"),
OPT_STRING(0, "conflict", &conflict_style, "style",
"conflict style (merge or diff3)"),
+ OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
OPT_END(),
};
int has_dash_dash;
@@ -608,6 +617,10 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options, checkout_usage,
PARSE_OPT_KEEP_DASHDASH);
+ if (patch_mode && (opts.track > 0 || opts.new_branch
+ || opts.new_branch_log || opts.merge || opts.force))
+ die ("--patch is incompatible with all other options");
+
/* --track without -b should DWIM */
if (0 < opts.track && !opts.new_branch) {
const char *argv0 = argv[0];
@@ -714,6 +727,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
if (!pathspec)
die("invalid path specification");
+ if (patch_mode)
+ return interactive_checkout(new.name, pathspec, &opts);
+
/* Checkout paths */
if (opts.new_branch) {
if (argc == 1) {
@@ -729,6 +745,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
return checkout_paths(source_tree, pathspec, &opts);
}
+ if (patch_mode)
+ return interactive_checkout(new.name, NULL, &opts);
+
if (opts.new_branch) {
struct strbuf buf = STRBUF_INIT;
if (strbuf_check_branch_ref(&buf, opts.new_branch))
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index f040249..9c202fc 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -75,6 +75,7 @@
my $patch_mode_revision;
sub apply_patch;
+sub apply_patch_for_checkout_commit;
my %patch_modes = (
'stage' => {
@@ -104,6 +105,33 @@
PARTICIPLE => 'applying',
FILTER => 'index-only',
},
+ 'checkout_index' => {
+ DIFF => 'diff-files -p',
+ APPLY => sub { apply_patch 'apply -R', @_; },
+ APPLY_CHECK => 'apply -R',
+ VERB => 'Discard',
+ TARGET => ' from worktree',
+ PARTICIPLE => 'discarding',
+ FILTER => 'file-only',
+ },
+ 'checkout_head' => {
+ DIFF => 'diff-index -p',
+ APPLY => sub { apply_patch_for_checkout_commit '-R', @_ },
+ APPLY_CHECK => 'apply',
+ VERB => 'Discard',
+ TARGET => ' from index and worktree',
+ PARTICIPLE => 'discarding',
+ FILTER => undef,
+ },
+ 'checkout_nothead' => {
+ DIFF => 'diff-index -R -p',
+ APPLY => sub { apply_patch_for_checkout_commit '', @_ },
+ APPLY_CHECK => 'apply',
+ VERB => 'Apply',
+ TARGET => ' to index and worktree',
+ PARTICIPLE => 'applying',
+ FILTER => undef,
+ },
);
my %patch_mode_flavour = %{$patch_modes{stage}};
@@ -1069,6 +1097,29 @@
return $ret;
}
+sub apply_patch_for_checkout_commit {
+ my $reverse = shift;
+ my $applies_index = run_git_apply 'apply '.$reverse.' --cached --recount --check', @_;
+ my $applies_worktree = run_git_apply 'apply '.$reverse.' --recount --check', @_;
+
+ if ($applies_worktree && $applies_index) {
+ run_git_apply 'apply '.$reverse.' --cached --recount', @_;
+ run_git_apply 'apply '.$reverse.' --recount', @_;
+ return 1;
+ } elsif (!$applies_index) {
+ print colored $error_color, "The selected hunks do not apply to the index!\n";
+ if (prompt_yesno "Apply them to the worktree anyway? ") {
+ return run_git_apply 'apply '.$reverse.' --recount', @_;
+ } else {
+ print colored $error_color, "Nothing was applied.\n";
+ return 0;
+ }
+ } else {
+ print STDERR @_;
+ return 0;
+ }
+}
+
sub patch_update_cmd {
my @all_mods = list_modified($patch_mode_flavour{FILTER});
my @mods = grep { !($_->{BINARY}) } @all_mods;
@@ -1432,6 +1483,16 @@
'reset_head' : 'reset_nothead');
$arg = shift @ARGV or die "missing --";
}
+ } elsif ($1 eq 'checkout') {
+ $arg = shift @ARGV or die "missing --";
+ if ($arg eq '--') {
+ $patch_mode = 'checkout_index';
+ } else {
+ $patch_mode_revision = $arg;
+ $patch_mode = ($arg eq 'HEAD' ?
+ 'checkout_head' : 'checkout_nothead');
+ $arg = shift @ARGV or die "missing --";
+ }
} elsif ($1 eq 'stage') {
$patch_mode = 'stage';
$arg = shift @ARGV or die "missing --";
diff --git a/t/t2015-checkout-patch.sh b/t/t2015-checkout-patch.sh
new file mode 100755
index 0000000..4d1c2e9
--- /dev/null
+++ b/t/t2015-checkout-patch.sh
@@ -0,0 +1,107 @@
+#!/bin/sh
+
+test_description='git checkout --patch'
+
+. ./lib-patch-mode.sh
+
+test_expect_success 'setup' '
+ mkdir dir &&
+ echo parent > dir/foo &&
+ echo dummy > bar &&
+ git add bar dir/foo &&
+ git commit -m initial &&
+ test_tick &&
+ test_commit second dir/foo head &&
+ set_and_save_state bar bar_work bar_index &&
+ save_head
+'
+
+# note: bar sorts before dir/foo, so the first 'n' is always to skip 'bar'
+
+test_expect_success 'saying "n" does nothing' '
+ set_and_save_state dir/foo work head &&
+ (echo n; echo n) | git checkout -p &&
+ verify_saved_state bar &&
+ verify_saved_state dir/foo
+'
+
+test_expect_success 'git checkout -p' '
+ (echo n; echo y) | git checkout -p &&
+ verify_saved_state bar &&
+ verify_state dir/foo head head
+'
+
+test_expect_success 'git checkout -p with staged changes' '
+ set_state dir/foo work index
+ (echo n; echo y) | git checkout -p &&
+ verify_saved_state bar &&
+ verify_state dir/foo index index
+'
+
+test_expect_success 'git checkout -p HEAD with NO staged changes: abort' '
+ set_and_save_state dir/foo work head &&
+ (echo n; echo y; echo n) | git checkout -p HEAD &&
+ verify_saved_state bar &&
+ verify_saved_state dir/foo
+'
+
+test_expect_success 'git checkout -p HEAD with NO staged changes: apply' '
+ (echo n; echo y; echo y) | git checkout -p HEAD &&
+ verify_saved_state bar &&
+ verify_state dir/foo head head
+'
+
+test_expect_success 'git checkout -p HEAD with change already staged' '
+ 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 &&
+ verify_state dir/foo head head
+'
+
+test_expect_success 'git checkout -p HEAD^' '
+ # 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 &&
+ verify_state dir/foo parent parent
+'
+
+# The idea in the rest is that bar sorts first, so we always say 'y'
+# first and if the path limiter fails it'll apply to bar instead of
+# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
+# the failure case (and thus get out of the loop).
+
+test_expect_success 'path limiting works: dir' '
+ set_state dir/foo work head &&
+ (echo y; echo n) | git checkout -p dir &&
+ verify_saved_state bar &&
+ verify_state dir/foo head head
+'
+
+test_expect_success 'path limiting works: -- dir' '
+ set_state dir/foo work head &&
+ (echo y; echo n) | git checkout -p -- dir &&
+ verify_saved_state bar &&
+ verify_state dir/foo head head
+'
+
+test_expect_success 'path limiting works: HEAD^ -- dir' '
+ # the third n is to get out in case it mistakenly does not apply
+ (echo y; echo n; echo n) | git checkout -p HEAD^ -- dir &&
+ verify_saved_state bar &&
+ verify_state dir/foo parent parent
+'
+
+test_expect_success 'path limiting works: foo inside dir' '
+ set_state dir/foo work head &&
+ # the third n is to get out in case it mistakenly does not apply
+ (echo y; echo n; echo n) | (cd dir && git checkout -p foo) &&
+ verify_saved_state bar &&
+ verify_state dir/foo head head
+'
+
+test_expect_success 'none of this moved HEAD' '
+ verify_saved_head
+'
+
+test_done
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 7/6] DWIM 'git stash save -p' for 'git stash -p'
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Documentation/git-stash.txt | 2 +-
git-stash.sh | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 7af1840..ada16a0 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -14,7 +14,7 @@ SYNOPSIS
'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
'git stash' branch <branchname> [<stash>]
'git stash' [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [<message>]]
-'git stash' [-k|--keep-index]
+'git stash' [-p|--patch|-k|--keep-index]
'git stash' clear
'git stash' create
diff --git a/git-stash.sh b/git-stash.sh
index 81a72f6..9fd7289 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -406,8 +406,8 @@ branch)
apply_to_branch "$@"
;;
*)
- case $#,"$1" in
- 0,|1,-k|1,--keep-index)
+ case $#,"$1","$2" in
+ 0,,|1,-k,|1,--keep-index,|1,-p,|1,--patch,|2,-p,--no-keep-index|2,--patch,--no-keep-index)
save_stash "$@" &&
say '(To restore them type "git stash apply")'
;;
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 4/6] Implement 'git reset --patch'
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
This introduces a --patch mode for git-reset. The basic case is
git reset --patch -- [files...]
which acts as the opposite of 'git add --patch -- [files...]': it
offers hunks for *un*staging. Advanced usage is
git reset --patch <revision> -- [files...]
which offers hunks from the diff between the index and <revision> for
forward application to the index. (That is, the basic case is just
<revision> = HEAD.)
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Documentation/git-reset.txt | 15 ++++++++-
builtin-reset.c | 19 ++++++++++++
git-add--interactive.perl | 57 +++++++++++++++++++++++++++++++++--
t/t7105-reset-patch.sh | 69 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 154 insertions(+), 6 deletions(-)
create mode 100755 t/t7105-reset-patch.sh
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt
index abb25d1..469cf6d 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.txt
@@ -10,6 +10,7 @@ SYNOPSIS
[verse]
'git reset' [--mixed | --soft | --hard | --merge] [-q] [<commit>]
'git reset' [-q] [<commit>] [--] <paths>...
+'git reset' --patch [<commit>] [--] [<paths>...]
DESCRIPTION
-----------
@@ -23,8 +24,9 @@ the undo in the history.
If you want to undo a commit other than the latest on a branch,
linkgit:git-revert[1] is your friend.
-The second form with 'paths' is used to revert selected paths in
-the index from a given commit, without moving HEAD.
+The second and third forms with 'paths' and/or --patch are used to
+revert selected paths in the index from a given commit, without moving
+HEAD.
OPTIONS
@@ -50,6 +52,15 @@ OPTIONS
and updates the files that are different between the named commit
and the current commit in the working tree.
+-p::
+--patch::
+ Interactively select hunks in the difference between the index
+ and <commit> (defaults to HEAD). The chosen hunks are applied
+ in reverse to the index.
++
+This means that `git reset -p` is the opposite of `git add -p` (see
+linkgit:git-add[1]).
+
-q::
Be quiet, only report errors.
diff --git a/builtin-reset.c b/builtin-reset.c
index 5fa1789..246a127 100644
--- a/builtin-reset.c
+++ b/builtin-reset.c
@@ -142,6 +142,17 @@ static void update_index_from_diff(struct diff_queue_struct *q,
}
}
+static int interactive_reset(const char *revision, const char **argv,
+ const char *prefix)
+{
+ const char **pathspec = NULL;
+
+ if (*argv)
+ pathspec = get_pathspec(prefix, argv);
+
+ return run_add_interactive(revision, "--patch=reset", pathspec);
+}
+
static int read_from_tree(const char *prefix, const char **argv,
unsigned char *tree_sha1, int refresh_flags)
{
@@ -183,6 +194,7 @@ static void prepend_reflog_action(const char *action, char *buf, size_t size)
int cmd_reset(int argc, const char **argv, const char *prefix)
{
int i = 0, reset_type = NONE, update_ref_status = 0, quiet = 0;
+ int patch_mode = 0;
const char *rev = "HEAD";
unsigned char sha1[20], *orig = NULL, sha1_orig[20],
*old_orig = NULL, sha1_old_orig[20];
@@ -198,6 +210,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
"reset HEAD, index and working tree", MERGE),
OPT_BOOLEAN('q', NULL, &quiet,
"disable showing new HEAD in hard reset and progress message"),
+ OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
OPT_END()
};
@@ -251,6 +264,12 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
die("Could not parse object '%s'.", rev);
hashcpy(sha1, commit->object.sha1);
+ if (patch_mode) {
+ if (reset_type != NONE)
+ die("--patch is incompatible with --{hard,mixed,soft}");
+ return interactive_reset(rev, argv + i, prefix);
+ }
+
/* git reset tree [--] paths... can be used to
* load chosen paths from the tree into the index without
* affecting the working tree nor HEAD. */
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 3606103..f040249 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -72,6 +72,7 @@
# command line options
my $patch_mode;
+my $patch_mode_revision;
sub apply_patch;
@@ -85,6 +86,24 @@
PARTICIPLE => 'staging',
FILTER => 'file-only',
},
+ 'reset_head' => {
+ DIFF => 'diff-index -p --cached',
+ APPLY => sub { apply_patch 'apply -R --cached', @_; },
+ APPLY_CHECK => 'apply -R --cached',
+ VERB => 'Unstage',
+ TARGET => '',
+ PARTICIPLE => 'unstaging',
+ FILTER => 'index-only',
+ },
+ 'reset_nothead' => {
+ DIFF => 'diff-index -p --cached',
+ APPLY => sub { apply_patch 'apply -R --cached', @_; },
+ APPLY_CHECK => 'apply -R --cached',
+ VERB => 'Apply',
+ TARGET => ' to index',
+ PARTICIPLE => 'applying',
+ FILTER => 'index-only',
+ },
);
my %patch_mode_flavour = %{$patch_modes{stage}};
@@ -206,7 +225,14 @@
return if (!@tracked);
}
- my $reference = is_initial_commit() ? get_empty_tree() : 'HEAD';
+ my $reference;
+ if (defined $patch_mode_revision and $patch_mode_revision ne 'HEAD') {
+ $reference = $patch_mode_revision;
+ } elsif (is_initial_commit()) {
+ $reference = get_empty_tree();
+ } else {
+ $reference = 'HEAD';
+ }
for (run_cmd_pipe(qw(git diff-index --cached
--numstat --summary), $reference,
'--', @tracked)) {
@@ -640,6 +666,9 @@
sub parse_diff {
my ($path) = @_;
my @diff_cmd = split(" ", $patch_mode_flavour{DIFF});
+ if (defined $patch_mode_revision) {
+ push @diff_cmd, $patch_mode_revision;
+ }
my @diff = run_cmd_pipe("git", @diff_cmd, "--", $path);
my @colored = ();
if ($diff_use_color) {
@@ -1391,11 +1420,31 @@
sub process_args {
return unless @ARGV;
my $arg = shift @ARGV;
- if ($arg eq "--patch") {
- $patch_mode = 1;
- $arg = shift @ARGV or die "missing --";
+ if ($arg =~ /--patch(?:=(.*))?/) {
+ if (defined $1) {
+ if ($1 eq 'reset') {
+ $patch_mode = 'reset_head';
+ $patch_mode_revision = 'HEAD';
+ $arg = shift @ARGV or die "missing --";
+ if ($arg ne '--') {
+ $patch_mode_revision = $arg;
+ $patch_mode = ($arg eq 'HEAD' ?
+ 'reset_head' : 'reset_nothead');
+ $arg = shift @ARGV or die "missing --";
+ }
+ } elsif ($1 eq 'stage') {
+ $patch_mode = 'stage';
+ $arg = shift @ARGV or die "missing --";
+ } else {
+ die "unknown --patch mode: $1";
+ }
+ } else {
+ $patch_mode = 'stage';
+ $arg = shift @ARGV or die "missing --";
+ }
die "invalid argument $arg, expecting --"
unless $arg eq "--";
+ %patch_mode_flavour = %{$patch_modes{$patch_mode}};
}
elsif ($arg ne "--") {
die "invalid argument $arg, expecting --";
diff --git a/t/t7105-reset-patch.sh b/t/t7105-reset-patch.sh
new file mode 100755
index 0000000..c1f4fc3
--- /dev/null
+++ b/t/t7105-reset-patch.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+test_description='git reset --patch'
+. ./lib-patch-mode.sh
+
+test_expect_success 'setup' '
+ mkdir dir &&
+ echo parent > dir/foo &&
+ echo dummy > bar &&
+ git add dir &&
+ git commit -m initial &&
+ test_tick &&
+ test_commit second dir/foo head &&
+ set_and_save_state bar bar_work bar_index &&
+ save_head
+'
+
+# note: bar sorts before foo, so the first 'n' is always to skip 'bar'
+
+test_expect_success 'saying "n" does nothing' '
+ set_and_save_state dir/foo work work
+ (echo n; echo n) | git reset -p &&
+ verify_saved_state dir/foo &&
+ verify_saved_state bar
+'
+
+test_expect_success 'git reset -p' '
+ (echo n; echo y) | git reset -p &&
+ verify_state dir/foo work head &&
+ verify_saved_state bar
+'
+
+test_expect_success 'git reset -p HEAD^' '
+ (echo n; echo y) | git reset -p HEAD^ &&
+ verify_state dir/foo work parent &&
+ verify_saved_state bar
+'
+
+# The idea in the rest is that bar sorts first, so we always say 'y'
+# first and if the path limiter fails it'll apply to bar instead of
+# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
+# the failure case (and thus get out of the loop).
+
+test_expect_success 'git reset -p dir' '
+ set_state dir/foo work work
+ (echo y; echo n) | git reset -p dir &&
+ verify_state dir/foo work head &&
+ verify_saved_state bar
+'
+
+test_expect_success 'git reset -p -- foo (inside dir)' '
+ set_state dir/foo work work
+ (echo y; echo n) | (cd dir && git reset -p -- foo) &&
+ verify_state dir/foo work head &&
+ verify_saved_state bar
+'
+
+test_expect_success 'git reset -p HEAD^ -- dir' '
+ (echo y; echo n) | git reset -p HEAD^ -- dir &&
+ verify_state dir/foo work parent &&
+ verify_saved_state bar
+'
+
+test_expect_success 'none of this moved HEAD' '
+ verify_saved_head
+'
+
+
+test_done
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 1/6] git-apply--interactive: Refactor patch mode code
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
This makes some aspects of the 'git add -p' loop configurable (within
the code), so that we can later reuse git-add--interactive for other
similar tools.
Most fields are fairly straightforward, but APPLY gets a subroutine
(instead of just a string a la 'apply --cached') so that we can handle
'checkout -p', which will need to atomically apply the patch twice
(index and worktree).
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
git-add--interactive.perl | 82 ++++++++++++++++++++++++++++++---------------
1 files changed, 55 insertions(+), 27 deletions(-)
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index df9f231..3606103 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -73,6 +73,22 @@
# command line options
my $patch_mode;
+sub apply_patch;
+
+my %patch_modes = (
+ 'stage' => {
+ DIFF => 'diff-files -p',
+ APPLY => sub { apply_patch 'apply --cached', @_; },
+ APPLY_CHECK => 'apply --cached',
+ VERB => 'Stage',
+ TARGET => '',
+ PARTICIPLE => 'staging',
+ FILTER => 'file-only',
+ },
+);
+
+my %patch_mode_flavour = %{$patch_modes{stage}};
+
sub run_cmd_pipe {
if ($^O eq 'MSWin32' || $^O eq 'msys') {
my @invalid = grep {m/[":*]/} @_;
@@ -613,12 +629,21 @@
print "\n";
}
+sub run_git_apply {
+ my $cmd = shift;
+ my $fh;
+ open $fh, '| git ' . $cmd;
+ print $fh @_;
+ return close $fh;
+}
+
sub parse_diff {
my ($path) = @_;
- my @diff = run_cmd_pipe(qw(git diff-files -p --), $path);
+ my @diff_cmd = split(" ", $patch_mode_flavour{DIFF});
+ my @diff = run_cmd_pipe("git", @diff_cmd, "--", $path);
my @colored = ();
if ($diff_use_color) {
- @colored = run_cmd_pipe(qw(git diff-files -p --color --), $path);
+ @colored = run_cmd_pipe("git", @diff_cmd, qw(--color --), $path);
}
my (@hunk) = { TEXT => [], DISPLAY => [], TYPE => 'header' };
@@ -877,6 +902,7 @@
or die "failed to open hunk edit file for writing: " . $!;
print $fh "# Manual hunk edit mode -- see bottom for a quick guide\n";
print $fh @$oldtext;
+ my $participle = $patch_mode_flavour{PARTICIPLE};
print $fh <<EOF;
# ---
# To remove '-' lines, make them ' ' lines (context).
@@ -884,7 +910,7 @@
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
-# marked for staging. If it does not apply cleanly, you will be given
+# marked for $participle. If it does not apply cleanly, you will be given
# an opportunity to edit again. If all lines of the hunk are removed,
# then the edit is aborted and the hunk is left unchanged.
EOF
@@ -918,11 +944,8 @@
sub diff_applies {
my $fh;
- open $fh, '| git apply --recount --cached --check';
- for my $h (@_) {
- print $fh @{$h->{TEXT}};
- }
- return close $fh;
+ return run_git_apply($patch_mode_flavour{APPLY_CHECK} . ' --recount --check',
+ map { @{$_->{TEXT}} } @_);
}
sub _restore_terminal_and_die {
@@ -988,12 +1011,14 @@
}
sub help_patch_cmd {
- print colored $help_color, <<\EOF ;
-y - stage this hunk
-n - do not stage this hunk
-q - quit, do not stage this hunk nor any of the remaining ones
-a - stage this and all the remaining hunks in the file
-d - do not stage this hunk nor any of the remaining hunks in the file
+ my $verb = lc $patch_mode_flavour{VERB};
+ my $target = $patch_mode_flavour{TARGET};
+ print colored $help_color, <<EOF ;
+y - $verb this hunk$target
+n - do not $verb this hunk$target
+q - quit, do not $verb this hunk nor any of the remaining ones
+a - $verb this and all the remaining hunks in the file
+d - do not $verb this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
@@ -1006,8 +1031,17 @@
EOF
}
+sub apply_patch {
+ my $cmd = shift;
+ my $ret = run_git_apply $cmd . ' --recount', @_;
+ if (!$ret) {
+ print STDERR @_;
+ }
+ return $ret;
+}
+
sub patch_update_cmd {
- my @all_mods = list_modified('file-only');
+ my @all_mods = list_modified($patch_mode_flavour{FILTER});
my @mods = grep { !($_->{BINARY}) } @all_mods;
my @them;
@@ -1138,8 +1172,9 @@
for (@{$hunk[$ix]{DISPLAY}}) {
print;
}
- print colored $prompt_color, 'Stage ',
- ($hunk[$ix]{TYPE} eq 'mode' ? 'mode change' : 'this hunk'),
+ print colored $prompt_color, $patch_mode_flavour{VERB},
+ ($hunk[$ix]{TYPE} eq 'mode' ? ' mode change' : ' this hunk'),
+ $patch_mode_flavour{TARGET},
" [y,n,q,a,d,/$other,?]? ";
my $line = prompt_single_character;
if ($line) {
@@ -1313,16 +1348,9 @@
if (@result) {
my $fh;
-
- open $fh, '| git apply --cached --recount';
- for (@{$head->{TEXT}}, @result) {
- print $fh $_;
- }
- if (!close $fh) {
- for (@{$head->{TEXT}}, @result) {
- print STDERR $_;
- }
- }
+ my @patch = (@{$head->{TEXT}}, @result);
+ my $apply_routine = $patch_mode_flavour{APPLY};
+ &$apply_routine(@patch);
refresh();
}
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 2/6] Add a small patch-mode testing library
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <cover.1250164190.git.trast@student.ethz.ch>
The tests for {reset,commit,stash} -p will frequently have to set both
worktree and index states to known values, and verify that the outcome
(again both worktree and index) are what was expected.
Add a small helper library that lets us do these tasks more easily.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
t/lib-patch-mode.sh | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
create mode 100755 t/lib-patch-mode.sh
diff --git a/t/lib-patch-mode.sh b/t/lib-patch-mode.sh
new file mode 100755
index 0000000..afb4b66
--- /dev/null
+++ b/t/lib-patch-mode.sh
@@ -0,0 +1,36 @@
+. ./test-lib.sh
+
+set_state () {
+ echo "$3" > "$1" &&
+ git add "$1" &&
+ echo "$2" > "$1"
+}
+
+save_state () {
+ noslash="$(echo "$1" | tr / _)" &&
+ cat "$1" > _worktree_"$noslash" &&
+ git show :"$1" > _index_"$noslash"
+}
+
+set_and_save_state () {
+ set_state "$@" &&
+ save_state "$1"
+}
+
+verify_state () {
+ test "$(cat "$1")" = "$2" &&
+ test "$(git show :"$1")" = "$3"
+}
+
+verify_saved_state () {
+ noslash="$(echo "$1" | tr / _)" &&
+ verify_state "$1" "$(cat _worktree_"$noslash")" "$(cat _index_"$noslash")"
+}
+
+save_head () {
+ git rev-parse HEAD > _head
+}
+
+verify_saved_head () {
+ test "$(cat _head)" = "$(git rev-parse HEAD)"
+}
--
1.6.4.262.gbda8
^ permalink raw reply related
* [PATCH v5 0/6] {checkout,reset,stash} --patch
From: Thomas Rast @ 2009-08-13 12:29 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Sverre Rabbelier, Nanako Shiraishi,
Nicolas Sebrecht, Pierre Habouzit
In-Reply-To: <200908101136.34660.trast@student.ethz.ch>
Junio C Hamano wrote:
> * tr/reset-checkout-patch (Tue Jul 28 23:20:12 2009 +0200) 8 commits
[...]
> Progress?
Slow, as always. There are three groups of changes:
1. This iteration goes the "complicated" way to mitigate Jeff's concern:
Jeff King wrote:
> Shouldn't the diff [in checkout -p] be reversed? That is, I think
> what users would like to see is "bring this hunk over from the index
> to the working tree". But we have the opposite (a hunk that is in
> the working tree that we would like to undo).
That is, the rules are now as follows:
add -p forward application
reset -p [HEAD] exact opposite of add -p: reverse application
reset -p other forward application to index (**)
checkout -p "opposite of editing": reverse application
checkout -p HEAD "opposite of editing and staging": reverse application
checkout -p other forward application to WT and index (**)
stash -p "stash these edits": reverse application to WT, "forward to stash"
Those marked (**) are the only ones that changed semantics compared to
v4. However, I adjusted the messages to look different:
add -p Stage this hunk?
reset -p [HEAD] Reset this hunk? (**)
reset -p other Apply this hunk to index? (**)
checkout -p Discard this hunk from worktree? (**)
checkout -p HEAD Discard this hunk from index and worktree? (**)
checkout -p other Apply this hunk to index and worktree? (**)
stash -p Stash this hunk?
Again, (**) are the changed ones from v4. The help message also shows
the "to/from ..." extra in the help for y/n.
I think this should now make 'reset -p' and 'checkout -p' fairly
intuitive, while at the same time making the '... other' forms easier
to wrap one's head around. Of course, as stated earlier in the
thread, the downside with this approach is that the direction suddenly
changes when you give it an 'other'.
These changes affect all 'Implement foo --patch' patches, and the
git-apply--interactive refactoring.
2. git checkout -p HEAD fixed
Nicolas Sebrecht wrote:
>
> % git checkout -p HEAD
>
> and
>
> % git checkout -p HEAD -- file
>
> behave differently here in my test above.
This sadly was a rather trivial thinko on my part in the C glue for
'checkout -p', which I fixed. I also changed the tests to cover
various ways of limiting paths.
3. Tests rewritten
I added a new 2/6 refactors the many occurences of
test "$(cat file)" = expected_worktree &&
test "$(git show :file)" = expected_index
to a few library functions, and rewritten all three tests to use them.
Due to the bug discussed in (2.) above, the tests also cover pathspecs
for all new commands. Due to my own concern because this was broken
at some point during development, all commands also check if relative
paths inside a directory work.
3/6 (which was 2/5) and 7/6 (was 6/5) are unchanged, and apart from
the fix for (2.) which was a one-liner, so is all the C code. 7/6 is,
as before, based on a merge with js/stash-dwim.
Thomas Rast (7):
git-apply--interactive: Refactor patch mode code
Add a small patch-mode testing library
builtin-add: refactor the meat of interactive_add()
Implement 'git reset --patch'
Implement 'git checkout --patch'
Implement 'git stash save --patch'
DWIM 'git stash save -p' for 'git stash -p'
^ permalink raw reply
* git-blame missing output format documentation
From: Ori Avtalion @ 2009-08-13 12:18 UTC (permalink / raw)
To: git
Hi,
"git blame" prefixes boundary commit tree-ish's with ^.
This doesn't seem to be documented in the git-blame manpage.
Is it a convention used elsewhere, that it can go unmentioned?
Also, the manpage doesn't describe the format of the regualr,
non-porcelain, output.
Doesn't it deserve its own section?
The only non-obvious parts to me are the the boundary commit notation,
mentioned above, and the filename in the second column.
^ permalink raw reply
* Re: [PATCH] Change mentions of "git programs" to "git commands"
From: Ori Avtalion @ 2009-08-13 12:02 UTC (permalink / raw)
To: Nanako Shiraishi; +Cc: Junio C Hamano, git
In-Reply-To: <4A81FECE.5040806@avtalion.name>
On 08/12/2009 02:29 AM, Ori Avtalion wrote:
>>> -git-mailsplit - Simple UNIX mbox splitter program
>>> +git-mailsplit - Simple UNIX mbox splitter
>>>
>>> SYNOPSIS
>>> --------
>>
>
> It's another case where a command is called a "program" when, to the
> user, it's simply a command such as "git mailsplit". Having the word
> "command" in a command description is redundant, so I just dropped the
> word.
>
> And here's another command with a similar description that I missed before:
> "git-merge-one-file - The standard helper *program* to use with
> git-merge-index"
Should I create a new patch for these two? Or is the change not welcome?
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox