+
+ if ($from ne "") {
+ unlink("$from_tmp");
+ }
+ if ($to ne "") {
+ unlink("$to_tmp");
+ }
+}
+
+sub mode_str {
+ my $perms = oct shift;
+ my $modestr;
+ if ($perms & 040000) {
+ $modestr .= 'drwxrwxr-x';
+ } else {
+ # git cares only about the executable bit
+ if ($perms & 0100) {
+ $modestr .= '-rwxrwxr-x';
+ } else {
+ $modestr .= '-rw-rw-r--';
+ };
+ }
+ return $modestr;
+}
+
+sub date_str {
+ my $epoch = shift;
+ my $tz = shift || "-0000";
+
+ my %date;
+ my @months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
+ my @days = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
+ my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($epoch);
+ $date{'hour'} = $hour;
+ $date{'minute'} = $min;
+ $date{'mday'} = $mday;
+ $date{'day'} = $days[$wday];
+ $date{'month'} = $months[$mon];
+ $date{'rfc2822'} = sprintf "%s, %d %s %4d %02d:%02d:%02d +0000", $days[$wday], $mday, $months[$mon], 1900+$year, $hour ,$min, $sec;
+ $date{'mday-time'} = sprintf "%d %s %02d:%02d", $mday, $months[$mon], $hour ,$min;
+
+ $tz =~ m/((-|\+)[0-9][0-9])([0-9][0-9])/;
+ my $local = $epoch + (($1 + ($2/60)) * 3600);
+ ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = gmtime($local);
+ $date{'hour_local'} = $hour;
+ $date{'minute_local'} = $min;
+ $date{'tz_local'} = $tz;
+ return %date;
+}
+
+if ($action eq "git-logo.png") {
+ print $cgi->header(-type => 'image/png', -expires => '+1d');
+ print "\211\120\116\107\015\012\032\012\000\000\000\015\111\110\104\122".
+ "\000\000\000\110\000\000\000\033\004\003\000\000\000\055\331\324".
+ "\055\000\000\000\030\120\114\124\105\377\377\377\140\140\135\260".
+ "\257\252\000\200\000\316\315\307\300\000\000\350\350\346\367\367".
+ "\366\225\014\247\107\000\000\000\163\111\104\101\124\050\317\143".
+ "\110\147\040\004\112\134\030\012\010\052\142\123\141\040\002\010".
+ "\015\151\105\254\241\241\001\060\014\223\140\066\046\122\221\261".
+ "\001\021\326\341\125\144\154\154\314\154\154\014\242\014\160\052".
+ "\142\006\052\301\142\035\263\001\002\123\244\010\350\000\003\030".
+ "\046\126\021\324\341\040\227\033\340\264\016\065\044\161\051\202".
+ "\231\060\270\223\012\021\271\105\210\301\215\240\242\104\041\006".
+ "\047\101\202\100\205\301\105\211\040\160\001\000\244\075\041\305".
+ "\022\034\232\376\000\000\000\000\111\105\116\104\256\102\140\202";
+ exit;