From: Junio C Hamano <gitster@pobox.com>
To: Jiang Xin <worldhello.net@gmail.com>
Cc: "Git List" <git@vger.kernel.org>,
"Đoàn Trần Công Danh" <congdanhqx@gmail.com>,
"Jonathan Nieder" <jrnieder@gmail.com>,
"Jiang Xin" <zhiyou.jx@alibaba-inc.com>
Subject: Re: [PATCH v5 1/3] test: add helper functions for git-bundle
Date: Mon, 11 Jan 2021 12:09:52 -0800 [thread overview]
Message-ID: <xmqq1rer8cbz.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <20210110143019.5625-2-worldhello.net@gmail.com> (Jiang Xin's message of "Sun, 10 Jan 2021 09:30:17 -0500")
Jiang Xin <worldhello.net@gmail.com> writes:
> +# Create a commit or tag and set the variable with the object ID.
> +test_commit_setvar () {
> + notick=
> + signoff=
> + indir=
> + merge=
> + tag=
> + var=
> +
> + while test $# != 0
> + do
> + case "$1" in
> + --merge)
> + merge=t
> + ;;
> + --tag)
> + tag=t
> + ;;
> + --notick)
> + notick=t
> + ;;
> + --signoff)
> + signoff="$1"
> + ;;
> + -C)
> + shift
> + indir="$1"
> + ;;
> + -*)
> + echo >&2 "error: unknown option $1"
> + return 1
> + ;;
> + *)
> + break
> + ;;
> + esac
> + shift
> + done
> +
> + var=$1
> + shift
> + if test -z "$var"
> + then
> + echo >&2 "error: var is not defined"
> + return 1
> + fi
We need to check $# immediately after the loop to ensure that we can
carve out $var and at least another arg. [*Nit 1*]
The previous round required the command line to have at least one
after the loop (including parsing of $var) parsed it, but now we
fall through from here when a command line were:
test_commit_setvar --merge -C there VAR
and because "$1" does not exist, such an error is propagated down to
"git merge" not getting the side branch, "git tag" not getting the
object to tag, etc.
> + indir=${indir:+"$indir"/}
> + if test -z "$notick"
> + then
> + test_tick
> + fi &&
> + if test -n "$merge"
> + then
> + git ${indir:+ -C "$indir"} merge --no-edit --no-ff \
> + ${2:+-m "$2"} "$1" &&
> + oid=$(git ${indir:+ -C "$indir"} rev-parse HEAD)
> + elif test -n "$tag"
> + then
> + git ${indir:+ -C "$indir"} tag -m "$1" "$1" &&
> + oid=$(git ${indir:+ -C "$indir"} rev-parse "$1")
> + else
> + file=${2:-"$1.t"} &&
> + echo "${3-$1}" > "$indir$file" &&
Style? [*Nit 2*]
> + git ${indir:+ -C "$indir"} add "$file" &&
> + git ${indir:+ -C "$indir"} commit $signoff -m "$1" &&
> + oid=$(git ${indir:+ -C "$indir"} rev-parse HEAD)
> + fi &&
> + eval $var=$oid
> +}
> +
> +
> +# Format the output of git commands to make a user-friendly and stable
> +# text. We can easily prepare the expect text without having to worry
> +# about future changes of the commit ID and spaces of the output.
> +make_user_friendly_and_stable_output () {
> + sed \
> + -e "s/$(echo $A | cut -c1-7)[0-9a-f]*/<COMMIT-A>/g" \
Is "$(echo $A | cut -c1-7)" the same as "${A%${A#???????}}"? If so,
the latter may be a bit shorter.
> diff --git a/t/test-bundle-functions.sh b/t/test-bundle-functions.sh
> new file mode 100644
> index 0000000000..0853eb1eca
> --- /dev/null
> +++ b/t/test-bundle-functions.sh
> @@ -0,0 +1,47 @@
> +# Library of git-bundle related functions.
> +
> +# Display the pack data contained in the bundle file, bypassing the
> +# header that contains the signature, prerequisites and references.
> +convert_bundle_to_pack () {
> + while read x && test -n "$x"
> + do
> + :;
> + done
> + cat
> +}
> +
> +# Check count of objects in a bundle file.
> +# We can use "--thin" opiton to check thin pack, which must be fixed by
> +# command `git-index-pack --fix-thin --stdin`.
> +test_bundle_object_count () {
> + thin=
> + if test "$1" = "--thin"
> + then
> + thin=t
> + shift
> + fi
> + if test $# -ne 2
> + then
> + echo >&2 "args should be: <bundle> <count>"
> + return 1
> + fi
> + bundle=$1
> + pack=$bundle.pack
> + convert_bundle_to_pack <"$bundle" >"$pack" &&
> + if test -n "$thin"
> + then
> + mv "$pack" "$bundle.thin.pack" &&
> + git index-pack --stdin --fix-thin "$pack" <"$bundle.thin.pack"
> + else
> + git index-pack "$pack"
> + fi
I wonder why we shouldn't always do "--fix-thin", so that the caller
does not even have to bother passing the "--thin" option.
Is this to protect us from "git bundle" creating a bundle that
contains a thin pack when it should not? A caller that knows it is
storing a fully connected history can deliberately omit "--thin"
from the command line and make sure "index-pack" that is not asked
to do "--fix-thin" indeed finds the pack data fully self-contained,
so it may be a good idea to have these two separate codepaths after
all. OK.
> + if test $? -ne 0
> + then
> + echo >&2 "error: fail to convert $bundle or index-pack"
> + return 1
> + fi
Do we even need the "error" message? "git index-pack" would have
already given some error message to its standard error stream, no?
If so
if test -n "$thin"
then
...
fi || return 1
would be sufficient, I guess.
> + count=$(git show-index <"${pack%pack}idx" | wc -l) &&
> + test $2 = $count && return 0
> + echo >&2 "error: object count for $bundle is $count, not $2"
> + return 1
> +}
Looking good except for a few minor nits I mentioned above.
Thanks.
next prev parent reply other threads:[~2021-01-11 20:10 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-03 9:54 [PATCH] bundle: arguments can be read from stdin Jiang Xin
2021-01-04 23:41 ` Junio C Hamano
2021-01-05 16:30 ` [PATCH v2 1/2] bundle: lost objects when removing duplicate pendings Jiang Xin
2021-01-05 16:30 ` [PATCH v2 2/2] bundle: arguments can be read from stdin Jiang Xin
2021-01-07 13:50 ` [PATCH v3 0/2] improvements for git-bundle Jiang Xin
2021-01-07 13:50 ` [PATCH v3 1/2] bundle: lost objects when removing duplicate pendings Jiang Xin
2021-01-07 15:37 ` Đoàn Trần Công Danh
2021-01-08 13:14 ` Jiang Xin
2021-01-08 14:45 ` [PATCH v4 0/2] Improvements for git-bundle Jiang Xin
2021-01-08 14:45 ` [PATCH v4 1/2] bundle: lost objects when removing duplicate pendings Jiang Xin
2021-01-09 2:10 ` Junio C Hamano
2021-01-09 13:32 ` Jiang Xin
2021-01-09 22:02 ` Junio C Hamano
2021-01-10 14:30 ` [PATCH v5 0/3] improvements for git-bundle Jiang Xin
2021-01-10 14:30 ` [PATCH v5 1/3] test: add helper functions " Jiang Xin
2021-01-11 20:09 ` Junio C Hamano [this message]
2021-01-12 2:27 ` [PATCH v6 0/3] improvements " Jiang Xin
2021-01-12 2:27 ` [PATCH v6 1/3] test: add helper functions " Jiang Xin
2021-05-26 18:49 ` Runaway sed memory use in test on older sed+glibc (was "Re: [PATCH v6 1/3] test: add helper functions for git-bundle") Ævar Arnfjörð Bjarmason
2021-05-27 11:52 ` Jiang Xin
2021-05-27 12:19 ` Ævar Arnfjörð Bjarmason
2021-05-27 13:48 ` Jeff King
2021-05-27 19:19 ` Felipe Contreras
2021-06-01 9:45 ` Jiang Xin
2021-06-01 9:42 ` Jiang Xin
2021-06-01 11:50 ` Ævar Arnfjörð Bjarmason
2021-06-01 13:20 ` Jiang Xin
2021-06-01 14:49 ` [PATCH 1/2] t6020: fix bash incompatible issue Jiang Xin
2021-06-01 14:49 ` [PATCH 2/2] t6020: do not mangle trailing spaces in output Jiang Xin
2021-06-05 17:02 ` Ævar Arnfjörð Bjarmason
2021-06-12 5:07 ` [PATCH v2 0/4] Fixed t6020 bash compatible issue and fixed wrong sideband suffix issue Jiang Xin
2021-06-14 4:10 ` Junio C Hamano
2021-06-15 3:11 ` Jiang Xin
2021-06-17 3:14 ` [PATCH v3] t6020: fix incompatible parameter expansion Jiang Xin
2021-06-21 8:41 ` Ævar Arnfjörð Bjarmason
2021-06-12 5:07 ` [PATCH v2 1/4] t6020: fix bash incompatible issue Jiang Xin
2021-06-12 5:07 ` [PATCH v2 2/4] test: refactor create_commits_in() for t5411 and t5548 Jiang Xin
2021-06-12 5:07 ` [PATCH v2 3/4] sideband: append suffix for message whose CR in next pktline Jiang Xin
2021-06-13 7:47 ` Ævar Arnfjörð Bjarmason
2021-06-14 3:50 ` Junio C Hamano
2021-06-14 11:51 ` Jiang Xin
2021-06-15 1:17 ` Junio C Hamano
2021-06-15 1:47 ` Jiang Xin
2021-06-15 2:11 ` Nicolas Pitre
2021-06-15 3:04 ` Jiang Xin
2021-06-15 3:26 ` Nicolas Pitre
2021-06-15 4:46 ` Junio C Hamano
2021-06-15 7:17 ` Jiang Xin
2021-06-15 14:46 ` Nicolas Pitre
2021-06-12 5:07 ` [PATCH v2 4/4] test: compare raw output, not mangle tabs and spaces Jiang Xin
2021-01-12 2:27 ` [PATCH v6 2/3] bundle: lost objects when removing duplicate pendings Jiang Xin
2021-01-12 2:27 ` [PATCH v6 3/3] bundle: arguments can be read from stdin Jiang Xin
2021-01-10 14:30 ` [PATCH v5 2/3] bundle: lost objects when removing duplicate pendings Jiang Xin
2021-01-11 20:12 ` Junio C Hamano
2021-01-10 14:30 ` [PATCH v5 3/3] bundle: arguments can be read from stdin Jiang Xin
2021-01-09 15:09 ` [PATCH v4 1/2] bundle: lost objects when removing duplicate pendings Jiang Xin
2021-01-09 22:02 ` Junio C Hamano
2021-01-08 14:45 ` [PATCH v4 2/2] bundle: arguments can be read from stdin Jiang Xin
2021-01-09 2:18 ` Junio C Hamano
2021-01-07 13:50 ` [PATCH v3 " Jiang Xin
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=xmqq1rer8cbz.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=congdanhqx@gmail.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=worldhello.net@gmail.com \
--cc=zhiyou.jx@alibaba-inc.com \
/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.