From: "Célestin Matte" <celestin.matte@ensimag.fr>
To: git@vger.kernel.org
Cc: benoit.person@ensimag.fr, matthieu.moy@grenoble-inp.fr,
"Célestin Matte" <celestin.matte@ensimag.fr>
Subject: [PATCH RFC] git-remote-mediawiki: push-by-rev
Date: Sun, 16 Jun 2013 22:28:19 +0200 [thread overview]
Message-ID: <1371414499-13027-2-git-send-email-celestin.matte@ensimag.fr> (raw)
In-Reply-To: <1371414499-13027-1-git-send-email-celestin.matte@ensimag.fr>
From: Célestin Matte <celestin.matte@ensimag.fr>
Add the push-by-rev option
This allows one to look for changes by revision instead of by page.
The result is a much faster push on little-activity wikis. Indeed, instead of
sending one request by page to check that the remote revision is our local
latest revision, we only send one request for every new local revision.
Signed-off-by: Célestin Matte <celestin.matte@ensimag.fr>
Signed-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
---
contrib/mw-to-git/git-remote-mediawiki.perl | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/contrib/mw-to-git/git-remote-mediawiki.perl b/contrib/mw-to-git/git-remote-mediawiki.perl
index 9ff45fd..fa49882 100755
--- a/contrib/mw-to-git/git-remote-mediawiki.perl
+++ b/contrib/mw-to-git/git-remote-mediawiki.perl
@@ -102,6 +102,15 @@ if (!$fetch_strategy) {
$fetch_strategy = 'by_page';
}
+my $push_strategy = run_git("config --get remote.${remotename}.pushStrategy");
+if (!$push_strategy) {
+ $push_strategy = run_git('config --get mediawiki.pushStrategy');
+}
+chomp($push_strategy);
+if (!$push_strategy) {
+ $push_strategy = 'by_page';
+}
+
# Remember the timestamp corresponding to a revision id.
my %basetimestamps;
@@ -512,7 +521,7 @@ sub get_last_local_revision {
# Get the last remote revision without taking in account which pages are
# tracked or not. This function makes a single request to the wiki thus
# avoid a loop onto all tracked pages. This is useful for the fetch-by-rev
-# option.
+# and the push-by-rev options.
sub get_last_global_remote_rev {
mw_connect_maybe();
@@ -1160,8 +1169,19 @@ sub mw_push_revision {
my $local = shift;
my $remote = shift; # actually, this has to be "refs/heads/master" at this point.
my $last_local_revid = get_last_local_revision();
+ my $last_remote_revid;
print {*STDERR} ".\n"; # Finish sentence started by get_last_local_revision()
- my $last_remote_revid = get_last_remote_revision();
+ if ($push_strategy eq 'by_page') {
+ print {*STDERR} "Pushing export data by pages...\n";
+ $last_remote_revid = get_last_remote_revision();
+ } elsif ($push_strategy eq 'by_rev') {
+ print {*STDERR} "Pushing export data by revs...\n";
+ $last_remote_revid = get_last_global_remote_rev();
+ } else {
+ print {*STDERR} qq(fatal: invalid push strategy "${push_strategy}".\n);
+ print {*STDERR} "Check your configuration variables remote.${remotename}.pushStrategy and mediawiki.pushStrategy\n";
+ exit 1;
+ }
my $mw_revision = $last_remote_revid;
# Get sha1 of commit pointed by local HEAD
--
1.8.3.1.522.gd761f2b.dirty
next prev parent reply other threads:[~2013-06-16 20:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-16 20:28 [PATCH RFC] git-remote-mediawiki: push-by-rev Célestin Matte
2013-06-16 20:28 ` Célestin Matte [this message]
2013-06-16 20:49 ` Matthieu Moy
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=1371414499-13027-2-git-send-email-celestin.matte@ensimag.fr \
--to=celestin.matte@ensimag.fr \
--cc=benoit.person@ensimag.fr \
--cc=git@vger.kernel.org \
--cc=matthieu.moy@grenoble-inp.fr \
/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