Merge branch 'rr/rebase-autostash'
[gitweb.git] / contrib / mw-to-git / git-remote-mediawiki.perl
index 6672e4c0d62c3d8fa51188a1bd803dfbd2e642c3..c1a967b3d14e87fedebd093c473e1d6f6eb4e94c 100755 (executable)
 # Used on Git's side to reflect empty edit messages on the wiki
 use constant EMPTY_MESSAGE => '*Empty MediaWiki Message*';
 
+if (@ARGV != 2) {
+       exit_error_usage();
+}
+
 my $remotename = $ARGV[0];
 my $url = $ARGV[1];
 
 
 ########################## Functions ##############################
 
+## error handling
+sub exit_error_usage {
+       die "ERROR: git-remote-mediawiki module was not called with a correct number of\n" .
+           "parameters\n" .
+           "You may obtain this error because you attempted to run the git-remote-mediawiki\n" .
+            "module directly.\n" .
+           "This module can be used the following way:\n" .
+           "\tgit clone mediawiki://<address of a mediawiki>\n" .
+           "Then, use git commit, push and pull as with every normal git repository.\n";
+}
+
 # MediaWiki API instance, created lazily.
 my $mediawiki;
 
@@ -190,6 +205,22 @@ sub mw_connect_maybe {
        }
 }
 
+sub fatal_mw_error {
+       my $action = shift;
+       print STDERR "fatal: could not $action.\n";
+       print STDERR "fatal: '$url' does not appear to be a mediawiki\n";
+       if ($url =~ /^https/) {
+               print STDERR "fatal: make sure '$url/api.php' is a valid page\n";
+               print STDERR "fatal: and the SSL certificate is correct.\n";
+       } else {
+               print STDERR "fatal: make sure '$url/api.php' is a valid page.\n";
+       }
+       print STDERR "fatal: (error " .
+           $mediawiki->{error}->{code} . ': ' .
+           $mediawiki->{error}->{details} . ")\n";
+       exit 1;
+}
+
 ## Functions for listing pages on the remote wiki
 sub get_mw_tracked_pages {
        my $pages = shift;
@@ -242,10 +273,7 @@ sub get_mw_all_pages {
                aplimit => 'max'
        });
        if (!defined($mw_pages)) {
-               print STDERR "fatal: could not get the list of wiki pages.\n";
-               print STDERR "fatal: '$url' does not appear to be a mediawiki\n";
-               print STDERR "fatal: make sure '$url/api.php' is a valid page.\n";
-               exit 1;
+               fatal_mw_error("get the list of wiki pages");
        }
        foreach my $page (@{$mw_pages}) {
                $pages->{$page->{title}} = $page;
@@ -268,10 +296,7 @@ sub get_mw_first_pages {
                titles => $titles,
        });
        if (!defined($mw_pages)) {
-               print STDERR "fatal: could not query the list of wiki pages.\n";
-               print STDERR "fatal: '$url' does not appear to be a mediawiki\n";
-               print STDERR "fatal: make sure '$url/api.php' is a valid page.\n";
-               exit 1;
+               fatal_mw_error("query the list of wiki pages");
        }
        while (my ($id, $page) = each(%{$mw_pages->{query}->{pages}})) {
                if ($id < 0) {