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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).