From: Clemens Buchacher <drizzd@aon.at>
To: Marat Radchenko <marat@slonopotamus.org>
Cc: Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org, Michael J Gruber <git@drmicha.warpmail.net>,
Jonathan Nieder <jrnieder@gmail.com>
Subject: Re: [PATCH v2] hash binary sha1 into patch id
Date: Fri, 10 Sep 2010 10:16:26 +0200 [thread overview]
Message-ID: <20100910081626.GA30507@localhost> (raw)
In-Reply-To: <1284095850.1728.5.camel@n900.home.ru>
[-- Attachment #1: Type: text/plain, Size: 2880 bytes --]
On Fri, Sep 10, 2010 at 09:17:30AM +0400, Marat Radchenko wrote:
>
> However, I can't say I'm completely satisfied with git rebase
> speed (I'd like it to be < 1 min). So, are there known
> performance hotspots in 'git rev-list --cherry-pick'/'git
> format-patch --ignore-if-in-upstream' (these are two flags have
> biggest impact on git rebase [-i] speed) or I should run some
> kind of profiles in order to determine what else could be
> improved?
git format-patch is still slow if you have large text files (>10000
lines). This patch only helps for binary files or files marked as
binary in .gitattributes. There is also a patch
http://mid.gmane.org/645d8a9bf671937c1a6962b49cf1c512e0af0d82.1279008702.git.git@drmicha.warpmail.net
to turn off patch ID computation entirely.
Other than that, I am not aware of performance issues with rebase
that would cause it to take more than a minute. Possibly you can
use 'perf' to profile your use case. I used it to test this patch
in the script below (pass -p to enable). But it's only testing
format-patch right now, so you would have to modify it to profile
rebase as a whole.
Clemens
---
#!/bin/bash
set -e
NLINES=50000
NRAND=32768
# probability of change in percent
CHG_PROB=30
perf=
while test $# -gt 0
do
case $1 in
-p)
perf=t
;;
-n)
shift
NLINES=$1
;;
*)
break
;;
esac
shift
done
if test $# -gt 0
then
export PATH="$1:$PATH"
shift
fi
if test $# -gt 0
then
echo "too many arguments" >&2
exit 1
fi
dir=$(mktemp -d)
scramble()
{
while read x
do
if test $RANDOM -lt $((($CHG_PROB * $NRAND)/100))
then
echo $RANDOM
else
echo "$x"
fi
done < "$1" > "$1.new"
mv -f "$1.new" "$1"
}
run()
{
echo \$ "$@"
if test -n "$perf"
then
perf record -g -f "$@" >/dev/null
perf report -g
else
time "$@" >/dev/null
fi
}
cd "$dir"
git init -q
for i in $(seq $NLINES)
do
echo $i
done > file
git add file
echo "file binary" >.gitattributes
git add .gitattributes
git commit -q -m initial
git branch other
scramble file
git add file
git commit -q -m 'change big file'
git checkout -q other
: >newfile
git add newfile
git commit -q -m 'add small file'
gfp="git format-patch --stdout"
run $gfp master
run $gfp --ignore-if-in-upstream master
git cherry-pick master >/dev/null 2>&1
git checkout -q master
scramble file
git add file
git commit -q -m 'change big file again'
git checkout -q other^{}
run git rebase master
if test -n "$(git rev-list master...HEAD~)"
then
echo "patch not identified" >&2
exit 1
fi
git checkout -q -b squashed master
git reset -q --soft HEAD~2
git commit -q -m squashed
git checkout -q other^{}
if git rebase squashed >/dev/null
then
echo "patch dropped" >&2
exit 1
fi
cd - >/dev/null
rm -rf "$dir"
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
next prev parent reply other threads:[~2010-09-10 8:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-13 9:40 [PATCH] hash binary sha1 into patch id Clemens Buchacher
2010-08-13 20:00 ` Jonathan Nieder
2010-08-13 21:23 ` Clemens Buchacher
2010-08-13 21:37 ` Jonathan Nieder
2010-08-13 21:58 ` Clemens Buchacher
2010-08-15 7:20 ` [PATCH v2] " Clemens Buchacher
2010-08-15 7:56 ` Jonathan Nieder
2010-09-10 5:17 ` Marat Radchenko
2010-09-10 8:16 ` Clemens Buchacher [this message]
2010-10-13 7:46 ` Marat Radchenko
2010-10-13 9:17 ` Marat Radchenko
2010-10-13 21:10 ` Clemens Buchacher
2010-10-14 7:19 ` Marat Radchenko
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=20100910081626.GA30507@localhost \
--to=drizzd@aon.at \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=marat@slonopotamus.org \
/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.