git-remote-mediawiki: use Git.pm functions for credentials
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>
Benoit Person committed
Jun 5, 2013 at 12:58 UTC
da608b124c76f8f7dba8a9d8f0bc8174b9744176
1 file changed
+9
-57
contrib/mw-to-git/git-remote-mediawiki.perl
+9
-57
@@ -13,6 +13,7 @@
13
14
use strict;
15
use MediaWiki::API;
16
+use Git;
17
use DateTime::Format::ISO8601;
18
19
# By default, use UTF-8 to communicate with Git and the user
@@ -156,57 +157,6 @@ while (<STDIN>) {
157
158
########################## Functions ##############################
159
159
-## credential API management (generic functions)
160
-
161
-sub credential_read {
162
- my %credential;
163
- my $reader = shift;
164
- my $op = shift;
165
- while (<$reader>) {
166
- my ($key, $value) = /([^=]*)=(.*)/;
167
- if (not defined $key) {
168
- die "ERROR receiving response from git credential $op:\n$_\n";
169
- }
170
- $credential{$key} = $value;
171
- }
172
- return %credential;
173
-}
174
-
175
-sub credential_write {
176
- my $credential = shift;
177
- my $writer = shift;
178
- # url overwrites other fields, so it must come first
179
- print $writer "url=$credential->{url}\n" if exists $credential->{url};
180
- while (my ($key, $value) = each(%$credential) ) {
181
- if (length $value && $key ne 'url') {
182
- print $writer "$key=$value\n";
183
- }
184
- }
185
-}
186
-
187
-sub credential_run {
188
- my $op = shift;
189
- my $credential = shift;
190
- my $pid = open2(my $reader, my $writer, "git credential $op");
191
- credential_write($credential, $writer);
192
- print $writer "\n";
193
- close($writer);
194
-
195
- if ($op eq "fill") {
196
- %$credential = credential_read($reader, $op);
197
- } else {
198
- if (<$reader>) {
199
- die "ERROR while running git credential $op:\n$_";
200
- }
201
- }
202
- close($reader);
203
- waitpid($pid, 0);
204
- my $child_exit_status = $? >> 8;
205
- if ($child_exit_status != 0) {
206
- die "'git credential $op' failed with code $child_exit_status.";
207
- }
208
-}
209
-
160
# MediaWiki API instance, created lazily.
161
my $mediawiki;
162
@@ -217,22 +167,24 @@ sub mw_connect_maybe {
167
$mediawiki = MediaWiki::API->new;
168
$mediawiki->{config}->{api_url} = "$url/api.php";
169
if ($wiki_login) {
220
- my %credential = (url => $url);
221
- $credential{username} = $wiki_login;
222
- $credential{password} = $wiki_passwd;
223
- credential_run("fill", \%credential);
170
+ my %credential = (
171
+ 'url' => $url,
172
+ 'username' => $wiki_login,
173
+ 'password' => $wiki_passwd
174
+ );
175
+ Git::credential(\%credential);
176
my $request = {lgname => $credential{username},
177
lgpassword => $credential{password},
178
lgdomain => $wiki_domain};
179
if ($mediawiki->login($request)) {
228
- credential_run("approve", \%credential);
180
+ Git::credential(\%credential, 'approve');
181
print STDERR "Logged in mediawiki user \"$credential{username}\".\n";
182
} else {
183
print STDERR "Failed to log in mediawiki user \"$credential{username}\" on $url\n";
184
print STDERR " (error " .
185
$mediawiki->{error}->{code} . ': ' .
186
$mediawiki->{error}->{details} . ")\n";
235
- credential_run("reject", \%credential);
187
+ Git::credential(\%credential, 'reject');
188
exit 1;
189
}
190
}