git-remote-mediawiki: use Git.pm functions for credentials
authorBenoit Person <benoit.person@ensimag.fr>
Wed, 5 Jun 2013 10:58:00 +0000 (12:58 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 Jun 2013 18:15:24 +0000 (11:15 -0700)
In 52dce6d, a new credential function was added to Git.pm, based on
git-remote-mediawiki's functions. The logical follow-up is to use
those functions in git-remote-mediawiki.

Signed-off-by: Benoit Person <benoit.person@ensimag.fr>
Signed-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/mw-to-git/git-remote-mediawiki.perl
index 9c14c1f88d3a8f23df54db2adc7985eb00722c12..6672e4c0d62c3d8fa51188a1bd803dfbd2e642c3 100755 (executable)
@@ -13,6 +13,7 @@
 
 use strict;
 use MediaWiki::API;
+use Git;
 use DateTime::Format::ISO8601;
 
 # By default, use UTF-8 to communicate with Git and the user
 
 ########################## Functions ##############################
 
-## credential API management (generic functions)
-
-sub credential_read {
-       my %credential;
-       my $reader = shift;
-       my $op = shift;
-       while (<$reader>) {
-               my ($key, $value) = /([^=]*)=(.*)/;
-               if (not defined $key) {
-                       die "ERROR receiving response from git credential $op:\n$_\n";
-               }
-               $credential{$key} = $value;
-       }
-       return %credential;
-}
-
-sub credential_write {
-       my $credential = shift;
-       my $writer = shift;
-       # url overwrites other fields, so it must come first
-       print $writer "url=$credential->{url}\n" if exists $credential->{url};
-       while (my ($key, $value) = each(%$credential) ) {
-               if (length $value && $key ne 'url') {
-                       print $writer "$key=$value\n";
-               }
-       }
-}
-
-sub credential_run {
-       my $op = shift;
-       my $credential = shift;
-       my $pid = open2(my $reader, my $writer, "git credential $op");
-       credential_write($credential, $writer);
-       print $writer "\n";
-       close($writer);
-
-       if ($op eq "fill") {
-               %$credential = credential_read($reader, $op);
-       } else {
-               if (<$reader>) {
-                       die "ERROR while running git credential $op:\n$_";
-               }
-       }
-       close($reader);
-       waitpid($pid, 0);
-       my $child_exit_status = $? >> 8;
-       if ($child_exit_status != 0) {
-               die "'git credential $op' failed with code $child_exit_status.";
-       }
-}
-
 # MediaWiki API instance, created lazily.
 my $mediawiki;
 
@@ -217,22 +167,24 @@ sub mw_connect_maybe {
        $mediawiki = MediaWiki::API->new;
        $mediawiki->{config}->{api_url} = "$url/api.php";
        if ($wiki_login) {
-               my %credential = (url => $url);
-               $credential{username} = $wiki_login;
-               $credential{password} = $wiki_passwd;
-               credential_run("fill", \%credential);
+               my %credential = (
+                       'url' => $url,
+                       'username' => $wiki_login,
+                       'password' => $wiki_passwd
+               );
+               Git::credential(\%credential);
                my $request = {lgname => $credential{username},
                               lgpassword => $credential{password},
                               lgdomain => $wiki_domain};
                if ($mediawiki->login($request)) {
-                       credential_run("approve", \%credential);
+                       Git::credential(\%credential, 'approve');
                        print STDERR "Logged in mediawiki user \"$credential{username}\".\n";
                } else {
                        print STDERR "Failed to log in mediawiki user \"$credential{username}\" on $url\n";
                        print STDERR "  (error " .
                                $mediawiki->{error}->{code} . ': ' .
                                $mediawiki->{error}->{details} . ")\n";
-                       credential_run("reject", \%credential);
+                       Git::credential(\%credential, 'reject');
                        exit 1;
                }
        }