From: Quentin Smith Date: Sun, 25 Jan 2015 03:49:03 +0000 (-0500) Subject: Merge branch 'master' into sipb X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/commitdiff_plain/1dde8961f4f93f4210f5e55c5e378198473053be?hp=-c Merge branch 'master' into sipb Conflicts: po/Makefile templates/page.tmpl --- 1dde8961f4f93f4210f5e55c5e378198473053be diff --combined IkiWiki/CGI.pm index 5ea108034,61af830f8..9e7cc06c7 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@@ -58,12 -58,15 +58,15 @@@ sub cgitemplate ($$$;@) my $template=template("page.tmpl"); - my $topurl = defined $cgi ? $cgi->url : $config{url}; + my $topurl = $config{url}; + if (defined $cgi && ! $config{w3mmode} && ! $config{reverse_proxy}) { + $topurl = $cgi->url; + } my $page=""; if (exists $params{page}) { $page=delete $params{page}; - $params{forcebaseurl}=urlabs(urlto($page), $topurl); + $params{forcebaseurl}=urlto($page); } run_hooks(pagetemplate => sub { shift->( @@@ -74,12 -77,14 +77,14 @@@ }); templateactions($template, ""); + my $baseurl = baseurl(); + $template->param( dynamic => 1, title => $title, wikiname => $config{wikiname}, content => $content, - baseurl => urlabs(baseurl(), $topurl), + baseurl => $baseurl, html5 => $config{html5}, %params, ); @@@ -90,7 -95,13 +95,13 @@@ sub redirect ($$) { my $q=shift; eval q{use URI}; - my $url=URI->new(urlabs(shift, $q->url)); + + my $topurl; + if (defined $q && ! $config{w3mmode} && ! $config{reverse_proxy}) { + $topurl = $q->url; + } + + my $url=URI->new(urlabs(shift, $topurl)); if (! $config{w3mmode}) { print $q->redirect($url); } @@@ -105,16 -116,29 +116,29 @@@ sub decode_cgi_utf8 ($) if ($] < 5.01) { my $cgi = shift; foreach my $f ($cgi->param) { - $cgi->param($f, map { decode_utf8 $_ } $cgi->param($f)); + $cgi->param($f, map { decode_utf8 $_ } + @{$cgi->param_fetch($f)}); } } } + sub safe_decode_utf8 ($) { + my $octets = shift; + # call decode_utf8 on >= 5.20 only if it's not already decoded, + # otherwise it balks, on < 5.20, always call it + if ($] < 5.02 || !Encode::is_utf8($octets)) { + return decode_utf8($octets); + } + else { + return $octets; + } + } + sub decode_form_utf8 ($) { if ($] >= 5.01) { my $form = shift; foreach my $f ($form->field) { - my @value=map { decode_utf8($_) } $form->field($f); + my @value=map { safe_decode_utf8($_) } $form->field($f); $form->field(name => $f, value => \@value, force => 1, @@@ -159,9 -183,7 +183,9 @@@ sub cgi_signin ($$;$) template => {type => 'div'}, stylesheet => 1, ); - my $buttons=["Login"]; + # MITLOGIN: These should be restored when logins are allowed again. + #my $buttons=["Login"]; + my $buttons=[]; $form->field(name => "do", type => "hidden", value => "signin", force => 1); @@@ -260,16 -282,13 +284,16 @@@ sub cgi_prefs ($$) force => 1); $form->field(name => "sid", type => "hidden", value => $session->id, force => 1); - $form->field(name => "email", size => 50, fieldset => "preferences"); + #$form->field(name => "email", size => 50, fieldset => "preferences"); + $form->field(name => "realname", size => 50, fieldset => "preferences"); my $user_name=$session->param("name"); if (! $form->submitted) { - $form->field(name => "email", force => 1, - value => userinfo_get($user_name, "email")); + #$form->field(name => "email", force => 1, + #value => userinfo_get($user_name, "email")); + $form->field(name => "realname", force => 1, + value => userinfo_get($user_name, "realname")); } if ($form->submitted eq 'Logout') { @@@ -286,10 -305,7 +310,10 @@@ userinfo_set($user_name, 'email', $form->field('email')) || error("failed to set email"); } - + if (defined $form->field('realname')) { + userinfo_set($user_name, 'realname', $form->field('realname')) || + error("failed to set realname"); + } $form->text(gettext("Preferences saved.")); } @@@ -359,7 -375,8 +383,8 @@@ sub cgi_getsession ($) { FileName => "$config{wikistatedir}/sessions.db" }) }; if (! $session || $@) { - error($@." ".CGI::Session->errstr()); + my $error = $@; + error($error." ".CGI::Session->errstr()); } umask($oldmask); diff --combined IkiWiki/Plugin/git.pm index 3291b9275,75b89e476..50ae43a94 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@@ -4,7 -4,6 +4,7 @@@ package IkiWiki::Plugin::git use warnings; use strict; use IkiWiki; +use IkiWiki::UserInfo; use Encode; use URI::Escape q{uri_escape_utf8}; use open qw{:utf8 :std}; @@@ -468,6 -467,11 +468,11 @@@ sub git_commit_info ($;$) sub rcs_find_changes ($) { my $oldrev=shift; + # Note that git log will sometimes show files being added that + # don't exist. Particularly, git merge -s ours can result in a + # merge commit where some files were not really added. + # This is why the code below verifies that the files really + # exist. my @raw_lines = run_or_die('git', 'log', '--pretty=raw', '--raw', '--abbrev=40', '--always', '-c', '--no-renames', , '--reverse', @@@ -483,12 -487,16 +488,16 @@@ foreach my $i (@{$ci->{details}}) { my $file=$i->{file}; if ($i->{sha1_to} eq $nullsha) { - delete $changed{$file}; - $deleted{$file}=1; + if (! -e "$config{srcdir}/$file") { + delete $changed{$file}; + $deleted{$file}=1; + } } else { - delete $deleted{$file}; - $changed{$file}=1; + if (-e "$config{srcdir}/$file") { + delete $deleted{$file}; + $changed{$file}=1; + } } } } @@@ -572,8 -580,7 +581,8 @@@ sub rcs_commit_helper (@) } if (defined $u) { $u=encode_utf8($u); - $ENV{GIT_AUTHOR_NAME}=$u; + # MITLOGIN This algorithm could be improved + $ENV{GIT_AUTHOR_NAME}=IkiWiki::userinfo_get($u, "realname"); } if (defined $params{session}->param("nickname")) { $u=encode_utf8($params{session}->param("nickname")); @@@ -581,7 -588,7 +590,7 @@@ $u=~s/[^-_0-9[:alnum:]]+//g; } if (defined $u) { - $ENV{GIT_AUTHOR_EMAIL}="$u\@web"; + $ENV{GIT_AUTHOR_EMAIL}="$u\@mit.edu"; } } @@@ -611,7 -618,7 +620,7 @@@ # So we should ignore its exit status (hence run_or_non). if (run_or_non('git', 'commit', '-m', $params{message}, '-q', @opts)) { if (length $config{gitorigin_branch}) { - run_or_cry('git', 'push', $config{gitorigin_branch}); + run_or_cry('git', 'push', $config{gitorigin_branch}, $config{gitmaster_branch}); } } @@@ -662,7 -669,9 +671,9 @@@ sub rcs_recentchanges ($) my @pages; foreach my $detail (@{ $ci->{'details'} }) { my $file = $detail->{'file'}; - my $efile = uri_escape_utf8($file); + my $efile = join('/', + map { uri_escape_utf8($_) } split('/', $file) + ); my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : ""; $diffurl =~ s/\[\[file\]\]/$efile/go; diff --combined IkiWiki/Plugin/mdwn.pm index b7ed2c508,014e78eea..3b5d3c6d4 --- a/IkiWiki/Plugin/mdwn.pm +++ b/IkiWiki/Plugin/mdwn.pm @@@ -78,7 -78,7 +78,7 @@@ sub htmlize (@) } if (! defined $markdown_sub) { eval q{use Text::Markdown}; - if (! $@) { + if (1) {#! $@) { # Text::Markdown throws this but works. Shrug. if (Text::Markdown->can('markdown')) { $markdown_sub=\&Text::Markdown::markdown; } @@@ -92,8 -92,9 +92,9 @@@ $markdown_sub=\&Markdown::Markdown; } else { + my $error = $@; do "/usr/bin/markdown" || - error(sprintf(gettext("failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"), $@, $!)); + error(sprintf(gettext("failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"), $error, $!)); $markdown_sub=\&Markdown::Markdown; } } diff --combined IkiWiki/Wrapper.pm index e846f8dc1,4c99cdaa0..f3972ac13 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@@ -49,9 -49,10 +49,10 @@@ sub gen_wrapper () my @envsave; push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE - HTTP_COOKIE REMOTE_USER HTTPS REDIRECT_STATUS + HTTP_COOKIE REMOTE_USER HTTPS SSL_CLIENT_S_DN_CN REDIRECT_STATUS HTTP_HOST SERVER_PORT HTTPS HTTP_ACCEPT REDIRECT_URL} if $config{cgi}; + my $envsize=$#envsave; my $envsave=""; foreach my $var (@envsave) { $envsave.=<<"EOF"; @@@ -59,6 -60,18 +60,18 @@@ addenv("$var", s); EOF } + if (ref $config{ENV} eq 'HASH') { + foreach my $key (keys %{$config{ENV}}) { + my $val=$config{ENV}{$key}; + utf8::encode($val) if utf8::is_utf8($val); + $val =~ s/([^A-Za-z0-9])/sprintf '""\\x%02x""', ord($1)/ge; + $envsize += 1; + $envsave.=<<"EOF"; + addenv("$key", "$val"); + EOF + } + delete $config{ENV}; + } my @wrapper_hooks; run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() }); @@@ -171,7 -184,7 +184,7 @@@ EO #include extern char **environ; - char *newenviron[$#envsave+7]; + char *newenviron[$envsize+7]; int i=0; void addenv(char *var, char *val) { @@@ -267,6 -280,7 +280,6 @@@ EO #translators: The parameter is a C filename. error(sprintf(gettext("failed to compile %s"), "$wrapper.c")); } - unlink("$wrapper.c"); if (defined $config{wrappergroup}) { my $gid=(getgrnam($config{wrappergroup}))[2]; if (! defined $gid) { diff --combined templates/page.tmpl index 9ec652058,9e8b330a4..496bc0aad --- a/templates/page.tmpl +++ b/templates/page.tmpl @@@ -1,9 -1,5 +1,5 @@@ - - - + - + - @@@ -12,12 -8,18 +8,13 @@@ <TMPL_VAR TITLE> + - - - - - - - - - - - + + + + + + @@@ -33,55 -35,34 +30,55 @@@ - -
+
-
+ + - -
- - - - - - - - - - - - - - -
- - id="content" role="main"> - -
- - -
-
- - - - id="comments" role="complementary"> - - - - -
Comments on this page are closed.
-
- -
-
- - - - id="footer" class="pagefooter" role="contentinfo"> - - - - - - -
+ +