From: nguyenkimthuat <nguyenkimthuat@xxxxxxxxx> This patch adds the functionnality to export the file attachements from the local git's repository using the API of mediawiki. Signed-off-by: VOLEK Pavel <Pavel.Volek@xxxxxxxxxxxxxxx> Signed-off-by: NGUYEN Kim Thuat <Kim-Thuat.Nguyen@xxxxxxxxxxxxxxx> Signed-off-by: ROUCHER IGLESIAS Javier <roucherj@xxxxxxxxxxxxxxx> Signed-off-by: Matthieu Moy <Matthieu.Moy@xxxxxxx> --- contrib/mw-to-git/git-remote-mediawiki | 62 +++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/contrib/mw-to-git/git-remote-mediawiki b/contrib/mw-to-git/git-remote-mediawiki index c18bfa1..8f711e2 100755 --- a/contrib/mw-to-git/git-remote-mediawiki +++ b/contrib/mw-to-git/git-remote-mediawiki @@ -275,6 +275,14 @@ sub run_git { return $res; } +sub run_git_raw { + no encoding 'utf8'; + open(my $g, "-|", "git " . $_[0]); + my $r = do { local $/; <$g> }; + close($g); + + return $r; +} sub get_last_local_revision { # Get note regarding last mediawiki revision @@ -644,6 +652,10 @@ sub mw_push_file { my $page_deleted = ($new_sha1 eq NULL_SHA1); $complete_file_name = mediawiki_clean_filename($complete_file_name); + my $path = "File:".$complete_file_name; + my @extensions = split(/\./, $complete_file_name); + my $extension = pop(@extensions); + if (substr($complete_file_name,-3) eq ".mw") { my $title = substr($complete_file_name,0,-3); @@ -687,7 +699,40 @@ sub mw_push_file { $newrevid = $result->{edit}->{newrevid}; print STDERR "Pushed file: $new_sha1 - $title\n"; } else { - print STDERR "$complete_file_name not a mediawiki file (Not pushable on this version of git-remote-mediawiki).\n" + my %hashFiles = get_file_extensions(); + if (exists($hashFiles{$extension})) { + # Deleting and uploading a file require the priviledge of the user + if ($page_deleted) { + mw_connect_maybe(); + my $res = $mediawiki->edit( { + action => 'delete', + title => $path, + reason => $summary + } )|| die $mediawiki-> {error}->{code} . ':' . $mediawiki->{error}->{details}; + } else { + my $content = run_git_raw("cat-file blob $new_sha1"); + if ($content ne "") { + mw_connect_maybe(); + $mediawiki->{config}->{upload_url} = "$url/index.php/Special:Upload"; + my $res = $mediawiki->edit ( { + action => 'upload', + filename => $complete_file_name, + comment => $summary, + file => [undef, $complete_file_name, Content => $content ], + ignorewarnings=>1, + }, { + skip_encoding => 1 # Helps with names with accentuated characters + } ) || die $mediawiki-> {error}->{code} . ':' . $mediawiki->{error}->{details}; + my $last_file_page = $mediawiki->get_page({title =>$path}); + $newrevid = $last_file_page->{revid}; + print STDERR "Pushed file: $new_sha1 - $complete_file_name\n"; + } else { + print STDERR "Empty file. Can not upload \n "; + } + } + } else { + print STDERR "$complete_file_name not a mediawiki file (Not pushable on this version of git-remote-mediawiki).\n"; + } } return ($newrevid, "ok"); } @@ -825,3 +870,18 @@ sub mw_push_revision { print STDOUT "ok $remote\n"; return 1; } + +sub get_file_extensions { + mw_connect_maybe(); + + my $query = { + action => 'query', + meta => 'siteinfo', + siprop => 'fileextensions' + }; + my $result = $mediawiki->api($query); + my @file_extensions= map $_->{ext},@{$result->{query}->{fileextensions}}; + my %hashFile = map {$_ => 1}@file_extensions; + + return %hashFile; +} -- 1.7.10.GIT -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html