From: Dmitry Ivankov <divanorama@gmail.com>
To: git@vger.kernel.org
Cc: Jonathan Nieder <jrnieder@gmail.com>,
David Barr <davidbarr@google.com>,
Ramkumar Ramachandra <artagnon@gmail.com>,
Dmitry Ivankov <divanorama@gmail.com>
Subject: [PATCH v2 9/9] svn-fe: reuse import-marks in remote-svn-alpha
Date: Wed, 13 Jul 2011 21:26:53 +0600 [thread overview]
Message-ID: <1310570813-16648-10-git-send-email-divanorama@gmail.com> (raw)
In-Reply-To: <1310570813-16648-1-git-send-email-divanorama@gmail.com>
remote-svn-alpha needs to prepare import marks file when doing an
incremental import. This file can be left after previous imports.
Take the last imported commit and a note with corresponding svn
revision number. If the marks file exists and defines a :revision
mark pointing to the last imported commit, consider it valid.
It may accidentally contain newer revisions, they are silently
ignored. In practice the check for :revision last_commit should
be sufficient to rely on this file defining any lesser revision
marks needed correctly.
So if the import marks file looks valid, do not regenerate it from
the notes tree and have save some performance saved.
Signed-off-by: Dmitry Ivankov <divanorama@gmail.com>
---
contrib/svn-fe/git-remote-svn-alpha | 26 ++++++++++++++++++++++----
1 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/contrib/svn-fe/git-remote-svn-alpha b/contrib/svn-fe/git-remote-svn-alpha
index f4e737d..8096ef2 100755
--- a/contrib/svn-fe/git-remote-svn-alpha
+++ b/contrib/svn-fe/git-remote-svn-alpha
@@ -78,14 +78,31 @@ do_gen_marks () {
prepare_marks () {
dst=$1 notes=$2 rev=$3
test "z$git_dir" != "$z" || die "we were not told the gitdir"
- mkdir -p "$git_dir/$marks_dir"
- if test ! -f "$git_dir/$marks_dir/marks"; then
- touch "$git_dir/$marks_dir/marks"
+ path="$git_dir/$marks_dir"
+ mkdir -p "$path"
+ path="$path/marks"
+
+ if test ! -f "$path"; then
+ touch "$path"
fi
if test "$rev" = "-1"; then
return 0
fi
- do_gen_marks "$notes" >"$git_dir/$marks_dir/marks"
+ mark_sha=""
+ {
+ while read -r m sha
+ do
+ if test "$m" = ":$rev"; then
+ mark_sha="$sha"
+ fi
+ done
+ } <"$path"
+ dst_sha=$( git rev-parse "$dst" )
+ if test -n "$mark_sha"; then
+ test "$mark_sha" = "$dst_sha" || die "latest mark and note diverge"
+ else
+ do_gen_marks "$notes" >"$path"
+ fi
}
last_imported_rev () {
@@ -110,6 +127,7 @@ do_import () {
revs="$start_rev:HEAD"
prepare_marks $dst $notes $rev
echo "feature import-marks=$git_dir/$marks_dir/marks"
+ echo "feature export-marks=$git_dir/$marks_dir/marks"
(eval "$SVNDUMP \"$url\" -r\"$revs\"" | svn-fe --ref="$dst" --notes-ref="$notes" --incremental --no-progress) 3<&0 || die "FAILURE"
exec 1>&-
}
--
1.7.3.4
prev parent reply other threads:[~2011-07-13 15:27 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-13 15:26 [GSoC'11] [PATCH/RFC v2 0/9] remote-svn-alpha updates Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 1/9] svn-fe: use svnrdump --quiet in remote-svn-alpha Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 2/9] svn-fe: avoid error on no-op imports " Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 3/9] svn-fe: allow svnadmin instead of svnrdump " Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 4/9] svn-fe: add a test for remote-svn-alpha Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 5/9] svn-fe: use svn-fe --no-progress in remote-svn-alpha Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 6/9] svn-fe: use proper refspec " Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 7/9] svn-fe: write svnrev notes " Dmitry Ivankov
2011-07-13 15:26 ` [PATCH v2 8/9] svn-fe: import incrementally in svn-remote-alpha Dmitry Ivankov
2011-07-13 15:26 ` Dmitry Ivankov [this message]
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=1310570813-16648-10-git-send-email-divanorama@gmail.com \
--to=divanorama@gmail.com \
--cc=artagnon@gmail.com \
--cc=davidbarr@google.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.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 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).