From: Johannes Sixt <j.sixt@viscovery.net>
To: Thomas Rast <trast@student.ethz.ch>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 1/2] filter-branch: stop special-casing $filter_subdir argument
Date: Thu, 22 Oct 2009 08:06:39 +0200 [thread overview]
Message-ID: <4ADFF66F.1080005@viscovery.net> (raw)
In-Reply-To: <95535b01e2181d321190c6d93b2834188612a389.1256149428.git.trast@student.ethz.ch>
Thomas Rast schrieb:
> Handling $filter_subdir in the usual way requires a separate case at
> every use, because the variable is empty when unused. Furthermore,
> the case for --subdirectory-filter supplies its own --, so the user
> cannot provide one himself (though there is also very little point in
> doing so).
>
> Instead, tack the $filter_subdir onto $@ in the right place
> automatically, and only use a -- if it was not already provided by the
> user.
I understand that this is a preparatory patch, but you seem to argue that
even without the follow-up patch there is a problem. But from your
explanation I do not understand what it is. An example invocation that
shows the problem would be very helpful.
> @@ -257,15 +257,29 @@ git read-tree || die "Could not seed the index"
> # map old->new commit ids for rewriting parents
> mkdir ../map || die "Could not create map/ directory"
>
> +non_ref_args=$(git rev-parse --no-revs --sq "$@")
> +dashdash=--
> +for arg in "$non_ref_args"; do
At this point $non_ref_args might contain one or more IFS-separatable
words, but if you say "$non_ref_args" here, this loop will be entered
exactly once. But even if you drop the dquotes, the --sq quoting that you
requested from rev-parse bought you nothing.
> + if test arg = --; then
Did you mean $arg here? Even then this test will succeed only if
$non_ref_args contains exactly one word and that word is '--'. Is that
what you mean?
> + dashdash=
> + break
> + fi
> +done
> +
> case "$filter_subdir" in
> "")
> - git rev-list --reverse --topo-order --default HEAD \
> - --parents --simplify-merges "$@"
> + filter_subdir_sq=
> ;;
> *)
> - git rev-list --reverse --topo-order --default HEAD \
> - --parents --simplify-merges "$@" -- "$filter_subdir"
> -esac > ../revs || die "Could not get the commits"
> + filter_subdir_sq=$(git rev-parse --sq-quote "$filter_subdir")
> +esac
> +
> +eval "set -- \"\$@\" $dashdash $filter_subdir_sq"
> +non_ref_args=$(git rev-parse --no-revs --sq "$@")
> +
> +git rev-list --reverse --topo-order --default HEAD \
> + --parents --simplify-merges "$@" \
> + > ../revs || die "Could not get the commits"
> commits=$(wc -l <../revs | tr -d " ")
>
> test $commits -eq 0 && die "Found nothing to rewrite"
> @@ -356,8 +370,8 @@ then
> do
> sha1=$(git rev-parse "$ref"^0)
> test -f "$workdir"/../map/$sha1 && continue
> - ancestor=$(git rev-list --simplify-merges -1 \
> - $ref -- "$filter_subdir")
> + ancestor=$(eval "git rev-list --simplify-merges " \
> + "-1 \"$ref\" $non_ref_args")
> test "$ancestor" && echo $(map $ancestor) >> "$workdir"/../map/$sha1
> done < "$tempdir"/heads
> fi
This looks so convoluted; there must be a simpler way to achieve your goal.
-- Hannes
next prev parent reply other threads:[~2009-10-22 6:06 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-21 18:16 [PATCH 1/2] filter-branch: stop special-casing $filter_subdir argument Thomas Rast
2009-10-21 18:16 ` [PATCH 2/2] filter-branch: nearest-ancestor rewriting outside subdir filter Thomas Rast
2009-10-21 18:28 ` [PATCH v2 1/2] filter-branch: stop special-casing $filter_subdir argument Thomas Rast
2009-10-21 18:28 ` [PATCH v2 2/2] filter-branch: nearest-ancestor rewriting outside subdir filter Thomas Rast
2009-10-22 6:06 ` Johannes Sixt [this message]
2009-10-22 8:05 ` [PATCH v2 1/2] filter-branch: stop special-casing $filter_subdir argument Thomas Rast
2009-10-22 8:31 ` Johannes Sixt
2009-10-28 22:59 ` [PATCH v3 " Thomas Rast
2009-10-28 22:59 ` [PATCH v3 2/2] filter-branch: nearest-ancestor rewriting outside subdir filter Thomas Rast
2009-10-29 7:38 ` Johannes Sixt
2009-10-29 7:35 ` [PATCH v3 1/2] filter-branch: stop special-casing $filter_subdir argument Johannes Sixt
2009-11-10 21:04 ` [PATCH v4 " Thomas Rast
2009-11-10 21:04 ` [PATCH v4 2/2] filter-branch: nearest-ancestor rewriting outside subdir filter Thomas Rast
2009-11-11 8:30 ` [PATCH v4 1/2] filter-branch: stop special-casing $filter_subdir argument Johannes Sixt
2009-11-11 8:53 ` [PATCH v5 " Johannes Sixt
2009-11-11 8:55 ` [PATCH v5 2/2] filter-branch: nearest-ancestor rewriting outside subdir filter Johannes Sixt
2009-11-11 18:22 ` Junio C Hamano
2009-11-11 18:36 ` Thomas Rast
2009-11-11 8:58 ` [PATCH v5 1/2] filter-branch: stop special-casing $filter_subdir argument Johannes Sixt
2009-11-11 10:24 ` Thomas Rast
2009-11-11 12:10 ` Johannes Sixt
2009-11-11 18:00 ` [PATCH v4 " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4ADFF66F.1080005@viscovery.net \
--to=j.sixt@viscovery.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=trast@student.ethz.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.