 2388541a77
			
		
	
	2388541a77
	
	
	
		
			
			Replace the use of the "open" pragma with a three-arg open in the places that actually care about UTF-8, while leaving those that don't (the config parsing). Unlike the previous "encoding" pragma change this isn't needed for compatibility with anything. I just think it's easier to read code that has localized effects than code that changes global settings. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			224 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w -s
 | |
| # Copyright (C) 2012
 | |
| #     Charles Roussel <charles.roussel@ensimag.imag.fr>
 | |
| #     Simon Cathebras <simon.cathebras@ensimag.imag.fr>
 | |
| #     Julien Khayat <julien.khayat@ensimag.imag.fr>
 | |
| #     Guillaume Sasdy <guillaume.sasdy@ensimag.imag.fr>
 | |
| #     Simon Perrat <simon.perrat@ensimag.imag.fr>
 | |
| # License: GPL v2 or later
 | |
| 
 | |
| # Usage:
 | |
| #       ./test-gitmw.pl <command> [argument]*
 | |
| # Execute in terminal using the name of the function to call as first
 | |
| # parameter, and the function's arguments as following parameters
 | |
| #
 | |
| # Example:
 | |
| #     ./test-gitmw.pl "get_page" foo .
 | |
| # will call <wiki_getpage> with arguments <foo> and <.>
 | |
| #
 | |
| # Available functions are:
 | |
| #     "get_page"
 | |
| #     "delete_page"
 | |
| #     "edit_page"
 | |
| #     "getallpagename"
 | |
| 
 | |
| use MediaWiki::API;
 | |
| use Getopt::Long;
 | |
| use DateTime::Format::ISO8601;
 | |
| use constant SLASH_REPLACEMENT => "%2F";
 | |
| 
 | |
| #Parsing of the config file
 | |
| 
 | |
| my $configfile = "$ENV{'CURR_DIR'}/test.config";
 | |
| my %config;
 | |
| open my $CONFIG, "<",  $configfile or die "can't open $configfile: $!";
 | |
| while (<$CONFIG>)
 | |
| {
 | |
| 	chomp;
 | |
| 	s/#.*//;
 | |
| 	s/^\s+//;
 | |
| 	s/\s+$//;
 | |
| 	next unless length;
 | |
| 	my ($key, $value) = split (/\s*=\s*/,$_, 2);
 | |
| 	$config{$key} = $value;
 | |
| 	last if ($key eq 'LIGHTTPD' and $value eq 'false');
 | |
| 	last if ($key eq 'PORT');
 | |
| }
 | |
| close $CONFIG or die "can't close $configfile: $!";
 | |
| 
 | |
| my $wiki_address = "http://$config{'SERVER_ADDR'}".":"."$config{'PORT'}";
 | |
| my $wiki_url = "$wiki_address/$config{'WIKI_DIR_NAME'}/api.php";
 | |
| my $wiki_admin = "$config{'WIKI_ADMIN'}";
 | |
| my $wiki_admin_pass = "$config{'WIKI_PASSW'}";
 | |
| my $mw = MediaWiki::API->new;
 | |
| $mw->{config}->{api_url} = $wiki_url;
 | |
| 
 | |
| 
 | |
| # wiki_login <name> <password>
 | |
| #
 | |
| # Logs the user with <name> and <password> in the global variable
 | |
| # of the mediawiki $mw
 | |
| sub wiki_login {
 | |
| 	$mw->login( { lgname => "$_[0]",lgpassword => "$_[1]" } )
 | |
| 	|| die "getpage: login failed";
 | |
| }
 | |
| 
 | |
| # wiki_getpage <wiki_page> <dest_path>
 | |
| #
 | |
| # fetch a page <wiki_page> from the wiki referenced in the global variable
 | |
| # $mw and copies its content in directory dest_path
 | |
| sub wiki_getpage {
 | |
| 	my $pagename = $_[0];
 | |
| 	my $destdir = $_[1];
 | |
| 
 | |
| 	my $page = $mw->get_page( { title => $pagename } );
 | |
| 	if (!defined($page)) {
 | |
| 		die "getpage: wiki does not exist";
 | |
| 	}
 | |
| 
 | |
| 	my $content = $page->{'*'};
 | |
| 	if (!defined($content)) {
 | |
| 		die "getpage: page does not exist";
 | |
| 	}
 | |
| 
 | |
| 	$pagename=$page->{'title'};
 | |
| 	# Replace spaces by underscore in the page name
 | |
| 	$pagename =~ s/ /_/g;
 | |
| 	$pagename =~ s/\//%2F/g;
 | |
| 	open(my $file, ">:encoding(UTF-8)", "$destdir/$pagename.mw");
 | |
| 	print $file "$content";
 | |
| 	close ($file);
 | |
| 
 | |
| }
 | |
| 
 | |
| # wiki_delete_page <page_name>
 | |
| #
 | |
| # delete the page with name <page_name> from the wiki referenced
 | |
| # in the global variable $mw
 | |
| sub wiki_delete_page {
 | |
| 	my $pagename = $_[0];
 | |
| 
 | |
| 	my $exist=$mw->get_page({title => $pagename});
 | |
| 
 | |
| 	if (defined($exist->{'*'})){
 | |
| 		$mw->edit({ action => 'delete',
 | |
| 				title => $pagename})
 | |
| 		|| die $mw->{error}->{code} . ": " . $mw->{error}->{details};
 | |
| 	} else {
 | |
| 		die "no page with such name found: $pagename\n";
 | |
| 	}
 | |
| }
 | |
| 
 | |
| # wiki_editpage <wiki_page> <wiki_content> <wiki_append> [-c=<category>] [-s=<summary>]
 | |
| #
 | |
| # Edit a page named <wiki_page> with content <wiki_content> on the wiki
 | |
| # referenced with the global variable $mw
 | |
| # If <wiki_append> == true : append <wiki_content> at the end of the actual
 | |
| # content of the page <wiki_page>
 | |
| # If <wik_page> doesn't exist, that page is created with the <wiki_content>
 | |
| sub wiki_editpage {
 | |
| 	my $wiki_page = $_[0];
 | |
| 	my $wiki_content = $_[1];
 | |
| 	my $wiki_append = $_[2];
 | |
| 	my $summary = "";
 | |
| 	my ($summ, $cat) = ();
 | |
| 	GetOptions('s=s' => \$summ, 'c=s' => \$cat);
 | |
| 
 | |
| 	my $append = 0;
 | |
| 	if (defined($wiki_append) && $wiki_append eq 'true') {
 | |
| 		$append=1;
 | |
| 	}
 | |
| 
 | |
| 	my $previous_text ="";
 | |
| 
 | |
| 	if ($append) {
 | |
| 		my $ref = $mw->get_page( { title => $wiki_page } );
 | |
| 		$previous_text = $ref->{'*'};
 | |
| 	}
 | |
| 
 | |
| 	my $text = $wiki_content;
 | |
| 	if (defined($previous_text)) {
 | |
| 		$text="$previous_text$text";
 | |
| 	}
 | |
| 
 | |
| 	# Eventually, add this page to a category.
 | |
| 	if (defined($cat)) {
 | |
| 		my $category_name="[[Category:$cat]]";
 | |
| 		$text="$text\n $category_name";
 | |
| 	}
 | |
| 	if(defined($summ)){
 | |
| 		$summary=$summ;
 | |
| 	}
 | |
| 
 | |
| 	$mw->edit( { action => 'edit', title => $wiki_page, summary => $summary, text => "$text"} );
 | |
| }
 | |
| 
 | |
| # wiki_getallpagename [<category>]
 | |
| #
 | |
| # Fetch all pages of the wiki referenced by the global variable $mw
 | |
| # and print the names of each one in the file all.txt with a new line
 | |
| # ("\n") between these.
 | |
| # If the argument <category> is defined, then this function get only the pages
 | |
| # belonging to <category>.
 | |
| sub wiki_getallpagename {
 | |
| 	# fetch the pages of the wiki
 | |
| 	if (defined($_[0])) {
 | |
| 		my $mw_pages = $mw->list ( { action => 'query',
 | |
| 				list => 'categorymembers',
 | |
| 				cmtitle => "Category:$_[0]",
 | |
| 				cmnamespace => 0,
 | |
| 				cmlimit => 500 },
 | |
| 		)
 | |
| 		|| die $mw->{error}->{code}.": ".$mw->{error}->{details};
 | |
| 		open(my $file, ">:encoding(UTF-8)", "all.txt");
 | |
| 		foreach my $page (@{$mw_pages}) {
 | |
| 			print $file "$page->{title}\n";
 | |
| 		}
 | |
| 		close ($file);
 | |
| 
 | |
| 	} else {
 | |
| 		my $mw_pages = $mw->list({
 | |
| 				action => 'query',
 | |
| 				list => 'allpages',
 | |
| 				aplimit => 500,
 | |
| 			})
 | |
| 		|| die $mw->{error}->{code}.": ".$mw->{error}->{details};
 | |
| 		open(my $file, ">:encoding(UTF-8)", "all.txt");
 | |
| 		foreach my $page (@{$mw_pages}) {
 | |
| 			print $file "$page->{title}\n";
 | |
| 		}
 | |
| 		close ($file);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| sub wiki_upload_file {
 | |
| 	my $file_name = $_[0];
 | |
| 	my $resultat = $mw->edit ( {
 | |
| 		action => 'upload',
 | |
| 		filename => $file_name,
 | |
| 		comment => 'upload a file',
 | |
| 		file => [ $file_name ],
 | |
| 		ignorewarnings=>1,
 | |
| 	}, {
 | |
| 		skip_encoding => 1
 | |
| 	} ) || die $mw->{error}->{code} . ' : ' . $mw->{error}->{details};
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| # Main part of this script: parse the command line arguments
 | |
| # and select which function to execute
 | |
| my $fct_to_call = shift;
 | |
| 
 | |
| wiki_login($wiki_admin, $wiki_admin_pass);
 | |
| 
 | |
| my %functions_to_call = (
 | |
| 	upload_file    => \&wiki_upload_file,
 | |
| 	get_page       => \&wiki_getpage,
 | |
| 	delete_page    => \&wiki_delete_page,
 | |
| 	edit_page      => \&wiki_editpage,
 | |
| 	getallpagename => \&wiki_getallpagename,
 | |
| );
 | |
| die "$0 ERROR: wrong argument" unless exists $functions_to_call{$fct_to_call};
 | |
| $functions_to_call{$fct_to_call}->(map { utf8::decode($_); $_ } @ARGV);
 |