dgit/0000775000000000000000000000000012566064661006711 5ustar dgit/NOTES0000664000000000000000000000070412521374563007521 0ustar remote is dgit can do fetch thing? push is deliberately broken? remote refs refs/dgit/ local refs refs/heads/ refs/remotes/dgit/ Vcs-Dgit-Master: specifies commit hash corresponding to the thing uploaded optional commit hash corresponding to pristine tar?? Investigate git-dpm 14:03 https://wiki.debian.org/PackagingWithGit/GitDpm although I think its manual page is more useful really. dgit/dgit0000775000000000000000000027501012566064612007567 0ustar #!/usr/bin/perl -w # dgit # Integration between git and Debian-style archives # # Copyright (C)2013-2015 Ian Jackson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . use strict; use Debian::Dgit; setup_sigwarn(); use IO::Handle; use Data::Dumper; use LWP::UserAgent; use Dpkg::Control::Hash; use File::Path; use File::Temp qw(tempdir); use File::Basename; use Dpkg::Version; use POSIX; use IPC::Open2; use Digest::SHA; use Digest::MD5; use Debian::Dgit; our $our_version = 'UNRELEASED'; ###substituted### our @rpushprotovsn_support = qw(3 2); our $protovsn; our $isuite = 'unstable'; our $idistro; our $package; our @ropts; our $sign = 1; our $dryrun_level = 0; our $changesfile; our $buildproductsdir = '..'; our $new_package = 0; our $ignoredirty = 0; our $rmonerror = 1; our @deliberatelies; our %previously; our $existing_package = 'dpkg'; our $cleanmode; our $changes_since_version; our $quilt_mode; our $quilt_modes_re = 'linear|smash|auto|nofix|nocheck'; our $we_are_responder; our $initiator_tempdir; our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)"); our $suite_re = '[-+.0-9a-z]+'; our $cleanmode_re = 'dpkg-source(?:-d)?|git|git-ff|check|none'; our (@git) = qw(git); our (@dget) = qw(dget); our (@curl) = qw(curl -f); our (@dput) = qw(dput); our (@debsign) = qw(debsign); our (@gpg) = qw(gpg); our (@sbuild) = qw(sbuild -A); our (@ssh) = 'ssh'; our (@dgit) = qw(dgit); our (@dpkgbuildpackage) = qw(dpkg-buildpackage -i\.git/ -I.git); our (@dpkgsource) = qw(dpkg-source -i\.git/ -I.git); our (@dpkggenchanges) = qw(dpkg-genchanges); our (@mergechanges) = qw(mergechanges -f); our (@changesopts) = (''); our %opts_opt_map = ('dget' => \@dget, # accept for compatibility 'curl' => \@curl, 'dput' => \@dput, 'debsign' => \@debsign, 'gpg' => \@gpg, 'sbuild' => \@sbuild, 'ssh' => \@ssh, 'dgit' => \@dgit, 'git' => \@git, 'dpkg-source' => \@dpkgsource, 'dpkg-buildpackage' => \@dpkgbuildpackage, 'dpkg-genchanges' => \@dpkggenchanges, 'ch' => \@changesopts, 'mergechanges' => \@mergechanges); our %opts_opt_cmdonly = ('gpg' => 1, 'git' => 1); our %opts_cfg_insertpos = map { $_, scalar @{ $opts_opt_map{$_} } } keys %opts_opt_map; sub finalise_opts_opts(); our $keyid; autoflush STDOUT 1; our $supplementary_message = ''; END { local ($@, $?); print STDERR "! $_\n" foreach $supplementary_message =~ m/^.+$/mg; } our $remotename = 'dgit'; our @ourdscfield = qw(Dgit Vcs-Dgit-Master); our $csuite; our $instead_distro; sub lbranch () { return "$branchprefix/$csuite"; } my $lbranch_re = '^refs/heads/'.$branchprefix.'/([^/.]+)$'; sub lref () { return "refs/heads/".lbranch(); } sub lrref () { return "refs/remotes/$remotename/".server_branch($csuite); } sub rrref () { return server_ref($csuite); } sub lrfetchrefs () { return "refs/dgit-fetch/$csuite"; } sub stripepoch ($) { my ($vsn) = @_; $vsn =~ s/^\d+\://; return $vsn; } sub srcfn ($$) { my ($vsn,$sfx) = @_; return "${package}_".(stripepoch $vsn).$sfx } sub dscfn ($) { my ($vsn) = @_; return srcfn($vsn,".dsc"); } our $us = 'dgit'; initdebug(''); our @end; END { local ($?); foreach my $f (@end) { eval { $f->(); }; warn "$us: cleanup: $@" if length $@; } }; sub badcfg { print STDERR "$us: invalid configuration: @_\n"; exit 12; } sub no_such_package () { print STDERR "$us: package $package does not exist in suite $isuite\n"; exit 4; } sub fetchspec () { local $csuite = '*'; return "+".rrref().":".lrref(); } sub changedir ($) { my ($newdir) = @_; printdebug "CD $newdir\n"; chdir $newdir or die "chdir: $newdir: $!"; } sub deliberately ($) { my ($enquiry) = @_; return !!grep { $_ eq "--deliberately-$enquiry" } @deliberatelies; } sub deliberately_not_fast_forward () { foreach (qw(not-fast-forward fresh-repo)) { return 1 if deliberately($_) || deliberately("TEST-dgit-only-$_"); } } #---------- remote protocol support, common ---------- # remote push initiator/responder protocol: # $ dgit remote-push-build-host ... ... # where is ,... ... # < dgit-remote-push-ready # # > file parsed-changelog # [indicates that output of dpkg-parsechangelog follows] # > data-block NBYTES # > [NBYTES bytes of data (no newline)] # [maybe some more blocks] # > data-end # # > file dsc # [etc] # # > file changes # [etc] # # > param head HEAD # # > want signed-tag # [indicates that signed tag is wanted] # < data-block NBYTES # < [NBYTES bytes of data (no newline)] # [maybe some more blocks] # < data-end # < files-end # # > want signed-dsc-changes # < data-block NBYTES [transfer of signed dsc] # [etc] # < data-block NBYTES [transfer of signed changes] # [etc] # < files-end # # > complete our $i_child_pid; sub i_child_report () { # Sees if our child has died, and reap it if so. Returns a string # describing how it died if it failed, or undef otherwise. return undef unless $i_child_pid; my $got = waitpid $i_child_pid, WNOHANG; return undef if $got <= 0; die unless $got == $i_child_pid; $i_child_pid = undef; return undef unless $?; return "build host child ".waitstatusmsg(); } sub badproto ($$) { my ($fh, $m) = @_; fail "connection lost: $!" if $fh->error; fail "protocol violation; $m not expected"; } sub badproto_badread ($$) { my ($fh, $wh) = @_; fail "connection lost: $!" if $!; my $report = i_child_report(); fail $report if defined $report; badproto $fh, "eof (reading $wh)"; } sub protocol_expect (&$) { my ($match, $fh) = @_; local $_; $_ = <$fh>; defined && chomp or badproto_badread $fh, "protocol message"; if (wantarray) { my @r = &$match; return @r if @r; } else { my $r = &$match; return $r if $r; } badproto $fh, "\`$_'"; } sub protocol_send_file ($$) { my ($fh, $ourfn) = @_; open PF, "<", $ourfn or die "$ourfn: $!"; for (;;) { my $d; my $got = read PF, $d, 65536; die "$ourfn: $!" unless defined $got; last if !$got; print $fh "data-block ".length($d)."\n" or die $!; print $fh $d or die $!; } PF->error and die "$ourfn $!"; print $fh "data-end\n" or die $!; close PF; } sub protocol_read_bytes ($$) { my ($fh, $nbytes) = @_; $nbytes =~ m/^[1-9]\d{0,5}$|^0$/ or badproto \*RO, "bad byte count"; my $d; my $got = read $fh, $d, $nbytes; $got==$nbytes or badproto_badread $fh, "data block"; return $d; } sub protocol_receive_file ($$) { my ($fh, $ourfn) = @_; printdebug "() $ourfn\n"; open PF, ">", $ourfn or die "$ourfn: $!"; for (;;) { my ($y,$l) = protocol_expect { m/^data-block (.*)$/ ? (1,$1) : m/^data-end$/ ? (0,) : (); } $fh; last unless $y; my $d = protocol_read_bytes $fh, $l; print PF $d or die $!; } close PF or die $!; } #---------- remote protocol support, responder ---------- sub responder_send_command ($) { my ($command) = @_; return unless $we_are_responder; # called even without $we_are_responder printdebug ">> $command\n"; print PO $command, "\n" or die $!; } sub responder_send_file ($$) { my ($keyword, $ourfn) = @_; return unless $we_are_responder; printdebug "]] $keyword $ourfn\n"; responder_send_command "file $keyword"; protocol_send_file \*PO, $ourfn; } sub responder_receive_files ($@) { my ($keyword, @ourfns) = @_; die unless $we_are_responder; printdebug "[[ $keyword @ourfns\n"; responder_send_command "want $keyword"; foreach my $fn (@ourfns) { protocol_receive_file \*PI, $fn; } printdebug "[[\$\n"; protocol_expect { m/^files-end$/ } \*PI; } #---------- remote protocol support, initiator ---------- sub initiator_expect (&) { my ($match) = @_; protocol_expect { &$match } \*RO; } #---------- end remote code ---------- sub progress { if ($we_are_responder) { my $m = join '', @_; responder_send_command "progress ".length($m) or die $!; print PO $m or die $!; } else { print @_, "\n"; } } our $ua; sub url_get { if (!$ua) { $ua = LWP::UserAgent->new(); $ua->env_proxy; } my $what = $_[$#_]; progress "downloading $what..."; my $r = $ua->get(@_) or die $!; return undef if $r->code == 404; $r->is_success or fail "failed to fetch $what: ".$r->status_line; return $r->decoded_content(charset => 'none'); } our ($dscdata,$dscurl,$dsc,$dsc_checked,$skew_warning_vsn); sub runcmd { debugcmd "+",@_; $!=0; $?=0; failedcmd @_ if system @_; } sub act_local () { return $dryrun_level <= 1; } sub act_scary () { return !$dryrun_level; } sub printdone { if (!$dryrun_level) { progress "dgit ok: @_"; } else { progress "would be ok: @_ (but dry run only)"; } } sub dryrun_report { printcmd(\*STDERR,$debugprefix."#",@_); } sub runcmd_ordryrun { if (act_scary()) { runcmd @_; } else { dryrun_report @_; } } sub runcmd_ordryrun_local { if (act_local()) { runcmd @_; } else { dryrun_report @_; } } sub shell_cmd { my ($first_shell, @cmd) = @_; return qw(sh -ec), $first_shell.'; exec "$@"', 'x', @cmd; } our $helpmsg = < sign tag and package with instead of default --dry-run -n do not change anything, but go through the motions --damp-run -L like --dry-run but make local changes, without signing --new -N allow introducing a new package --debug -D increase debug level -c= set git config option (used directly by dgit too) END our $later_warning_msg = < 'debian', 'dgit.default.username' => '', 'dgit.default.archive-query-default-component' => 'main', 'dgit.default.ssh' => 'ssh', 'dgit.default.archive-query' => 'madison:', 'dgit.default.sshpsql-dbname' => 'service=projectb', 'dgit-distro.debian.archive-query' => 'ftpmasterapi:', 'dgit-distro.debian.git-check' => 'url', 'dgit-distro.debian.git-check-suffix' => '/info/refs', 'dgit-distro.debian.new-private-pushers' => 't', 'dgit-distro.debian/push.git-url' => '', 'dgit-distro.debian/push.git-host' => 'push.dgit.debian.org', 'dgit-distro.debian/push.git-user-force' => 'dgit', 'dgit-distro.debian/push.git-proto' => 'git+ssh://', 'dgit-distro.debian/push.git-path' => '/dgit/debian/repos', 'dgit-distro.debian/push.git-create' => 'true', 'dgit-distro.debian/push.git-check' => 'ssh-cmd', 'dgit-distro.debian.archive-query-url', 'https://api.ftp-master.debian.org/', # 'dgit-distro.debian.archive-query-tls-key', # '/etc/ssl/certs/%HOST%.pem:/etc/dgit/%HOST%.pem', # ^ this does not work because curl is broken nowadays # Fixing #790093 properly will involve providing providing the key # in some pacagke and maybe updating these paths. # # 'dgit-distro.debian.archive-query-tls-curl-args', # '--ca-path=/etc/ssl/ca-debian', # ^ this is a workaround but works (only) on DSA-administered machines 'dgit-distro.debian.git-url' => 'https://git.dgit.debian.org', 'dgit-distro.debian.git-url-suffix' => '', 'dgit-distro.debian.upload-host' => 'ftp-master', # for dput 'dgit-distro.debian.mirror' => 'http://ftp.debian.org/debian/', 'dgit-distro.debian.backports-quirk' => '(squeeze)-backports*', 'dgit-distro.debian-backports.mirror' => 'http://backports.debian.org/debian-backports/', 'dgit-distro.ubuntu.git-check' => 'false', 'dgit-distro.ubuntu.mirror' => 'http://archive.ubuntu.com/ubuntu', 'dgit-distro.test-dummy.ssh' => "$td/ssh", 'dgit-distro.test-dummy.username' => "alice", 'dgit-distro.test-dummy.git-check' => "ssh-cmd", 'dgit-distro.test-dummy.git-create' => "ssh-cmd", 'dgit-distro.test-dummy.git-url' => "$td/git", 'dgit-distro.test-dummy.git-host' => "git", 'dgit-distro.test-dummy.git-path' => "$td/git", 'dgit-distro.test-dummy.archive-query' => "ftpmasterapi:", 'dgit-distro.test-dummy.archive-query-url' => "file://$td/aq/", 'dgit-distro.test-dummy.mirror' => "file://$td/mirror/", 'dgit-distro.test-dummy.upload-host' => 'test-dummy', ); our %gitcfg; sub git_slurp_config () { local ($debuglevel) = $debuglevel-2; local $/="\0"; my @cmd = (@git, qw(config -z --get-regexp .*)); debugcmd "|",@cmd; open GITS, "-|", @cmd or failedcmd @cmd; while () { chomp or die; printdebug "=> ", (messagequote $_), "\n"; m/\n/ or die "$_ ?"; push @{ $gitcfg{$`} }, $'; #'; } $!=0; $?=0; close GITS or ($!==0 && $?==256) or failedcmd @cmd; } sub git_get_config ($) { my ($c) = @_; my $l = $gitcfg{$c}; printdebug"C $c ".(defined $l ? messagequote "'$l'" : "undef")."\n" if $debuglevel >= 4; $l or return undef; @$l==1 or badcfg "multiple values for $c" if @$l > 1; return $l->[0]; } sub cfg { foreach my $c (@_) { return undef if $c =~ /RETURN-UNDEF/; my $v = git_get_config($c); return $v if defined $v; my $dv = $defcfg{$c}; return $dv if defined $dv; } badcfg "need value for one of: @_\n". "$us: distro or suite appears not to be (properly) supported"; } sub access_basedistro () { if (defined $idistro) { return $idistro; } else { return cfg("dgit-suite.$isuite.distro", "dgit.default.distro"); } } sub access_quirk () { # returns (quirk name, distro to use instead or undef, quirk-specific info) my $basedistro = access_basedistro(); my $backports_quirk = cfg("dgit-distro.$basedistro.backports-quirk", 'RETURN-UNDEF'); if (defined $backports_quirk) { my $re = $backports_quirk; $re =~ s/[^-0-9a-z_\%*()]/\\$&/ig; $re =~ s/\*/.*/g; $re =~ s/\%/([-0-9a-z_]+)/ or $re =~ m/[()]/ or badcfg "backports-quirk needs \% or ( )"; if ($isuite =~ m/^$re$/) { return ('backports',"$basedistro-backports",$1); } } return ('none',undef); } our $access_forpush; sub parse_cfg_bool ($$$) { my ($what,$def,$v) = @_; $v //= $def; return $v =~ m/^[ty1]/ ? 1 : $v =~ m/^[fn0]/ ? 0 : badcfg "$what needs t (true, y, 1) or f (false, n, 0) not \`$v'"; } sub access_forpush_config () { my $d = access_basedistro(); return 1 if $new_package && parse_cfg_bool('new-private-pushers', 0, cfg("dgit-distro.$d.new-private-pushers", 'RETURN-UNDEF')); my $v = cfg("dgit-distro.$d.readonly", 'RETURN-UNDEF'); $v //= 'a'; return $v =~ m/^[ty1]/ ? 0 : # force readonly, forpush = 0 $v =~ m/^[fn0]/ ? 1 : # force nonreadonly, forpush = 1 $v =~ m/^[a]/ ? '' : # auto, forpush = '' badcfg "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)"; } sub access_forpush () { $access_forpush //= access_forpush_config(); return $access_forpush; } sub pushing () { die "$access_forpush ?" if ($access_forpush // 1) ne 1; badcfg "pushing but distro is configured readonly" if access_forpush_config() eq '0'; $access_forpush = 1; $supplementary_message = <<'END' unless $we_are_responder; Push failed, before we got started. You can retry the push, after fixing the problem, if you like. END finalise_opts_opts(); } sub notpushing () { finalise_opts_opts(); } sub supplementary_message ($) { my ($msg) = @_; if (!$we_are_responder) { $supplementary_message = $msg; return; } elsif ($protovsn >= 3) { responder_send_command "supplementary-message ".length($msg) or die $!; print PO $msg or die $!; } } sub access_distros () { # Returns list of distros to try, in order # # We want to try: # 0. `instead of' distro name(s) we have been pointed to # 1. the access_quirk distro, if any # 2a. the user's specified distro, or failing that } basedistro # 2b. the distro calculated from the suite } my @l = access_basedistro(); my (undef,$quirkdistro) = access_quirk(); unshift @l, $quirkdistro; unshift @l, $instead_distro; @l = grep { defined } @l; if (access_forpush()) { @l = map { ("$_/push", $_) } @l; } @l; } sub access_cfg_cfgs (@) { my (@keys) = @_; my @cfgs; # The nesting of these loops determines the search order. We put # the key loop on the outside so that we search all the distros # for each key, before going on to the next key. That means that # if access_cfg is called with a more specific, and then a less # specific, key, an earlier distro can override the less specific # without necessarily overriding any more specific keys. (If the # distro wants to override the more specific keys it can simply do # so; whereas if we did the loop the other way around, it would be # impossible to for an earlier distro to override a less specific # key but not the more specific ones without restating the unknown # values of the more specific keys. my @realkeys; my @rundef; # We have to deal with RETURN-UNDEF specially, so that we don't # terminate the search prematurely. foreach (@keys) { if (m/RETURN-UNDEF/) { push @rundef, $_; last; } push @realkeys, $_ } foreach my $d (access_distros()) { push @cfgs, map { "dgit-distro.$d.$_" } @realkeys; } push @cfgs, map { "dgit.default.$_" } @realkeys; push @cfgs, @rundef; return @cfgs; } sub access_cfg (@) { my (@keys) = @_; my (@cfgs) = access_cfg_cfgs(@keys); my $value = cfg(@cfgs); return $value; } sub access_cfg_bool ($$) { my ($def, @keys) = @_; parse_cfg_bool($keys[0], $def, access_cfg(@keys, 'RETURN-UNDEF')); } sub string_to_ssh ($) { my ($spec) = @_; if ($spec =~ m/\s/) { return qw(sh -ec), 'exec '.$spec.' "$@"', 'x'; } else { return ($spec); } } sub access_cfg_ssh () { my $gitssh = access_cfg('ssh', 'RETURN-UNDEF'); if (!defined $gitssh) { return @ssh; } else { return string_to_ssh $gitssh; } } sub access_runeinfo ($) { my ($info) = @_; return ": dgit ".access_basedistro()." $info ;"; } sub access_someuserhost ($) { my ($some) = @_; my $user = access_cfg("$some-user-force", 'RETURN-UNDEF'); defined($user) && length($user) or $user = access_cfg("$some-user",'username'); my $host = access_cfg("$some-host"); return length($user) ? "$user\@$host" : $host; } sub access_gituserhost () { return access_someuserhost('git'); } sub access_giturl (;$) { my ($optional) = @_; my $url = access_cfg('git-url','RETURN-UNDEF'); my $suffix; if (!length $url) { my $proto = access_cfg('git-proto', 'RETURN-UNDEF'); return undef unless defined $proto; $url = $proto. access_gituserhost(). access_cfg('git-path'); } else { $suffix = access_cfg('git-url-suffix','RETURN-UNDEF'); } $suffix //= '.git'; return "$url/$package$suffix"; } sub parsecontrolfh ($$;$) { my ($fh, $desc, $allowsigned) = @_; our $dpkgcontrolhash_noissigned; my $c; for (;;) { my %opts = ('name' => $desc); $opts{allow_pgp}= $allowsigned || !$dpkgcontrolhash_noissigned; $c = Dpkg::Control::Hash->new(%opts); $c->parse($fh,$desc) or die "parsing of $desc failed"; last if $allowsigned; last if $dpkgcontrolhash_noissigned; my $issigned= $c->get_option('is_pgp_signed'); if (!defined $issigned) { $dpkgcontrolhash_noissigned= 1; seek $fh, 0,0 or die "seek $desc: $!"; } elsif ($issigned) { fail "control file $desc is (already) PGP-signed. ". " Note that dgit push needs to modify the .dsc and then". " do the signature itself"; } else { last; } } return $c; } sub parsecontrol { my ($file, $desc) = @_; my $fh = new IO::Handle; open $fh, '<', $file or die "$file: $!"; my $c = parsecontrolfh($fh,$desc); $fh->error and die $!; close $fh; return $c; } sub getfield ($$) { my ($dctrl,$field) = @_; my $v = $dctrl->{$field}; return $v if defined $v; fail "missing field $field in ".$v->get_option('name'); } sub parsechangelog { my $c = Dpkg::Control::Hash->new(); my $p = new IO::Handle; my @cmd = (qw(dpkg-parsechangelog), @_); open $p, '-|', @cmd or die $!; $c->parse($p); $?=0; $!=0; close $p or failedcmd @cmd; return $c; } sub must_getcwd () { my $d = getcwd(); defined $d or fail "getcwd failed: $!"; return $d; } our %rmad; sub archive_query ($) { my ($method) = @_; my $query = access_cfg('archive-query','RETURN-UNDEF'); $query =~ s/^(\w+):// or badcfg "invalid archive-query method \`$query'"; my $proto = $1; my $data = $'; #'; { no strict qw(refs); &{"${method}_${proto}"}($proto,$data); } } sub pool_dsc_subpath ($$) { my ($vsn,$component) = @_; # $package is implict arg my $prefix = substr($package, 0, $package =~ m/^l/ ? 4 : 1); return "/pool/$component/$prefix/$package/".dscfn($vsn); } #---------- `ftpmasterapi' archive query method (nascent) ---------- sub archive_api_query_cmd ($) { my ($subpath) = @_; my @cmd = qw(curl -sS); my $url = access_cfg('archive-query-url'); if ($url =~ m#^https://([-.0-9a-z]+)/#) { my $host = $1; my $keys = access_cfg('archive-query-tls-key','RETURN-UNDEF') //''; foreach my $key (split /\:/, $keys) { $key =~ s/\%HOST\%/$host/g; if (!stat $key) { fail "for $url: stat $key: $!" unless $!==ENOENT; next; } fail "config requested specific TLS key but do not know". " how to get curl to use exactly that EE key ($key)"; # push @cmd, "--cacert", $key, "--capath", "/dev/enoent"; # # Sadly the above line does not work because of changes # # to gnutls. The real fix for #790093 may involve # # new curl options. last; } # Fixing #790093 properly will involve providing a value # for this on clients. my $kargs = access_cfg('archive-query-tls-curl-ca-args','RETURN-UNDEF'); push @cmd, split / /, $kargs if defined $kargs; } push @cmd, $url.$subpath; return @cmd; } sub api_query ($$) { use JSON; my ($data, $subpath) = @_; badcfg "ftpmasterapi archive query method takes no data part" if length $data; my @cmd = archive_api_query_cmd($subpath); my $json = cmdoutput @cmd; return decode_json($json); } sub canonicalise_suite_ftpmasterapi () { my ($proto,$data) = @_; my $suites = api_query($data, 'suites'); my @matched; foreach my $entry (@$suites) { next unless grep { my $v = $entry->{$_}; defined $v && $v eq $isuite; } qw(codename name); push @matched, $entry; } fail "unknown suite $isuite" unless @matched; my $cn; eval { @matched==1 or die "multiple matches for suite $isuite\n"; $cn = "$matched[0]{codename}"; defined $cn or die "suite $isuite info has no codename\n"; $cn =~ m/^$suite_re$/ or die "suite $isuite maps to bad codename\n"; }; die "bad ftpmaster api response: $@\n".Dumper(\@matched) if length $@; return $cn; } sub archive_query_ftpmasterapi () { my ($proto,$data) = @_; my $info = api_query($data, "dsc_in_suite/$isuite/$package"); my @rows; my $digester = Digest::SHA->new(256); foreach my $entry (@$info) { eval { my $vsn = "$entry->{version}"; my ($ok,$msg) = version_check $vsn; die "bad version: $msg\n" unless $ok; my $component = "$entry->{component}"; $component =~ m/^$component_re$/ or die "bad component"; my $filename = "$entry->{filename}"; $filename && $filename !~ m#[^-+:._~0-9a-zA-Z/]|^[/.]|/[/.]# or die "bad filename"; my $sha256sum = "$entry->{sha256sum}"; $sha256sum =~ m/^[0-9a-f]+$/ or die "bad sha256sum"; push @rows, [ $vsn, "/pool/$component/$filename", $digester, $sha256sum ]; }; die "bad ftpmaster api response: $@\n".Dumper($entry) if length $@; } @rows = sort { -version_compare($a->[0],$b->[0]) } @rows; return @rows; } #---------- `madison' archive query method ---------- sub archive_query_madison { return map { [ @$_[0..1] ] } madison_get_parse(@_); } sub madison_get_parse { my ($proto,$data) = @_; die unless $proto eq 'madison'; if (!length $data) { $data= access_cfg('madison-distro','RETURN-UNDEF'); $data //= access_basedistro(); } $rmad{$proto,$data,$package} ||= cmdoutput qw(rmadison -asource),"-s$isuite","-u$data",$package; my $rmad = $rmad{$proto,$data,$package}; my @out; foreach my $l (split /\n/, $rmad) { $l =~ m{^ \s*( [^ \t|]+ )\s* \| \s*( [^ \t|]+ )\s* \| \s*( [^ \t|/]+ )(?:/([^ \t|/]+))? \s* \| \s*( [^ \t|]+ )\s* }x or die "$rmad ?"; $1 eq $package or die "$rmad $package ?"; my $vsn = $2; my $newsuite = $3; my $component; if (defined $4) { $component = $4; } else { $component = access_cfg('archive-query-default-component'); } $5 eq 'source' or die "$rmad ?"; push @out, [$vsn,pool_dsc_subpath($vsn,$component),$newsuite]; } return sort { -version_compare($a->[0],$b->[0]); } @out; } sub canonicalise_suite_madison { # madison canonicalises for us my @r = madison_get_parse(@_); @r or fail "unable to canonicalise suite using package $package". " which does not appear to exist in suite $isuite;". " --existing-package may help"; return $r[0][2]; } #---------- `sshpsql' archive query method ---------- sub sshpsql ($$$) { my ($data,$runeinfo,$sql) = @_; if (!length $data) { $data= access_someuserhost('sshpsql').':'. access_cfg('sshpsql-dbname'); } $data =~ m/:/ or badcfg "invalid sshpsql method string \`$data'"; my ($userhost,$dbname) = ($`,$'); #'; my @rows; my @cmd = (access_cfg_ssh, $userhost, access_runeinfo("ssh-psql $runeinfo"). " export LC_MESSAGES=C; export LC_CTYPE=C;". " ".shellquote qw(psql -A), $dbname, qw(-c), $sql); debugcmd "|",@cmd; open P, "-|", @cmd or die $!; while (

) { chomp or die; printdebug(">|$_|\n"); push @rows, $_; } $!=0; $?=0; close P or failedcmd @cmd; @rows or die; my $nrows = pop @rows; $nrows =~ s/^\((\d+) rows?\)$/$1/ or die "$nrows ?"; @rows == $nrows+1 or die "$nrows ".(scalar @rows)." ?"; @rows = map { [ split /\|/, $_ ] } @rows; my $ncols = scalar @{ shift @rows }; die if grep { scalar @$_ != $ncols } @rows; return @rows; } sub sql_injection_check { foreach (@_) { die "$_ $& ?" if m{[^-+=:_.,/0-9a-zA-Z]}; } } sub archive_query_sshpsql ($$) { my ($proto,$data) = @_; sql_injection_check $isuite, $package; my @rows = sshpsql($data, "archive-query $isuite $package", <[0],$b->[0]) } @rows; my $digester = Digest::SHA->new(256); @rows = map { my ($vsn,$component,$filename,$sha256sum) = @$_; [ $vsn, "/pool/$component/$filename",$digester,$sha256sum ]; } @rows; return @rows; } sub canonicalise_suite_sshpsql ($$) { my ($proto,$data) = @_; sql_injection_check $isuite; my @rows = sshpsql($data, "canonicalise-suite $isuite", <[0] } @rows; fail "unknown suite $isuite" unless @rows; die "ambiguous $isuite: @rows ?" if @rows>1; return $rows[0]; } #---------- `dummycat' archive query method ---------- sub canonicalise_suite_dummycat ($$) { my ($proto,$data) = @_; my $dpath = "$data/suite.$isuite"; if (!open C, "<", $dpath) { $!==ENOENT or die "$dpath: $!"; printdebug "dummycat canonicalise_suite $isuite $dpath ENOENT\n"; return $isuite; } $!=0; $_ = ; chomp or die "$dpath: $!"; close C; printdebug "dummycat canonicalise_suite $isuite $dpath = $_\n"; return $_; } sub archive_query_dummycat ($$) { my ($proto,$data) = @_; canonicalise_suite(); my $dpath = "$data/package.$csuite.$package"; if (!open C, "<", $dpath) { $!==ENOENT or die "$dpath: $!"; printdebug "dummycat query $csuite $package $dpath ENOENT\n"; return (); } my @rows; while () { next if m/^\#/; next unless m/\S/; die unless chomp; printdebug "dummycat query $csuite $package $dpath | $_\n"; my @row = split /\s+/, $_; @row==2 or die "$dpath: $_ ?"; push @rows, \@row; } C->error and die "$dpath: $!"; close C; return sort { -version_compare($a->[0],$b->[0]); } @rows; } #---------- archive query entrypoints and rest of program ---------- sub canonicalise_suite () { return if defined $csuite; fail "cannot operate on $isuite suite" if $isuite eq 'UNRELEASED'; $csuite = archive_query('canonicalise_suite'); if ($isuite ne $csuite) { progress "canonical suite name for $isuite is $csuite"; } } sub get_archive_dsc () { canonicalise_suite(); my @vsns = archive_query('archive_query'); foreach my $vinfo (@vsns) { my ($vsn,$subpath,$digester,$digest) = @$vinfo; $dscurl = access_cfg('mirror').$subpath; $dscdata = url_get($dscurl); if (!$dscdata) { $skew_warning_vsn = $vsn if !defined $skew_warning_vsn; next; } if ($digester) { $digester->reset(); $digester->add($dscdata); my $got = $digester->hexdigest(); $got eq $digest or fail "$dscurl has hash $got but". " archive told us to expect $digest"; } my $dscfh = new IO::File \$dscdata, '<' or die $!; printdebug Dumper($dscdata) if $debuglevel>1; $dsc = parsecontrolfh($dscfh,$dscurl,1); printdebug Dumper($dsc) if $debuglevel>1; my $fmt = getfield $dsc, 'Format'; fail "unsupported source format $fmt, sorry" unless $format_ok{$fmt}; $dsc_checked = !!$digester; return; } $dsc = undef; } sub check_for_git (); sub check_for_git () { # returns 0 or 1 my $how = access_cfg('git-check'); if ($how eq 'ssh-cmd') { my @cmd = (access_cfg_ssh, access_gituserhost(), access_runeinfo("git-check $package"). " set -e; cd ".access_cfg('git-path').";". " if test -d $package.git; then echo 1; else echo 0; fi"); my $r= cmdoutput @cmd; if ($r =~ m/^divert (\w+)$/) { my $divert=$1; my ($usedistro,) = access_distros(); # NB that if we are pushing, $usedistro will be $distro/push $instead_distro= cfg("dgit-distro.$usedistro.diverts.$divert"); $instead_distro =~ s{^/}{ access_basedistro()."/" }e; progress "diverting to $divert (using config for $instead_distro)"; return check_for_git(); } failedcmd @cmd unless $r =~ m/^[01]$/; return $r+0; } elsif ($how eq 'url') { my $prefix = access_cfg('git-check-url','git-url'); my $suffix = access_cfg('git-check-suffix','git-suffix', 'RETURN-UNDEF') // '.git'; my $url = "$prefix/$package$suffix"; my @cmd = (qw(curl -sS -I), $url); my $result = cmdoutput @cmd; $result =~ s/^\S+ 200 .*\n\r?\n//; # curl -sS -I with https_proxy prints # HTTP/1.0 200 Connection established $result =~ m/^\S+ (404|200) /s or fail "unexpected results from git check query - ". Dumper($prefix, $result); my $code = $1; if ($code eq '404') { return 0; } elsif ($code eq '200') { return 1; } else { die; } } elsif ($how eq 'true') { return 1; } elsif ($how eq 'false') { return 0; } else { badcfg "unknown git-check \`$how'"; } } sub create_remote_git_repo () { my $how = access_cfg('git-create'); if ($how eq 'ssh-cmd') { runcmd_ordryrun (access_cfg_ssh, access_gituserhost(), access_runeinfo("git-create $package"). "set -e; cd ".access_cfg('git-path').";". " cp -a _template $package.git"); } elsif ($how eq 'true') { # nothing to do } else { badcfg "unknown git-create \`$how'"; } } our ($dsc_hash,$lastpush_hash); our $ud = '.git/dgit/unpack'; sub prep_ud () { rmtree($ud); mkpath '.git/dgit'; mkdir $ud or die $!; } sub mktree_in_ud_here () { runcmd qw(git init -q); rmtree('.git/objects'); symlink '../../../../objects','.git/objects' or die $!; } sub git_write_tree () { my $tree = cmdoutput @git, qw(write-tree); $tree =~ m/^\w+$/ or die "$tree ?"; return $tree; } sub remove_stray_gits () { my @gitscmd = qw(find -name .git -prune -print0); debugcmd "|",@gitscmd; open GITS, "-|", @gitscmd or failedcmd @gitscmd; { local $/="\0"; while () { chomp or die; print STDERR "$us: warning: removing from source package: ", (messagequote $_), "\n"; rmtree $_; } } $!=0; $?=0; close GITS or failedcmd @gitscmd; } sub mktree_in_ud_from_only_subdir () { # changes into the subdir my (@dirs) = <*/.>; die unless @dirs==1; $dirs[0] =~ m#^([^/]+)/\.$# or die; my $dir = $1; changedir $dir; remove_stray_gits(); mktree_in_ud_here(); my ($format, $fopts) = get_source_format(); if (madformat($format)) { rmtree '.pc'; } runcmd @git, qw(add -Af); my $tree=git_write_tree(); return ($tree,$dir); } sub dsc_files_info () { foreach my $csumi (['Checksums-Sha256','Digest::SHA', 'new(256)'], ['Checksums-Sha1', 'Digest::SHA', 'new(1)'], ['Files', 'Digest::MD5', 'new()']) { my ($fname, $module, $method) = @$csumi; my $field = $dsc->{$fname}; next unless defined $field; eval "use $module; 1;" or die $@; my @out; foreach (split /\n/, $field) { next unless m/\S/; m/^(\w+) (\d+) (\S+)$/ or fail "could not parse .dsc $fname line \`$_'"; my $digester = eval "$module"."->$method;" or die $@; push @out, { Hash => $1, Bytes => $2, Filename => $3, Digester => $digester, }; } return @out; } fail "missing any supported Checksums-* or Files field in ". $dsc->get_option('name'); } sub dsc_files () { map { $_->{Filename} } dsc_files_info(); } sub is_orig_file ($;$) { local ($_) = $_[0]; my $base = $_[1]; m/\.orig(?:-\w+)?\.tar\.\w+$/ or return 0; defined $base or return 1; return $` eq $base; } sub make_commit ($) { my ($file) = @_; return cmdoutput @git, qw(hash-object -w -t commit), $file; } sub clogp_authline ($) { my ($clogp) = @_; my $author = getfield $clogp, 'Maintainer'; $author =~ s#,.*##ms; my $date = cmdoutput qw(date), '+%s %z', qw(-d), getfield($clogp,'Date'); my $authline = "$author $date"; $authline =~ m/^[^<>]+ \<\S+\> \d+ [-+]\d+$/ or fail "unexpected commit author line format \`$authline'". " (was generated from changelog Maintainer field)"; return $authline; } sub vendor_patches_distro ($$) { my ($checkdistro, $what) = @_; return unless defined $checkdistro; my $series = "debian/patches/\L$checkdistro\E.series"; printdebug "checking for vendor-specific $series ($what)\n"; if (!open SERIES, "<", $series) { die "$series $!" unless $!==ENOENT; return; } while () { next unless m/\S/; next if m/^\s+\#/; print STDERR <error; close SERIES; } sub check_for_vendor_patches () { # This dpkg-source feature doesn't seem to be documented anywhere! # But it can be found in the changelog (reformatted): # commit 4fa01b70df1dc4458daee306cfa1f987b69da58c # Author: Raphael Hertzog # Date: Sun Oct 3 09:36:48 2010 +0200 # dpkg-source: correctly create .pc/.quilt_series with alternate # series files # # If you have debian/patches/ubuntu.series and you were # unpacking the source package on ubuntu, quilt was still # directed to debian/patches/series instead of # debian/patches/ubuntu.series. # # debian/changelog | 3 +++ # scripts/Dpkg/Source/Package/V3/quilt.pm | 4 +++- # 2 files changed, 6 insertions(+), 1 deletion(-) use Dpkg::Vendor; vendor_patches_distro($ENV{DEB_VENDOR}, "DEB_VENDOR"); vendor_patches_distro(Dpkg::Vendor::get_current_vendor(), "Dpkg::Vendor \`current vendor'"); vendor_patches_distro(access_basedistro(), "distro being accessed"); } sub generate_commit_from_dsc () { prep_ud(); changedir $ud; foreach my $fi (dsc_files_info()) { my $f = $fi->{Filename}; die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#; link_ltarget "../../../$f", $f or $!==&ENOENT or die "$f $!"; complete_file_from_dsc('.', $fi) or next; if (is_orig_file($f)) { link $f, "../../../../$f" or $!==&EEXIST or die "$f $!"; } } my $dscfn = "$package.dsc"; open D, ">", $dscfn or die "$dscfn: $!"; print D $dscdata or die "$dscfn: $!"; close D or die "$dscfn: $!"; my @cmd = qw(dpkg-source); push @cmd, '--no-check' if $dsc_checked; push @cmd, qw(-x --), $dscfn; runcmd @cmd; my ($tree,$dir) = mktree_in_ud_from_only_subdir(); check_for_vendor_patches() if madformat($dsc->{format}); runcmd qw(sh -ec), 'dpkg-parsechangelog >../changelog.tmp'; my $clogp = parsecontrol('../changelog.tmp',"commit's changelog"); my $authline = clogp_authline $clogp; my $changes = getfield $clogp, 'Changes'; open C, ">../commit.tmp" or die $!; print C <>../changelogold.tmp'; my $oldclogp = parsecontrol('../changelogold.tmp','previous changelog'); my $oversion = getfield $oldclogp, 'Version'; my $vcmp = version_compare($oversion, $cversion); if ($vcmp < 0) { # git upload/ is earlier vsn than archive, use archive open C, ">../commit2.tmp" or die $!; print C < 0) { print STDERR <{Filename}; my $tf = "$dstdir/$f"; my $downloaded = 0; if (stat_exists $tf) { progress "using existing $f"; } else { my $furl = $dscurl; $furl =~ s{/[^/]+$}{}; $furl .= "/$f"; die "$f ?" unless $f =~ m/^\Q${package}\E_/; die "$f ?" if $f =~ m#/#; runcmd_ordryrun_local @curl,qw(-o),$tf,'--',"$furl"; return 0 if !act_local(); $downloaded = 1; } open F, "<", "$tf" or die "$tf: $!"; $fi->{Digester}->reset(); $fi->{Digester}->addfile(*F); F->error and die $!; my $got = $fi->{Digester}->hexdigest(); $got eq $fi->{Hash} or fail "file $f has hash $got but .dsc". " demands hash $fi->{Hash} ". ($downloaded ? "(got wrong file from archive!)" : "(perhaps you should delete this file?)"); return 1; } sub ensure_we_have_orig () { foreach my $fi (dsc_files_info()) { my $f = $fi->{Filename}; next unless is_orig_file($f); complete_file_from_dsc('..', $fi) or next; } } sub git_fetch_us () { my @specs = (fetchspec()); push @specs, map { "+refs/$_/*:".lrfetchrefs."/$_/*" } qw(tags heads); runcmd_ordryrun_local @git, qw(fetch -p -n -q), access_giturl(), @specs; my %here; my $tagpat = debiantag('*',access_basedistro); git_for_each_ref("refs/tags/".$tagpat, sub { my ($objid,$objtype,$fullrefname,$reftail) = @_; printdebug "currently $fullrefname=$objid\n"; $here{$fullrefname} = $objid; }); git_for_each_ref(lrfetchrefs."/tags/".$tagpat, sub { my ($objid,$objtype,$fullrefname,$reftail) = @_; my $lref = "refs".substr($fullrefname, length lrfetchrefs); printdebug "offered $lref=$objid\n"; if (!defined $here{$lref}) { my @upd = (@git, qw(update-ref), $lref, $objid, ''); runcmd_ordryrun_local @upd; } elsif ($here{$lref} eq $objid) { } else { print STDERR \ "Not updateting $lref from $here{$lref} to $objid.\n"; } }); } sub fetch_from_archive () { # ensures that lrref() is what is actually in the archive, # one way or another get_archive_dsc(); if ($dsc) { foreach my $field (@ourdscfield) { $dsc_hash = $dsc->{$field}; last if defined $dsc_hash; } if (defined $dsc_hash) { $dsc_hash =~ m/\w+/ or fail "invalid hash in .dsc \`$dsc_hash'"; $dsc_hash = $&; progress "last upload to archive specified git hash"; } else { progress "last upload to archive has NO git hash"; } } else { progress "no version available from the archive"; } $lastpush_hash = git_get_ref(lrref()); printdebug "previous reference hash=$lastpush_hash\n"; my $hash; if (defined $dsc_hash) { fail "missing remote git history even though dsc has hash -". " could not find ref ".lrref(). " (should have been fetched from ".access_giturl()."#".rrref().")" unless $lastpush_hash; $hash = $dsc_hash; ensure_we_have_orig(); if ($dsc_hash eq $lastpush_hash) { } elsif (is_fast_fwd($dsc_hash,$lastpush_hash)) { print STDERR <$clogf", @git, qw(cat-file blob), "$hash:debian/changelog"; my $gotclogp = parsechangelog("-l$clogf"); my $got_vsn = getfield $gotclogp, 'Version'; printdebug "SKEW CHECK GOT $got_vsn\n"; if (version_compare($got_vsn, $skew_warning_vsn) < 0) { print STDERR <", "$attrs.new" or die "$attrs.new $!"; if (!open ATTRS, "<", $attrs) { $!==ENOENT or die "$attrs: $!"; } else { while () { chomp; next if m{^debian/changelog\s}; print NATTRS $_, "\n" or die $!; } ATTRS->error and die $!; close ATTRS; } print NATTRS "debian/changelog merge=$driver\n" or die $!; close NATTRS; set_local_git_config "$cb.name", 'debian/changelog merge driver'; set_local_git_config "$cb.driver", 'dpkg-mergechangelogs -m %O %A %B %A'; rename "$attrs.new", "$attrs" or die "$attrs: $!"; } sub setup_useremail (;$) { my ($always) = @_; return unless $always || access_cfg_bool(1, 'setup-useremail'); my $setup = sub { my ($k, $envvar) = @_; my $v = access_cfg("user-$k", 'RETURN-UNDEF') // $ENV{$envvar}; return unless defined $v; set_local_git_config "user.$k", $v; }; $setup->('email', 'DEBEMAIL'); $setup->('name', 'DEBFULLNAME'); } sub setup_new_tree () { setup_mergechangelogs(); setup_useremail(); } sub clone ($) { my ($dstdir) = @_; canonicalise_suite(); badusage "dry run makes no sense with clone" unless act_local(); my $hasgit = check_for_git(); mkdir $dstdir or die "$dstdir $!"; changedir $dstdir; runcmd @git, qw(init -q); my $giturl = access_giturl(1); if (defined $giturl) { set_local_git_config "remote.$remotename.fetch", fetchspec(); open H, "> .git/HEAD" or die $!; print H "ref: ".lref()."\n" or die $!; close H or die $!; runcmd @git, qw(remote add), 'origin', $giturl; } if ($hasgit) { progress "fetching existing git history"; git_fetch_us(); runcmd_ordryrun_local @git, qw(fetch origin); } else { progress "starting new git history"; } fetch_from_archive() or no_such_package; my $vcsgiturl = $dsc->{'Vcs-Git'}; if (length $vcsgiturl) { $vcsgiturl =~ s/\s+-b\s+\S+//g; runcmd @git, qw(remote add vcs-git), $vcsgiturl; } setup_new_tree(); runcmd @git, qw(reset --hard), lrref(); printdone "ready for work in $dstdir"; } sub fetch () { if (check_for_git()) { git_fetch_us(); } fetch_from_archive() or no_such_package(); printdone "fetched into ".lrref(); } sub pull () { fetch(); runcmd_ordryrun_local @git, qw(merge -m),"Merge from $csuite [dgit]", lrref(); printdone "fetched to ".lrref()." and merged into HEAD"; } sub check_not_dirty () { foreach my $f (qw(local-options local-patch-header)) { if (stat_exists "debian/source/$f") { fail "git tree contains debian/source/$f"; } } return if $ignoredirty; my @cmd = (@git, qw(diff --quiet HEAD)); debugcmd "+",@cmd; $!=0; $?=0; system @cmd; return if !$! && !$?; if (!$! && $?==256) { fail "working tree is dirty (does not match HEAD)"; } else { failedcmd @cmd; } } sub commit_admin ($) { my ($m) = @_; progress "$m"; runcmd_ordryrun_local @git, qw(commit -m), $m; } sub commit_quilty_patch () { my $output = cmdoutput @git, qw(status --porcelain); my %adds; foreach my $l (split /\n/, $output) { next unless $l =~ m/\S/; if ($l =~ m{^(?:\?\?| M) (.pc|debian/patches)}) { $adds{$1}++; } } delete $adds{'.pc'}; # if there wasn't one before, don't add it if (!%adds) { progress "nothing quilty to commit, ok."; return; } my @adds = map { s/[][*?\\]/\\$&/g; $_; } sort keys %adds; runcmd_ordryrun_local @git, qw(add -f), @adds; commit_admin "Commit Debian 3.0 (quilt) metadata"; } sub get_source_format () { my %options; if (open F, "debian/source/options") { while () { next if m/^\s*\#/; next unless m/\S/; s/\s+$//; # ignore missing final newline if (m/\s*\#\s*/) { my ($k, $v) = ($`, $'); #'); $v =~ s/^"(.*)"$/$1/; $options{$k} = $v; } else { $options{$_} = 1; } } F->error and die $!; close F; } else { die $! unless $!==&ENOENT; } if (!open F, "debian/source/format") { die $! unless $!==&ENOENT; return ''; } $_ = ; F->error and die $!; chomp; return ($_, \%options); } sub madformat ($) { my ($format) = @_; return 0 unless $format eq '3.0 (quilt)'; if ($quilt_mode eq 'nocheck') { progress "Not doing any fixup of \`$format' due to --no-quilt-fixup"; return 0; } progress "Format \`$format', checking/updating patch stack"; return 1; } sub push_parse_changelog ($) { my ($clogpfn) = @_; my $clogp = Dpkg::Control::Hash->new(); $clogp->load($clogpfn) or die; $package = getfield $clogp, 'Source'; my $cversion = getfield $clogp, 'Version'; my $tag = debiantag($cversion, access_basedistro); runcmd @git, qw(check-ref-format), $tag; my $dscfn = dscfn($cversion); return ($clogp, $cversion, $tag, $dscfn); } sub push_parse_dsc ($$$) { my ($dscfn,$dscfnwhat, $cversion) = @_; $dsc = parsecontrol($dscfn,$dscfnwhat); my $dversion = getfield $dsc, 'Version'; my $dscpackage = getfield $dsc, 'Source'; ($dscpackage eq $package && $dversion eq $cversion) or fail "$dscfn is for $dscpackage $dversion". " but debian/changelog is for $package $cversion"; } sub push_mktag ($$$$$$$) { my ($head,$clogp,$tag, $dscfn, $changesfile,$changesfilewhat, $tfn) = @_; $dsc->{$ourdscfield[0]} = $head; $dsc->save("$dscfn.tmp") or die $!; my $changes = parsecontrol($changesfile,$changesfilewhat); foreach my $field (qw(Source Distribution Version)) { $changes->{$field} eq $clogp->{$field} or fail "changes field $field \`$changes->{$field}'". " does not match changelog \`$clogp->{$field}'"; } my $cversion = getfield $clogp, 'Version'; my $clogsuite = getfield $clogp, 'Distribution'; # We make the git tag by hand because (a) that makes it easier # to control the "tagger" (b) we can do remote signing my $authline = clogp_authline $clogp; my $delibs = join(" ", "",@deliberatelies); my $declaredistro = access_basedistro(); open TO, '>', $tfn->('.tmp') or die $!; print TO <('.tmp'); if ($sign) { if (!defined $keyid) { $keyid = access_cfg('keyid','RETURN-UNDEF'); } if (!defined $keyid) { $keyid = getfield $clogp, 'Maintainer'; } unlink $tfn->('.tmp.asc') or $!==&ENOENT or die $!; my @sign_cmd = (@gpg, qw(--detach-sign --armor)); push @sign_cmd, qw(-u),$keyid if defined $keyid; push @sign_cmd, $tfn->('.tmp'); runcmd_ordryrun @sign_cmd; if (act_scary()) { $tagobjfn = $tfn->('.signed.tmp'); runcmd shell_cmd "exec >$tagobjfn", qw(cat --), $tfn->('.tmp'), $tfn->('.tmp.asc'); } } return ($tagobjfn); } sub sign_changes ($) { my ($changesfile) = @_; if ($sign) { my @debsign_cmd = @debsign; push @debsign_cmd, "-k$keyid" if defined $keyid; push @debsign_cmd, "-p$gpg[0]" if $gpg[0] ne 'gpg'; push @debsign_cmd, $changesfile; runcmd_ordryrun @debsign_cmd; } } sub dopush ($) { my ($forceflag) = @_; printdebug "actually entering push\n"; supplementary_message(<<'END'); Push failed, while preparing your push. You can retry the push, after fixing the problem, if you like. END prep_ud(); access_giturl(); # check that success is vaguely likely my $clogpfn = ".git/dgit/changelog.822.tmp"; runcmd shell_cmd "exec >$clogpfn", qw(dpkg-parsechangelog); responder_send_file('parsed-changelog', $clogpfn); my ($clogp, $cversion, $tag, $dscfn) = push_parse_changelog("$clogpfn"); my $dscpath = "$buildproductsdir/$dscfn"; stat_exists $dscpath or fail "looked for .dsc $dscfn, but $!;". " maybe you forgot to build"; responder_send_file('dsc', $dscpath); push_parse_dsc($dscpath, $dscfn, $cversion); my $format = getfield $dsc, 'Format'; printdebug "format $format\n"; if (madformat($format)) { commit_quilty_patch(); } check_not_dirty(); changedir $ud; progress "checking that $dscfn corresponds to HEAD"; runcmd qw(dpkg-source -x --), $dscpath =~ m#^/# ? $dscpath : "../../../$dscpath"; my ($tree,$dir) = mktree_in_ud_from_only_subdir(); check_for_vendor_patches() if madformat($dsc->{format}); changedir '../../../..'; my $diffopt = $debuglevel>0 ? '--exit-code' : '--quiet'; my @diffcmd = (@git, qw(diff), $diffopt, $tree); debugcmd "+",@diffcmd; $!=0; $?=0; my $r = system @diffcmd; if ($r) { if ($r==256) { fail "$dscfn specifies a different tree to your HEAD commit;". " perhaps you forgot to build". ($diffopt eq '--exit-code' ? "" : " (run with -D to see full diff output)"); } else { failedcmd @diffcmd; } } my $head = git_rev_parse('HEAD'); if (!$changesfile) { my $multi = "$buildproductsdir/". "${package}_".(stripepoch $cversion)."_multi.changes"; if (stat_exists "$multi") { $changesfile = $multi; } else { my $pat = "${package}_".(stripepoch $cversion)."_*.changes"; my @cs = glob "$buildproductsdir/$pat"; fail "failed to find unique changes file". " (looked for $pat in $buildproductsdir, or $multi);". " perhaps you need to use dgit -C" unless @cs==1; ($changesfile) = @cs; } } else { $changesfile = "$buildproductsdir/$changesfile"; } responder_send_file('changes',$changesfile); responder_send_command("param head $head"); responder_send_command("param csuite $csuite"); if (deliberately_not_fast_forward) { git_for_each_ref(lrfetchrefs, sub { my ($objid,$objtype,$lrfetchrefname,$reftail) = @_; my $rrefname= substr($lrfetchrefname, length(lrfetchrefs) + 1); responder_send_command("previously $rrefname=$objid"); $previously{$rrefname} = $objid; }); } my $tfn = sub { ".git/dgit/tag$_[0]"; }; my $tagobjfn; supplementary_message(<<'END'); Push failed, while signing the tag. You can retry the push, after fixing the problem, if you like. END # If we manage to sign but fail to record it anywhere, it's fine. if ($we_are_responder) { $tagobjfn = $tfn->('.signed.tmp'); responder_receive_files('signed-tag', $tagobjfn); } else { $tagobjfn = push_mktag($head,$clogp,$tag, $dscpath, $changesfile,$changesfile, $tfn); } supplementary_message(<<'END'); Push failed, *after* signing the tag. If you want to try again, you should use a new version number. END my $tag_obj_hash = cmdoutput @git, qw(hash-object -w -t tag), $tagobjfn; runcmd_ordryrun @git, qw(verify-tag), $tag_obj_hash; runcmd_ordryrun_local @git, qw(update-ref), "refs/tags/$tag", $tag_obj_hash; supplementary_message(<<'END'); Push failed, while updating the remote git repository - see messages above. If you want to try again, you should use a new version number. END if (!check_for_git()) { create_remote_git_repo(); } runcmd_ordryrun @git, qw(push),access_giturl(), $forceflag."HEAD:".rrref(), $forceflag."refs/tags/$tag"; runcmd_ordryrun @git, qw(update-ref -m), 'dgit push', lrref(), 'HEAD'; supplementary_message(<<'END'); Push failed, after updating the remote git repository. If you want to try again, you must use a new version number. END if ($we_are_responder) { my $dryrunsuffix = act_local() ? "" : ".tmp"; responder_receive_files('signed-dsc-changes', "$dscpath$dryrunsuffix", "$changesfile$dryrunsuffix"); } else { if (act_local()) { rename "$dscpath.tmp",$dscpath or die "$dscfn $!"; } else { progress "[new .dsc left in $dscpath.tmp]"; } sign_changes $changesfile; } supplementary_message(<<'END'); Push failed, while uploading package(s) to the archive server. You can retry the upload of exactly these same files with dput of: $changesfile If that .changes file is broken, you will need to use a new version number for your next attempt at the upload. END my $host = access_cfg('upload-host','RETURN-UNDEF'); my @hostarg = defined($host) ? ($host,) : (); runcmd_ordryrun @dput, @hostarg, $changesfile; printdone "pushed and uploaded $cversion"; supplementary_message(''); responder_send_command("complete"); } sub cmd_clone { parseopts(); notpushing(); my $dstdir; badusage "-p is not allowed with clone; specify as argument instead" if defined $package; if (@ARGV==1) { ($package) = @ARGV; } elsif (@ARGV==2 && $ARGV[1] =~ m#^\w#) { ($package,$isuite) = @ARGV; } elsif (@ARGV==2 && $ARGV[1] =~ m#^[./]#) { ($package,$dstdir) = @ARGV; } elsif (@ARGV==3) { ($package,$isuite,$dstdir) = @ARGV; } else { badusage "incorrect arguments to dgit clone"; } $dstdir ||= "$package"; if (stat_exists $dstdir) { fail "$dstdir already exists"; } my $cwd_remove; if ($rmonerror && !$dryrun_level) { $cwd_remove= getcwd(); unshift @end, sub { return unless defined $cwd_remove; if (!chdir "$cwd_remove") { return if $!==&ENOENT; die "chdir $cwd_remove: $!"; } rmtree($dstdir) or die "remove $dstdir: $!\n"; }; } clone($dstdir); $cwd_remove = undef; } sub branchsuite () { my $branch = cmdoutput_errok @git, qw(symbolic-ref HEAD); if ($branch =~ m#$lbranch_re#o) { return $1; } else { return undef; } } sub fetchpullargs () { notpushing(); if (!defined $package) { my $sourcep = parsecontrol('debian/control','debian/control'); $package = getfield $sourcep, 'Source'; } if (@ARGV==0) { # $isuite = branchsuite(); # this doesn't work because dak hates canons if (!$isuite) { my $clogp = parsechangelog(); $isuite = getfield $clogp, 'Distribution'; } canonicalise_suite(); progress "fetching from suite $csuite"; } elsif (@ARGV==1) { ($isuite) = @ARGV; canonicalise_suite(); } else { badusage "incorrect arguments to dgit fetch or dgit pull"; } } sub cmd_fetch { parseopts(); fetchpullargs(); fetch(); } sub cmd_pull { parseopts(); fetchpullargs(); pull(); } sub cmd_push { parseopts(); pushing(); badusage "-p is not allowed with dgit push" if defined $package; check_not_dirty(); my $clogp = parsechangelog(); $package = getfield $clogp, 'Source'; my $specsuite; if (@ARGV==0) { } elsif (@ARGV==1) { ($specsuite) = (@ARGV); } else { badusage "incorrect arguments to dgit push"; } $isuite = getfield $clogp, 'Distribution'; if ($new_package) { local ($package) = $existing_package; # this is a hack canonicalise_suite(); } else { canonicalise_suite(); } if (defined $specsuite && $specsuite ne $isuite && $specsuite ne $csuite) { fail "dgit push: changelog specifies $isuite ($csuite)". " but command line specifies $specsuite"; } supplementary_message(<<'END'); Push failed, while checking state of the archive. You can retry the push, after fixing the problem, if you like. END if (check_for_git()) { git_fetch_us(); } my $forceflag = ''; if (fetch_from_archive()) { if (is_fast_fwd(lrref(), 'HEAD')) { # ok } elsif (deliberately_not_fast_forward) { $forceflag = '+'; } else { fail "dgit push: HEAD is not a descendant". " of the archive's version.\n". "dgit: To overwrite its contents,". " use git merge -s ours ".lrref().".\n". "dgit: To rewind history, if permitted by the archive,". " use --deliberately-not-fast-forward"; } } else { $new_package or fail "package appears to be new in this suite;". " if this is intentional, use --new"; } dopush($forceflag); } #---------- remote commands' implementation ---------- sub cmd_remote_push_build_host { my ($nrargs) = shift @ARGV; my (@rargs) = @ARGV[0..$nrargs-1]; @ARGV = @ARGV[$nrargs..$#ARGV]; die unless @rargs; my ($dir,$vsnwant) = @rargs; # vsnwant is a comma-separated list; we report which we have # chosen in our ready response (so other end can tell if they # offered several) $debugprefix = ' '; $we_are_responder = 1; $us .= " (build host)"; pushing(); open PI, "<&STDIN" or die $!; open STDIN, "/dev/null" or die $!; open PO, ">&STDOUT" or die $!; autoflush PO 1; open STDOUT, ">&STDERR" or die $!; autoflush STDOUT 1; $vsnwant //= 1; ($protovsn) = grep { $vsnwant =~ m{^(?:.*,)?$_(?:,.*)?$} } @rpushprotovsn_support; fail "build host has dgit rpush protocol versions ". (join ",", @rpushprotovsn_support). " but invocation host has $vsnwant" unless defined $protovsn; responder_send_command("dgit-remote-push-ready $protovsn"); changedir $dir; &cmd_push; } sub cmd_remote_push_responder { cmd_remote_push_build_host(); } # ... for compatibility with proto vsn.1 dgit (just so that user gets # a good error message) our $i_tmp; sub i_cleanup { local ($@, $?); my $report = i_child_report(); if (defined $report) { printdebug "($report)\n"; } elsif ($i_child_pid) { printdebug "(killing build host child $i_child_pid)\n"; kill 15, $i_child_pid; } if (defined $i_tmp && !defined $initiator_tempdir) { changedir "/"; eval { rmtree $i_tmp; }; } } END { i_cleanup(); } sub i_method { my ($base,$selector,@args) = @_; $selector =~ s/\-/_/g; { no strict qw(refs); &{"${base}_${selector}"}(@args); } } sub cmd_rpush { pushing(); my $host = nextarg; my $dir; if ($host =~ m/^((?:[^][]|\[[^][]*\])*)\:/) { $host = $1; $dir = $'; #'; } else { $dir = nextarg; } $dir =~ s{^-}{./-}; my @rargs = ($dir); push @rargs, join ",", @rpushprotovsn_support; my @rdgit; push @rdgit, @dgit; push @rdgit, @ropts; push @rdgit, qw(remote-push-build-host), (scalar @rargs), @rargs; push @rdgit, @ARGV; my @cmd = (@ssh, $host, shellquote @rdgit); debugcmd "+",@cmd; if (defined $initiator_tempdir) { rmtree $initiator_tempdir; mkdir $initiator_tempdir, 0700 or die "$initiator_tempdir: $!"; $i_tmp = $initiator_tempdir; } else { $i_tmp = tempdir(); } $i_child_pid = open2(\*RO, \*RI, @cmd); changedir $i_tmp; ($protovsn) = initiator_expect { m/^dgit-remote-push-ready (\S+)/ }; die "$protovsn ?" unless grep { $_ eq $protovsn } @rpushprotovsn_support; $supplementary_message = '' unless $protovsn >= 3; for (;;) { my ($icmd,$iargs) = initiator_expect { m/^(\S+)(?: (.*))?$/; ($1,$2); }; i_method "i_resp", $icmd, $iargs; } } sub i_resp_progress ($) { my ($rhs) = @_; my $msg = protocol_read_bytes \*RO, $rhs; progress $msg; } sub i_resp_supplementary_message ($) { my ($rhs) = @_; $supplementary_message = protocol_read_bytes \*RO, $rhs; } sub i_resp_complete { my $pid = $i_child_pid; $i_child_pid = undef; # prevents killing some other process with same pid printdebug "waiting for build host child $pid...\n"; my $got = waitpid $pid, 0; die $! unless $got == $pid; die "build host child failed $?" if $?; i_cleanup(); printdebug "all done\n"; exit 0; } sub i_resp_file ($) { my ($keyword) = @_; my $localname = i_method "i_localname", $keyword; my $localpath = "$i_tmp/$localname"; stat_exists $localpath and badproto \*RO, "file $keyword ($localpath) twice"; protocol_receive_file \*RO, $localpath; i_method "i_file", $keyword; } our %i_param; sub i_resp_param ($) { $_[0] =~ m/^(\S+) (.*)$/ or badproto \*RO, "bad param spec"; $i_param{$1} = $2; } sub i_resp_previously ($) { $_[0] =~ m#^(refs/tags/\S+)=(\w+)$# or badproto \*RO, "bad previously spec"; my $r = system qw(git check-ref-format), $1; die "bad previously ref spec ($r)" if $r; $previously{$1} = $2; } our %i_wanted; sub i_resp_want ($) { my ($keyword) = @_; die "$keyword ?" if $i_wanted{$keyword}++; my @localpaths = i_method "i_want", $keyword; printdebug "[[ $keyword @localpaths\n"; foreach my $localpath (@localpaths) { protocol_send_file \*RI, $localpath; } print RI "files-end\n" or die $!; } our ($i_clogp, $i_version, $i_tag, $i_dscfn, $i_changesfn); sub i_localname_parsed_changelog { return "remote-changelog.822"; } sub i_file_parsed_changelog { ($i_clogp, $i_version, $i_tag, $i_dscfn) = push_parse_changelog "$i_tmp/remote-changelog.822"; die if $i_dscfn =~ m#/|^\W#; } sub i_localname_dsc { defined $i_dscfn or badproto \*RO, "dsc (before parsed-changelog)"; return $i_dscfn; } sub i_file_dsc { } sub i_localname_changes { defined $i_dscfn or badproto \*RO, "dsc (before parsed-changelog)"; $i_changesfn = $i_dscfn; $i_changesfn =~ s/\.dsc$/_dgit.changes/ or die; return $i_changesfn; } sub i_file_changes { } sub i_want_signed_tag { printdebug Dumper(\%i_param, $i_dscfn); defined $i_param{'head'} && defined $i_dscfn && defined $i_clogp && defined $i_param{'csuite'} or badproto \*RO, "premature desire for signed-tag"; my $head = $i_param{'head'}; die if $head =~ m/[^0-9a-f]/ || $head !~ m/^../; die unless $i_param{'csuite'} =~ m/^$suite_re$/; $csuite = $&; push_parse_dsc $i_dscfn, 'remote dsc', $i_version; my $tagobjfn = push_mktag $head, $i_clogp, $i_tag, $i_dscfn, $i_changesfn, 'remote changes', sub { "tag$_[0]"; }; return $tagobjfn; } sub i_want_signed_dsc_changes { rename "$i_dscfn.tmp","$i_dscfn" or die "$i_dscfn $!"; sign_changes $i_changesfn; return ($i_dscfn, $i_changesfn); } #---------- building etc. ---------- our $version; our $sourcechanges; our $dscfn; #----- `3.0 (quilt)' handling ----- our $fakeeditorenv = 'DGIT_FAKE_EDITOR_QUILT'; sub quiltify_dpkg_commit ($$$;$) { my ($patchname,$author,$msg, $xinfo) = @_; $xinfo //= ''; mkpath '.git/dgit'; my $descfn = ".git/dgit/quilt-description.tmp"; open O, '>', $descfn or die "$descfn: $!"; $msg =~ s/\s+$//g; $msg =~ s/\n/\n /g; $msg =~ s/^\s+$/ ./mg; print O < $git_commit_id, # Child => $c, # or undef if P=T # Whynot => $reason_edge_PC_unsuitable, # in @nots only # Nontrivial => true iff $p..$c has relevant changes # }; my @todo; my @nots; my $sref_S; my $max_work=100; my %considered; # saves being exponential on some weird graphs my $t_sentinels = quiltify_tree_sentinelfiles $target; my $not = sub { my ($search,$whynot) = @_; printdebug " search NOT $search->{Commit} $whynot\n"; $search->{Whynot} = $whynot; push @nots, $search; no warnings qw(exiting); next; }; push @todo, { Commit => $target, }; while (@todo) { my $c = shift @todo; next if $considered{$c->{Commit}}++; $not->($c, "maximum search space exceeded") if --$max_work <= 0; printdebug "quiltify investigate $c->{Commit}\n"; # are we done? if (!quiltify_trees_differ $c->{Commit}, $oldtiptree) { printdebug " search finished hooray!\n"; $sref_S = $c; last; } if ($quilt_mode eq 'nofix') { fail "quilt fixup required but quilt mode is \`nofix'\n". "HEAD commit $c->{Commit} differs from tree implied by ". " debian/patches (tree object $oldtiptree)"; } if ($quilt_mode eq 'smash') { printdebug " search quitting smash\n"; last; } my $c_sentinels = quiltify_tree_sentinelfiles $c->{Commit}; $not->($c, "has $c_sentinels not $t_sentinels") if $c_sentinels ne $t_sentinels; my $commitdata = cmdoutput @git, qw(cat-file commit), $c->{Commit}; $commitdata =~ m/\n\n/; $commitdata =~ $`; my @parents = ($commitdata =~ m/^parent (\w+)$/gm); @parents = map { { Commit => $_, Child => $c } } @parents; $not->($c, "root commit") if !@parents; foreach my $p (@parents) { $p->{Nontrivial}= quiltify_trees_differ $p->{Commit},$c->{Commit}; } my $ndiffers = grep { $_->{Nontrivial} } @parents; $not->($c, "merge ($ndiffers nontrivial parents)") if $ndiffers > 1; foreach my $p (@parents) { printdebug "considering C=$c->{Commit} P=$p->{Commit}\n"; my @cmd= (@git, qw(diff-tree -r --name-only), $p->{Commit},$c->{Commit}, qw(-- debian/patches .pc)); my $patchstackchange = cmdoutput @cmd; if (length $patchstackchange) { $patchstackchange =~ s/\n/,/g; $not->($p, "changed $patchstackchange"); } printdebug " search queue P=$p->{Commit} ", ($p->{Nontrivial} ? "NT" : "triv"),"\n"; push @todo, $p; } } if (!$sref_S) { printdebug "quiltify want to smash\n"; my $abbrev = sub { my $x = $_[0]{Commit}; $x =~ s/(.*?[0-9a-z]{8})[0-9a-z]*$/$1/; return $x; }; my $reportnot = sub { my ($notp) = @_; my $s = $abbrev->($notp); my $c = $notp->{Child}; $s .= "..".$abbrev->($c) if $c; $s .= ": ".$notp->{Whynot}; return $s; }; if ($quilt_mode eq 'linear') { print STDERR "$us: quilt fixup cannot be linear. Stopped at:\n"; foreach my $notp (@nots) { print STDERR "$us: ", $reportnot->($notp), "\n"; } fail "quilt fixup naive history linearisation failed.\n". "Use dpkg-source --commit by hand; or, --quilt=smash for one ugly patch"; } elsif ($quilt_mode eq 'smash') { } elsif ($quilt_mode eq 'auto') { progress "quilt fixup cannot be linear, smashing..."; } else { die "$quilt_mode ?"; } my $time = time; my $ncommits = 3; my $msg = cmdoutput @git, qw(log), "-n$ncommits"; quiltify_dpkg_commit "auto-$version-$target-$time", (getfield $clogp, 'Maintainer'), "Automatically generated patch ($clogp->{Version})\n". "Last (up to) $ncommits git changes, FYI:\n\n". $msg; return; } progress "quiltify linearisation planning successful, executing..."; for (my $p = $sref_S; my $c = $p->{Child}; $p = $p->{Child}) { printdebug "quiltify traverse $p->{Commit}..$c->{Commit}\n"; next unless $p->{Nontrivial}; my $cc = $c->{Commit}; my $commitdata = cmdoutput @git, qw(cat-file commit), $cc; $commitdata =~ m/\n\n/ or die "$c ?"; $commitdata = $`; my $msg = $'; #'; $commitdata =~ m/^author (.*) \d+ [-+0-9]+$/m or die "$cc ?"; my $author = $1; $msg =~ s/^(.*)\n*/$1\n/ or die "$cc $msg ?"; my $title = $1; my $patchname = $title; $patchname =~ s/[.:]$//; $patchname =~ y/ A-Z/-a-z/; $patchname =~ y/-a-z0-9_.+=~//cd; $patchname =~ s/^\W/x-$&/; $patchname = substr($patchname,0,40); my $index; for ($index=''; stat "debian/patches/$patchname$index"; $index++) { } $!==ENOENT or die "$patchname$index $!"; runcmd @git, qw(checkout -q), $cc; # We use the tip's changelog so that dpkg-source doesn't # produce complaining messages from dpkg-parsechangelog. None # of the information dpkg-source gets from the changelog is # actually relevant - it gets put into the original message # which dpkg-source provides our stunt editor, and then # overwritten. runcmd @git, qw(checkout -q), $target, qw(debian/changelog); quiltify_dpkg_commit "$patchname$index", $author, $msg, "X-Dgit-Generated: $clogp->{Version} $cc\n"; runcmd @git, qw(checkout -q), $cc, qw(debian/changelog); } runcmd @git, qw(checkout -q master); } sub build_maybe_quilt_fixup () { my ($format,$fopts) = get_source_format; return unless madformat $format; # sigh check_for_vendor_patches(); my $clogp = parsechangelog(); my $headref = git_rev_parse('HEAD'); prep_ud(); changedir $ud; my $upstreamversion=$version; $upstreamversion =~ s/-[^-]*$//; if ($fopts->{'single-debian-patch'}) { quilt_fixup_singlepatch($clogp, $headref, $upstreamversion); } else { quilt_fixup_multipatch($clogp, $headref, $upstreamversion); } changedir '../../../..'; runcmd_ordryrun_local @git, qw(pull --ff-only -q .git/dgit/unpack/work master); } sub quilt_fixup_mkwork ($) { my ($headref) = @_; mkdir "work" or die $!; changedir "work"; mktree_in_ud_here(); runcmd @git, qw(reset --hard), $headref; } sub quilt_fixup_linkorigs ($$) { my ($upstreamversion, $fn) = @_; # calls $fn->($leafname); foreach my $f (<../../../../*>) { #/){ my $b=$f; $b =~ s{.*/}{}; { local ($debuglevel) = $debuglevel-1; printdebug "QF linkorigs $b, $f ?\n"; } next unless is_orig_file $b, srcfn $upstreamversion,''; printdebug "QF linkorigs $b, $f Y\n"; link_ltarget $f, $b or die "$b $!"; $fn->($b); } } sub quilt_fixup_delete_pc () { runcmd @git, qw(rm -rqf .pc); commit_admin "Commit removal of .pc (quilt series tracking data)"; } sub quilt_fixup_singlepatch ($$$) { my ($clogp, $headref, $upstreamversion) = @_; progress "starting quiltify (single-debian-patch)"; # dpkg-source --commit generates new patches even if # single-debian-patch is in debian/source/options. In order to # get it to generate debian/patches/debian-changes, it is # necessary to build the source package. quilt_fixup_linkorigs($upstreamversion, sub { }); quilt_fixup_mkwork($headref); rmtree("debian/patches"); runcmd @dpkgsource, qw(-b .); chdir ".."; runcmd @dpkgsource, qw(-x), (srcfn $version, ".dsc"); rename srcfn("$upstreamversion", "/debian/patches"), "work/debian/patches"; chdir "work"; commit_quilty_patch(); } sub quilt_fixup_multipatch ($$$) { my ($clogp, $headref, $upstreamversion) = @_; progress "starting quiltify (multiple patches, $quilt_mode mode)"; # Our objective is: # - honour any existing .pc in case it has any strangeness # - determine the git commit corresponding to the tip of # the patch stack (if there is one) # - if there is such a git commit, convert each subsequent # git commit into a quilt patch with dpkg-source --commit # - otherwise convert all the differences in the tree into # a single git commit # # To do this we: # Our git tree doesn't necessarily contain .pc. (Some versions of # dgit would include the .pc in the git tree.) If there isn't # one, we need to generate one by unpacking the patches that we # have. # # We first look for a .pc in the git tree. If there is one, we # will use it. (This is not the normal case.) # # Otherwise need to regenerate .pc so that dpkg-source --commit # can work. We do this as follows: # 1. Collect all relevant .orig from parent directory # 2. Generate a debian.tar.gz out of # debian/{patches,rules,source/format,source/options} # 3. Generate a fake .dsc containing just these fields: # Format Source Version Files # 4. Extract the fake .dsc # Now the fake .dsc has a .pc directory. # (In fact we do this in every case, because in future we will # want to search for a good base commit for generating patches.) # # Then we can actually do the dpkg-source --commit # 1. Make a new working tree with the same object # store as our main tree and check out the main # tree's HEAD. # 2. Copy .pc from the fake's extraction, if necessary # 3. Run dpkg-source --commit # 4. If the result has changes to debian/, then # - git-add them them # - git-add .pc if we had a .pc in-tree # - git-commit # 5. If we had a .pc in-tree, delete it, and git-commit # 6. Back in the main tree, fast forward to the new HEAD my $fakeversion="$upstreamversion-~~DGITFAKE"; my $fakedsc=new IO::File 'fake.dsc', '>' or die $!; print $fakedsc <addfile($fh); print $fakedsc " ".$md->hexdigest." $size $b\n" or die $!; }; quilt_fixup_linkorigs($upstreamversion, $dscaddfile); my @files=qw(debian/source/format debian/rules); foreach my $maybe (qw(debian/patches debian/source/options)) { next unless stat_exists "../../../$maybe"; push @files, $maybe; } my $debtar= srcfn $fakeversion,'.debian.tar.gz'; runcmd qw(env GZIP=-1 tar -zcf), "./$debtar", qw(-C ../../..), @files; $dscaddfile->($debtar); close $fakedsc or die $!; runcmd qw(sh -ec), 'exec dpkg-source --no-check -x fake.dsc >/dev/null'; my $fakexdir= $package.'-'.(stripepoch $upstreamversion); rename $fakexdir, "fake" or die "$fakexdir $!"; quilt_fixup_mkwork($headref); my $mustdeletepc=0; if (stat_exists ".pc") { -d _ or die; progress "Tree already contains .pc - will use it then delete it."; $mustdeletepc=1; } else { rename '../fake/.pc','.pc' or die $!; } quiltify($clogp,$headref); if (!open P, '>>', ".pc/applied-patches") { $!==&ENOENT or die $!; } else { close P; } commit_quilty_patch(); if ($mustdeletepc) { quilt_fixup_delete_pc(); } } sub quilt_fixup_editor () { my $descfn = $ENV{$fakeeditorenv}; my $editing = $ARGV[$#ARGV]; open I1, '<', $descfn or die "$descfn: $!"; open I2, '<', $editing or die "$editing: $!"; unlink $editing or die "$editing: $!"; open O, '>', $editing or die "$editing: $!"; while () { print O or die $!; } I1->error and die $!; my $copying = 0; while () { $copying ||= m/^\-\-\- /; next unless $copying; print O or die $!; } I2->error and die $!; close O or die $1; exit 0; } #----- other building ----- our $suppress_clean; sub clean_tree () { return if $suppress_clean; if ($cleanmode eq 'dpkg-source') { runcmd_ordryrun_local @dpkgbuildpackage, qw(-T clean); } elsif ($cleanmode eq 'dpkg-source-d') { runcmd_ordryrun_local @dpkgbuildpackage, qw(-d -T clean); } elsif ($cleanmode eq 'git') { runcmd_ordryrun_local @git, qw(clean -xdf); } elsif ($cleanmode eq 'git-ff') { runcmd_ordryrun_local @git, qw(clean -xdff); } elsif ($cleanmode eq 'check') { my $leftovers = cmdoutput @git, qw(clean -xdn); if (length $leftovers) { print STDERR $leftovers, "\n" or die $!; fail "tree contains uncommitted files and --clean=check specified"; } } elsif ($cleanmode eq 'none') { } else { die "$cleanmode ?"; } } sub cmd_clean () { badusage "clean takes no additional arguments" if @ARGV; notpushing(); clean_tree(); } sub build_prep () { notpushing(); badusage "-p is not allowed when building" if defined $package; check_not_dirty(); clean_tree(); my $clogp = parsechangelog(); $isuite = getfield $clogp, 'Distribution'; $package = getfield $clogp, 'Source'; $version = getfield $clogp, 'Version'; build_maybe_quilt_fixup(); } sub changesopts_initial () { my @opts =@changesopts[1..$#changesopts]; } sub changesopts_version () { if (!defined $changes_since_version) { my @vsns = archive_query('archive_query'); my @quirk = access_quirk(); if ($quirk[0] eq 'backports') { local $isuite = $quirk[2]; local $csuite; canonicalise_suite(); push @vsns, archive_query('archive_query'); } if (@vsns) { @vsns = map { $_->[0] } @vsns; @vsns = sort { -version_compare($a, $b) } @vsns; $changes_since_version = $vsns[0]; progress "changelog will contain changes since $vsns[0]"; } else { $changes_since_version = '_'; progress "package seems new, not specifying -v"; } } if ($changes_since_version ne '_') { return ("-v$changes_since_version"); } else { return (); } } sub changesopts () { return (changesopts_initial(), changesopts_version()); } sub massage_dbp_args ($;$) { my ($cmd,$xargs) = @_; if ($cleanmode eq 'dpkg-source') { $suppress_clean = 1; return; } debugcmd '#massaging#', @$cmd if $debuglevel>1; my @newcmd = shift @$cmd; # -nc has the side effect of specifying -b if nothing else specified push @newcmd, '-nc'; # and some combinations of -S, -b, et al, are errors, rather than # later simply overriding earlier push @newcmd, '-F' unless grep { m/^-[bBASF]$/ } (@$cmd, @$xargs); push @newcmd, @$cmd; @$cmd = @newcmd; } sub cmd_build { my @dbp = (@dpkgbuildpackage, qw(-us -uc), changesopts_initial(), @ARGV); massage_dbp_args \@dbp; build_prep(); push @dbp, changesopts_version(); runcmd_ordryrun_local @dbp; printdone "build successful\n"; } sub cmd_gbp_build { my @dbp = @dpkgbuildpackage; massage_dbp_args \@dbp, \@ARGV; my @cmd; if (length executable_on_path('git-buildpackage')) { @cmd = qw(git-buildpackage); } else { @cmd = qw(gbp buildpackage); } push @cmd, (qw(-us -uc --git-no-sign-tags), "--git-builder=@dbp"); if ($cleanmode eq 'dpkg-source') { $suppress_clean = 1; } else { push @cmd, '--git-cleaner=true'; } build_prep(); unless (grep { m/^--git-debian-branch|^--git-ignore-branch/ } @ARGV) { canonicalise_suite(); push @cmd, "--git-debian-branch=".lbranch(); } push @cmd, changesopts(); runcmd_ordryrun_local @cmd, @ARGV; printdone "build successful\n"; } sub cmd_git_build { cmd_gbp_build(); } # compatibility with <= 1.0 sub build_source { if ($cleanmode =~ m/^dpkg-source/) { # dpkg-source will clean, so we shouldn't $suppress_clean = 1; } build_prep(); $sourcechanges = "${package}_".(stripepoch $version)."_source.changes"; $dscfn = dscfn($version); if ($cleanmode eq 'dpkg-source') { runcmd_ordryrun_local (@dpkgbuildpackage, qw(-us -uc -S)), changesopts(); } elsif ($cleanmode eq 'dpkg-source-d') { runcmd_ordryrun_local (@dpkgbuildpackage, qw(-us -uc -S -d)), changesopts(); } else { my $pwd = must_getcwd(); my $leafdir = basename $pwd; changedir ".."; runcmd_ordryrun_local @dpkgsource, qw(-b --), $leafdir; changedir $pwd; runcmd_ordryrun_local qw(sh -ec), 'exec >$1; shift; exec "$@"','x', "../$sourcechanges", @dpkggenchanges, qw(-S), changesopts(); } } sub cmd_build_source { badusage "build-source takes no additional arguments" if @ARGV; build_source(); printdone "source built, results in $dscfn and $sourcechanges"; } sub cmd_sbuild { build_source(); changedir ".."; my $pat = "${package}_".(stripepoch $version)."_*.changes"; if (act_local()) { stat_exists $dscfn or fail "$dscfn (in parent directory): $!"; stat_exists $sourcechanges or fail "$sourcechanges (in parent directory): $!"; foreach my $cf (glob $pat) { next if $cf eq $sourcechanges; unlink $cf or fail "remove $cf: $!"; } } runcmd_ordryrun_local @sbuild, qw(-d), $isuite, @ARGV, $dscfn; my @changesfiles = glob $pat; @changesfiles = sort { ($b =~ m/_source\.changes$/ <=> $a =~ m/_source\.changes$/) or $a cmp $b } @changesfiles; fail "wrong number of different changes files (@changesfiles)" unless @changesfiles; runcmd_ordryrun_local @mergechanges, @changesfiles; my $multichanges = "${package}_".(stripepoch $version)."_multi.changes"; if (act_local()) { stat_exists $multichanges or fail "$multichanges: $!"; } printdone "build successful, results in $multichanges\n" or die $!; } sub cmd_quilt_fixup { badusage "incorrect arguments to dgit quilt-fixup" if @ARGV; my $clogp = parsechangelog(); $version = getfield $clogp, 'Version'; $package = getfield $clogp, 'Source'; check_not_dirty(); clean_tree(); build_maybe_quilt_fixup(); } sub cmd_archive_api_query { badusage "need only 1 subpath argument" unless @ARGV==1; my ($subpath) = @ARGV; my @cmd = archive_api_query_cmd($subpath); debugcmd ">",@cmd; exec @cmd or fail "exec curl: $!\n"; } sub cmd_clone_dgit_repos_server { badusage "need destination argument" unless @ARGV==1; my ($destdir) = @ARGV; $package = '_dgit-repos-server'; my @cmd = (@git, qw(clone), access_giturl(), $destdir); debugcmd ">",@cmd; exec @cmd or fail "exec git clone: $!\n"; } sub cmd_setup_mergechangelogs { badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV; setup_mergechangelogs(1); } sub cmd_setup_useremail { badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV; setup_useremail(1); } sub cmd_setup_new_tree { badusage "no arguments allowed to dgit setup-tree" if @ARGV; setup_new_tree(); } #---------- argument parsing and main program ---------- sub cmd_version { print "dgit version $our_version\n" or die $!; exit 0; } our (%valopts_long, %valopts_short); our @rvalopts; sub defvalopt ($$$$) { my ($long,$short,$val_re,$how) = @_; my $oi = { Long => $long, Short => $short, Re => $val_re, How => $how }; $valopts_long{$long} = $oi; $valopts_short{$short} = $oi; # $how subref should: # do whatever assignemnt or thing it likes with $_[0] # if the option should not be passed on to remote, @rvalopts=() # or $how can be a scalar ref, meaning simply assign the value } defvalopt '--since-version', '-v', '[^_]+|_', \$changes_since_version; defvalopt '--distro', '-d', '.+', \$idistro; defvalopt '', '-k', '.+', \$keyid; defvalopt '--existing-package','', '.*', \$existing_package; defvalopt '--build-products-dir','','.*', \$buildproductsdir; defvalopt '--clean', '', $cleanmode_re, \$cleanmode; defvalopt '--quilt', '', $quilt_modes_re, \$quilt_mode; defvalopt '', '-c', '.*=.*', sub { push @git, '-c', @_; }; defvalopt '', '-C', '.+', sub { ($changesfile) = (@_); if ($changesfile =~ s#^(.*)/##) { $buildproductsdir = $1; } }; defvalopt '--initiator-tempdir','','.*', sub { ($initiator_tempdir) = (@_); $initiator_tempdir =~ m#^/# or badusage "--initiator-tempdir must be used specify an". " absolute, not relative, directory." }; sub parseopts () { my $om; if (defined $ENV{'DGIT_SSH'}) { @ssh = string_to_ssh $ENV{'DGIT_SSH'}; } elsif (defined $ENV{'GIT_SSH'}) { @ssh = ($ENV{'GIT_SSH'}); } my $oi; my $val; my $valopt = sub { my ($what) = @_; @rvalopts = ($_); if (!defined $val) { badusage "$what needs a value" unless @ARGV; $val = shift @ARGV; push @rvalopts, $val; } badusage "bad value \`$val' for $what" unless $val =~ m/^$oi->{Re}$(?!\n)/s; my $how = $oi->{How}; if (ref($how) eq 'SCALAR') { $$how = $val; } else { $how->($val); } push @ropts, @rvalopts; }; while (@ARGV) { last unless $ARGV[0] =~ m/^-/; $_ = shift @ARGV; last if m/^--?$/; if (m/^--/) { if (m/^--dry-run$/) { push @ropts, $_; $dryrun_level=2; } elsif (m/^--damp-run$/) { push @ropts, $_; $dryrun_level=1; } elsif (m/^--no-sign$/) { push @ropts, $_; $sign=0; } elsif (m/^--help$/) { cmd_help(); } elsif (m/^--version$/) { cmd_version(); } elsif (m/^--new$/) { push @ropts, $_; $new_package=1; } elsif (m/^--([-0-9a-z]+)=(.+)/s && ($om = $opts_opt_map{$1}) && length $om->[0]) { push @ropts, $_; $om->[0] = $2; } elsif (m/^--([-0-9a-z]+):(.*)/s && !$opts_opt_cmdonly{$1} && ($om = $opts_opt_map{$1})) { push @ropts, $_; push @$om, $2; } elsif (m/^--ignore-dirty$/s) { push @ropts, $_; $ignoredirty = 1; } elsif (m/^--no-quilt-fixup$/s) { push @ropts, $_; $quilt_mode = 'nocheck'; } elsif (m/^--no-rm-on-error$/s) { push @ropts, $_; $rmonerror = 0; } elsif (m/^--deliberately-($deliberately_re)$/s) { push @ropts, $_; push @deliberatelies, $&; } elsif (m/^(--[-0-9a-z]+)(=|$)/ && ($oi = $valopts_long{$1})) { $val = $2 ? $' : undef; #'; $valopt->($oi->{Long}); } else { badusage "unknown long option \`$_'"; } } else { while (m/^-./s) { if (s/^-n/-/) { push @ropts, $&; $dryrun_level=2; } elsif (s/^-L/-/) { push @ropts, $&; $dryrun_level=1; } elsif (s/^-h/-/) { cmd_help(); } elsif (s/^-D/-/) { push @ropts, $&; $debuglevel++; enabledebug(); } elsif (s/^-N/-/) { push @ropts, $&; $new_package=1; } elsif (m/^-m/) { push @ropts, $&; push @changesopts, $_; $_ = ''; } elsif (s/^-wn$//s) { push @ropts, $&; $cleanmode = 'none'; } elsif (s/^-wg$//s) { push @ropts, $&; $cleanmode = 'git'; } elsif (s/^-wgf$//s) { push @ropts, $&; $cleanmode = 'git-ff'; } elsif (s/^-wd$//s) { push @ropts, $&; $cleanmode = 'dpkg-source'; } elsif (s/^-wdd$//s) { push @ropts, $&; $cleanmode = 'dpkg-source-d'; } elsif (s/^-wc$//s) { push @ropts, $&; $cleanmode = 'check'; } elsif (m/^-[a-zA-Z]/ && ($oi = $valopts_short{$&})) { $val = $'; #'; $val = undef unless length $val; $valopt->($oi->{Short}); $_ = ''; } else { badusage "unknown short option \`$_'"; } } } } } sub finalise_opts_opts () { foreach my $k (keys %opts_opt_map) { my $om = $opts_opt_map{$k}; my $v = access_cfg("cmd-$k", 'RETURN-UNDEF'); if (defined $v) { badcfg "cannot set command for $k" unless length $om->[0]; $om->[0] = $v; } foreach my $c (access_cfg_cfgs("opts-$k")) { my $vl = $gitcfg{$c}; printdebug "CL $c ", ($vl ? join " ", map { shellquote } @$vl : ""), "\n" if $debuglevel >= 4; next unless $vl; badcfg "cannot configure options for $k" if $opts_opt_cmdonly{$k}; my $insertpos = $opts_cfg_insertpos{$k}; @$om = ( @$om[0..$insertpos-1], @$vl, @$om[$insertpos..$#$om] ); } } } if ($ENV{$fakeeditorenv}) { git_slurp_config(); quilt_fixup_editor(); } parseopts(); git_slurp_config(); print STDERR "DRY RUN ONLY\n" if $dryrun_level > 1; print STDERR "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n" if $dryrun_level == 1; if (!@ARGV) { print STDERR $helpmsg or die $!; exit 8; } my $cmd = shift @ARGV; $cmd =~ y/-/_/; if (!defined $quilt_mode) { local $access_forpush; $quilt_mode = cfg('dgit.force.quilt-mode', 'RETURN-UNDEF') // access_cfg('quilt-mode', 'RETURN-UNDEF') // 'linear'; $quilt_mode =~ m/^($quilt_modes_re)$/ or badcfg "unknown quilt-mode \`$quilt_mode'"; $quilt_mode = $1; } if (!defined $cleanmode) { local $access_forpush; $cleanmode = access_cfg('clean-mode', 'RETURN-UNDEF'); $cleanmode //= 'dpkg-source'; badcfg "unknown clean-mode \`$cleanmode'" unless $cleanmode =~ m/^($cleanmode_re)$(?!\n)/s; } my $fn = ${*::}{"cmd_$cmd"}; $fn or badusage "unknown operation $cmd"; $fn->(); dgit/.gitignore0000664000000000000000000000014112547254260010670 0ustar *~ tests/tmp debian/dgit debian/dgit-infrastructure debian/files debian/*.substvars debian/*.log dgit/tests/0000775000000000000000000000000012566103673010050 5ustar dgit/tests/drs-git-ext0000775000000000000000000000061012547254261012141 0ustar #!/bin/sh set -e tmp=$DGIT_TEST_TMP : ${DGIT_DRS_DEBUG:=1} export DGIT_DRS_DEBUG echo >&2 '((((((((((((((((((((((((((((((((((((((((' set -x export SSH_ORIGINAL_COMMAND="$*" ${DGIT_REPOS_SERVER_TEST-dgit-repos-server} \ test-dummy $tmp/distro=test-dummy \ $tmp/dd.gpg,a:$tmp/dm.gpg,m$tmp/dm.txt \ --repos=$tmp/git --suites=$tmp/suites \ --ssh : '))))))))))))))))))))))))))))))))))))))))' dgit/tests/dsd-ssh0000775000000000000000000000070512547254261011344 0ustar #!/bin/sh set -e echo >&2 '((((((((((((((((((((((((((((((((((((((((' set -x tmp=$DGIT_TEST_TMP cd / userhost="$1"; shift export SSH_ORIGINAL_COMMAND="$*" # undoes PERLLIB so that we rely on dgit-ssh-dispatch setting it # we have to compensate with -I so that dgit-ssh-dispatch finds Dgit.pm unset PERLLIB ${DGIT_TEST_INTREE+perl -I}$DGIT_TEST_INTREE \ ${DGIT_SSH_DISPATCH_TEST-dgit-ssh-dispatch} -D $tmp : '))))))))))))))))))))))))))))))))))))))))' dgit/tests/run-all0000775000000000000000000000045012547254261011346 0ustar #!/bin/sh set -e # convenience script for running the tests outside adt-run # usage: tests/using-intree tests/run-all set +e jcpus=`perl -MSys::CPU -we 'printf "-j%d\n",Sys::CPU::cpu_count()'` set -e if [ $# != 0 ]; then set TESTSCRIPTS="$*" fi set -x exec make $jcpus -f tests/Makefile "$@" dgit/tests/tstunt/0000775000000000000000000000000012564114317011404 5ustar dgit/tests/tstunt/Dpkg/0000775000000000000000000000000012547254261012275 5ustar dgit/tests/tstunt/Dpkg/Changelog/0000775000000000000000000000000012547254261014164 5ustar dgit/tests/tstunt/Dpkg/Changelog/Parse.pm0000664000000000000000000000265312547254261015602 0ustar # -*- perl -*- # # Copyright (C) 2015 Ian Jackson # # Some bits stolen from the proper Dpkg::Changelog::Parse # (from dpkg-dev 1.16.16): # # Copyright (C) 2005, 2007 Frank Lichtenheld # Copyright (C) 2009 Raphael Hertzog # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . package Dpkg::Changelog::Parse; use strict; use warnings; our $VERSION = "1.00"; use Dpkg::Control::Changelog; use base qw(Exporter); our @EXPORT = qw(changelog_parse); sub changelog_parse { my (%options) = @_; # ignored $options{'file'} //= 'debian/changelog'; open P, "dpkg-parsechangelog -l$options{'file'} |" or die $!; my $fields = Dpkg::Control::Changelog->new(); $fields->parse(\*P, "output of stunt changelog parser"); close P or die "$! $?"; return $fields; } dgit/tests/tstunt/dpkg-parsechangelog0000775000000000000000000000203412564114317015236 0ustar #!/usr/bin/perl -w # # In an example: # # $ time dpkg-parsechangelog >/dev/null # # real 0m0.712s # user 0m0.656s # sys 0m0.048s # $ time ~/things/Dgit/dgit/tests/tstunt/dpkg-parsechangelog >/dev/null # # real 0m0.016s # user 0m0.000s # sys 0m0.012s # $ $SIG{__WARN__} = sub { die $_[0]; }; # no use of system, so we avoid #793471 my $infile = "debian/changelog"; if (@ARGV && $ARGV[0] =~ s/^-l//) { $infile = shift @ARGV; } die if @ARGV; use strict; open C, $infile or die $!; $!=0; $_ = ; m/^(\S+) \(([^()]+)\) (\S+)\; urgency=(\S+)$/ or die "$!, $_ ?"; print <; if (m/^ -- ([^<>]+\<\S+\>) (\w[^<>]+\w)$/) { print <&1 set -x set -o pipefail . tests/lib-core . tests/lib-restricts t-set-intree : ${DGIT_TEST_DEBUG=-D} export DGIT_TEST_DEBUG root=`pwd` troot=$root/tests testname="${DGIT_TEST_TESTNAME-${0##*/}}" tmp=$ADTTMP if [ x"$tmp" = x ]; then mkdir -p tests/tmp tmp=tests/tmp/$testname rm -rf $tmp mkdir $tmp fi cd $tmp tmp=`pwd` t-set-using-tmp ln -f $troot/ssh ssh mkdir -p $tmp/gnupg cp $troot/gnupg/* $tmp/gnupg chmod go-rw $tmp/gnupg/* export DEBCHANGE_VENDOR=dpkg mkdir -p $tmp/incoming cat <$tmp/dput.cf [test-dummy] method = local incoming = $tmp/incoming run_dinstall = 0 END t-expect-fail () { local mpat="$1"; shift set +o pipefail LC_MESSAGES=C "$@" 2>&1 | tee $tmp/t.output local ps="${PIPESTATUS[*]}" set -o pipefail case $ps in "0 0") fail "command unexpectedly succeeded (instead of: $mpat)" ;; *" 0") ;; *) fail "tee failed" ;; esac t-grep-mpat "$mpat" $tmp/t.output } t-grep-mpat () { local mpat="$1" local file="$2" local grepper=fgrep case "$mpat" in [A-Z]:*) case "$mpat" in E:*) grepper=egrep ;; F:*) grepper=fgrep ;; *) fail "bad mpat prefix in $mpat";; esac mpat=${mpat#[A-Z]:} ;; esac $grepper -e "$mpat" "$file" || fail "message not found" } t-expect-push-fail () { local mpat="$1"; shift local triedpush=`git rev-parse HEAD` t-reporefs pre-push t-expect-fail "$mpat" "$@" t-reporefs post-push diff $tmp/show-refs.{pre,post}-push t-git-objects-not-present '' $triedpush eval "$t_expect_push_fail_hook" } t-git-objects-not-present () { # t-git-objects-not-present GITDIR|'' OBJID [...] # specifying '' means the repo for package $p local gitdir="${1-$dgitrepo}" local obj if ! [ -e "$gitdir" ]; then return; fi for obj in "$@"; do GIT_DIR=$gitdir \ t-expect-fail 'unable to find' \ git cat-file -t $obj done } t-reporefs () { local whichoutput=$1; shift local whichrepo=${1-$dgitrepo} local outputfile="$tmp/show-refs.$whichoutput" (set -e exec >"$outputfile" if test -d $whichrepo; then cd $whichrepo git show-ref |sort fi) } t-untar () { local tarfile=$1.tar local edittree=$1.edit if test -d "$edittree"; then cp -al "$edittree"/* . else tar xf "$tarfile" fi } t-worktree () { rm -rf $p t-untar $troot/worktrees/${p}_$1 } t-select-package () { p=$1 dgitrepo=$tmp/git/$p.git } t-git () { t-select-package $1 v=$2 mkdir -p $tmp/git local gs=$troot/git-srcs/${p}_$v.git (set -e; cd $tmp/git; t-untar $gs) } t-git-none () { mkdir -p $tmp/git (set -e; cd $tmp/git; tar xf $troot/git-template.tar) } t-git-merge-base () { git merge-base $1 $2 || test $? = 1 } t-has-ancestor () { local now=`git rev-parse HEAD` local ancestor=`git rev-parse $1^{}` local mbase=`t-git-merge-base $ancestor $now` if [ x$mbase != x$ancestor ]; then fail "not ff $ancestor..$now, $mbase != $ancestor" fi } t-prep-newpackage () { t-select-package $1 v=$2 t-archive-none $p t-git-none t-worktree $v cd $p if ! git show-ref --verify --quiet refs/heads/master; then git branch -m dgit/sid master git remote rm dgit fi cd .. } t-archive-none () { t-select-package $1 mkdir -p $tmp/aq $tmp/mirror/pool/main local suite=sid >$tmp/aq/package.$suite.$p t-archive-updated $suite $p >$tmp/aq/package.new.$p t-archive-updated new $p ln -s sid $tmp/aq/dsc_in_suite/unstable cat <<'END' >$tmp/aq/suites [ { "archive" : "ftp-master", "codename" : "sid", "components" : [ "main", "contrib", "non-free" ], "name" : "unstable", "dakname" : "unstable" } ] END } t-archive-updated () { local suite=$1 local p=$2 local suitedir=$tmp/aq/dsc_in_suite/$suite mkdir -p $suitedir perl <$tmp/aq/package.$suite.$p >$suitedir/$p -wne ' use JSON; use strict; our @v; m{^(\S+) (\w+) ([^ \t/]+)/(\S+)} or die; push @v, { "version" => "$1", "sha256sum" => "$2", "component" => "$3", "filename" => "$4", }; END { print to_json \@v or die $!; } ' } t-archive-process-incoming () { local suite=$1 mv $tmp/incoming/${p}_${v}[._]* $tmp/mirror/pool/main/ t-archive-query "$suite" } t-archive-query () { local suite=${1-sid} local dscf=main/${p}_${v}.dsc local sha=`sha256sum <$tmp/mirror/pool/$dscf` echo "${v} ${sha% -} $dscf" >>$tmp/aq/package.$suite.${p} t-archive-updated $suite $p } t-archive () { t-archive-none $1 v=$2 local dscf=${p}_$2.dsc rm -f $tmp/mirror/pool/main/${p}_* ln $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/pool/main/ t-archive-query rm -rf $tmp/extract mkdir $tmp/extract (set -e; cd $tmp/extract; dpkg-source -x ../mirror/pool/main/$dscf) } t-git-dir-time-passes () { touch -d 'last year' $dgitrepo } t-git-dir-check () { local gitdir=$dgitrepo case "$1" in enoent) if test -e "$gitdir"; then fail "$gitdir exists"; fi return ;; public) wantstat='7[75]5' ;; secret) wantstat='7[70]0' ;; *) fail "$1 t-git-dir-check ?" ;; esac gotstat=`stat -c%a $gitdir` case "$gotstat" in *$wantstat) return ;; *) fail "$gitdir has mode $gotstat, expected $wantstat" ;; esac } t-rm-dput-dropping () { rm -f $tmp/${p}_${v}_*.upload } t-dgit () { local dgit=${DGIT_TEST-dgit} pwd : ' {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{' $dgit --dgit=$dgit --dget:-u --dput:--config=$tmp/dput.cf \ -dtest-dummy $DGIT_TEST_OPTS $DGIT_TEST_DEBUG \ -k39B13D8A "$@" : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ' } t-diff-nogit () { diff --exclude=.git --exclude=.pc -ruN $* } t-files-notexist () { local f for f in "$@"; do if [ -e $f ]; then fail "$f exists!" fi done } t-cloned-fetched-good () { t-diff-nogit ../extract/$p-${v%-*} . t-clean-on-branch dgit/sid t-refs-same-start t-refs-same \ refs/heads/dgit/sid \ refs/remotes/dgit/dgit/sid t-refs-notexist refs/dgit/unstable refs/remotes/dgit/dgit/unstable } t-output () { printf "%s\n" "$1" >$tmp/t.want shift "$@" >$tmp/t.got diff $tmp/t.want $tmp/t.got } t-clean-on-branch () { t-output "## $1" git status -b --porcelain } t-git-get-ref-exact () { local ref=$1 # does not dereference, unlike t-git-get-ref case "$ref" in refs/*) ;; *) fail "t-git-get-ref-exact bad $ref" ;; esac git for-each-ref --format='%(objectname)' "[r]efs/${ref#refs/}" } t-git-get-ref () { local ref=$1 case "$ref" in refs/*) ;; *) fail "t-git-get-ref bad $ref" ;; esac (git show-ref -d $1 || test $? = 1) | perl -ne ' $x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#; END { print "$x\n" if length $x; } ' } t-ref-same-exact () { local name="$1" local val=`t-git-get-ref-exact $name` t-ref-same-val "$name" $val } t-ref-same () { local name="$1" local val=`t-git-get-ref $name` t-ref-same-val "$name" $val } t-ref-head () { local val=`git rev-parse HEAD` t-ref-same-val HEAD $val } t-ref-same-val () { local name="$1" local val=$2 case "$t_ref_val" in '') ;; "$val") ;; *) fail "ref varies: $name: $val != $t_ref_val" ;; esac t_ref_val="$val" } t-refs-same-start () { t_ref_val='' } t-refs-same () { local g for g in $*; do t-ref-same $g done } t-refs-notexist () { local val for g in $*; do val=`t-git-get-ref $g` if [ "x$val" != x ]; then fail "ref $g unexpectedly exists ($val)" fi done } t-v-tag () { echo refs/tags/test-dummy/${v//\~/_} } t-check-pushed-master () { local master=`t-git-get-ref refs/heads/master` if [ x$master = x$t_ref_val ]; then return; fi if [ x$master = x ]; then fail "failed to push master"; fi # didn't update master, it must be not FF local mbase=`t-git-merge-base $master $t_ref_val` if [ x$mbase = x$master ]; then fail "failed to ff master"; fi } t-pushed-good () { local branch=$1 t-ref-dsc-dgit t-refs-same \ refs/heads/$branch \ `t-v-tag` \ refs/remotes/dgit/dgit/sid t-refs-notexist \ refs/heads/dgit/unstable \ refs/remotes/dgit/dgit/unstable (set -e; cd $dgitrepo t-refs-same \ refs/dgit/sid \ `t-v-tag` ${t_check_pushed_master:- : NOT-DRS-NO-CHECK-PUSHED-MASTER} t-refs-notexist \ refs/dgit/unstable ) git verify-tag `t-v-tag` } t-commit-build-push-expect-log () { local msg=$1 local mpat=$2 t-commit "$msg" t-dgit build LC_MESSAGES=C \ t-dgit push --new 2>&1 |tee $tmp/push.log t-grep-mpat "$mpat" $tmp/push.log } t-822-field () { local file=$1 local field=$2 perl -e ' use Dpkg::Control::Hash; my $h = new Dpkg::Control::Hash allow_pgp=>1; $h->parse(\*STDIN,"'"$file"'"); my $val = $h->{"'$field'"},"\n"; die "'"$file $field"'" unless defined $val; print $val,"\n"; ' <$file } t-stunt-envvar () { local var=$1 local tstunt=$2 eval ' case "'$var'" in "$tstunt:"*) ;; *":$tstunt:"*) ;; *) '$var'="$tstunt:$'$var'" ;; esac ' } t-tstunt () { local tstunt=$tmp/tstunt t-stunt-envvar PATH $tstunt t-stunt-envvar PERLLIB $tstunt local f for f in "$@"; do f="./$f" local d="$tstunt/${f%/*}" mkdir -p $d ln -sf "$troot/tstunt/$f" "$d"/. done } t-tstunt-parsechangelog () { t-tstunt dpkg-parsechangelog Dpkg/Changelog/Parse.pm } t-ref-dsc-dgit () { local dsc=${p}_${v}.dsc local val=`t-822-field $tmp/incoming/$dsc Dgit` perl -e '$_=shift @ARGV; die "$dsc Dgit $_ ?" unless m/^\w+\b/;' "$val" t-ref-same-val $dsc "$val" } t-apply-diff () { local v1=$1 local v2=$2 (cd $troot/pkg-srcs; debdiff ${p}_${v1}.dsc ${p}_${v2}.dsc || test $? = 1) \ | patch -p1 -u } t-commit () { local msg=$1 v=${2-1.$revision} dch -v$v --distribution unstable "$1" git add debian/changelog debcommit revision=$(( ${revision-0} + 1 )) } t-git-config () { git config --global "$@" } t-drs () { export DGIT_TEST_TROOT=$troot t-git-config dgit-distro.test-dummy.git-url "ext::$troot/drs-git-ext %S " t-git-config dgit-distro.test-dummy.git-check true t-git-config dgit-distro.test-dummy.git-create true cp $troot/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/. cp $troot/suites $tmp/. cp $troot/suites $tmp/suites-master export t_check_pushed_master=t-check-pushed-master drs_dispatch=$tmp/distro=test-dummy mkdir $drs_dispatch if [ "x$DGIT_TEST_INTREE" != x ]; then ln -sf "$DGIT_TEST_INTREE" $drs_dispatch/dgit-live fi ln -sf $tmp/git $drs_dispatch/repos ln -sf $tmp/suites $tmp/suites-master $tmp/dm.txt $drs_dispatch/ mkdir -p $drs_dispatch/keyrings ln -sf $tmp/dd.gpg $drs_dispatch/keyrings/debian-keyring.gpg ln -sf $tmp/dm.gpg $drs_dispatch/keyrings/debian-maintainers.gpg ln -sf /bin/true $drs_dispatch/policy-hook } t-dsd () { t-drs t-git-config dgit-distro.test-dummy.ssh "$troot/dsd-ssh" t-git-config dgit-distro.test-dummy.git-check ssh-cmd t-git-config dgit-distro.test-dummy.git-create true t-git-config dgit-distro.test-dummy.git-url \ "ext::$troot/dsd-ssh X %S /dgit/test-dummy/repos" t-git-config dgit-distro.test-dummy.diverts.drs /drs t-git-config dgit-distro.test-dummy/drs.ssh "$troot/ssh" t-git-config dgit-distro.test-dummy/drs.git-url $tmp/git t-git-config dgit-distro.test-dummy/drs.git-check ssh-cmd t-git-config dgit-distro.test-dummy/drs.git-create ssh-cmd echo 'no-such-package* drs' >$drs_dispatch/diverts } t-policy-admin () { ${DGIT_INFRA_PFX}dgit-repos-admin-debian --repos $tmp/git "$@" } t-policy-nonexist () { ln -sf no-such-file-or-directory $drs_dispatch/policy-hook } t-make-hook-link () { local hook=$1 # in infra/ local linkpath=$2 hook=${DGIT_INFRA_PFX}$hook case $hook in */*) ;; *) hook=`type -P $hook` ;; esac ln -sf "$hook" $linkpath } t-policy () { local policyhook=$1 t-make-hook-link $policyhook $drs_dispatch/policy-hook } t-debpolicy () { t-dsd t-policy dgit-repos-policy-debian mkdir $tmp/git t-policy-admin create-db } t-policy-periodic () { ${DGIT_REPOS_SERVER_TEST-dgit-repos-server} \ test-dummy $drs_dispatch '' --cron } t-restrict () { local restriction=$1 (cd $root; t-restriction-$restriction >&2) } t-dependencies () { : "Hopefully installed: $*" } t-chain-test () { local ct=$1 local d=${0%/*} cd $root export DGIT_TEST_TESTNAME="$testname" export ADTTMP=$tmp exec "$d/$ct" } t-alt-test () { local t=${0##*/} t-${t%%-*} t-chain-test "${t#*-}" } dgit/tests/ssh0000775000000000000000000000007312524061471010564 0ustar #!/bin/sh set -e cd / userhost="$1"; shift exec sh -c "$*" dgit/tests/tests/0000775000000000000000000000000012566064472011215 5ustar dgit/tests/tests/mirror-debnewgit0000775000000000000000000000040012564114317014405 0ustar #!/bin/bash set -e . tests/lib . $troot/lib-mirror t-dependencies rsync t-debpolicy t-archive pari-extra 3-1 t-git-none t-mirror-setup t-dgit clone $p cd $p t-cloned-fetched-good t-commit 'test commit' 3-2 t-dgit build t-dgit push t-check-mirrored dgit/tests/tests/clone-gitnosuite0000775000000000000000000000017012550053442014415 0ustar #!/bin/bash set -e . tests/lib t-archive pari-extra 3-1 t-git-none cp -a $tmp/git/_template $dgitrepo t-dgit clone $p dgit/tests/tests/drs-push-masterupdate0000775000000000000000000000155612550053442015377 0ustar #!/bin/bash set -e . tests/lib t-drs t-tstunt-parsechangelog t-prep-newpackage example 1.0 cd $p git tag common-ancestor revision=1 t-dgit build t-dgit push --new push_and_check () { git push $dgitrepo $1 oldmaster=`cd $dgitrepo && t-git-get-ref refs/heads/master` t-refs-same-start git checkout master t-commit 'Empty update' t-dgit build t-dgit push --new t-pushed-good master } t-check-master-undisturbed () { local master=`t-git-get-ref refs/heads/master` if [ x$master != x$oldmaster ]; then fail "bad update to master"; fi } t_check_pushed_master=t-check-master-undisturbed git checkout -b divergent common-ancestor git commit --allow-empty -m 'Has common ancestor' git push $dgitrepo HEAD:master push_and_check HEAD:master git checkout --orphan newroot git commit --allow-empty -m 'Has no common ancestor' push_and_check +HEAD:master echo done. dgit/tests/tests/push-buildproductsdir0000775000000000000000000000053612536072326015500 0ustar #!/bin/bash set -e . tests/lib t-archive pari-extra 3-1 t-git pari-extra 3-1 t-dgit clone $p cd $p t-cloned-fetched-good v=3-2~dummy1 t-apply-diff 3-1 $v debcommit -a t-refs-same-start t-ref-head t-dgit --dpkg-buildpackage:-d build cd .. mkdir bpd mv $p*_* bpd/ cd $p t-dgit --build-products-dir=../bpd push t-pushed-good dgit/sid echo ok. dgit/tests/tests/push-newpackage0000775000000000000000000000064212547254261014223 0ustar #!/bin/bash set -e . tests/lib t-prep-newpackage pari-extra 3-1 cd $p t-refs-same-start t-ref-head t-expect-push-fail 'package appears to be new in this suite' \ t-dgit push t-dgit build git checkout bogus set +e (set -e; DGIT_TEST_DEBUG=' ' t-dgit push --new) rc=$? set -e if [ $rc = 0 ]; then fail "push succeeded when tree mismatch"; fi git checkout master t-dgit push --new t-pushed-good master echo ok. dgit/tests/tests/clone-nogit0000775000000000000000000000042212536072326013351 0ustar #!/bin/bash set -e . tests/lib t-archive pari-extra 3-1 t-git-none t-dgit clone $p cd $p t-cloned-fetched-good v=3-2~dummy1 t-apply-diff 3-1 $v debcommit -a t-refs-same-start t-ref-head t-dgit --dpkg-buildpackage:-d build t-dgit push t-pushed-good dgit/sid echo ok. dgit/tests/tests/test-list-uptodate0000775000000000000000000000031012564114317014700 0ustar #!/bin/bash set -e . tests/lib : "just verifies internal consistency of test suite" cd $root $troot/enumerate-tests gencontrol >$tmp/control-expected diff debian/tests/control $tmp/control-expected dgit/tests/tests/dsd-divert0000775000000000000000000000020412547254261013200 0ustar #!/bin/bash set -e . tests/lib t-dsd rm $drs_dispatch/repos echo '* drs' >>$drs_dispatch/diverts t-chain-test fetch-somegit-notlast dgit/tests/tests/trustingpolicy-replay0000775000000000000000000000327412564114317015532 0ustar #!/bin/bash set -e . tests/lib t-tstunt-parsechangelog t-dsd t-policy dgit-repos-policy-trusting t-prep-newpackage example 1.0 cd $p revision=1 git tag start t-dgit build t-dgit push --new t-commit 'Prep v1.1 which will be rewound' t-dgit build t-dgit push t-rm-dput-dropping git checkout test-dummy/1.0 t-dgit build t-dgit push --deliberately-fresh-repo remote="`git config dgit-distro.test-dummy.git-url`/$p.git" t-expect-push-fail 'Replay of previously-rewound upload' \ git push "$remote" \ test-dummy/1.1 \ test-dummy/1.1~0:refs/dgit/sid git checkout master : "More subtle replay prevention checks" prepare-replay () { delib=$1 # We have to stop the pushes succeeding because if they work they # record the tag, which prevents the replays. We are simulating # abortive pushes (since we do want to avoid a situation where # dangerous old signed tags can exist). t-policy-nonexist t-commit "request with $delib that we will replay" t-dgit build t-expect-push-fail 'system: No such file or directory' \ t-dgit push $delib t-policy dgit-repos-policy-trusting replayv=$v } attempt-replay () { local mpat=$1 git show test-dummy/$replayv | grep -e $delib t-expect-push-fail "$mpat" \ git push "$remote" \ test-dummy/$replayv \ +test-dummy/$replayv~0:refs/dgit/sid } prepare-replay --deliberately-fresh-repo # simulate some other thing that we shouldn't delete git push $dgitrepo +master:refs/heads/for-testing attempt-replay 'does not declare previously heads/for-testing' prepare-replay --deliberately-not-fast-forward t-commit 'later version to stop not fast forward rewinding' t-dgit build t-dgit push attempt-replay "does not declare previously tags/test-dummy/$v" echo ok. dgit/tests/tests/fetch-localgitonly0000775000000000000000000000027312536072326014726 0ustar #!/bin/bash set -e . tests/lib t-archive pari-extra 3-2~dummy1 t-git-none t-worktree 3-1 cd $p old=`git rev-parse HEAD` t-dgit pull t-cloned-fetched-good t-has-ancestor $old echo ok. dgit/tests/tests/mirror-private0000775000000000000000000000044512564114317014120 0ustar #!/bin/bash set -e . tests/lib . $troot/lib-mirror t-dependencies rsync t-debpolicy t-tstunt-parsechangelog t-prep-newpackage example 1.0 t-mirror-setup cd $p revision=1 t-reporefs master t-dgit build t-dgit push --new t-check-not-mirrored t-files-notexist $reposmirror/$p.* echo ok. dgit/tests/tests/fetch-somegit-notlast0000775000000000000000000000025012536072326015352 0ustar #!/bin/bash set -e . tests/lib t-git pari-extra 3-1 t-archive pari-extra 3-2~dummy1 t-dgit clone $p cd $p t-cloned-fetched-good t-has-ancestor debian/3-1 echo ok. dgit/tests/tests/quilt0000775000000000000000000000174112565617123012300 0ustar #!/bin/bash set -e . tests/lib t-archive ruby-rails-3.2 3.2.6-1 t-git-none mkdir -p incoming cd incoming t-worktree test cd .. t-dgit clone $p cd $p t-cloned-fetched-good git fetch $tmp/incoming/$p dgit/sid:incoming dummy=0 iteration () { dummy=$(( $dummy + 1)) v=3.2.6-2~dummy${dummy} t-refs-same-start t-dgit --dpkg-buildpackage:-d build t-dgit push t-pushed-good dgit/sid } git cherry-pick -x incoming~1; iteration git cherry-pick -x incoming~0; iteration git fetch $tmp/incoming/$p incoming-branch:branch git checkout branch git rebase --onto dgit/sid incoming git checkout dgit/sid git merge branch iteration diff <some-file git add some-file git commit -m some-file taint=`git rev-parse HEAD` t-policy-admin taint --global $taint dummy git reset --hard HEAD~ t-commit 'Make something to autotaint' t-dgit build t-dgit push --new autotaint=`t-git-get-ref "refs/tags/test-dummy/$v"` git reset --hard start t-commit 'Thing which will autotaint' t-dgit build fifo=$tmp/sqlite-cmds mkfifo $fifo exec 3<>$fifo sqlite3 -interactive $tmp/git/policy.sqlite3 0<$fifo 3>&- & sqlite3_pid=$! taintsout=$tmp/sqlite3.taints-out echo >&3 'begin;'; echo >&3 ".output $taintsout" echo >&3 'select * from taints;'; echo >&3 'create table dummy (x text);' t-dgit build while ! grep $taint $taintsout; do sleep 0.1; done DGIT_RPD_TEST_DBLOOP_HOOK=' print STDERR "DBLOOP HOOK $sleepy\n"; $poldbh->sqlite_busy_timeout(500); if ($sleepy > 2) { system '\'' set -ex echo >'"$fifo"' "rollback;" touch '"$tmp/sqlite3.rolled-back"' '\'' and die "$? $!"; } ' \ t-dgit push --deliberately-not-fast-forward exec 3>&- wait $sqlite3_pid ls $tmp/sqlite3.rolled-back t-policy-admin list-taints | tee $tmp/taints-list | grep $autotaint echo ok. dgit/tests/tests/build-modes-sbuild0000775000000000000000000000154512564114317014624 0ustar #!/bin/bash set -e . tests/lib . $troot/lib-build-modes t-dependencies sbuild t-restrict x-dgit-schroot-build arch=$(dpkg-architecture -qDEB_BUILD_ARCH) after-hook () { # sbuild likes to run the package clean target in the chroot, # which isn't necessary in our case. We don't disable it in # dgit because we want to do what sbuild does, in case there # are packages which don't build unless their clean target was # run. We know it must be running it in the chroot because we # provide sbuild with the dsc, not the tree, so we simply # ignore all executions of the clean target by schroot. sed ' s/^EXAMPLE RULES TARGET clean/HOOK SUPPRESSED &/; ' ../example_1.0_$arch.build >>$bmlog } bm_quirk_after_act=after-hook bm-prep act="sbuild -c build" real_act="$act --no-arch-all" e_source=true e_targets='build-arch binary-arch' bm-act-iterate echo ok. dgit/tests/tests/drs-push-rejects0000775000000000000000000001021412550053442014327 0ustar #!/bin/bash set -e . tests/lib t-drs t-git-none t-select-package pari-extra t-worktree drs cd $p mustfail () { local mpat="$1"; shift t-expect-push-fail "$mpat" \ git push origin "$@" } mustsucceed () { t-reporefs pre-push git push origin "$@" t-reporefs post-push if diff $tmp/show-refs.{pre,post}-push >$tmp/show-refs.diff; then fail "no refs updated" fi } prep () { local suite=$1 local csuite=$2 cp $tmp/masters/* $tmp/. tag_signer='-u Senatus' tag_message="$p release $version for $suite ($csuite) [dgit]" tag_name=test-dummy/$version push_spec1="HEAD:refs/dgit/$csuite" push_spec2="refs/tags/$tag_name" push_spec="$push_spec1 $push_spec2" } mktag () { git tag -f $tag_signer -m "$tag_message" $tag_name "$@" } mkdir $tmp/masters cp $tmp/d[dm].* $tmp/masters version=3-2_dummy1 prep unstable sid tag_signer='-a' mktag mustfail 'missing signature' $push_spec git cat-file tag $tag_name >goodtag for h in object type tag; do for how in missing dupe; do case $how in missing) perl -pe 's/^tag /wombat$&/ if 1..m/^$/' badtag ;; dupe) perl -pe 'print if 1..m/^$/ and m/^'$h' /' badtag ;; esac rm -f badtag.asc gpg --detach-sign --armor -u Senatus badtag cat badtag.asc >>badtag set +e LC_MESSAGES=C git hash-object -w -t tag badtag >badtag.hash 2>badtag.err rc=$? set -e if [ $rc = 128 ] && grep 'fatal: corrupt tag' badtag.err; then continue elif [ $rc != 0 ]; then cat badtag.err fail "could not make tag" fi read $tmp/suites mustfail 'unknown suite' $push_spec cp $root/tests/suites $tmp/. # fixme: # or reject "command string not understood"; # reject "unknown method" unless $mainfunc; prep unstable sid mktag cp $tmp/dm.gpg $tmp/dd.gpg mustfail 'key not found in keyrings' $push_spec prep unstable sid mktag HEAD~ mustfail 'tag refers to wrong commit' $push_spec prep unstable sid mktag HEAD~: mustfail 'tag refers to wrong kind of object' $push_spec prep unstable sid tag_name=test-dummy/wombat mktag #git update-ref test-dummy/$version test-dummy/wombat mustfail 'tag name in tag is wrong' \ refs/tags/test-dummy/wombat:refs/tags/test-dummy/$version $push_spec1 prep unstable sid mktag mustsucceed $push_spec # succeeds mktag mustfail 'push is missing head ref update' $push_spec1 +$push_spec2 git commit --allow-empty -m 'Dummy update' mktag mustfail 'not replacing previously-pushed version' +$push_spec1 +$push_spec2 git reset --hard HEAD~ prep_dm_mangle () { prep unstable sid perl -i.bak -pe ' next unless m/^fingerprint: 3A82860837A0CD32/i../^$/; ' -e "$1" $tmp/dm.txt tag_signer='-u Populus' mktag } git commit --amend --message 'Make it not a fast forward' version=3-2_dummy2 prep unstable sid mktag mustfail 'not fast forward on dgit branch' +$push_spec1 +$push_spec2 git checkout v2 version=3-2_dummy2 prep_dm_mangle '' perl -i.bak -ne 'print if 1..s/(pari-extra).*\n/$1/' $tmp/dm.txt mustfail '' $push_spec # malformed (truncated) dm.txt; don't care about msg prep_dm_mangle 's/allow:/asponge:/i' mustfail 'missing Allow section in permission' $push_spec prep_dm_mangle 's/\bpari-extra\b/sponge/i' mustfail "package $p not allowed for key" $push_spec prep_dm_mangle 'y/0-9/5-90-4/ if m/^fingerprint:/i' mustfail "not in permissions list although in keyring" $push_spec prep_dm_mangle '' mustsucceed $push_spec # succeeds echo ok. dgit/tests/tests/dsd-clone-nogit0000775000000000000000000000005212547254261014122 0ustar #!/bin/bash set -e . tests/lib t-alt-test dgit/tests/tests/push-nextdgit0000775000000000000000000000043412536072326013741 0ustar #!/bin/bash set -e . tests/lib t-archive pari-extra 3-1 t-git pari-extra 3-1 t-dgit clone $p cd $p t-cloned-fetched-good v=3-2~dummy1 t-apply-diff 3-1 $v debcommit -a t-refs-same-start t-ref-head t-dgit --dpkg-buildpackage:-d build t-dgit push t-pushed-good dgit/sid echo ok. dgit/tests/tests/distropatches-reject0000775000000000000000000000273412566064472015277 0ustar #!/bin/bash set -e . tests/lib t-archive ruby-rails-3.2 3.2.6-1 t-git-none cp $troot/pkg-srcs/${p}_3.2.6.orig.tar.gz . t-worktree test cd $p t-dgit --quilt=smash -wgf quilt-fixup build () { t-dgit -wg --dpkg-buildpackage:-d build } expect-fail-distro-series () { local why=$1; shift t-expect-fail \ E:"Found active distro-specific series file.*(.*$why.*)" \ "$@" } mkdir -p debian/patches cat >debian/patches/boo <<'END' Description: add boo Author: Ian Jackson --- --- a/boo +++ b/boo @@ -0,0 +1 @@ +content END echo boo >debian/patches/test-dummy.series git add debian/patches/boo git add debian/patches/test-dummy.series t-commit 'Add boo (on test-dummy)' 3.2.6-2 expect-fail-distro-series 'distro being accessed' \ build defaultvendor=$(perl -we ' use Dpkg::Vendor; print lc Dpkg::Vendor::get_current_vendor ') git mv debian/patches/test-dummy.series \ debian/patches/$defaultvendor.series t-commit 'Move boo (to default vendor)' 3.2.6-3 expect-fail-distro-series 'current vendor' \ build git mv debian/patches/$defaultvendor.series \ debian/patches/test-dummy-aside.series t-commit 'Move boo (to test-dummy-aside)' 3.2.6-4 build DEB_VENDOR=test-dummy-aside \ expect-fail-distro-series DEB_VENDOR \ t-dgit push t-dgit push cd .. perl -i~ -pe 's/^Dgit:.*\n//' incoming/${p}_${v}.dsc t-archive-process-incoming sid rm -rf $p DEB_VENDOR=test-dummy-aside \ expect-fail-distro-series DEB_VENDOR \ t-dgit clone $p echo done. dgit/tests/tests/dsd-clone-drs0000775000000000000000000000031312564114317013566 0ustar #!/bin/bash set -e . tests/lib t-restrict x-dgit-intree-only t-restrict x-dgit-git-only t-dsd cd $tmp t-dgit clone-dgit-repos-server drs-cloned cd drs-cloned ls -al infra/dgit-repos-server echo ok. dgit/tests/tests/build-modes-gbp0000775000000000000000000000116112564114317014104 0ustar #!/bin/bash set -e . tests/lib . $troot/lib-build-modes t-dependencies git-buildpackage quirk-clean-fixup () { case $cleanmode in dpkg-source*) # git-buildpackage runs the clean target twice somehow perl -i.unfixed -ne ' print unless $_ eq $last && $_ eq "EXAMPLE RULES TARGET clean\n"; $last = $_; ' $bmgot ;; esac } bm_quirk_before_diff=quirk-clean-fixup bm-prep for act in \ 'gbp-build -S' \ 'gbp-build -b' \ 'gbp-build -B' \ 'gbp-build -A' \ 'gbp-build -F' \ ; do bm-guess-e-source-e-targets "$act" real_act="$act --git-ignore-branch" bm-act-iterate done echo ok. dgit/tests/tests/drs-clone-nogit0000775000000000000000000000005212547254261014140 0ustar #!/bin/bash set -e . tests/lib t-alt-test dgit/tests/tests/tag-updates0000775000000000000000000000105612550053442013347 0ustar #!/bin/bash set -e . tests/lib t-tstunt-parsechangelog t-prep-newpackage example 1.0 cd $p revision=1 t-dgit build t-dgit push --new tagref=`t-v-tag` tagname=${tn#refs/tags} (set -e cd $dgitrepo git tag -m UNWANTED unwanted dgit/sid) fetch-check () { t-dgit fetch t-ref-same-exact $tagref t-refs-notexist refs/tags/unwanted git rev-parse refs/dgit-fetch/sid/tags/unwanted } t-ref-same-exact $tagref fetch-check git tag -d $tagname fetch-check git tag -f -m BOGUS $tagname HEAD t-refs-same-start t-ref-same-exact $tagref fetch-check echo done. dgit/tests/tests/rpush0000775000000000000000000000064512555253402012300 0ustar #!/bin/bash set -e . tests/lib t-archive pari-extra 3-1 t-git pari-extra 3-1 t-dgit clone $p cd $p t-cloned-fetched-good v=3-2~dummy1 t-apply-diff 3-1 $v debcommit -a t-refs-same-start t-ref-head t-dgit --dpkg-buildpackage:-d build mkdir $tmp/empty cd $tmp/empty #t-dgit --ssh=$troot/ssh rpush somehost:$troot/$p #echo $? t-dgit --ssh=$troot/ssh rpush somehost:$tmp/$p cd $tmp/$p t-pushed-good dgit/sid echo ok. dgit/tests/tests/mirror0000775000000000000000000000227112564114317012447 0ustar #!/bin/bash set -e . tests/lib . $troot/lib-mirror t-dependencies rsync t-drs : ---- "basic test" ---- t-tstunt-parsechangelog t-prep-newpackage example 1.0 t-mirror-setup cd $p revision=1 t-dgit build t-dgit push --new t-check-mirrored : ---- "stunt ssh test" ---- sentinel=$tmp/stunt-ssh-sentinel cat <$tmp/stunt-ssh #!/bin/sh set -ex : $sentinel cat >&2 $sentinel shift # eat HOST sh -c "\$*" END chmod +x $tmp/stunt-ssh t-mirror-set rsyncssh=$tmp/stunt-ssh t-mirror-set remoterepos=HOST:$reposmirror # mirror should fail due to lack of stunt-ssh-sentinel t-commit-build-push-expect-log "stunt ssh test" \ E:'mirror hook failed: .*exited' ls -al $queuedir/$p.a t-check-not-mirrored touch $sentinel t-mirror-hook backlog t-check-mirrored : ----- "stall timeout test" ----- rm -f $sentinel mkfifo $sentinel t-mirror-set hooktimeout=5 t-commit-build-push-expect-log "stall timeout test" \ E:'mirror hook failed: .*timeout' t-check-not-mirrored exec 3<>$sentinel exec 3>&- attempts=100 while [ -f $queuedir/$p.lock ]; do if [ $attempts = 0 ]; then \ fail "timed out waiting for lock to go away" fi attempts=$(( $attempts - 1 )) sleep 0.1 done t-check-mirrored echo done. dgit/tests/tests/build-modes0000775000000000000000000000067012564114317013342 0ustar #!/bin/bash set -e . tests/lib . $troot/lib-build-modes bm-prep for act in \ 'build' \ 'build -S' \ 'build -b' \ 'build -B' \ 'build -A' \ 'build -F' \ build-source \ ; do bm-guess-e-source-e-targets "$act" case $act in build-source) e_source=true e_targets='' cleanmodes="$cleanmodes_all" ;; *) cleanmodes="$cleanmodes_default" ;; esac real_act="$act" bm-act-iterate done echo ok. dgit/tests/tests/debpolicy-newreject0000775000000000000000000000510612550053442015067 0ustar #!/bin/bash set -e . tests/lib t-tstunt-parsechangelog t-debpolicy t-prep-newpackage example 1.0 cd $p revision=1 git tag start t-dgit setup-mergechangelogs echo FORBIDDEN >debian/some-file git add debian/some-file t-commit 'Commit a forbidden thing' bad=`git rev-parse HEAD:debian/some-file` t-policy-admin taint --global "$bad" "forbidden for testing" t_expect_push_fail_hook+=' t-git-objects-not-present "" $bad ' t-dgit build t-expect-push-fail 'forbidden for testing' \ t-dgit push --new t-git-dir-check enoent git reset --hard start t-commit 'will vanish from NEW' vanished=$v t-dgit build t-dgit push --new t-git-dir-check secret t-policy-periodic t-git-dir-check secret # pretend it vanished from new: rm $tmp/incoming/* t-archive-none example t-git-dir-time-passes t-policy-periodic t-git-dir-check enoent t-commit 'should require --deliberately...questionable' t-dgit build t-expect-push-fail E:"tag test-dummy/${vanished//./\\.} referred to this object.*all previously pushed versions were found to have been removed" \ t-dgit push --new t-git-dir-check enoent vanished=$v t-dgit push --new --deliberately-include-questionable-history t-git-dir-check secret t-policy-periodic t-git-dir-check secret t-archive-process-incoming new t-git-dir-time-passes t-policy-periodic t-git-dir-check secret oldobj=`git rev-parse HEAD` git reset --hard start t-commit 'should require --deliberately..not-ff' t-dgit build t-expect-push-fail "HEAD is not a descendant of the archive's version" \ t-dgit push t-expect-push-fail \ "Package is in NEW and has not been accepted or rejected yet" \ t-dgit --deliberately-TEST-dgit-only-not-fast-forward push t-dgit --deliberately-not-fast-forward push cd $dgitrepo t-expect-push-fail "Not a valid object name" \ git cat-file -p $oldobj cd $tmp/$p t-commit 'Still not accepted, will override taint' t-dgit build t-expect-push-fail \ "Package is in NEW and has not been accepted or rejected yet" \ t-dgit push t-dgit push --deliberately-include-questionable-history t-archive-process-incoming sid t-commit 'Check taint is no longer there' t-dgit build t-dgit push git checkout -b stoats test-dummy/$vanished t-commit 'Simulate accidentally building on rejected version' t-dgit build t-expect-push-fail "HEAD is not a descendant of the archive's version" \ t-dgit push : "check that uploader can't force it now" t-expect-push-fail "not fast forward on dgit branch" \ t-dgit --deliberately-not-fast-forward push t-dgit pull t-dgit build t-expect-push-fail \ 'Reason: rewound suite sid; --deliberately-not-fast-forward specified' \ t-dgit push echo ok. dgit/tests/lib-core0000664000000000000000000000115712550004756011466 0ustar # fail () { echo >&2 "failed: $*" exit 1 } t-set-intree () { if [ "x$DGIT_TEST_INTREE" = x ]; then return; fi : ${DGIT_TEST:=$DGIT_TEST_INTREE/dgit} : ${DGIT_REPOS_SERVER_TEST:=$DGIT_TEST_INTREE/infra/dgit-repos-server} : ${DGIT_SSH_DISPATCH_TEST:=$DGIT_TEST_INTREE/infra/dgit-ssh-dispatch} : ${DGIT_INFRA_PFX:=$DGIT_TEST_INTREE${DGIT_TEST_INTREE:+/infra/}} export DGIT_TEST DGIT_REPOS_SERVER_TEST DGIT_SSH_DISPATCH_TEST export PERLLIB="$DGIT_TEST_INTREE${PERLLIB:+:}${PERLLIB}" } t-set-using-tmp () { export HOME=$tmp export DGIT_TEST_DUMMY_DIR=$tmp export DGIT_TEST_TMP=$tmp export GNUPGHOME=$tmp/gnupg } dgit/tests/worktrees/0000775000000000000000000000000012564114317012070 5ustar dgit/tests/worktrees/ruby-rails-3.2_test.tar0000664000000000000000000064400012547254261016240 0ustar ruby-rails-3.2/0000775000175000017500000000000012432202022011536 5ustar ianianruby-rails-3.2/debian/0000775000175000017500000000000012432202022012760 5ustar ianianruby-rails-3.2/debian/control.in0000664000175000017500000000435312432200232014776 0ustar ianianSource: ruby-rails-3.2 Section: ruby Priority: optional Maintainer: Debian Ruby Extras Maintainers Uploaders: Antonio Terceiro DM-Upload-Allowed: yes Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.3.0~) Standards-Version: 3.9.3 Vcs-Git: git://git.debian.org/pkg-ruby-extras/ruby-rails-3.2.git Vcs-Browser: http://git.debian.org/?p=pkg-ruby-extras/ruby-rails.git;a=summary Homepage: http://www.rubyonrails.org XS-Ruby-Versions: all Package: ruby-rails-3.2 Architecture: all XB-Ruby-Versions: ${ruby:Versions} Depends: ${shlibs:Depends}, ${misc:Depends}, ruby-activesupport-3.2 (>= @RAILS_VERSION@), ruby-activesupport-3.2 (<< @RAILS_VERSION@.), ruby-actionpack-3.2 (>= @RAILS_VERSION@), ruby-actionpack-3.2 (<< @RAILS_VERSION@.), ruby-activerecord-3.2 (>= @RAILS_VERSION@), ruby-activerecord-3.2 (<< @RAILS_VERSION@.), ruby-activeresource-3.2 (>= @RAILS_VERSION@), ruby-activeresource-3.2 (<< @RAILS_VERSION@.), ruby-actionmailer-3.2 (>= @RAILS_VERSION@), ruby-actionmailer-3.2 (<< @RAILS_VERSION@.), ruby-railties-3.2 (>= @RAILS_VERSION@), ruby-railties-3.2 (<< @RAILS_VERSION@.), bundler Description: MVC ruby based framework geared for web application development Rails is a full-stack, open-source web framework in Ruby for writing real-world applications. . Being a full-stack framework means that all layers are built to work seamlessly together. That way you don't repeat yourself and you can use a single language from top to bottom. Everything from templates to control flow to business logic is written in Ruby. . This package provides Rails version 3.2. Package: rails3 Architecture: all Depends: ruby-rails-3.2, ${shlibs:Depends}, ${misc:Depends} Description: MVC ruby based framework geared for web application development Rails is a full-stack, open-source web framework in Ruby for writing real-world applications. . Being a full-stack framework means that all layers are built to work seamlessly together. That way you don't repeat yourself and you can use a single language from top to bottom. Everything from templates to control flow to business logic is written in Ruby. . This package is a convenience metapackage that depends on ruby-rails-3.2. ruby-rails-3.2/debian/copyright0000664000175000017500000000260012432200232014712 0ustar ianianFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: rails Source: https://github.com/rails/rails Files: * Copyright: 2004-2012 David Heinemeier Hansson License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Files: debian/* Copyright: 2012 Antonio Terceiro License: The Debian packaging is licensed under the same terms as the original package. ruby-rails-3.2/debian/changelog0000664000175000017500000000104412432202022014631 0ustar ianianruby-rails-3.2 (3.2.6-2~dummy2) unstable; urgency=low * Change something in the upstream yml. -- Ian Jackson Sun, 24 Nov 2013 16:05:06 +0000 ruby-rails-3.2 (3.2.6-2~dummy1) unstable; urgency=low * Add broken build-dependency, for testing. * Do not use ruby build system when building package. -- Ian Jackson Sun, 24 Nov 2013 16:25:38 +0000 ruby-rails-3.2 (3.2.6-1) unstable; urgency=low * Initial release. -- Antonio Terceiro Sun, 24 Jun 2012 21:16:07 -0300 ruby-rails-3.2/debian/changelog~0000664000175000017500000000022212244425624015044 0ustar ianianruby-rails-3.2 (3.2.6-1) unstable; urgency=low * Initial release. -- Antonio Terceiro Sun, 24 Jun 2012 21:16:07 -0300 ruby-rails-3.2/debian/control0000664000175000017500000000423312432202022014365 0ustar ianianSource: ruby-rails-3.2 Section: ruby Priority: optional Maintainer: Debian Ruby Extras Maintainers Uploaders: Antonio Terceiro DM-Upload-Allowed: yes Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.3.0~), no-such-package Standards-Version: 3.9.3 Vcs-Git: git://git.debian.org/pkg-ruby-extras/ruby-rails-3.2.git Vcs-Browser: http://git.debian.org/?p=pkg-ruby-extras/ruby-rails.git;a=summary Homepage: http://www.rubyonrails.org XS-Ruby-Versions: all Package: ruby-rails-3.2 Architecture: all XB-Ruby-Versions: ${ruby:Versions} Depends: ${shlibs:Depends}, ${misc:Depends}, ruby-activesupport-3.2 (>= 3.2.6), ruby-activesupport-3.2 (<< 3.2.6.), ruby-actionpack-3.2 (>= 3.2.6), ruby-actionpack-3.2 (<< 3.2.6.), ruby-activerecord-3.2 (>= 3.2.6), ruby-activerecord-3.2 (<< 3.2.6.), ruby-activeresource-3.2 (>= 3.2.6), ruby-activeresource-3.2 (<< 3.2.6.), ruby-actionmailer-3.2 (>= 3.2.6), ruby-actionmailer-3.2 (<< 3.2.6.), ruby-railties-3.2 (>= 3.2.6), ruby-railties-3.2 (<< 3.2.6.), bundler, rubygems-integration Description: MVC ruby based framework geared for web application development Rails is a full-stack, open-source web framework in Ruby for writing real-world applications. . Being a full-stack framework means that all layers are built to work seamlessly together. That way you don't repeat yourself and you can use a single language from top to bottom. Everything from templates to control flow to business logic is written in Ruby. . This package provides Rails version 3.2. Package: rails3 Architecture: all Depends: ruby-rails-3.2, ${shlibs:Depends}, ${misc:Depends} Description: MVC ruby based framework geared for web application development Rails is a full-stack, open-source web framework in Ruby for writing real-world applications. . Being a full-stack framework means that all layers are built to work seamlessly together. That way you don't repeat yourself and you can use a single language from top to bottom. Everything from templates to control flow to business logic is written in Ruby. . This package is a convenience metapackage that depends on ruby-rails-3.2. ruby-rails-3.2/debian/rules0000775000175000017500000000003612432200232014040 0ustar ianian#!/usr/bin/make -f %: dh $@ ruby-rails-3.2/debian/control~0000664000175000017500000000421212244425624014600 0ustar ianianSource: ruby-rails-3.2 Section: ruby Priority: optional Maintainer: Debian Ruby Extras Maintainers Uploaders: Antonio Terceiro DM-Upload-Allowed: yes Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.3.0~) Standards-Version: 3.9.3 Vcs-Git: git://git.debian.org/pkg-ruby-extras/ruby-rails-3.2.git Vcs-Browser: http://git.debian.org/?p=pkg-ruby-extras/ruby-rails.git;a=summary Homepage: http://www.rubyonrails.org XS-Ruby-Versions: all Package: ruby-rails-3.2 Architecture: all XB-Ruby-Versions: ${ruby:Versions} Depends: ${shlibs:Depends}, ${misc:Depends}, ruby-activesupport-3.2 (>= 3.2.6), ruby-activesupport-3.2 (<< 3.2.6.), ruby-actionpack-3.2 (>= 3.2.6), ruby-actionpack-3.2 (<< 3.2.6.), ruby-activerecord-3.2 (>= 3.2.6), ruby-activerecord-3.2 (<< 3.2.6.), ruby-activeresource-3.2 (>= 3.2.6), ruby-activeresource-3.2 (<< 3.2.6.), ruby-actionmailer-3.2 (>= 3.2.6), ruby-actionmailer-3.2 (<< 3.2.6.), ruby-railties-3.2 (>= 3.2.6), ruby-railties-3.2 (<< 3.2.6.), bundler, rubygems-integration Description: MVC ruby based framework geared for web application development Rails is a full-stack, open-source web framework in Ruby for writing real-world applications. . Being a full-stack framework means that all layers are built to work seamlessly together. That way you don't repeat yourself and you can use a single language from top to bottom. Everything from templates to control flow to business logic is written in Ruby. . This package provides Rails version 3.2. Package: rails3 Architecture: all Depends: ruby-rails-3.2, ${shlibs:Depends}, ${misc:Depends} Description: MVC ruby based framework geared for web application development Rails is a full-stack, open-source web framework in Ruby for writing real-world applications. . Being a full-stack framework means that all layers are built to work seamlessly together. That way you don't repeat yourself and you can use a single language from top to bottom. Everything from templates to control flow to business logic is written in Ruby. . This package is a convenience metapackage that depends on ruby-rails-3.2. ruby-rails-3.2/debian/watch0000664000175000017500000000013712432200232014013 0ustar ianianversion=3 http://pkg-ruby-extras.alioth.debian.org/cgi-bin/gemwatch/rails .*/rails-(.*).tar.gz ruby-rails-3.2/debian/compat0000664000175000017500000000000212432200232014157 0ustar ianian7 ruby-rails-3.2/debian/source/0000775000175000017500000000000012432200232014261 5ustar ianianruby-rails-3.2/debian/source/format0000664000175000017500000000001412432200232015467 0ustar ianian3.0 (quilt) ruby-rails-3.2/.git/0000775000175000017500000000000012432203747012416 5ustar ianianruby-rails-3.2/.git/ORIG_HEAD0000664000175000017500000000005112432176741013661 0ustar ianian297f18ae7fe0a915f98af65fba63062a7c7a411b ruby-rails-3.2/.git/addp-hunk-edit.diff~0000664000175000017500000000170612244426010016237 0ustar ianian# Manual hunk edit mode -- see bottom for a quick guide @@ -1,3 +1,16 @@ +ruby-rails-3.2 (3.2.6-2~dummy2) unstable; urgency=low + + * Change something in the upstream yml. + + -- Ian Jackson Sun, 24 Nov 2013 16:05:06 +0000 + +ruby-rails-3.2 (3.2.6-2~dummy1) unstable; urgency=low + + * Add broken build-dependency, for testing. + * Do not use ruby build system when building package. + + -- Ian Jackson Sun, 24 Nov 2013 16:25:38 +0000 + ruby-rails-3.2 (3.2.6-1) unstable; urgency=low * Initial release. # --- # To remove '-' lines, make them ' ' lines (context). # To remove '+' lines, delete them. # Lines starting with # will be removed. # # If the patch applies cleanly, the edited hunk will immediately be # marked for staging. If it does not apply cleanly, you will be given # an opportunity to edit again. If all lines of the hunk are removed, # then the edit is aborted and the hunk is left unchanged. ruby-rails-3.2/.git/info/0000775000175000017500000000000012244425622013350 5ustar ianianruby-rails-3.2/.git/info/exclude0000664000175000017500000000036012244425622014723 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ ruby-rails-3.2/.git/dgit/0000775000175000017500000000000012244425624013346 5ustar ianianruby-rails-3.2/.git/objects/0000775000175000017500000000000012432200423014033 5ustar ianianruby-rails-3.2/.git/objects/4d/0000775000175000017500000000000012432145535014356 5ustar ianianruby-rails-3.2/.git/objects/4d/ec3071f193a926a8ba6868c40da95edbf4b4480000444000175000017500000000053412432145535021577 0ustar ianianx¥ËNÜ@E³öWÜåL[~À€&€@ÉÙÀ´íÂÓLw•ÕL¼É·Ç2’³H/Jµ©Ö9§±Òà²<ÿäS3*¯ ªÎ+¬¦‘oTõ»KÎõ‡¨K_‘|OÜŽ7VY|F„{ó"Þa•†=i·Ó/ÆÒ†[‹v§¹'+ýÙñ¦±â÷x?W­pôb!lÇG”ʲEÊj‘òÛAÅá~ÂBÜNÄÍ'!¥ð ºÝa\›×·íŽ~i7XÊ[q·ÀSâ5ªsüŸ¨Š²F¹ÙÛbƒ/ÅôþZ.¢Þw/{b4ÉØNu4wsõ5¦Îˆâ¤S~°D¤@˜ó¼ Œ!’ÃawúdV&ÝÓjVÛújYsÙïM4Ú“%N8÷…à™|KÆ ®ãßí®£ÆhÎÅ÷ïÊ?&žËW¨Êíÿª¨§òÞâruby-rails-3.2/.git/objects/8d/0000775000175000017500000000000012432145540014356 5ustar ianianruby-rails-3.2/.git/objects/8d/bca731ecba7ebe8cf4bf9c6a8a788bd9ac34e90000444000175000017500000000022712432145540022324 0ustar ianianx+)JMU041d01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†­žç k«M®á ÏhÛ&ö¢ßÐÀÀÌÄD!7µ$1%±$Q¯27‡g½¹aßÑV‘޳Þ_˜¸«';(]´‡ª+.ÈÏKÏLË/Êe0Zuãpp»¢y‘9ϳŠ'Ì·å.59œ;7ruby-rails-3.2/.git/objects/2d/0000775000175000017500000000000012244426041014347 5ustar ianianruby-rails-3.2/.git/objects/2d/33f6ac8992b7da84b39a5bca0742c4962d33490000444000175000017500000000005612244426041021430 0ustar ianianxKÊÉOR06`PVÔ/-.ÒOÊÌÓÏMÌNUÐMãâRµââLÉPPqàÏÒ ¸ruby-rails-3.2/.git/objects/68/0000775000175000017500000000000012244425623014304 5ustar ianianruby-rails-3.2/.git/objects/68/57a8d448bcc1e54f65f369c6f4105fb69fd9530000444000175000017500000000003712244425623021466 0ustar ianianxKÊÉOR04eHIMÊLÌÓ/H,IÎH-æZ:ªruby-rails-3.2/.git/objects/3f/0000775000175000017500000000000012432200013014336 5ustar ianianruby-rails-3.2/.git/objects/3f/37e6b94c72ba3ec96fb786c7be519bfe9b87a10000444000175000017500000000022712432200013021740 0ustar ianianx+)JMU041d01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<á¦sçDêŸ:Ñ´õdþeõE¯ÒÕž˜™˜(䦖$¦$–$êUææ0”†:Í—þB}ù6Û„þ0Çi‚!PuÅùyé™iùE¹ F«nnW4/2çyVñ„ù¶Ü¥&gÒ×:òruby-rails-3.2/.git/objects/38/0000775000175000017500000000000012432145413014274 5ustar ianianruby-rails-3.2/.git/objects/38/b2006e159f943aa428e42d5d3d2c92e9428af80000444000175000017500000000050512432145413021350 0ustar ianianx¥»NÃ@E©ó· `[~ƒÂCDÐ$ üÀÚž8 »³Ö>nøvì@$*S°Åjš™{Ï©”©P–Ù‰ U[!•‹‹$Ç|ø’2Î?› u_œ"°ó¢Rt`[⺿Uf?›gpáVnÕ˜‡ÎyKBG`Úc+E\+Ô;Á-)ÓžKq<›M擇[pF“ßIn‡øáŽ^«äƒµ`lDýæ ãF¾~O÷ô!t§(©¾žGÈ/ðdÞ‘§Y¬\¦‹eZâ<ÞU³Éª«¦AeÍ1ª U7Ô7£Àƒ2xr~@H& ØxGõ|¯ÀõΓÆ~w<2"wŠh韘ùbY\McNó­Yz),)îXgÅÞ°4x![“´7þgºo¨’‚cÛ_æ7Gó9òl9Ê¿Dœƒù/¿þÐPruby-rails-3.2/.git/objects/c2/0000775000175000017500000000000012244425623014353 5ustar ianianruby-rails-3.2/.git/objects/c2/e22c7f088f97c0dbc41321c1c61d00524f8e5c0000444000175000017500000000145212244425623021471 0ustar ianianxíUßoÔ8æÙÅ< H[u…¸ -´¥ Ñ;ÔíU¼œdšXu<–ílˆ÷·ßØ»…Ý= û|:i7ŠÆ3ß|ž_*Cþ:{4§Á×X‚ª©ðJ›PÌ䡘c5Ù¥]|𚼎S ä’Yq©´üG_Â9VZY¸b¸ø½ ðí8À‘»k‹Œù°è¿Æ†£C RM±“M’äÛ—âOgH5èC §6’Õ×ÈTµ'8Š«·“õˆóËbTœC#6%LÄÙ MSœ£CÛ0GthzxòòžËùìàï§{ÐbÈgÙz g’b•m”oBqÃDr=fò797u(ÞèXBËý}~®qßߺïþfm%{g€3OcHõëbtÿFyåŽJ /Ôqú^ùI¼¥j¹+¬qeJK6÷4•T|œ©E÷wáZ(c„ø ê»ºISœúºÓ‘ç`ðŒ›\?žm<þœ‚ÊUuÂq_f?‡Îè*”+Ó—½dëu¨×-9§âY[`œ#Óøå&œ\¾{?ÿëæâjþîßOžrüCÞGG°å-7ÜÉ:¾äNÈë®?ƒ] Çš|³ð¦ó.Ð!¯æÎàëî?ƒ'Ë;hÐï¾éü#è4kQc–öpÓñÈj° sä™ µ×YxJ¸¼yÇ*°[¯zÉßñþ*Ÿ äaä5VÎ]«¤V¼ò 4äz´QÀUÒ8ÐÜÆ!òhì±°¡-–%Ìñ߀õJÙ22« ¶-O"*Sp^Ó¬g RÿÎ}6ð×xö¨l€Ø©˜v ŒšXZ€¹CÅB!¤û¨zƒ!˜‰m-ƽ„ë7ª & !ûKd*ÙÈÐÜKV>­•0d"ùä\¶xÕ™ õ êR²Šb¤^Âè»Ä|yŒ½3*"s%5ÙèÉÀ- kޓɡVשœ#—&¢…U¹–•¸îø$í^Êê<-tÀËp¾$©Àû.×U(õgöõ¹—–­OÕÞw”f[hþ!îÙa„òÚò,.Ðj´5BQÝÏWÞ©fù¬Íï™ÿ Ò Ýruby-rails-3.2/.git/objects/c2/067066abee0b40f62b84432394eea39cadb6650000444000175000017500000000002612244425623021472 0ustar ianianxKÊÉOR0g(N-ÊL-æ"ÿŒruby-rails-3.2/.git/objects/31/0000775000175000017500000000000012432167501014267 5ustar ianianruby-rails-3.2/.git/objects/31/f445e8a524805f84f65d9880339cbbeb2b73f40000444000175000017500000000034412432167501021364 0ustar ianianx;NÆ0„©}Ší‘"¿“H€hák{˜;²!8=?%«)¶Í|ã˾§J«»^‰À;é Ô}€Å@dвsL`Ü™i†f&& ¹©%‰)‰%‰z•¹9 ¥áŸNó¥¿P_¾Í6¡?ÌqZ§`FT]qA~^zfZ~Q.ƒÑª‡ƒÛÍ‹ÌyžUJíœÑ,d,þ×*ËS¥sec ·ÈÐú$+¥"ïÿþGˆ\z‰fó(˜­‚y³YÜýà/‘cƒ:G)ìí‚ô~Ùs`=F2ój‹®mc}˜V*M+ß$5Ec#+‡468˰ÄðJå³ÙüpïûXŠÍ‘A£Éûq‘£eztÓnÞÞtâÜ;a’2^sš¸¾”¯~¨ÏÚØæÜmÎ`ÿ<É#€ß7äml[íUÍQÉ$zrûu>¥÷ÔÕŸÁmt#³ÂØ Xwo²pÖÑ3¦®ëè"¬)i˜›ŸîâºÑ]\Œ®3­ÍxœW½w×ïÝEø]Ó' íÙè.¯ÝåÙè25ðô¥<ÙÕu#»:Ù´Õù%%»þ…À~Gùäç¹ÏñO˜Ã|9è<¡zãBóÃt³Cû@næáŒùÊ%taMdÍeV5LVc¸'¦ÄZï™®‚r aÓVUà<ÑØa K|vgìÒ©Õ7ÌX&¹¦ ©šÈd)›†˜¥#mƒkIYiI\Ž…ò–Yžòû>y ŽHg¶,ÐAŠD>YƒÌääÇFnUº ½%êÆtÚP´Üߨ‚ôx(È'S 9“Ú?*Óæ¾TúÃÌÔ¿bÖz6O‰™+~õ¨™†?ö­Lln²dC'Ü0:i–¦Æ†|Œ¡ô¾‰oow»]ÈœÚèŽÖ‡Æ¢R­:j7ÆùDiмª’š èÔEg„q;\ÒH_’e*m¢½bͶ’|Êëž­cZ;¬2½2¥}7pÚ3겿ˆ,×C©ÐÙÆŠ àÍ À(~p{¾ ×Ç1X»ßWÄ7,~þ7®Q¨¿b±ø$®]³ŽQæã¤Ñ–(0¡zïî…ÐͨD‘pªÐTªÉî)ýnzw|h!\[×Ò’ÈŸÇÛ‘¶U^Õ«‹È¥×ãT.û|'¦ÅÈiDruby-rails-3.2/.git/objects/be/0000775000175000017500000000000012244425623014435 5ustar ianianruby-rails-3.2/.git/objects/be/72df0a25cfcbda4253e582d1b9371fe0e62e700000444000175000017500000000155412244425623021717 0ustar ianianxåWKÓ0æì_1ìR²mʶ(ˆâq]$ 9É41›ØÁvZÊßÎL%Ý.¨•84Zmý˜ç7ãäsZ™«(z<¶mº»6éWÌ|üë8þÐ`¦Ö*“^ BËc°RUNlÐ:ZŒÐúØo(¥+cXШ±h±BéÈM5jïºIÐIÑFKú¿·¾£p)šJúµ±59§…l}i,ëðZnTïPi¬Q¡…wR;g4 ‹ßZeÙcªt®l ô+2´>ÉJ©(úÏ_„È¥'‘h6‚Ù2˜G0›ÅÝ|96¨sÔ™ÂÞß1H¯G‘'Öc$3¯6èÚ¦1ÖÓê4ûµ¬ÒÚÃÕÏfóÀ¼íS`)6OŒ¦hG#fz4î^\uâ<;ŽyR"¶9-T??¨O¿ÔWis­Æ1W¬îÕ ÀïŠ6¶­öªæ¬‰d’=…ý´KŸÊyêŸà5º‘ÙY< ÛèÓ„mt¶T$ÌŒÍOFwqÙè.ÎF×™Öf|NëÞg—ï³³ð5º¦Oړѽ¹ltoNF—?ýž¾„'#»¼ld—'#›¶:?§eWÿØŸ/©žü<ôùýS˜ß :÷¨Ühh¾ß`¶ïéÁÕ<œ1?9‡¬ˆŒ¹Ìª†Éh ·ÄXé-ÓQP$¬Ûª œ'Z[Lam‰¯n½C:µú9‹¤W®)h«&²Xʦ!æèH[çàZRVZ¦²PÞ2‹S~Â{Äé- t"‘KEÞ 39ű–c•.hAoˆª1]6”-Ïת =^ ò›)†œIë«Ê´¹/•¾#Å03µÀžÝ%bfŠß=j¦Ù¿çV&67Y²¦7ܰ:–¦Æ†bŒ¡ô¾‰¯¯·ÛmÈœÙ莶‡Æ¢RYµã|¢4e^UIMPtê¢s¸íŒ-i¤/É3µv¥R1¬æ {Iö>æq÷ÈÖ!¬L¯Da_ö„¾ì/7«¡ÕŽèkcGð| `߇=Ÿ‡«Ãœ ¬ÝÿÎ+â?Íkê¯P,>ÉkAרC”¹Á¸ht$ L¨ß»{tk‡I3*Q$œ*4µjr‡;*¿›Þ ´®­kiIäÍáq¤£F×_%÷G3©ÿ&-ü æE\ruby-rails-3.2/.git/objects/82/0000775000175000017500000000000012432145536014301 5ustar ianianruby-rails-3.2/.git/objects/82/a5761751b5e78e10a677674a6afa76adca71610000444000175000017500000000147012432145536021355 0ustar ianianxíUßoÜ6 î³þ >X ÄJp‡n˜—tÍ5E tÁŠ$ ú*ÛŒ-DI>×(º¿}”|iîòkïE;ß"?RÉÏ•¡ ‹Å«gç4øKðC5^iŠ¥\ˆs¬£&;ÛÅ'¯Éë8•@.™•§JÛÈ_ô%œ`¥•…3†€w_¢Wnºë¶Èø˜‹þ{lxctˆA*£)v²É@’|ûZüã ©}(áØF²šà¹Tí ãæß›íˆ“Ób*Ž¡›& b5hÓ'èÐ6 Ƈ^¼>‚ßä|uðïË=h±_ðY¶È¥ÌFKEê®pª¾V-Šó¨l£|ŠK®,´”¿Ë¥¸¬Cñ^ÇZ~ìïósë2ûwØß%[²wXyC"´‹ÑÝGùÓ=”@þPGaè{å'ñzt\ñw¬qeJK679q,>Ÿ©g7war”1B|š/{o&Ž}Ýéȃ1xÆM®ŸWwžMIÊ ;ᛸá]Àó¯¡3º åÆôm/ÙzêmK¦Fñð­1 ΑisWøWþú’£ó9<„ì#wœÈ¦î=²íð0Ä=Öä›'@v]‡ yßþhÛéa(²¼Dý@».÷aÒDyßàw÷x'¼lù7àÅ ‹¶^%qà–‡Úë,%œ^¾Íý‚JlàÊ«Gò×¼oÊ'yyí”sF×€Wt†\6 8Kš:€‚«Á˜"Dîæ Úbæ)ÇßëedV-m[T¦à¼¦ÙΤþ¬}vð·êìQÙ±S1<5ñæ× K„Hî#  ê †`&¶µ;ô.Rܨ&˜h€†ì/‘KqÈF6ø€æ XQòi­¬€! ¸ƒœË¶/1WC=ƒº”¬¢©—ðŽ'nŠ]ª|>ÆÞ‘k%5ÙèÉÀ aŽ“‹C­®#Sц®™‰‹ŽO6bÎÓZ7 8·€ó%ÅË+6Óö×ßgauûÜ–ŽÔµ¥¸/7zpç…³÷€<ÜU‡ŸƒÅü+/3Oè­F[#ôÕÍÔåMkæ·5ð¸e±Ob”…JŠÿºT÷%ruby-rails-3.2/.git/objects/bf/0000775000175000017500000000000012432200050014416 5ustar ianianruby-rails-3.2/.git/objects/bf/897118cdef39ca7afc5ae8dad9819b37c141be0000444000175000017500000000030712432200050022064 0ustar ianianxÎKNÄ0PÖ9E?mÇ‘b ·hÿ’L&ndœû œ€ZÕêUE>Ž­ƒöóSo9CvªH’:Qñ %¡V1¡•eJhŒÏFzWÒŒ}åTá“âþÍ^·Ûo{ëFm—K¬¹¦‘Û2žû(TN9§½‡gyeˆùžÿMèä4,[qÍq糃ܾÖëÝ»hÌ]hˆAë& Z!:”I4“Tq6![oíäT© ¤6ª/‘ko|~îA\Æruby-rails-3.2/.git/objects/f0/0000775000175000017500000000000012244425623014354 5ustar ianianruby-rails-3.2/.git/objects/f0/591ea535ed4c1ec71759ea1f6da51152115a110000444000175000017500000000041312244425623021400 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOgXÈ´¯çß›C¾ß) cV·Ì¼ð ®(?· ±„¡¾ŸQn»m‚ó¥g·çêN]§Áø fL~^IQ~ƒ¹ÙÛ³Ç{_¹riÊŸ½)¹]×yÒ¢/¨Jô2ó=Ò©çèŸ~àöaŃÇd‚üûbઠ*‹2Ó3JN¯ˆŸ£~æþ¤™†ÿþ¹–-˜x5ò«#P‘¹©©BQiNj1ÃÞù¥¿¦Nèõx¨“åÑR¢éû(ç—%§2LÜœ·MçÚÒl¾m7Ͼ|ð©3ô± ÔšòÄ’ä »# gUÓ§uÞ‘ã1ª‰Q›ä¤]tCruby-rails-3.2/.git/objects/03/0000775000175000017500000000000012432145667014277 5ustar ianianruby-rails-3.2/.git/objects/03/08c8c7325444f98b16075e9bd45243ce86497c0000444000175000017500000000025612432145667021162 0ustar ianianx¥Ž;nÃ0SóÛø FZçËåÒfdQM¹}„øžê5ó0´­k ý¬$¯Š4Iͽ.”Rž•r>RÊHËÂ!#~°sèP9E¦…1è »9KsIÞ{ò¾®¿Füa_Rzruby-rails-3.2/.git/objects/dc/0000775000175000017500000000000012244426074014436 5ustar ianianruby-rails-3.2/.git/objects/dc/926b8d807a0a7bc87145ff1e4ecf554c4a391c0000444000175000017500000000145112244426074021654 0ustar ianianxíUßOÜ0 Þsþ ? m“h@œ¶ilÀ@Û  í5mM‘ÆQ’^W!ö·ÏÉãŽ_{Ÿ&ÝõNŽýÙùl­ U°³³={qFƒ¯±?TSá•6¡˜Éq†uÔdvqê5y§È%³2âDiù‹¾„#¬´²ð!àøgô*ÀÝq€]wÕóaÑÿ‰ ûF‡¤2šb'› $É·ÅwgH5èC 6’ÕçÈ¥jO°—ÿöW#ŽNŠEPq` Ø”0a‡ƒ6Mq„mÃ`Ñ¡qèáÕÇ=x'·å›í_¯7¡Å~‡Ï²u[Îd6Z*ÂPw…Sõ•jQœEeå›P\pe™ ™|/gâ¢ÅKhù±µÅÏ•ËlÝ#`klÉÞàÐÓ¡]Œî!Ê'·÷4Pù öÂÐ÷ÊOâ+õè¸â?Xã8Ê”–lnrâXü8+RÏnïÂä(c„8]\öÁLøºÓ‘cðŒ›\ÞظNIÊ%;áFÜò.`ã:tFW¡\šn6“­×¡^µdjßÃàù˜æ1w…åÛ×õ”Ïî.d¹æD6uï”U‡Ç!æè±&ß<²îò4LÈûö U§Ç¡ÈòôÏ­»<„Is5æ}„ßõãµðj° ç^v‚',Øz•Ä[j¯³P”prñ9÷ *°K¯zÉ_ñ¾)Ÿ äaäµSÎ]g^Ñ9r=Ú(à[Ò$Ð\Æ!r77YˆÐ žrü°^*QFfÕÒ¶å‘Ae ÎkšÕLA àÏ!²ÏþJ=* v*¦‘£&Þ|àÚ¡ba‰ Ò}T½ÁÌĶc‡^ÂyŠÕ Ð}¹‡ldƒh.%ŸÖÊ r!ë1ȹl;ðs5Ô3¨KÉ*Š‘z ÇïûZA:÷P 3œD4Þ*=äÇ`¢Á…*ê­…gÒÝA…Sž¬Õ’…3ÊbdôÔd˜‡Û_K²d„ëèªK.ðN >ÈogNð²~ÞÕ›_V*[?7‚Ä)ô¹Ìýµ½*4¨•@Ï¢]çq+ÿ;¨ûÊeÛs€|Ô5§oôëJ3ßò ÷*ˆ ú:Î6íîS÷ \Ab-ruby-rails-3.2/.git/objects/0b/0000775000175000017500000000000012432200261014334 5ustar ianianruby-rails-3.2/.git/objects/0b/c379ce6f6c173d8a64bc95c0d6c917c072050f0000444000175000017500000000023112432200261021466 0ustar ianianxÍA …aלbö&(šãV·ž†IŦРÜßF=oõ¯¾‡e]S%Ý¡U"pZÅIMÖ"©!D#i 1…iÔÚG- ó½=J…«Ïpó¸¼J†Sz~ë‚äëÂç]Ì”#/uæ}9ƒÔÒHc”spû~îýÙÑ©Äî­l;A+r«%vLy¾!{¶Hruby-rails-3.2/.git/objects/04/0000775000175000017500000000000012432167514014273 5ustar ianianruby-rails-3.2/.git/objects/04/44fecd770d5ed8c484dfbef9e397dbb4872fd80000444000175000017500000000031712432167514022046 0ustar ianianxKjÄ0D³Ö)z9!`ô· !Ì6¹EKjÙ%#Ë›œ>NfN^¼zt(ë:7ÃðÒ* ô<ÙÐk㢠'\´É %8—:E}ïx 4lÃJ¹IkCÔŽ›ät²&Îq¥†à=yé{•4ãM¥Â'føÂ°ì%Ãû|{¤k˜f¬K7ž™rìJ»cù¡…Fs1À?…?ÝFÿY%´{‚Øw©ËZ"”­Í%ïp¹ã/6L˜Gº—SNécÛÏçàúl_Ù7‹bruby-rails-3.2/.git/objects/7e/0000775000175000017500000000000012432145415014357 5ustar ianianruby-rails-3.2/.git/objects/7e/ba12d3a3d707e4eb558f6ed4b638cc198326e20000444000175000017500000000041212432145415021565 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOg°ØÄ':ŠÕ'º±¶:“^:uý€)ÊÏ-H,a¨ïg”Ûn›à|éÙí¹:‚S×i0~‚«È+)ÊÏa¸3)»·¡Š«úD¡ë9¿ó¡>^–2¨Jô2ó=Ò©çèŸ~àöaŃÇd‚üûbઠ*‹2Ó3JN¯ˆŸ£~æþ¤™†ÿþ¹–-˜x5ò«#P‘¹©©BQiNj1ƒ®ñ·5“¶ßjÙ<+ú»Ó‘iºÆž&@ Pœ_Z”œÊ0qsÞ6kK³ù¶uÞ<ûòÁ§ÎÐÇ&PkÊK’3xìŽ$œUuNŸÖyGŽÇ¨&Fm’“"ŒµqJruby-rails-3.2/.git/objects/75/0000775000175000017500000000000012432145576014307 5ustar ianianruby-rails-3.2/.git/objects/75/57f2cb0e67e827a7b63d608f564196891168540000444000175000017500000000162212432145576021113 0ustar ianianxåWMÛ6홿bº‡ HkË»öV@ƒ‚$½n€Z%Ž%v%R%);Î!¿=3úðÚëMaz°`Xäh†3óf(=æµÍa±zøå‡(ŠàG×å»[›ÿEHßc“¦[,ôZ2hk@Ù` NêÚ‹ :OÂô«OÃ#•ôU µÖ(=­@Seƒ&ø~õ$ô ‚%ýïW_ÄI¼m-ÃÚº†œSˆBv¡²Žm#x+7ZÁÔÔèàƒ4Þ[ÃJÖá?vì1×Fi—ÝE.dE%5Eÿç_B(H%™Í“h¶Œæ Ìfiÿƒ?„ÂBShü‚ôvRÙqbF²zƒ¾k[ëBœ×:Ïkœî¤uˆÆZÖI6˰¤ð“V³Ùüp‡”X‹Ý‘Ck(úi‘£etÓn~½éÕyvšÃAÉxÍàó£z ¢¡jÓ˜k7¹‚Ãõ¢Ža×R´©ëLÐ g=jdÙSØ?÷éSyOCýÜÖ´²x"Œíˆu'ça¼âꊰN.ÂšŠ†…uêlt×îâbt½í\Áûã¼î½»n|ï.Âך†>aèÎF÷þºÑ½?]¦¾”g#»¼nd—g#›wF]Ò²«ÿدo¨ž|½ö9þs˜ß6/¨Þ´Ð|ÿ8‚Ù~¼§ 7óxÆ|庰"²æ §[&«)<Sb­LWA{°îê:òhl1‡µ#>»µî ,Ù4ú * –I¯\[Ò£†Èd%Û–˜¥'k£Àwd¬$.ÇJªc–§Ã.†ßG¤w¶,ÑCŽD>5yƒÂ*Šc-7ÖiS’Àlˆº1¶”-Ï׺$;ÅùÍ”‚bRû[m;*mžÈ0.l#ð3]`÷D‘˜¹â瀆iøóÜÉÌ)[dkzÃÒƒael)ƪÚôöv»ÝÆÌ©­éi}l])j]Ъ“uk}È´¡Ìë:kŠÞ\ôN·Éù²Ñ*ÛËî!FV—µ2T µ;QáIª2öœí‹~Êõ^°cª{Ì©Yzšûfä¹gôêp8¹_íwBq#˜º4‚‡Q)‚I}ö<~ˆWÇ9•Øøÿ;¯„O]|ýk^“Òpìbõƒ¼tô:F™šÎ·Ö”z8qr iVbF[¢?:B/;Æ€AJáui¨›³'ÜQ7øÃãå3^ Ủ‘ŽTÞïXÚÔœÃit¿{cZô Ë¿ ”t›ruby-rails-3.2/.git/objects/63/0000775000175000017500000000000012244426125014275 5ustar ianianruby-rails-3.2/.git/objects/63/2997c752de3c99b21462b3dac47487e091241b0000444000175000017500000000027412244426125021217 0ustar ianianx¥=NÆ0D©}Ší‘¢¬ÿ#!„D·XÛKòÙþä8·'À˜jŠÑÓÓÄVÊ6@:û0:3|øùŠIž4³w”ä’dPžÐÄèƒU‰t’âNë€d0Öé Qkë^ƒ…fôZ/*°ñÆ8‹atŽÜ:¼Q…wŠûÑ*­—A嚦Ö×éÜŸ•7 Q¡ƒÇ/uÿ$^3Õ•áh…GÞê […‘ÎûqA¾ÊmßiYXruby-rails-3.2/.git/objects/cc/0000775000175000017500000000000012244425623014434 5ustar ianianruby-rails-3.2/.git/objects/cc/0d9f75fa95908d48e12c635a488474294deecd0000444000175000017500000000031312244425623021535 0ustar ianianx]A‹Â0„÷êûÏn=Ô{P(*õàAXöhIÌ“ÓD’Ô¥ÿÞVØC÷6Ì Ã7Ò8‰_ËÅÇ瘚àIjKµ¸3f7€Óvÿ}.v§óþxX§ÓP±1Xaf1 tA|²ÚÙ‰ Ö…QÌÛÚÌ&9ŒT…iY&mThCäzíÙvÖ¯ŽöÀu;^+.UUFQiŸ£b©…¥«³Ñ;ÓOýeÃìw®í€Fohî¡‹Á«‚ÒéÀ˜Q‚›Žx•®à¥Z[ruby-rails-3.2/.git/objects/78/0000775000175000017500000000000012244426121014277 5ustar ianianruby-rails-3.2/.git/objects/78/3886bcb43d173098aef61547cd19d0b301f5c40000444000175000017500000000044412244426121021346 0ustar ianianx¥;Sƒ@…­ù§ôX’˜Áè$£MRØèXà köÁìÃHãoŒ™±¢ñwNqç;¥4%óÕ… e[.¤‹ó„árhÉ2f_uPªgWÚy^JºC° 骿—æEÀ5[®‚3Š|+t¡á[B蜷Äz%“a4ޱã{^œÑX‹÷“ÚÐ'W¤¤2êx z6dzùK³Ù²HEºÄM:TMZÍ&­në¥5Ò(ƒu\SGºyfx3žœ’°'m<‚#Œ?O+p½ó¤plÏGFän@á ý“-Š|59Í·Ó .aIwg;[í¯d+Ö`íÕ¦¦RpÛüI~ô˜<ËŠ1ü[Äi>$ÿ Í€¬ ruby-rails-3.2/.git/objects/7b/0000775000175000017500000000000012244426125014355 5ustar ianianruby-rails-3.2/.git/objects/7b/9486a458090b020f3dee67edb82b2d3e1064920000444000175000017500000000041212244426125021341 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOg¨°hÛ³ÅVÜ`ƺo¢îg%/lfüz¦(?· ±„¡¾ŸQn»m‚ó¥g·çêN]§Áø ®"¯¤(?‡áΤìÞ†*®ê…®ÿåü·úxYÊ *ÑËÌc8ôH§ž£úÛG„“eòï‹«*¨,ÊLÏ(a8½"~Žú™û“fþûçZ¶`âÕȯŽ@E榦 E¥9©Å ºÆßÖtNÚ~«eó¬èSìNG¦é{šBq~iQr*ÃÄÍyÛt®-ÍæÛÖyóìËŸ:C›@­)O,IÎ`à±;’pVÕ9}Zç9£šµINж.rsruby-rails-3.2/.git/objects/dd/0000775000175000017500000000000012244425623014436 5ustar ianianruby-rails-3.2/.git/objects/dd/62c099ada669881b9bd643ca9214642275452f0000444000175000017500000000023212244425623021277 0ustar ianianx+)JMU043b040031QÐ+,ÍÌ)‰/H,IÎH-fÈ_qÅcÏÁ§þ©Ÿ3}ˆß6ÿf0ªÊâÔ¢L ÂCli«ßq;|ÓnqVžònñœµÛRa ËR‹Š3óóx~èhû³r¥Ìöà7í&'üO?Õ™U“XP“™š¢ ³÷ÙÜG³7]¼æìÝ­¹®<êÆ¡'=Áþ6I(ruby-rails-3.2/.git/objects/71/0000775000175000017500000000000012432200376014271 5ustar ianianruby-rails-3.2/.git/objects/71/5c56a92d831e8a7ae809ca4bdcddcdcec132ff0000444000175000017500000000022412432200376022135 0ustar ianianxÍ;Â0EQj¯bz¤ÈÎg°%„h¡e{œ„(dœýVÀ«nuž—e™ Ô¦=”Ì Œì¢ï#9k#÷Á n;m¹!Cìmèk‡¡‰ZÑZFÉp£wòó[œ§ç^W?N”çjØÄÄ)T’‡j/`Zƒ±î õ6å¿÷…ÿƒNˆî©G‘„•¡d‘;­>áˆHruby-rails-3.2/.git/objects/cb/0000775000175000017500000000000012244426115014430 5ustar ianianruby-rails-3.2/.git/objects/cb/a85f9c27ccdf929931fefe4576a091d559f5410000444000175000017500000000151712244425623021625 0ustar ianianx]T_oÛ6ß³>Å!OÛ XNЇÁ(†)“%ƒ’›å‘’h‹­D$U/ß¾GÚNÐF¿¤¯u Ÿ–ý–k3q·‚Á¹Ó*IÎçó¢­äj¡Í1éu—œx÷¥:ÞO\Í|´I§OoFw§“‡Å2‰ö'ëŒàÓ}É'±Ãåh£ZϦÕ‡·ˆ”n˜ÛE§§$4\þFQ.GaWðg´¾a¯àq¹ütÿ¸|x„Œ—=l„TbRØpe­VQ!;¡,â“ÿOÜE°f’ÖJ­@Z„í WNô1Œ Ð ÜE NWop±@·ŽK…>ƒwùV7 ŽÕwæF`w‰;É0yÊqç ÞüîwõõÄÝ¥|Œ@*„pÛƒ3f¡gF`p²ó 16uãÜ{·íQNòJá‡àmäÅÏMx©1Lº—ÿ-‚³ÓÜŽÒ1ôÒc·³ÃNë‹!¯Ø;I´+F†¥»úB“§Á|PÁ5&ë+çAO?{‘¨è0…¤ ¶ôc œ_Eç|Å‹?èqÔgï®Óª—Þ²]E°ˆ Á]Þêï" &Ai‡zCêá‚Ëí^·ìÀÇZq ©1d,}xBsk¾ÉG8i8õм† ºÊ›—” 5ìXõ…f$ƒ»´Æõ] /´ÙTû°ƒ¥eó Uiù ÿÒ2‹ü·c¤®¡bÐí® ‹´\ûŒ–Ïð„˪‚niƒ¨M¯X”àÁ¶„­7>Ñ‚6¯q9mJšW RØ¥¬¡ë}‘2ØíÙ®ª È·¤eΆlIÙ,k@¾àêMZž+‚t˜—ëj÷Êèó¦MUd‹Oµ¥O¹p¡¯u‘Òm YºMŸ½> =ßw/âkž1ÅϺ¡U鬫²a¸ŒÑ(kÞϾКÄ2ZûLrVmÑ£Ï >¢àÁ’\`|Þ?_ ¶økÚ£ï›ÈHZ ÞQyqy»ÄÅû`¹Ì´ä—ù‚£%UN+©¡8§¤ÑðÙ]ÿûçcþý>h.5 Þ'£6ןV³êqBù×nqÂM§F¨h|ØRù‡†ªXD?•Êruby-rails-3.2/.git/objects/cb/2b5674b214468b13da9a0184493be5855761b00000444000175000017500000000033712244426115021176 0ustar ianianx¥ANÅ0CY÷³ª¤“¤©@$6p‹I2¿í/Mª4êí‰øâxå…e?û´®sÄî®df ôuß“4Q)RÞZ­Œð;3˜Ð›Þ`³QæX@[5Ø`¬g‰ªÓއ i VIêÃ- N#\CG™R†ŠðI~ÙS„çùzs¯~š)/íX "ÇЦ<¶Çò².£”(¸UÿÅ-üï¢æ-p9-ÁóWx ¼ÕiŽþ|€K%-¼—9ŽOðž ¦ÇÎwÞâ°Ÿ{á¾§¿‚š…­þ¡‘Ûæånlïruby-rails-3.2/.git/objects/eb/0000775000175000017500000000000012432145611014430 5ustar ianianruby-rails-3.2/.git/objects/eb/7752e096471f32fca964db4ed312e052a7a6090000444000175000017500000000026012432145611021416 0ustar ianianx¥ŽKn1³ö)z4òßXJ¢lÃ-ºí68£±‘1NŸÒ[Ôê©Rß¶:A»ø13¸ì6+ƒöÊ[òFSR¬ ¢•Ú(’¥PWÜ&¸‹D¤£.)†ÌÁË,÷¡£Èä’“DÊ– ð>/}À/68aZo½Ágý{ÙOºTërÞ ·¼ôq^îë7(«¼r&F¹#Ò3wòÛGâÑÇºÕ ý:ko7ø«Å?$ZTruby-rails-3.2/.git/objects/07/0000775000175000017500000000000012244426044014273 5ustar ianianruby-rails-3.2/.git/objects/07/de27eb831bb6602a5a761ab0f81e7c853ad9cf0000444000175000017500000000157012244426044021640 0ustar ianianxåWKoÛ8Þ3Å4‡=, Å–;Ð`E·{Í{hQ”4–¸‘H•¤ìxûÛwFGŽ“Â ô`Á°Hjžß ¥ieRX¬w¿Aïl›î®Múf>þë8þ«ÁL­U&½2„–5Æ`¥ªœØ u´¿¢õwÿ@)]ÂFE‹JGhê°¨Q{×M‚N"€ˆ°¤ÿ½õE…KÑTÒ¯­É9…(dëKcY7€r£rø„Jc -|’Ú9£YÈXüÖ*ËS¥sec »ÈÐú$+¥¢è¿|"—žD¢Ù< fË`Álw?ø,rlPç¨3…½¿c>Œ";N¬ÇHf^mеMc¬ÓJ¥i…㤦h¬eåÖ†`–~Uùl6܇>%–bwäÐhŠ~4r`¦G—1 àêýU'γã&%c›ÓÂõóƒzõK}ÕÆ1×nsûëEü®¡hcÛj¯jÎzH&ÙSØ¿uéSyC} n£™=’ÅÓ°^1}AØFgaKEÂÌØüdt—îâltimÆûá´î½¹l|oÎÂ×èš>YhOF÷ö²Ñ½=]¦ž¾Œ'#»¼ld—'#›¶:?§eW?Øÿ|½öù}ƒ)ÌoÔn44ß?`¶ïéÁÕ<œ1?9‡¬ˆœ¹Ìª†Éi Ä XêÓSP$¬Ûª œ'Z[Lam‰¿n}C:µús VI¯\SУšÈc)›†˜¤#mƒkIYiIÜ…ò–Yò»þô@œÞÙ²@)ÙTä 2“#Pk¹1Vé‚ô†¨ÓgCÙò|­ Òã¥P ¿™bÈ™Äþ^™6÷¥Ò¤f¦ø„YëÙ=Q"fªøäQ3í~ž[™ØÜdÉšÞpÃêdXšŠ1†Òû&¾¾Þn·!sh£;[ˆJeduÔnŒó‰Ò”yU%5AÑ©‹Î ã¶w>0¶¤‘¾$ÏÔÚDsŰš'ì%Ùø˜Ç½ [‡4v°2="…½8ì }Ù0Ã'òþ]2¼n·ßôÎë†uï—KÌ’§¾Ô¥?÷7ÐN{í½‰ž‡ë:~Ô7ùœûƒºekŠW὜ ”*õk½¦á½©ZJS˜ >82Ú9IÛ ::—ìõ\Çà5 © f˜„6Ì/\r«åÞýÙ|]³ruby-rails-3.2/.git/objects/a3/0000775000175000017500000000000012244426115014347 5ustar ianianruby-rails-3.2/.git/objects/a3/c53577a16d3344a4c8a385460c132696d767630000444000175000017500000000016512244426115021051 0ustar ianianx+)JMU040f01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†ôL'v ;³o6ÓeöŸÊæž}KkÑC3…ÜԒĔĒD½Ê܆}E÷¹TÏŸ¾åü´éâNsùÏô µ+'ruby-rails-3.2/.git/objects/9b/0000775000175000017500000000000012432145643014361 5ustar ianianruby-rails-3.2/.git/objects/9b/cbbc02c68d83cbc00430149423435c515ecc960000444000175000017500000000041212432145643021402 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOgeSªtœ¼ía…ÈrÓ}å%¹§L­‡)ÊÏ-H,a¨ïg”Ûn›à|éÙí¹:‚S×i0~‚«È+)ÊÏahZZ&¸õyŸÀ²òt¯¬_ekO&¢*ÑËÌc8ôH§ž£úÛG„“eòï‹«*¨,ÊLÏ(a8½"~Žú™û“fþûçZ¶`âÕȯŽ@E榦 E¥9©Å ºÆßÖtNÚ~«eó¬èSìNG¦é{šBq~iQr*ÃÄÍyÛt®-ÍæÛÖyóìËŸ:C›@­)O,IÎ`à±;’pVÕ9}Zç9£šµINŠöNs(ruby-rails-3.2/.git/objects/0c/0000775000175000017500000000000012432145161014344 5ustar ianianruby-rails-3.2/.git/objects/0c/3ec460cd2543679689dc1e0c327c5c269242210000444000175000017500000000014712244425623021203 0ustar ianianx%ÆÁ‚0 PÏ|G Y{ 4ñcZ\ºÆ¹‘®¨øõx§Ç¹r»^>ÑšÖò˜»ä¾Þ×—ÛxñçF (kõÏÈJª .¢µ Ä÷—|Ih¤¹õ0 L#8È¿;R«#hruby-rails-3.2/.git/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f0000444000175000017500000000002112244425623022024 0ustar ianianxKÊÉOR0b0â.ruby-rails-3.2/.git/objects/0c/af37318ec5851488cd4bf4020b7b934022d13f0000444000175000017500000000160712432145161021330 0ustar ianianxåWKoãF îy~›C¤ØòÆÎ Ø ‡`›^S`[ÂH¢¥i¤íÌÈŽ{èo_RGŽ“Â ô`Á°æAÉ”ô1­L ‹ÕòãAÀ¶Mw×&ý 3ÿŠuÿÞ`¦Ö*“^ BËc°RUNlÐ:ZŒßÐúÒo(¥+cXШ±h±Béèš:,jÔÞu“ “ ¢–ô¿?}FáR4•ôkck2N. ÙúÒXÖ à^nT¨4֨ЃÔÎÍBÆâ·VY¶˜*+ÝE†Ö'Y)yÿÇŸBäÒ“H4›GÁlÌ#˜Íâî_EŽ êu¦°·w Òý(²ãÀzŒdæÕ]Û4Æú0­TšV8ÞIjŠÆZVimp–a‰á'•Ïfó7À}ìCb)6G&ïÇCŽéÑeL¸útÕ‰óì8†IÊøÌiâúùA¾ú¥>kã˜s7Ž9ƒýõ*~×·±mµW5G=H$“èÉퟻð)½Ç®¾·ÑÌžc3`ÝÝÉÂiXGo˜º ¬£³°¦¤afl~2º‹ËFwq6ºÎ´6ãçã´êýpÙø~8 _£kú„¡=Ý›ËF÷ædt™xúRžŒìò²‘]žŒlÚêüœ’]ý‡ÀþsGùäë­Ïñ;Ìa~3è¼¢zãAóýv³ýxO®æáŒùÊ9taEdÍeV5LVcx$¦ÄZ™®‚r aÝVUà<ÑØb kK|vkìÒ©Õߘ±Lzåš‚¶j"“¥lb–Ž´u®%e¥%q9Ê[fyÊïBøÍqDzgˤHäS‘5ÈLŽ@~¬åÆX¥ ZТnL§ EËóµ*H—BüfŠ!gRûKeÚÜ—J?‘b˜™Zà3f­góD‘˜¹â³GÍ4üenebs“%kzà «“aijlÈÇJï›øúz»Ý†Ì©îh}hl!*•Ñ©£vcœO”¦È«*© ŠN]tF·½ñÁ%ô%Y¦Ò&Ú+†ÕÁǼîÙ:¤µÃ)Ó–(íÝÀiO¨Ë¾¹Y ¥vDg+2€ÛA(€Q|ïö<¼ W‡1X»ÿ;®ˆ;,¾þ5®Q¨o±X|ׂڬC”©À\ct¡ú΋ësH³*ÿ®M„ní)Š„S…¦ÊMžpGÕভä ^ áÚº––D>>ôäQ!öçþI …G*ÇIEG²mdruby-rails-3.2/.git/objects/c8/0000775000175000017500000000000012432145415014356 5ustar ianianruby-rails-3.2/.git/objects/c8/04091b5507707a4d13444f1066e71b42acc3bf0000444000175000017500000000030412432145415021233 0ustar ianianx¥ÍN…0F]ó³ÔxCúw[&1Æ­¾Åt hIøú}¿ÕY}9‡Ëº¦L矎*qôÄW :ë/bç•õØ¡2–Œ4UÉxk‡»éÅ2b4ÚymOì‚ë‚(ÔÆéØÐyL¥Â'eø"ž÷’á-=þ胧DunÇË KîÛRÇöœßA;íõÝváU]køW÷5ûVò˜†RWx>·ýЧõY¾aH‹Ü e^€'Ê£,e|i~؇\ruby-rails-3.2/.git/objects/90/0000775000175000017500000000000012432175631014277 5ustar ianianruby-rails-3.2/.git/objects/90/94e534759b6d4bbdd93bad2a425314da98885f0000444000175000017500000000030112432175631021440 0ustar ianianx¥ŽKNÄ0Yç½GiÇvl !¶p‹ö/ñdâFƹ?a8oõVUø8JiÝSo)bpÙ;é\žlŽhc¤®±¦Gnëxîo€ #­…çéÚúžþ ÖÒEØRØùì ·¯íJ£{¹ ÁK¯Í¢~땱çHŽ&´J¹Ù'mµ^ úéAjˆ 1ùBõ%píïÃч\¬ruby-rails-3.2/.git/objects/a1/0000775000175000017500000000000012244425623014350 5ustar ianianruby-rails-3.2/.git/objects/a1/02be8cf00eec60310efb64a15cab8499d0f2000000444000175000017500000000021412244425623021602 0ustar ianianx-ÈK Â0FaÇ]Å?T1!IK…ú@‡:Õ $õRán¤»·'‡R°]¿‘%>¦YµÚa»F÷ÊîPy.>$:¡ÊD<.—”¿MìñàX¢OJägÒëU w.™cÆ›d¤(çò×íC!zÖY¦+ðª|€ëð¬ g¬ƒ³ƒís„2­1͉g.ruby-rails-3.2/.git/objects/e6/0000775000175000017500000000000012432200044014344 5ustar ianianruby-rails-3.2/.git/objects/e6/1f0a02daf8140a421cd450f7d4338e3086fd940000444000175000017500000000017412432200044021376 0ustar ianianx+)JMU044d01…”Ô¤ÌÄ<á¦sçDêŸ:Ñ´õdþeõE¯ÒÕž˜™˜(䦖$¦$–$êUææ0”†:Í—þB}ù6Û„þ0Çi‚!PuÅùyé™iùE¹ F«nnW4/2çyVñ„ù¶Ü¥&g× /Pruby-rails-3.2/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c53910000444000175000017500000000001712244425623021602 0ustar ianianxKÊÉOR0` °ðruby-rails-3.2/.git/objects/e6/e9fcbfa988febd1604508e3a1aec8db296d3f00000444000175000017500000000013112432177705022077 0ustar ianianx+)JMU07f01…”Ô¤ÌÄ<†ôL'v ;³o6ÓeöŸÊæž}KkÑC3…ÜԒĔĒD½Ê܆}E÷¹TÏŸ¾åü´éâNsùÏô f ^ruby-rails-3.2/.git/objects/40/0000775000175000017500000000000012432145667014300 5ustar ianianruby-rails-3.2/.git/objects/40/c61f03b17c962fcbbd711569cbde8c20fe88330000444000175000017500000000022712432145667021572 0ustar ianianx+)JMU041d01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†‡w°­>"Ó¥üçÁ -†g´/˜™˜(䦖$¦$–$êUææ0”†:Í—þB}ù6Û„þ0Çi‚!PuÅùyé™iùE¹ F«nnW4/2çyVñ„ù¶Ü¥&g9íruby-rails-3.2/.git/objects/f4/0000775000175000017500000000000012432200423014344 5ustar ianianruby-rails-3.2/.git/objects/f4/213625d3f430b2fe74ec0bfecc6ba6010cd1ef0000444000175000017500000000023612432200423021742 0ustar ianianxÎA‚0P×=ÅìM°-¥”Ä·ºõc;:¦–ûKÔøWõþ÷¼,c­›]ÉD@VE‰RŒN‰F+L#cL];ª¥³1tFàZÎpÁWôÓ‹ÇÇ·ý0bžª~¥Pqî«u:2Ê*kµs°—[„ÿÌúj­ë~¸~BX üݎè>b:xN%ó,Þ7J¯ruby-rails-3.2/.git/objects/13/0000775000175000017500000000000012432200013014251 5ustar ianianruby-rails-3.2/.git/objects/13/82cece147fc7cac882b5c96fd327a2ea6726e70000444000175000017500000000036212432200013021640 0ustar ianianx+)JMU021e040031QHÎHÌKOÍÉOgàg⺱ðKÏtiyå•l^}iûs]aŠòs Kêûå¶Û&8_zv{®Ž€àÔuŒŸà*òJŠòsô2ó=Ò©çèŸ~àöaŃÇd‚üûbઠ*‹2Ó3JN¯ˆŸ£~æþ¤™†ÿþ¹–-˜x5ò«#P‘¹©©BQiNj1ƒ®ñ·5“¶ßjÙ<+ú»Ó‘iºÆž&@ Pœ_Z”œÊ0qsÞ6kK³ù¶uÞ<ûòÁ§ÎÐÇ&PkÊK’3xìŽ$œUuNŸÖyGŽÇ¨&Fm’“"ß!børuby-rails-3.2/.git/objects/7f/0000775000175000017500000000000012244425623014363 5ustar ianianruby-rails-3.2/.git/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f20000444000175000017500000000002112244425623021377 0ustar ianianxKÊÉOR0b0ç3ruby-rails-3.2/.git/objects/37/0000775000175000017500000000000012244425623014300 5ustar ianianruby-rails-3.2/.git/objects/37/36edcdc78dea450a291fcdd919b72d4392a2f40000444000175000017500000000143712244425623021660 0ustar ianianxíUßoÔ0 æ9…iÍÆNü*°1/“¯iëµÑÒ8JÒ+‚¿'wƒë¸w„t×;9ögÇö÷µ2TÁþãçOïÑàk,ÁÕTx¥M(r_œa5Ù•]|ôš¼ŽS ä’Yqª´üE_ VZYøÄðîkô*Àïãîª-2>æÃ¢ÿÞbÊhŠl2$ß¾Ÿ!Õ %ÙHVœ#—ª=ÁA\ÿ{³qrZ¬‚Š#chĦ„ ƒ8´iŠthãˆC_Â3¹'Ÿìýx´-öû|–­{r!Ù(΢²òM(.¸Ü…|!â¢Å{Khù±»ËÏÚwoÜwwÞ[ÉÞàØÓRÿºÝŸ(¯Ýáí@ ä¥: Cß+?‰Ô£S-Ïq5Ž£LiÉæ™¦–Š/gEÑõ]¸Ê!>ªú*‡ÎËG¾îtä=<ã&×/Ç7îKAåº;Ỹn³€ûßBgtʵéûN²õ:Ô›–œSñ®-1 ΑiýòøW>}ÄQ·ù@ö‘3'²Ž/tʦÃvˆ%z¬É7w€Ì]n‡ ™^ÚtÚE–9cÐß4wù&íAԘ齥¿óãYx5؆s¯'Á< s[¯’ðÈCíuÖ…N/ÞæyA¥6péU#ù+¦—òÉ@Ff™rÎè:0#—hÈõh£€OI‚@Pp9S„ÈÓÜaÝA[¬ú”ãëµðdd)m[^T¦à¼¦Ṳ̀þ#ûÌð7êìQÙ±S1­<51ók‡Šu$B$H÷PõC0ÛZŒz ç)nTL4@CöAäR²‘ > ¹V”|Z++`È…®Ç ç²íÀLäj¨gP—’U#õÞñÆM±K•¯Ž±wFEäZI@M6z2pɺ—£ÆäâÀP«ëÔΑ[Ѻ]«Nœw|’è’²:OKÝ0àjœ/)^¦Ø¦H¤ù,¶ˆÃ5óo¼Iv¶ÁMø¿B<³a…2my—h5ڡǨ®÷+sªY½†kþº‘â'©Àëùruby-rails-3.2/.git/objects/11/0000775000175000017500000000000012432175620014266 5ustar ianianruby-rails-3.2/.git/objects/11/c9fb9299f08fd18ddaf30517481342a9b6b2140000444000175000017500000000016612432175620021351 0ustar ianianx+)JMU040f01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†[;V.ÍZyïÁé”kîoÖ»ˆ ‹Ë˜™˜(䦖$¦$–$êUææ0ì+ºÏ¥zþô-§à§MwšË?x¦W5Q-ruby-rails-3.2/.git/objects/fe/0000775000175000017500000000000012432145667014447 5ustar ianianruby-rails-3.2/.git/objects/fe/c3b806abc41c8f5a2e53fce0a82a0098cc2bd00000444000175000017500000000041212432145667022042 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOgàg⺱ðKÏtiyå•l^}iûs]aŠòs Kêûå¶Û&8_zv{®Ž€àÔuŒŸà*òJŠòsš––‰n}Þ'°¬<Ý+ëWÙÚS…‰¨Jô2ó=Ò©çèŸ~àöaŃÇd‚üûbઠ*‹2Ó3JN¯ˆŸ£~æþ¤™†ÿþ¹–-˜x5ò«#P‘¹©©BQiNj1ƒ®ñ·5“¶ßjÙ<+ú»Ó‘iºÆž&@ Pœ_Z”œÊ0qsÞ6kK³ù¶uÞ<ûòÁ§ÎÐÇ&PkÊK’3xìŽ$œUuNŸÖyGŽÇ¨&Fm’“"V'qwruby-rails-3.2/.git/objects/0f/0000775000175000017500000000000012432145661014354 5ustar ianianruby-rails-3.2/.git/objects/0f/020ad8a1f48c97301b1f23a9064a8e66bf6d450000444000175000017500000000060612432145661021415 0ustar ianianx¥’ÁnÛ0D{öWÌÑn-A–'PÓ"AsI½$?@I™5¹+TõÐo/­TH¢<, †x3œÊH…‹íù×WCâ”6>)ÒË8Ò]’ÿnzk‡b…ž}P•¡Ïè]K\_Œ à#|'ÜêGq˾óÁ‘²k0ñ¨ ­¡¹6¨÷Š[2Ò®FMeÄðz.káàÄ@Ø o‹~E•Ò-ì±4*{yµX«" &¿·«ˆš$¸UŒ;U¼0.õç튞”í ¥Qþ¸ïyÍßå'òl³{™—YŽOY<‹ÅlTùlT߯àÅRØknc6{z¡¬Iÿ5ßN¨ÅˆzVf»w¡nfQ¯›•“1ª^›&i¨#nN_¿äC´Žÿy#` è=áϳ~ð,Žûé‘“å.¦®ZúO›ùYY\ÌÛœ÷wË:heàÈòÎ5a-x W“v‚ËØ°q»j¨ÒŠSqíT’˜ü]ϧ’äÈ7åØ$YKòh” «ruby-rails-3.2/.git/objects/58/0000775000175000017500000000000012244425624014304 5ustar ianianruby-rails-3.2/.git/objects/58/498d68ce13425be9fa5ad841a7df38a9b0060b0000444000175000017500000000030712244425624021517 0ustar ianianxMjÃ0F»Ö)²Il$Ù–úC»ì¾DZ@–ÂXnÈíJOÐÍÇ[<ÞGeYb뇇*Ì0y?hÍÓD {t†\F˜N§Þ;k=…[‹ÀG®%Ç_,ÄQ ¼Ô?z9DÌm‘ó˜®×ñ뜇ƒ6Z+úý½»ÿ.(%[¸5‚1­M×ZØß§uy„-¯CâgØäÌ™n¯©\•x‚ÏkĉqåV©ÄåR¤ò“”êÌ€BsüfõcžYíruby-rails-3.2/.git/objects/91/0000775000175000017500000000000012244425623014300 5ustar ianianruby-rails-3.2/.git/objects/91/b36eb62cd6a56b0eb689d9cde9e0f28955e3340000444000175000017500000000006312244425623021611 0ustar ianianx+)JMU06a040031QHË/ÊM,a³ZßÛ´í¨¿ò‘x£ÎؽϨop!0êruby-rails-3.2/.git/objects/84/0000775000175000017500000000000012432200236014270 5ustar ianianruby-rails-3.2/.git/objects/84/2d9290c64b77ce23bd61e3e09b9544ad7b34060000444000175000017500000000022712432200236021341 0ustar ianianx+)JMU041d01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†ê)mK"8¹™ømߥ¿Ý¡­k'2ÉÐÀÀÌÄD!7µ$1%±$Q¯27‡Áto–¾…ÇWÚ´–,­ŽXušóT]qA~^zfZ~Q.ƒÑª‡ƒÛÍ‹ÌyžU­óŽQMŒÚ$'EO¿d¤ruby-rails-3.2/.git/objects/89/0000775000175000017500000000000012432175653014313 5ustar ianianruby-rails-3.2/.git/objects/89/c1bd14d921f8618366423d1eb62c82e49352070000444000175000017500000000033412432175653021141 0ustar ianianx¥OANÄ0ãÜWä¶Ô*Ó$“FBˆ+HX#˲ÇR¯×½+cÌCo))«!kÃà%àœ…9z‡A8¦EfÓ²3|QK¥+oO-Z‘‚u³äÀ™=F`³ÌìP½¥?ÿlIòÑF¿PN8çPÛ0bÊ9:vŒ8Эoµ©W*êäø®E=í÷ëE¶Ú1­çÇ%•8Õ¶N·ãYD õ‰A~çõôï á=µ5)nTdSúìc«µpQ{éõ¤³j/ëxw ?ªj¦ruby-rails-3.2/.git/objects/b5/0000775000175000017500000000000012432145540014351 5ustar ianianruby-rails-3.2/.git/objects/b5/49cf71c3293326937c0916576886b61856e88f0000444000175000017500000000041312432145540021027 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOgð}cPøqòJµ»22Žð®Œ»ýe‹LQ~nAb C}?£ÜvÛçKÏnÏÕœºNƒñ\E^IQ~CÓÒ2ñÀ­Ïû–•§{eý*[{ª0U‰^fáG:õýÓÜ>"¬xð˜,C_ \UAeQfzF ÃéñsÔÏÜŸ4Óðß?ײ¯F~u*275U(*ÍI-fÐ5þ¶¦sÒö[-›gEŸbw:2MרÓÄŠóK‹’S&nÎÛ¦smi6߶Λg_>øÔúØjMybIrÝ‘„³ªÎéÓ:ïÈñÕĨMrRº tãruby-rails-3.2/.git/objects/74/0000775000175000017500000000000012432167514014302 5ustar ianianruby-rails-3.2/.git/objects/74/8c2d40d6a9452cf9bcbfb76d1b382b56c1674a0000444000175000017500000000026312432167514021572 0ustar ianianxŽËnà {æ+öɳæ!UQ¯í_Àî’P×8"ø¿oÔö :§9†öm«æ_FÔäLÑ6OÑÍ…rfoÌâ"e–@³.‚µê–º´‹{¯y„¹d)Qlôœ3?*ãºwxO >­÷½Ákýüµ7ºÖÔ×éòÍ5hºðím$MúLñ0ÕÜÏ[ƒ>ø—V™!L‰Ð[ÔÐsâ@³Ks¤úÒ‘¬ã¨.X¹4  Ž& ƒö^{t“±Î¹Ùèqdo’ë‘ȦYá­­Rá |#íW)pÜN¿öIë†uï–gAá2uR—î¶€qf4ƒCoú‰¢ŸÜÆÿ>R)KÝáïHJ«’AJ¾¿ÃV(­Xβ¼ªY^¦ruby-rails-3.2/.git/objects/67/0000775000175000017500000000000012244426115014300 5ustar ianianruby-rails-3.2/.git/objects/67/694207183e36f63c971cbfca6b0b9bda2aa2e00000444000175000017500000000041212244426115021550 0ustar ianianx+)JMU0²0`040031QHÎHÌKOÍÉOg°Í+èøu®ÁKIœýÆŸ†gš Ž Àåç$–0Ô÷3Êm·Mp¾ôìö\Á©ë4?ÁUä•åç0Ü™”ÝÛPÅU}¢Ðõ¿œßùP/KT%z™y ‡éÔsôO?pûˆ°âÁc² Aþ}1pU•E™é% §WÄÏQ?sÒLÃÿ\ËL¼ùÕ¨ÈÜÔT¡¨4'µ˜A×øÛšÎIÛoµlž}ŠÝéÈ4]cO P(Î/-JNe˜¸9o›Îµ¥Ù|Û:ož}ùàSgèc¨5å‰%É [ðcW(‘è}rYB aBÈføbÎU/ruby-rails-3.2/.git/objects/3d/0000775000175000017500000000000012244426035014353 5ustar ianianruby-rails-3.2/.git/objects/3d/6e7088face804a221707d8a44c80e629a0c6100000444000175000017500000000040212244426035021327 0ustar ianianx}ÍNÃ0„9ç)æÈO%´¨ÔJ\Úx'^‚©³®üCÉ…gÇ*q@ìaµZÍî|ÓZ×¢™ÍN|jGᕱA4¥ÄinåTȆa¬Ï8DÕZºAò=q7ÞZ·/ à+­Ñz·%F›ŒÕBÓŽXD<;H!îË/õ½»ˆÏï„1D°9>ÉzìT·U=•ÙF¬c“7Á1æõ{ZÒ»v–ÊÎ wÀcâ ä%ÜdU7¨§sy5o®qQå*Š¿cþŸoÍ&eáÉ’ GœGÇÆá‰|GÆ;,âÏ´ÔÔÅ¥óý/¤Mâ’„¬ç™ªšATMFúwdruby-rails-3.2/.git/objects/24/0000775000175000017500000000000012432175564014301 5ustar ianianruby-rails-3.2/.git/objects/24/a03a7d4d78afe465c555604929abaffd5b5b660000444000175000017500000000026212432175564021577 0ustar ianianx¥ŽAnƒ0E»æÞWFŒg<6RuÛÞbZÍÙªG‚OˆDB£'ÐñÈSàÀØÉÑ–RÍ·ìæGt{–Ý\Öß×úÒe•ºõóiÜó>õ¥Îý±] 00;æs8éôÿ¾å·Eݼ6«KÖ­ÍX[êc9ÓäÖl-¥Y0š\ò(9 â˜'e€H4bÊ>zÒÐýk…Sruby-rails-3.2/.git/objects/15/0000775000175000017500000000000012432145641014272 5ustar ianianruby-rails-3.2/.git/objects/15/0622794193b6e17814a735be77746dca35faaf0000444000175000017500000000057212432145641021275 0ustar ianianx¥’OoÓ@Å9çS¼cRb˱ii‹ZÁ¥=p/°¶§Î’ÝkÿšŸµKÔ9°‡ÑH«·ó~o¶6Rc·ûðÆÅzÈœÒÆgU^b™J¾ÍÊ_m´v¨Vˆìƒª ]!ºŽ¸nŒœ à¾îô£8‹eì}p¤ìL' X¢'Œñ\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" ruby-rails-3.2/.git/hooks/post-update.sample0000775000175000017500000000027512244425622017217 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info ruby-rails-3.2/.git/hooks/pre-rebase.sample0000775000175000017500000001144212244425622016775 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END ruby-rails-3.2/.git/hooks/update.sample0000775000175000017500000000703312244425622016233 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 ruby-rails-3.2/.git/hooks/commit-msg.sample0000775000175000017500000000160012244425622017017 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } ruby-rails-3.2/.git/hooks/pre-commit.sample0000775000175000017500000000325012244425622017022 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- ruby-rails-3.2/.git/hooks/pre-applypatch.sample0000775000175000017500000000061612244425622017702 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : ruby-rails-3.2/.git/COMMIT_EDITMSG~0000664000175000017500000000140212432200411014661 0ustar ianiangit-checkout --orphan alt-root-2 cb2b5674b214468b13da9a0184493be5855761b0 git-rm -f debian/control # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch alt-root-2 # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: debian/changelog # new file: debian/compat # new file: debian/control.in # new file: debian/copyright # new file: debian/rules # new file: debian/source/format # new file: debian/watch # new file: metadata.yml # new file: spongiform # # Untracked files: # (use "git add ..." to include in what will be committed) # # .commit-tmp.DIv_ZO~ # debian/changelog~ # debian/control~ ruby-rails-3.2/.git/DGIT_ARCHIVE0000664000175000017500000000005112244425624014226 0ustar ianian58498d68ce13425be9fa5ad841a7df38a9b0060b ruby-rails-3.2/.git/logs/0000775000175000017500000000000012244425624013363 5ustar ianianruby-rails-3.2/.git/logs/HEAD0000664000175000017500000001731512432202022013776 0ustar ianian0000000000000000000000000000000000000000 58498d68ce13425be9fa5ad841a7df38a9b0060b Ian Jackson 1385311124 +0000 reset: moving to refs/remotes/dgit/dgit/sid 58498d68ce13425be9fa5ad841a7df38a9b0060b cb2b5674b214468b13da9a0184493be5855761b0 Ian Jackson 1385311309 +0000 commit: Add broken build-dependency, for testing; Do not use ruby build system when building package. cb2b5674b214468b13da9a0184493be5855761b0 632997c752de3c99b21462b3dac47487e091241b Ian Jackson 1385311317 +0000 commit: Change something in the upstream yml. 632997c752de3c99b21462b3dac47487e091241b c804091b5507707a4d13444f1066e71b42acc3bf Ian Jackson 1416153869 +0000 commit: spongiform (upstream, new file, incl changelog) c804091b5507707a4d13444f1066e71b42acc3bf c804091b5507707a4d13444f1066e71b42acc3bf Ian Jackson 1416153896 +0000 checkout: moving from dgit/sid to incoming-branch c804091b5507707a4d13444f1066e71b42acc3bf c804091b5507707a4d13444f1066e71b42acc3bf Ian Jackson 1416153899 +0000 checkout: moving from incoming-branch to dgit/sid c804091b5507707a4d13444f1066e71b42acc3bf 632997c752de3c99b21462b3dac47487e091241b Ian Jackson 1416153903 +0000 reset: moving to HEAD~ 632997c752de3c99b21462b3dac47487e091241b c804091b5507707a4d13444f1066e71b42acc3bf Ian Jackson 1416153905 +0000 checkout: moving from dgit/sid to incoming-branch c804091b5507707a4d13444f1066e71b42acc3bf 57df0aab82fc97de760d00d0a5b9eb5c50bb14f7 Ian Jackson 1416153952 +0000 commit: blork blork blork (control only, incl changelog) 57df0aab82fc97de760d00d0a5b9eb5c50bb14f7 eb7752e096471f32fca964db4ed312e052a7a609 Ian Jackson 1416153993 +0000 commit: zorkmid options = 42 eb7752e096471f32fca964db4ed312e052a7a609 bc254eb92a3ff1a9827afe57d049dfb666286ed5 Ian Jackson 1416154019 +0000 commit: zorkmod options (later changelog commit for upstream change) bc254eb92a3ff1a9827afe57d049dfb666286ed5 0308c8c7325444f98b16075e9bd45243ce86497c Ian Jackson 1416154039 +0000 commit: finalise dummy3 0308c8c7325444f98b16075e9bd45243ce86497c 0308c8c7325444f98b16075e9bd45243ce86497c Ian Jackson 1416163083 +0000 rebase: aborting 0308c8c7325444f98b16075e9bd45243ce86497c 57df0aab82fc97de760d00d0a5b9eb5c50bb14f7 Ian Jackson 1416163103 +0000 checkout: moving from incoming-branch to 57df0aa 57df0aab82fc97de760d00d0a5b9eb5c50bb14f7 eb7752e096471f32fca964db4ed312e052a7a609 Ian Jackson 1416163103 +0000 cherry-pick eb7752e096471f32fca964db4ed312e052a7a609 31f445e8a524805f84f65d9880339cbbeb2b73f4 Ian Jackson 1416163108 +0000 commit (amend): zorkmid options = 42 31f445e8a524805f84f65d9880339cbbeb2b73f4 0444fecd770d5ed8c484dfbef9e397dbb4872fd8 Ian Jackson 1416163148 +0000 rebase -i (pick): zorkmod options (later changelog commit for upstream change) 0444fecd770d5ed8c484dfbef9e397dbb4872fd8 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a Ian Jackson 1416163148 +0000 rebase -i (pick): finalise dummy3 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a Ian Jackson 1416163149 +0000 rebase -i (finish): returning to refs/heads/incoming-branch 0000000000000000000000000000000000000000 24a03a7d4d78afe465c555604929abaffd5b5b66 Ian Jackson 1416166251 +0000 commit (initial): git-checkout --orphan alt-root-1 cb2b5674b214468b13da9a0184493be5855761b0 0000000000000000000000000000000000000000 9094e534759b6d4bbdd93bad2a425314da98885f Ian Jackson 1416166288 +0000 commit (initial): git-checkout --orphan alt-root-2 cb2b5674b214468b13da9a0184493be5855761b0 9094e534759b6d4bbdd93bad2a425314da98885f 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a Ian Jackson 1416166305 +0000 checkout: moving from alt-root-2 to incoming-branch 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a 89c1bd14d921f8618366423d1eb62c82e4935207 Ian Jackson 1416166311 +0000 merge alt-root-1: Merge made by the 'ours' strategy. 89c1bd14d921f8618366423d1eb62c82e4935207 297f18ae7fe0a915f98af65fba63062a7c7a411b Ian Jackson 1416166317 +0000 merge alt-root-2: Merge made by the 'ours' strategy. 297f18ae7fe0a915f98af65fba63062a7c7a411b 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a Ian Jackson 1416166881 +0000 reset: moving to HEAD~2 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a 24a03a7d4d78afe465c555604929abaffd5b5b66 Ian Jackson 1416167357 +0000 checkout: moving from incoming-branch to alt-root-1 24a03a7d4d78afe465c555604929abaffd5b5b66 e91796f45ad18ca584becec5c3c93d6da5d22e4c Ian Jackson 1416167365 +0000 commit (amend): git-checkout --orphan alt-root-1 cb2b5674b214468b13da9a0184493be5855761b0 e91796f45ad18ca584becec5c3c93d6da5d22e4c 9094e534759b6d4bbdd93bad2a425314da98885f Ian Jackson 1416167372 +0000 checkout: moving from alt-root-1 to alt-root-2 9094e534759b6d4bbdd93bad2a425314da98885f 17f6e7d5da9c9ad2865d92685b346ab5e1e6acb0 Ian Jackson 1416167448 +0000 commit (amend): git-checkout --orphan alt-root-2 cb2b5674b214468b13da9a0184493be5855761b0 17f6e7d5da9c9ad2865d92685b346ab5e1e6acb0 bf897118cdef39ca7afc5ae8dad9819b37c141be Ian Jackson 1416167460 +0000 commit (amend): git-checkout --orphan alt-root-2 cb2b5674b214468b13da9a0184493be5855761b0 bf897118cdef39ca7afc5ae8dad9819b37c141be bf897118cdef39ca7afc5ae8dad9819b37c141be Ian Jackson 1416167521 +0000 checkout: moving from alt-root-2 to alt-root-3 bf897118cdef39ca7afc5ae8dad9819b37c141be bf897118cdef39ca7afc5ae8dad9819b37c141be Ian Jackson 1416167537 +0000 checkout: moving from alt-root-3 to alt-root-2 bf897118cdef39ca7afc5ae8dad9819b37c141be bf897118cdef39ca7afc5ae8dad9819b37c141be Ian Jackson 1416167560 +0000 checkout: moving from alt-root-2 to alt-root-3 bf897118cdef39ca7afc5ae8dad9819b37c141be 0bc379ce6f6c173d8a64bc95c0d6c917c072050f Ian Jackson 1416167582 +0000 commit (amend): Stop due to introducing .pc 0bc379ce6f6c173d8a64bc95c0d6c917c072050f e91796f45ad18ca584becec5c3c93d6da5d22e4c Ian Jackson 1416167651 +0000 checkout: moving from alt-root-3 to alt-root-1 e91796f45ad18ca584becec5c3c93d6da5d22e4c 715c56a92d831e8a7ae809ca4bdcddcdcec132ff Ian Jackson 1416167669 +0000 commit (amend): Stop due to root commit 715c56a92d831e8a7ae809ca4bdcddcdcec132ff bf897118cdef39ca7afc5ae8dad9819b37c141be Ian Jackson 1416167682 +0000 checkout: moving from alt-root-1 to alt-root-2 bf897118cdef39ca7afc5ae8dad9819b37c141be f4213625d3f430b2fe74ec0bfecc6ba6010cd1ef Ian Jackson 1416167689 +0000 commit (amend): Stop due to lack of debian/control f4213625d3f430b2fe74ec0bfecc6ba6010cd1ef f4213625d3f430b2fe74ec0bfecc6ba6010cd1ef Ian Jackson 1416168262 +0000 checkout: moving from alt-root-2 to alt-root-2 f4213625d3f430b2fe74ec0bfecc6ba6010cd1ef 632997c752de3c99b21462b3dac47487e091241b Ian Jackson 1416168466 +0000 checkout: moving from alt-root-2 to dgit/sid ruby-rails-3.2/.git/logs/refs/0000775000175000017500000000000012244425624014322 5ustar ianianruby-rails-3.2/.git/logs/refs/remotes/0000775000175000017500000000000012244425624016000 5ustar ianianruby-rails-3.2/.git/logs/refs/remotes/dgit/0000775000175000017500000000000012244425624016727 5ustar ianianruby-rails-3.2/.git/logs/refs/remotes/dgit/dgit/0000775000175000017500000000000012244425624017656 5ustar ianianruby-rails-3.2/.git/logs/refs/remotes/dgit/dgit/sid0000664000175000017500000000023412244425624020357 0ustar ianian0000000000000000000000000000000000000000 58498d68ce13425be9fa5ad841a7df38a9b0060b Ian Jackson 1385311124 +0000 dgit fetch ruby-rails-3.2/.git/logs/refs/heads/0000775000175000017500000000000012432202032015367 5ustar ianianruby-rails-3.2/.git/logs/refs/heads/incoming-branch0000664000175000017500000000324412432176741020374 0ustar ianian0000000000000000000000000000000000000000 c804091b5507707a4d13444f1066e71b42acc3bf Ian Jackson 1416153896 +0000 branch: Created from HEAD c804091b5507707a4d13444f1066e71b42acc3bf 57df0aab82fc97de760d00d0a5b9eb5c50bb14f7 Ian Jackson 1416153952 +0000 commit: blork blork blork (control only, incl changelog) 57df0aab82fc97de760d00d0a5b9eb5c50bb14f7 eb7752e096471f32fca964db4ed312e052a7a609 Ian Jackson 1416153993 +0000 commit: zorkmid options = 42 eb7752e096471f32fca964db4ed312e052a7a609 bc254eb92a3ff1a9827afe57d049dfb666286ed5 Ian Jackson 1416154019 +0000 commit: zorkmod options (later changelog commit for upstream change) bc254eb92a3ff1a9827afe57d049dfb666286ed5 0308c8c7325444f98b16075e9bd45243ce86497c Ian Jackson 1416154039 +0000 commit: finalise dummy3 0308c8c7325444f98b16075e9bd45243ce86497c 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a Ian Jackson 1416163149 +0000 rebase -i (finish): refs/heads/incoming-branch onto 632997c 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a 89c1bd14d921f8618366423d1eb62c82e4935207 Ian Jackson 1416166311 +0000 merge alt-root-1: Merge made by the 'ours' strategy. 89c1bd14d921f8618366423d1eb62c82e4935207 297f18ae7fe0a915f98af65fba63062a7c7a411b Ian Jackson 1416166317 +0000 merge alt-root-2: Merge made by the 'ours' strategy. 297f18ae7fe0a915f98af65fba63062a7c7a411b 748c2d40d6a9452cf9bcbfb76d1b382b56c1674a Ian Jackson 1416166881 +0000 reset: moving to HEAD~2 ruby-rails-3.2/.git/logs/refs/heads/dgit/0000775000175000017500000000000012244425624016335 5ustar ianianruby-rails-3.2/.git/logs/refs/heads/dgit/sid0000664000175000017500000000174412432145457017047 0ustar ianian0000000000000000000000000000000000000000 58498d68ce13425be9fa5ad841a7df38a9b0060b Ian Jackson 1385311124 +0000 reset: moving to refs/remotes/dgit/dgit/sid 58498d68ce13425be9fa5ad841a7df38a9b0060b cb2b5674b214468b13da9a0184493be5855761b0 Ian Jackson 1385311309 +0000 commit: Add broken build-dependency, for testing; Do not use ruby build system when building package. cb2b5674b214468b13da9a0184493be5855761b0 632997c752de3c99b21462b3dac47487e091241b Ian Jackson 1385311317 +0000 commit: Change something in the upstream yml. 632997c752de3c99b21462b3dac47487e091241b c804091b5507707a4d13444f1066e71b42acc3bf Ian Jackson 1416153869 +0000 commit: spongiform (upstream, new file, incl changelog) c804091b5507707a4d13444f1066e71b42acc3bf 632997c752de3c99b21462b3dac47487e091241b Ian Jackson 1416153903 +0000 reset: moving to HEAD~ ruby-rails-3.2/.git/HEAD0000664000175000017500000000003112432202022013015 0ustar ianianref: refs/heads/dgit/sid ruby-rails-3.2/.git/config0000664000175000017500000000044312432202032013571 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "dgit"] fetch = +refs/dgit/*:refs/remotes/dgit/dgit/* [remote "origin"] url = /home/ian/things/Dgit/dgit/tests/tmp/quilt/git/ruby-rails-3.2.git fetch = +refs/heads/*:refs/remotes/origin/* ruby-rails-3.2/.git/COMMIT_EDITMSG0000664000175000017500000000130212432200422014464 0ustar ianianStop due to lack of debian/control # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch alt-root-2 # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: debian/changelog # new file: debian/compat # new file: debian/control.in # new file: debian/copyright # new file: debian/rules # new file: debian/source/format # new file: debian/watch # new file: metadata.yml # new file: spongiform # # Untracked files: # (use "git add ..." to include in what will be committed) # # .commit-tmp.DIv_ZO~ # debian/changelog~ # debian/control~ ruby-rails-3.2/.git/index0000664000175000017500000000211012432203747013442 0ustar ianianDIRC Ti"TiþeˤèèhW¨ÔH¼ÁåOeóiÆô_¶ŸÙS.pc/.quilt_patchesTi"Tiþe̤èèÂpf«î @ö+„C#”­¶e.pc/.quilt_seriesTi"Tiþeͤèè ûðˆ†ü©©·Sì‡4ÈOËå,Ÿ .pc/.versionTi"TiþeΤèèæâ›²ÑÖCK‹)®wZØÂäŒS‘.pc/applied-patchesTi"Tiþ ¤èè$x8†¼´=0˜®öGÍгõÄdebian/changelogTi"Tišþ $¤èè·=`CÒæÛ,•®(ò debian/compatTi"Tiþ ¤èè›Ü’k€z {ÈqEÿNÏULJ9debian/controlTi"Tišþ '¤èèëÂâ,—ÀÛÄ!ÁÆROŽ\debian/control.inTi"Tišþ#å¤èè€Ë¨_œ'Ìß’™1þþEv ‘ÕYõAdebian/copyrightTi"Tišþ(ìíèè-3ö¬‰’·Ú„³š[ÊBÄ–-3I debian/rulesTi"Tišþ 1¤èè :¯‚¶ÅO#Ä_2‰]½ýÌ'°Gdebian/source/formatTi"Tišþ0o¤èè_ >Ä`Í%Cg–‰Ü 2|\&’B! debian/watchTi"TiþSˤèèª5– j ¾¡Æa©<…t¥{XªË Æ metadata.ymlýšµš•w)ÛAW¶$«ùÖE£§Ò˜ruby-rails-3.2/.git/refs/0000775000175000017500000000000012244425624013356 5ustar ianianruby-rails-3.2/.git/refs/remotes/0000775000175000017500000000000012244425624015034 5ustar ianianruby-rails-3.2/.git/refs/remotes/dgit/0000775000175000017500000000000012244425624015763 5ustar ianianruby-rails-3.2/.git/refs/remotes/dgit/dgit/0000775000175000017500000000000012244425624016712 5ustar ianianruby-rails-3.2/.git/refs/remotes/dgit/dgit/sid0000664000175000017500000000005112244425624017410 0ustar ianian58498d68ce13425be9fa5ad841a7df38a9b0060b ruby-rails-3.2/.git/refs/tags/0000775000175000017500000000000012244425622014312 5ustar ianianruby-rails-3.2/.git/refs/heads/0000775000175000017500000000000012432202032014423 5ustar ianianruby-rails-3.2/.git/refs/heads/incoming-branch0000664000175000017500000000005112432176741017421 0ustar ianian748c2d40d6a9452cf9bcbfb76d1b382b56c1674a ruby-rails-3.2/.git/refs/heads/dgit/0000775000175000017500000000000012432145457015373 5ustar ianianruby-rails-3.2/.git/refs/heads/dgit/sid0000664000175000017500000000005112432145457016071 0ustar ianian632997c752de3c99b21462b3dac47487e091241b ruby-rails-3.2/.git/FETCH_HEAD0000664000175000017500000000000012244425624013742 0ustar ianianruby-rails-3.2/metadata.yml0000664000175000017500000000725212432202022014047 0ustar ianian--- !ruby/object:Gem::Specification name: rails version: !ruby/object:Gem::Version hash: 3 prerelease: segments: - 3 - 2 - 6 version: 3.2.6 platform: ruby authors: - David Heinemeier Hansson autorequire: bindir: bin cert_chain: [] date: 2012-06-12 00:00:00 Z dependencies: - !ruby/object:Gem::Dependency name: activesupport.blibble.blibble prerelease: false requirement: &id001 !ruby/object:Gem::Requirement none: false requirements: - - "=" - !ruby/object:Gem::Version hash: 3 segments: - 3 - 2 - 6 version: 3.2.6 type: :runtime version_requirements: *id001 - !ruby/object:Gem::Dependency name: actionpack.blobble.blobble prerelease: false requirement: &id002 !ruby/object:Gem::Requirement none: false requirements: - - "=" - !ruby/object:Gem::Version hash: 3 segments: - 3 - 2 - 6 version: 3.2.6 type: :runtime version_requirements: *id002 - !ruby/object:Gem::Dependency name: activerecord prerelease: false requirement: &id003 !ruby/object:Gem::Requirement none: false requirements: - - "=" - !ruby/object:Gem::Version hash: 3 segments: - 3 - 2 - 6 version: 3.2.6 type: :runtime version_requirements: *id003 - !ruby/object:Gem::Dependency name: activeresource prerelease: false requirement: &id004 !ruby/object:Gem::Requirement none: false requirements: - - "=" - !ruby/object:Gem::Version hash: 3 segments: - 3 - 2 - 6 version: 3.2.6 type: :runtime version_requirements: *id004 - !ruby/object:Gem::Dependency name: actionmailer prerelease: false requirement: &id005 !ruby/object:Gem::Requirement none: false requirements: - - "=" - !ruby/object:Gem::Version hash: 3 segments: - 3 - 2 - 6 version: 3.2.6 type: :runtime version_requirements: *id005 - !ruby/object:Gem::Dependency name: railties prerelease: false requirement: &id006 !ruby/object:Gem::Requirement none: false requirements: - - "=" - !ruby/object:Gem::Version hash: 3 segments: - 3 - 2 - 6 version: 3.2.6 type: :runtime version_requirements: *id006 - !ruby/object:Gem::Dependency name: bundler prerelease: false requirement: &id007 !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version hash: 15 segments: - 1 - 0 version: "1.0" type: :runtime version_requirements: *id007 description: Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration. email: david@loudthinking.com executables: [] extensions: [] extra_rdoc_files: [] files: [] homepage: http://www.rubyonrails.org licenses: [] post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement none: false requirements: - - ">=" - !ruby/object:Gem::Version hash: 57 segments: - 1 - 8 - 7 version: 1.8.7 required_rubygems_version: !ruby/object:Gem::Requirement none: false requirements: - - ">=" - !ruby/object:Gem::Version hash: 23 segments: - 1 - 3 - 6 version: 1.3.6 requirements: [] rubyforge_project: rubygems_version: 1.8.22 signing_key: specification_version: 3 summary: Full-stack web application framework. test_files: [] ruby-rails-3.2/.commit-tmp.DIv_ZO~0000600000175000017500000000021512244426103015111 0ustar ianianAdd broken build-dependency, for testing. * Add broken build-dependency, for testing. * Do not use ruby build system when building package. ruby-rails-3.2/.pc/0000775000175000017500000000000012432202022012216 5ustar ianianruby-rails-3.2/.pc/.quilt_series0000664000175000017500000000000712432202022014724 0ustar ianianseries ruby-rails-3.2/.pc/.version0000664000175000017500000000000212432202022013674 0ustar ianian2 ruby-rails-3.2/.pc/.quilt_patches0000664000175000017500000000001712432202022015062 0ustar ianiandebian/patches ruby-rails-3.2/.pc/applied-patches0000664000175000017500000000000012432202022015172 0ustar ianiandgit/tests/worktrees/pari-extra_drs.tar0000664000000000000000000045400012546012252015522 0ustar pari-extra/0000775000175000017500000000000012303412325011227 5ustar ianianpari-extra/debian/0000775000175000017500000000000012303436436012462 5ustar ianianpari-extra/debian/copyright0000664000175000017500000000066712301222502014407 0ustar ianianThis package was debianized by Bill Allombert ballombe@debian.org on Fri, 17 Nov 2000 17:59:46 +0100. It was downloaded from ftp://pari.math.u-bordeaux.fr/pub/pari/packages Copyright: PARI/GP is copyright 1989-2006 by the PARI group and distributed under the terms of the GNU General Public License. On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. pari-extra/debian/README.Debian0000664000175000017500000000147712301222502014515 0ustar ianianpari-extra for Debian ---------------------- This package used to contains optional data files fo PARI/GP. It is now a dummy package and it is replaced by 3 packages: pari-galdata: Galois Resolvant files for the polgalois function for degrees 8, 9, 10 and 11 pari-elldata: PARI version of the Elliptic curve data by J. E. Cremona, , for use with ellsearch, ellidentity and ellgenerators. pari-seadata: modular polynomials for p < 500, for use with ellap. These polynomials were extracted from the ECHIDNA databases available at and computed by David R. Kohel (kohel@maths.usyd.edu.au) University of Sydney Feel free to remove it. -- Bill Allombert Fri, 05 Aug 2011 14:18:43 +0200 pari-extra/debian/changelog0000664000175000017500000000420412303436436014334 0ustar ianianpari-extra (3-2~dummy1) unstable; urgency=low * Dummy change for dgit testing. Add nonexistent build-dependency to break builds in case this package escapes somehow. -- Senatus Romanus Sun, 17 Nov 2013 14:34:17 +0000 pari-extra (3-1) unstable; urgency=low * This package is now a dummy packages, replaced by pari-galdata and pari-elldata. * debian/control: - Depends on pari-galdata, pari-elldata and pari-seadata. - Suggests: galpol * Bump standard version to 3.9.2 * Move to debhelper v5 (May JoeyH dream of swirls). -- Bill Allombert Fri, 05 Aug 2011 14:07:02 +0200 pari-extra (2.1-1) unstable; urgency=low * New upstream bugfix release - elldata was missing some curves. * debian/watch: removed (cannot work). -- Bill Allombert Wed, 4 Oct 2006 17:36:44 +0200 pari-extra (2-1) unstable; urgency=low * New upstream release - this release is not compatible with PARI/GP 2.1. - this release include galdata and elldata. * Bump standard version to 3.7.2. * Update description. * Move to debhelper v4 (May JoeyH dream of swirls). -- Bill Allombert Sat, 3 Jun 2006 16:48:44 +0200 pari-extra (1-4) unstable; urgency=low * Bump standard version to 3.6.1. * update FTP site in debian/watch and debian/copyright. * description: Rename Université to University to avoid trouble with non latin-1 charsets. Thanks Denis Barbier. Closes: #245594. -- Bill Allombert Tue, 27 Apr 2004 19:04:04 +0200 pari-extra (1-3) unstable; urgency=low * Bump standard version to 3.5.9. * Rebuild with new debhelper to remove the /usr/share/doc transition code. * Clean up debian/rules. -- Bill Allombert Sun, 6 Apr 2003 17:10:00 +0200 pari-extra (1-2) unstable; urgency=low * Improved description. -- Bill Allombert Wed, 17 Oct 2001 19:35:11 +0200 pari-extra (1-1) unstable; urgency=low * Initial Release. Closes: BUG#99173 -- Bill Allombert Fri, 9 Mar 2001 14:49:27 +0100 Local variables: mode: debian-changelog End: pari-extra/debian/control0000664000175000017500000000245012301222502014047 0ustar ianianSource: pari-extra Build-Depends: debhelper (>=5), package-does-not-exist Section: math Priority: optional Maintainer: Bill Allombert Standards-Version: 3.9.2.0 Package: pari-extra Architecture: all Depends: pari-galdata, pari-elldata, pari-seadata, ${misc:Depends} Suggests: pari-gp, pari-galpol Description: PARI/GP Computer Algebra System extra data files PARI/GP is a widely used computer algebra system designed for fast computations in number theory (factorizations, algebraic number theory, elliptic curves...), but also contains a large number of other useful functions to compute with mathematical entities such as matrices, polynomials, power series, algebraic numbers, etc., and a lot of transcendental functions. PARI is also available as a C library to allow for faster computations. . Originally developed by Henri Cohen and his co-workers (University Bordeaux I, France), PARI is now under the GPL and maintained by Karim Belabas with the help of many volunteer contributors. . This is a dummy package which depends on pari-galdata: the Galois resolvants for the polgalois function. pari-elldata: the elliptic curves database for the ellsearch function. pari-seadata: the modular polynomials for the ellap function. It can be safely removed after the upgrade. pari-extra/debian/rules0000775000175000017500000000145312301222502013526 0ustar ianian#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Modified for pari-extra by Bill Allombert 2001 # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 build: build-stamp build-stamp: dh_testdir touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs # Build architecture-independent files here. binary-arch: build install binary-indep: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs dh_link dh_strip dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install pari-extra/debian/compat0000664000175000017500000000000212301222502013641 0ustar ianian5 pari-extra/.git/0000775000175000017500000000000012303436436012101 5ustar ianianpari-extra/.git/ORIG_HEAD0000664000175000017500000000005112303436420013332 0ustar ianian0718dd7b55be65093691560d064602557c17fb7a pari-extra/.git/info/0000775000175000017500000000000012301222477013030 5ustar ianianpari-extra/.git/info/exclude0000664000175000017500000000036012301222477014403 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ pari-extra/.git/dgit/0000775000175000017500000000000012301222530013012 5ustar ianianpari-extra/.git/dgit/tag.tmp0000664000175000017500000000030612301222530014306 0ustar ianianobject b270d9bebf4b063fb6808ce4bebee4c8af65b806 type commit tag debian/3-2_dummy1 tagger Senatus Romanus 1384698857 +0000 pari-extra release 3-2~dummy1 for unstable (sid) [dgit] pari-extra/.git/dgit/tag.signed.tmp0000664000175000017500000000126012301222530015556 0ustar ianianobject b270d9bebf4b063fb6808ce4bebee4c8af65b806 type commit tag debian/3-2_dummy1 tagger Senatus Romanus 1384698857 +0000 pari-extra release 3-2~dummy1 for unstable (sid) [dgit] -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJTBSVYAAoJEKPby8A5sT2K6BgIAIB9R/QElsiNL5X223eR8bBP K0AefPlhuzjCW6HoX/QgaY/nGMUqjDwWgUbGzePQQ77fYqVQAxWJGKTGJkjpBQIR SU0K/WYSjfkCJ57gEggt9wjSZp+R4hrc03ld5Z+/gStxk9dj+eqo3VPAu6QdfSeL j+pug/x3cyEREr6Dkz2BgLe1HLR4VXCneqBTpzs7GIPpxq9v/Iu2eYspETIXeRYC cu9wB1jz67ScTzSgctickECQ47BvdHfFNNbmCGh5ugNOb2TbiZ5Whhjg8fxKZ/yJ HQ5BL+QlUTRcuriMfqBjZdty38AjFIMUF7UReoY7cdALZa9gxx4QVs1Ceqix5ms= =Y0on -----END PGP SIGNATURE----- pari-extra/.git/dgit/unpack/0000775000175000017500000000000012301222527014301 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra_3.orig.tar.gz0000664000175000017500000000017112301222527020664 0ustar ianian‹¿Ü;NíÎ1 Â@Ð=Ê^ ˜MØÝóD°¤5‚Ç7‚6Z%Õ{ÍÀŸ)þujswy¬mêÆSØG¿©9¿2ÕÜæ[H©¤RsÊvO©ŽCˆy§¾ÜoëÔb çyY~íþõp 'ƒžÜ{(pari-extra/.git/dgit/unpack/pari-extra-3/0000775000175000017500000000000012301222527016515 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/debian/0000775000175000017500000000000012301222527017737 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/debian/copyright0000664000175000017500000000066712301222527021703 0ustar ianianThis package was debianized by Bill Allombert ballombe@debian.org on Fri, 17 Nov 2000 17:59:46 +0100. It was downloaded from ftp://pari.math.u-bordeaux.fr/pub/pari/packages Copyright: PARI/GP is copyright 1989-2006 by the PARI group and distributed under the terms of the GNU General Public License. On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. pari-extra/.git/dgit/unpack/pari-extra-3/debian/README.Debian0000664000175000017500000000147712301222527022011 0ustar ianianpari-extra for Debian ---------------------- This package used to contains optional data files fo PARI/GP. It is now a dummy package and it is replaced by 3 packages: pari-galdata: Galois Resolvant files for the polgalois function for degrees 8, 9, 10 and 11 pari-elldata: PARI version of the Elliptic curve data by J. E. Cremona, , for use with ellsearch, ellidentity and ellgenerators. pari-seadata: modular polynomials for p < 500, for use with ellap. These polynomials were extracted from the ECHIDNA databases available at and computed by David R. Kohel (kohel@maths.usyd.edu.au) University of Sydney Feel free to remove it. -- Bill Allombert Fri, 05 Aug 2011 14:18:43 +0200 pari-extra/.git/dgit/unpack/pari-extra-3/debian/changelog0000664000175000017500000000420412301222527021611 0ustar ianianpari-extra (3-2~dummy1) unstable; urgency=low * Dummy change for dgit testing. Add nonexistend build-dependency to break builds in case this package escapes somehow. -- Senatus Romanus Sun, 17 Nov 2013 14:34:17 +0000 pari-extra (3-1) unstable; urgency=low * This package is now a dummy packages, replaced by pari-galdata and pari-elldata. * debian/control: - Depends on pari-galdata, pari-elldata and pari-seadata. - Suggests: galpol * Bump standard version to 3.9.2 * Move to debhelper v5 (May JoeyH dream of swirls). -- Bill Allombert Fri, 05 Aug 2011 14:07:02 +0200 pari-extra (2.1-1) unstable; urgency=low * New upstream bugfix release - elldata was missing some curves. * debian/watch: removed (cannot work). -- Bill Allombert Wed, 4 Oct 2006 17:36:44 +0200 pari-extra (2-1) unstable; urgency=low * New upstream release - this release is not compatible with PARI/GP 2.1. - this release include galdata and elldata. * Bump standard version to 3.7.2. * Update description. * Move to debhelper v4 (May JoeyH dream of swirls). -- Bill Allombert Sat, 3 Jun 2006 16:48:44 +0200 pari-extra (1-4) unstable; urgency=low * Bump standard version to 3.6.1. * update FTP site in debian/watch and debian/copyright. * description: Rename Université to University to avoid trouble with non latin-1 charsets. Thanks Denis Barbier. Closes: #245594. -- Bill Allombert Tue, 27 Apr 2004 19:04:04 +0200 pari-extra (1-3) unstable; urgency=low * Bump standard version to 3.5.9. * Rebuild with new debhelper to remove the /usr/share/doc transition code. * Clean up debian/rules. -- Bill Allombert Sun, 6 Apr 2003 17:10:00 +0200 pari-extra (1-2) unstable; urgency=low * Improved description. -- Bill Allombert Wed, 17 Oct 2001 19:35:11 +0200 pari-extra (1-1) unstable; urgency=low * Initial Release. Closes: BUG#99173 -- Bill Allombert Fri, 9 Mar 2001 14:49:27 +0100 Local variables: mode: debian-changelog End: pari-extra/.git/dgit/unpack/pari-extra-3/debian/control0000664000175000017500000000245012301222527021343 0ustar ianianSource: pari-extra Build-Depends: debhelper (>=5), package-does-not-exist Section: math Priority: optional Maintainer: Bill Allombert Standards-Version: 3.9.2.0 Package: pari-extra Architecture: all Depends: pari-galdata, pari-elldata, pari-seadata, ${misc:Depends} Suggests: pari-gp, pari-galpol Description: PARI/GP Computer Algebra System extra data files PARI/GP is a widely used computer algebra system designed for fast computations in number theory (factorizations, algebraic number theory, elliptic curves...), but also contains a large number of other useful functions to compute with mathematical entities such as matrices, polynomials, power series, algebraic numbers, etc., and a lot of transcendental functions. PARI is also available as a C library to allow for faster computations. . Originally developed by Henri Cohen and his co-workers (University Bordeaux I, France), PARI is now under the GPL and maintained by Karim Belabas with the help of many volunteer contributors. . This is a dummy package which depends on pari-galdata: the Galois resolvants for the polgalois function. pari-elldata: the elliptic curves database for the ellsearch function. pari-seadata: the modular polynomials for the ellap function. It can be safely removed after the upgrade. pari-extra/.git/dgit/unpack/pari-extra-3/debian/rules0000775000175000017500000000145312301222527021022 0ustar ianian#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Modified for pari-extra by Bill Allombert 2001 # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 build: build-stamp build-stamp: dh_testdir touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs # Build architecture-independent files here. binary-arch: build install binary-indep: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs dh_link dh_strip dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install pari-extra/.git/dgit/unpack/pari-extra-3/debian/compat0000664000175000017500000000000212301222527021135 0ustar ianian5 pari-extra/.git/dgit/unpack/pari-extra-3/.git/0000775000175000017500000000000012301222527017356 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/info/0000775000175000017500000000000012301222527020311 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/info/exclude0000664000175000017500000000036012301222527021664 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ pari-extra/.git/dgit/unpack/pari-extra-3/.git/objects0000777000175000017500000000000012301222527023355 2../../../../objectsustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/branches/0000775000175000017500000000000012301222527021143 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/description0000664000175000017500000000011112301222527021615 0ustar ianianUnnamed repository; edit this file 'description' to name the repository. pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/0000775000175000017500000000000012301222527020501 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/applypatch-msg.sample0000775000175000017500000000070412301222527024641 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/prepare-commit-msg.sample0000775000175000017500000000232712301222527025423 0ustar ianian#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/post-update.sample0000775000175000017500000000027512301222527024160 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/pre-rebase.sample0000775000175000017500000001144212301222527023736 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/update.sample0000775000175000017500000000703312301222527023174 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/commit-msg.sample0000775000175000017500000000160012301222527023760 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/pre-commit.sample0000775000175000017500000000325012301222527023763 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- pari-extra/.git/dgit/unpack/pari-extra-3/.git/hooks/pre-applypatch.sample0000775000175000017500000000061612301222527024643 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : pari-extra/.git/dgit/unpack/pari-extra-3/.git/HEAD0000664000175000017500000000002712301222527020001 0ustar ianianref: refs/heads/master pari-extra/.git/dgit/unpack/pari-extra-3/.git/config0000664000175000017500000000013412301222527020544 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true pari-extra/.git/dgit/unpack/pari-extra-3/.git/index0000664000175000017500000000111012301222527020401 0ustar ianianDIRCS%WS%Wþ Aý¤èè?ŒLD¿™^Ö}·H²üý«ÉëÉdebian/README.DebianS%WS%Wþ Aÿ¤èè„ {[tÙ˜;Ïö%±ŠŠÏŒJw:debian/changelogS%WS%Wþ B¤èè~Öÿ‚ÞkÌ*x$?ÉÅM>õ¬Úi debian/compatS%WS%Wþ B¤èè(,Œ:nY Yó‚ÄF@kfÇyù÷yEdebian/controlS%WS%Wþ Aû¤èè·†¨ÖôD$³«Ò±lN¨Tdebian/copyrightS%WS%Wþ Bíèè+0ûÀÖä9ÃqŒhØËLohÖué debian/rulesTREE86 1 ãY=‘õ’ {—@ ¯¥Þ¬-\debian6 0 ã!hVŽÍ¯[#ÆŸ¨¢!3jè ò j¦zWù¡;†VÄ (Àpari-extra/.git/dgit/unpack/pari-extra-3/.git/refs/0000775000175000017500000000000012301222527020315 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/refs/tags/0000775000175000017500000000000012301222527021253 5ustar ianianpari-extra/.git/dgit/unpack/pari-extra-3/.git/refs/heads/0000775000175000017500000000000012301222527021401 5ustar ianianpari-extra/.git/dgit/changelog.822.tmp0000664000175000017500000000053512301222526016005 0ustar ianianSource: pari-extra Version: 3-2~dummy1 Distribution: unstable Urgency: low Maintainer: Senatus Romanus Date: Sun, 17 Nov 2013 14:34:17 +0000 Changes: pari-extra (3-2~dummy1) unstable; urgency=low . * Dummy change for dgit testing. Add nonexistend build-dependency to break builds in case this package escapes somehow. pari-extra/.git/dgit/tag.tmp.asc0000664000175000017500000000075212301222530015060 0ustar ianian-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJTBSVYAAoJEKPby8A5sT2K6BgIAIB9R/QElsiNL5X223eR8bBP K0AefPlhuzjCW6HoX/QgaY/nGMUqjDwWgUbGzePQQ77fYqVQAxWJGKTGJkjpBQIR SU0K/WYSjfkCJ57gEggt9wjSZp+R4hrc03ld5Z+/gStxk9dj+eqo3VPAu6QdfSeL j+pug/x3cyEREr6Dkz2BgLe1HLR4VXCneqBTpzs7GIPpxq9v/Iu2eYspETIXeRYC cu9wB1jz67ScTzSgctickECQ47BvdHfFNNbmCGh5ugNOb2TbiZ5Whhjg8fxKZ/yJ HQ5BL+QlUTRcuriMfqBjZdty38AjFIMUF7UReoY7cdALZa9gxx4QVs1Ceqix5ms= =Y0on -----END PGP SIGNATURE----- pari-extra/.git/objects/0000775000175000017500000000000012303436414013526 5ustar ianianpari-extra/.git/objects/b3/0000775000175000017500000000000012303436414014032 5ustar ianianpari-extra/.git/objects/b3/7f56463a29b60d48ba34351fe6cc13da675cfc0000444000175000017500000000006012303436414021236 0ustar ianianx+)JMU06f01…”Ô¤ÌÄ<†e¯L‘™·æWð ý£‚Ö—¹<µ8½6pari-extra/.git/objects/a6/0000775000175000017500000000000012303436414014034 5ustar ianianpari-extra/.git/objects/a6/eaa0941c9eacd00a53982fc5113bd30a492a090000444000175000017500000000032612303436414021213 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:Cùc#­¸ÝmR“ÏÏvÝ­äêõ$¦(?· ±„¡îÚÿ¦{Ùg´*TìOõµûºFäV&\E^IQ~ƒNU^$Oäç¦#nÙiÇ+~¯t…+)¨,ÊLÏ(ah“Zqí‹‹ÊæÕ—6ÊåÈÉù­*275U(*ÍI-f0ø}àÚËÃ…=7Nûä‹f\+}YmƒZÆpari-extra/.git/objects/3b/0000775000175000017500000000000012301222501014016 5ustar ianianpari-extra/.git/objects/3b/61dfd360f5b264280b59681f4bc300b24f65690000444000175000017500000000145112301222501020727 0ustar ianianx­•ÛnÛF†{­§ 7N"R<ɪØj'Mâ n Ðë%wB-¼Ü%ö EÔçÈ‹uv)9 :PÑ;r@ÎrþùþŸÔ ä˲øn`F$øÙge’¿¯¬cÄÀ›U»ýIêÍdð îWÂÂÀÚGÖ!Ð¥Ò`À}ßo÷e;ƒƒd-rhB•ºwLræ0Å© ŒE”±˜ÆÆÁÔ¬ÕÊ-ëøToq@Å-huÐgzÐ t Y8&tHàÎwZgk ó-ãA—¾€æSœk4VPw§¡L—i¹Ök ú¦Ê ¬çpvͶðQãöpƒ¬ý ìFi_¦¤M’À¥.¤Ô}ƒÆÁ ¯gKµé~xgIJ9\øŠ,Ï!¯êlQg¼ÎŠ,›Lþ¹Ž"Í¿±ßq~°.~Rã»Oâ3É/‘YÜ©°“6ÌB/¬ª«{„Ö›5Úù7̵«šô$‡³–)¥l´y*÷ŠH‹S¾»¿+h\¡‚I‚q#9щON¶Ft+·ìI˜nQ1ðA‰è?÷å¯`·§Ûm¸ck-8Pøý"#ÏŠÌ*i»*É¡]1cÑÙ”b‰©GKq¡‡Kf&…7R[$÷¿(ªù|YdÓ{S(p1˜ mEQYgäÔ£çIù_¥SêÄÐ¹ÅÆ ÉGd¹úkú£#Á­fÞš™¥ÑqÆuK 1E»!ÖjŽc³7жµßŽñ28ý„˜ºóŠÐ:ßÏ_çYeÇ œ'ųó_õƒ‰r`¾&ÆI¾ØÇ …æ².ç5¥ç‘ÐüVd^)’‹I¢0ÆäWN.Þ¿X.óEyŠP1Ïa ×,‚ó¼ZÖ„Îë,yþ›né°5ýÃ?ÕÖ“žÖTï6“êC©»É¯Š×“¿cªpari-extra/.git/objects/0d/0000775000175000017500000000000012301222503014017 5ustar ianianpari-extra/.git/objects/0d/087b5b74d9983bcff625b18a8acf8c4a07773a0000444000175000017500000000165012301222503021250 0ustar ianianx­VËrÛ6íZ_qf²q‘&)ÊŠØ´;iRgêÔãÇt ‘ׯ À dmú?ùŽüX/A)±;®Zwª¼ÀyÜ.”Y K_%ßµÂʈî¼8˜DÙU×4›ô9:í¼X(ú­I—›”YFÀ ¼ë— \ ]nŒEUKOÎK]ÇÀqUAMwÒyÒTUTQ˃¾¼á:ÀÂ’¸þu¥p¿”­(o'WŠ–œihiÖ1ïE¸$-|çpa¡ùûµk·oèN4­¢¸4ÍÀe§ÇHgødVÈ’t‚4/&yÁ3/þŒFqï|uÿL|zd;…àG¶}+¼äŽÅZú%Î/N?œƒÉÜ9ãácºT]E½Iv&Å–´œ=–™ÅÙ°æºåg‰-ãJ+[ÏžæñRþ¿yéRxfy‚޲̿ú–Ó(ß›e{P ̽`§”ï¯Îá$Ãå¨Ú6npNèįÜn¬¬—~àá1.8¶µ–¡ÿü—Ï}»}ö±±2²‡A·2ø™ÓŠÕÕQÚç®uä]Œ+Nà[Çq¡Ù'Â.$Ùo•qÄÝÿ,˧Óyþ¤6½êhŒl†ãÖöÔæHçEÂú¨Óhò_©rê„й p9 –ÕÜÕßÒ‡Ù:’¯Âaçì¡cètX™’šµèC¬4 ÅÞrhVk§ŽíTßéáÎøw1n íðó­1+Ò¤H’Ç8²½øO›Ö†@¹ç‚'&Ä ßXÛ8áМ“iÁéùHhþSdžj¦K(vaˆÉo>9¹þðl>Og“§òsœ‰`”çù¼`ë¼LÒ>Ï1%o¶âk°‰pŨa™Š­2Ñðî L=úIWÅèO×N´þpari-extra/.git/objects/info/0000775000175000017500000000000012301222477014461 5ustar ianianpari-extra/.git/objects/28/0000775000175000017500000000000012303417051013753 5ustar ianianpari-extra/.git/objects/28/53ffafcf9af960fbf9e293a9b2a0bbd74929900000444000175000017500000000036612303417051021432 0ustar ianianxKNÄ0 @Y÷Þ#ª¤ù5B ±[8‰i3¥I•¤‚¹=à ðÊ–í§gû¼ï±Pæ®"–Kïç\¸Y)†y1s.ƒeΆY£B¡ J x0L3dN™>ãúÚDvÖœ[-H+ Þhmô4àÙÖ\à ¼£ßjNð/·ìÙ¯Ë6.Ý Q c.ËxnOÀ…f©¹4pÏz þW·Ñ?@B Éåü^Ï}¿‚_1-Ý,,ýj‹i^B€”}ÇÚº¸3~†‡@G/(ù+´ ®n·N…˜Àc%hk¬pôðƒ©z<¨BÍ;­ùk~é¹vpari-extra/.git/objects/1d/0000775000175000017500000000000012301222502014017 5ustar ianianpari-extra/.git/objects/1d/7060a0b5714db1132e98611963e65edc7667620000444000175000017500000000052112301222502020567 0ustar ianianxÍNã0…Yû)Ž4`hHÒ„i ˆBb5¼À}›Xø'²vúö8©X°ewõéú;>WzkuB[·g)0£é¶¹Qõ¦ieµmÚvëR6²)[Y²j~©nWsU šÒàµ1x0ÆÛŽCÂ}G§ù¯âN“+|èÿ ZWuÛÜ”uŸeU–B.©‰¿û^ˆ‘‚^ñÿçëUuÉÅDá;L¡g'¿?\âmÐ#Éwêytþ‚š¬=~âx…À£!É ÝL³½'£(È©¬Á ²Y`±ˆO¯¥w)xs»l­ðÄ#;áÝÏÕÁl=È4ÇÌF`…SßsLñ9ôf zœìˆÜÏ) {Qg{òXÛ¢^V^ýžg’ÿ4°ói÷-Î_éˆÏÇg¨ÀdáwˆL¼(„ømGRî¼ Þ" rÐ{æ«pari-extra/.git/objects/7e/0000775000175000017500000000000012301222501014025 5ustar ianianpari-extra/.git/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da690000444000175000017500000000002112301222501021540 0ustar ianianxKÊÉOR0b0å 1pari-extra/.git/objects/86/0000775000175000017500000000000012301222501013747 5ustar ianianpari-extra/.git/objects/86/1812a8d6f44424b3abd2b11e6c1e1e4ea810540000444000175000017500000000047312301222501021050 0ustar ianianxmËNÃ0EÙÖ_qw,h“”G!YQ@T•ªR!Øc'“ı#?hË×ã¤bÄÆÙwΜ±PFàú*?{k¥CÏËOÞöÜ¡"!¹–ßTAñ •ÂR)Ó ²ž ~*ïO©ÄØFãÙÊ)æ·Øš/\fYëâ&/®¸ÈæY–0¶ö'¸Ùkexáµ5jßiÚs+“Žû6 3alE<’Ú¦}ã[ón“Ð&[’ æWÅ Öû’ âxh‰ÈF5Iö€!Ÿz-)°ÁÎLÖ šç2­Ñí=çËéóOeÅVej.3â¼Ú 9¨<…g)U³åý΢p‹Ú`c(@¸£y_lSÏ‘Ü}f ³–ÙGâÏW¯;ÍÙæ­)Ú’q#o¦™à#Y¯9=Ù«çyÒ-vÎßs’áì‡ÕÛé8ÁÊyE˜~ÁKýÀ´%±ë9I™¤e‰U”uÂíúsM*Ã>qEXë`ÅhÞ‡€ÜÎìÅ€v‚­3ÉF**,ûÌku>Ì*¾gzÙPi&zéìzÍ›QsáÁY°/Á\¤:g nÑ8~ì)8³EC±,Ÿð¹%ùðà?Ï{P¾á¿Ü•‚°:ñî'·û1о·3ÐàTâlžæçÇÓ÷w$Zh¶¹wž·åýa›«›¤±ó¨ˆY‹o7Íbpari-extra/.git/objects/a4/0000775000175000017500000000000012301222501014016 5ustar ianianpari-extra/.git/objects/a4/e028bc92700ce80ce3068d4f21ec45ed66d81c0000444000175000017500000000032512301222501021222 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:ƒuâýË _7¥hpGfÈ{fØäŸš S”Ÿ[XÂPwíÓ½ì3Z*ö'úÚ}]#r ¡"¯¤(?‡K'9wû)Î×R’¼ ЦÇß?Þ7¤ ²(3=£„¡MBhŵ/.*›W_Ú(—#'ç·B ¨ÈÜÔT¡¨4'µ˜Áà÷kO,ödÜ8í“/šq­ôe='hYÛpari-extra/.git/objects/e3/0000775000175000017500000000000012301222503014023 5ustar ianianpari-extra/.git/objects/e3/2168568ecdaf5b2390c69fa8a221336a1ae88f0000444000175000017500000000032612301222503021157 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:/GutÉÍÖç¿©nìê:ßãÅ^nS”Ÿ[XÂPwíÓ½ì3Z*ö'úÚ}]#r+®"¯¤(?‡A§Ç*/’'òsÓ7‡ì´ã•?¿WºÂ•Te¦g”0´I­¸öÅEeóêKårääüV„™›š*•æ¤3ü>pí‰åឌ§}òE3®•¾¬¢f[pari-extra/.git/objects/e3/593d91f58d92140a7b97400bafa5de7fac2d5c0000444000175000017500000000006012301222503021310 0ustar ianianx+)JMU06f01…”Ô¤ÌÄ<†ÇŠa}g×G+O86Å"Eã,©ýq†pari-extra/.git/objects/07/0000775000175000017500000000000012303436414013754 5ustar ianianpari-extra/.git/objects/07/18dd7b55be65093691560d064602557c17fb7a0000444000175000017500000000027112303436414020611 0ustar ianianx¥1nÄ ESsŠé#Y0Þ‘VQŠ4Ù[ ƒË8bq‘Ûíaõ›ÿôôùØ÷µñøÖjJì,“wÞ’Áàut—@ÖÙi”ä™GÉÏ «_ª©ôáe²"$,H‚^KL-a0¤Cˆ³Cƒ¨m9*|Sñv? \ןgûäe¥º ¹”TâpÔ<œÛŒ­sF{ ïºGñC·¥—AêëÜ÷?à…JN Ý,æþCK÷¶–<¨‹|Wòpari-extra/.git/objects/51/0000775000175000017500000000000012303417044013751 5ustar ianianpari-extra/.git/objects/51/88fe8b5283c534fb48b34c2e78aecda75918410000444000175000017500000000032612303417044021125 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:Ãf'_osÖÌ=ÒóŽL÷Ó2]( S”Ÿ[XÂPwíÓ½ì3Z*ö'úÚ}]#r+®"¯¤(?‡A§Ç*/’'òsÓ7‡ì´ã•?¿WºÂ•Te¦g”0´I­¸öÅEeóêKårääüV„™›š*•æ¤3ü>pí‰åឌ§}òE3®•¾¬tÒYpari-extra/.git/objects/b2/0000775000175000017500000000000012301222503014017 5ustar ianianpari-extra/.git/objects/b2/70d9bebf4b063fb6808ce4bebee4c8af65b8060000444000175000017500000000036112301222503021535 0ustar ianianx¥ANÄ0 EY÷Þ#ª¤m’‰„HlàNì¶™Ò¤JRÁÜžˆ9eËÒÓó÷ißC…Q™‡š™GeG²rV²ƒœgÍ$„ñ™Ñ¤|w`æXA’Z pÊȉœ”ãÀö¢¥´zd­˜¼ÑÚè¡Ã³®)ÃFøD¿•á9\ïÓ«_æ­_šAäH}ÊKn/ G;\&-'¢¥óº•ÿ êÞÏ}¿_1. s3£¥õP¹Ô—àbŠüJmJàÎðEOÄG[8úÔ.3n÷KÁca¨k(p´Ç°¹x<¸@I;¯é»ï~î5vÓpari-extra/.git/objects/ba/0000775000175000017500000000000012301222530014076 5ustar ianianpari-extra/.git/objects/ba/9997f44cd43261b0b892c3460e80935f5229950000444000175000017500000000106012301222530020613 0ustar ianianxm‘Io›@F{æWÌ1••°oUS•!cÊjWUÅÀ0³/ ö¡¿½Nsí»|Ò;¼Ë7%HŠò©E%N'€8™ÉT„Q. Fâs$)Œ’báf0R%É%)ŒDM—ƒ´­ëb¢¦[#èHš¿ç~gs]_ØwKðÜ$Ó<¿­“æ¶_Ç®¾ã%©» ?Ü ßË+‚¤*Š(ƒsƒ¢ºd(îñ2 p…“ƒ[ùÏGäíæfœTap7Ùgð3#Åô‹º¦å×tA`™ŽF¾ñÏS;<ŒEÛ|f3»&xe„–w¦ÑvÑÌËgŠ*<#…š5¢™ÐÛ„0ØÅšÖnŒ­‹.Š&Ž!·• ±4 ª>íÕX8¶xà8û ‚.µe4œ»Õi¾–ú^Z·Ú#IL7æKÔ—Oo{!óŠ]Ï“å<îwž¶ì7æ647粃žåSAÄlé}”ùY߈21™Ô·28v+_8 )ÃW™x\Ñ$˜–³š•+Ü·üÎÕfÉËòÛT¹êfB/|z1|cžÎW³kÛv½Á= »ë(›–Û-½úJ[3‡ã±3Bë€ýX§ÒY}ƒly•ä ¯I§"=º'Èð5[çÏŽƒjÝ<‰3q~ .DÅQÜŸN%Qòe{¤/jí‰Ð^yUúé</yËc6]xE+Ÿ­—èYŽ|ÜÆršiö1QɲÞnduÜ‹XÔcÌ´ÍÇ›†óô¿/ÿênÛÊpari-extra/.git/objects/30/0000775000175000017500000000000012301222501013734 5ustar ianianpari-extra/.git/objects/30/fbc0d6e439c3718c68d8cb4c6f1568d675e97f0000444000175000017500000000066012301222501021206 0ustar ianianx]RQoÔ0 æõò+ŒöÜ» ÁM€àÄÄ ‰ 1 ‰§)iÝ6ZWNŠîþ=NÚ¢õ^Z;ù>ÛßçGÞ—å««×»1ðÎX¿ëõ3BѨ+xÐýàj4VûÄNGƒDrÜ¡·ýv÷ g¶m¡ÜïßA¤ô߃9ÃwÂ31„ýAµm,ÖÐàÙxЬî`ƒ/ÎQo#|0zŠ?O#l‰ÛOðæúº”2¾¢¾Ge$+sÄ‘=‡¿È†BO5JC< $žŸ~ßþ:Ü?Ü~,•2£uõ ä_¢ަøFmêî)bˆµeµ‰4VÝ «*‡Ú_Àf Eµá^<\qRÉLSÊziéÜÜÝlUE’qȈ™$%úIh®:±íXX_ã€òS›¶Õ!‹²UÍç"aç–0#¦»L½¼\™p9×2UáåxxÊfuVuÚ·è¨ ¡Îúç„Èv'»¡a¢5ö$Ϫ_Õ)-ÊÞ}dr9íë·aœ‘y™ 7‹9/Ä-IrAmïïþ,zóV–ûìÄ’$ðÿ·ìÎápari-extra/.git/objects/8c/0000775000175000017500000000000012301222501014024 5ustar ianianpari-extra/.git/objects/8c/4c1644bf995ed67db748b2fcfd8fabc919ebc90000444000175000017500000000100512301222501021563 0ustar ianianxmSËnÛ0ìY_±Çµ))N׌¸q’ºŠÀM?`%®-Ö)”Uý}–ô=”'Ü™!+m+˜ÏÊ:5¥¿Á!쬃5U M6ýïʲ·Fyè°>àž ÷$!X¨­ ¨ŒÛe jNiò ¯«í&y° ÀíÆ€ û¶³  *Ý:ê4Ö \0»PùEÆ¥,t:b/àµe¬-y«h•ÍAh:«¹4VìzSGUi:I{Gä3à5ŸÀ— ”Dî²<>DÑp$çc¯Ý%Ô'­XCÝ»#¦d™ß< xtÔòð“~ß„Ð-ò|Ñbh¼06µèyǨѦüÕù.tyi9I ÙÓ0¨Ð‹ñ„®n&q«$™ Â˜óyO†ë¼8‹çâ“;­•½FmmêŸáîŠâJìD¢}kÈ'÷®m9‚ô>êÀ©ìœmO^<~Û¬®’ ú³©xD¥±ÒàbÕ’ÏFô~”‚d/°Ï¶!ËÊçËD£¨mÛõ‘Š]ãQIØ ø ácª8úÎ'ømTÊŠÝá¬~ÒИeÏÄM;N<¾Ò‡¦»Ó)|UZÃJkÛVäXl…§ýƒL_@X·_<;5âVýnв„òvQη3ø\ÜEö«»pari-extra/.git/objects/2c/0000775000175000017500000000000012301222503014020 5ustar ianianpari-extra/.git/objects/2c/8c3a6e590c59f382c446406b66c779f9f779450000444000175000017500000000133512301222503020724 0ustar ianianxeT]Û6ì³~Å>ôá œÕ4Ab$AïRôzh‚q’÷¹’ˆP¤À;jÿž!ew `¶È™Ug}G<{úä—½ÏAÉ–ff#_Ràæ6«7Ë,NÇ-iéF±³ºzõòÏß®qU}æA6ÚKÜ8ŸPfbjö¢’ñnK§±ÙãƒIË–ü\³mÞ²q _ [º5ÖÒµ~ê$$zÑñúû/t3ìZ†WÍ>±ÓtÜ|’+ö³öyû´}Ò4»•Ä#â7A&FPÄæ"¢ÊØjN\±öá¿(¼žýúu2QmO•ßš}‰ F¬ó©`³/¢ ¦JÜÒîæýýïw;zí§9'8vcéÓ~‰I&ªþRéC½±›K…‰Ät4ZìB9Š&u†àD\!´D38\è} žáûé*—#G.S)âÃBW=«„Qü¿^¸†/•“Q/^7GŠE*‡ƒÄ¶m1í.'”D6uz…¨å0ȹÜ÷äÑ+Þ}¶ õÙÕ$DJ¥ªZmi¬ÉÄÃ(¶$.™d$RÌj$Žå4%{»8?ô­Ù%àòÏôñH’jqàt¡ærì¢B€Ñ½.”ÚÕr*~Q|`c¹³R0½&k0/Øê%’NjϠ°jY}>ï‚ ²©i9ˆõ3&Ó-ô¯¸`ƒQ\å5¢Ÿò›£Ÿ‘dºúèÌ¡D:-tëƒÎ_èRÿm%p½$©t`¡¢Ž“îvo*ÜtÞ¤Úì?¤y¢[ˆ¨Fc •­-^Lì:x›]’ªÂÁgŒÕ‡¸ªøPèGHçiZÎ NÇÑ`2z}wÔÐi ÖEÚ–ŒÑ[â ÑÛ»«eåcÄ–”óÿè÷hùV„rWRä„ ØOl÷Ï@§½]&¯3²ù0?1x~XŸH±£N(r_ö.Èä˜÷eu‹€<µ€uó3kÖpari-extra/.git/objects/pack/0000775000175000017500000000000012301222477014444 5ustar ianianpari-extra/.git/objects/77/0000775000175000017500000000000012303436410013757 5ustar ianianpari-extra/.git/objects/77/a433322a5ebb861a93cf9b459b8b22454ae45e0000444000175000017500000000171312303436410021103 0ustar ianianx­VÛrÛ6ì³¾bgòâ$¢LŠ’U±i'vR'ÎÔ©Ç—é3HSƒ€’õÒÿÉwôÇzJ‰QÕº­^$B xvÏîæÊä§éô»FXѽ·i4þ½lëz=~ŽV;/rE? µébý£2«Áx·Ý ¡+­±(+éáÉy©«ï‰"\˜¦U­Ã¥©…æïWi^Ó½¨E£ÂÔ?¿Q9Äø§Ä¥ÄÉÉZ¿GÉݪanáVÒ*÷|ÓŒ©Ž•2uNÖãU.ú߯{l#c+–á©•CÄS·U׎¤kG<ËâN†ãoe8%Ñþ†|¤ÚÆùPRÞV·òžéWÄÚ°°ei%jé›&¨Ek—äÑ¿¾Xd|@Í”8(„ÖÆceìÝÓP³a‚_ Ï(ã#`–e“ÉN”OÁø\ðÈf Al÷FxÉa‚•ô \_ž¾»“¹UÆãÛt¡Ú’:‘lEŠ i=9{$3û=7 ßK,WXÙxÖT¿¾CK“ÿMKWÂZ½a™)þþ/XN¢ÉÞ,Ûƒò¨gî+- <½¾€“ —£jcÜ œàÄ/NnÖVV ßóð€˜ —[5áFËà?ÿÇçÎn_.»X„XY‚àÝ62è™ÓŠ»«£¤ Ö‘w#\óp¸sš5p"l.ÉŽðFGìþgãÉt:Ÿ<ɦ×-ñ´˜á¸±µaZÄìÔN¢ôßR;åÔ ¡sIa8ô’Õìê¯éÃlôŽä‘@8l=t KS0CBs/º+LIýao84wkÛÛªÎéaTþ³˜ SG[ü<5fYgq¼ËÀI´‚ŸÕ ò@Oª&Ä O¬MœphγtšqzîÍ¿‹Ì3Ít Å* 1ùU''7ïžÍçÉ,} Q!Ï1ǹB y>™g,—qÒåù/¦à‡-y vï7.ÔܦlÓ™¨­Q¦ü¬Ëlð'üKå9pari-extra/.git/objects/49/0000775000175000017500000000000012303417044013760 5ustar ianianpari-extra/.git/objects/49/14ccd1113b8556a70c38114d90b9d86a5a35be0000444000175000017500000000006012303417044021005 0ustar ianianx+)JMU06f01…”Ô¤ÌÄ<†ÀŽÝAÍGM~{löÑ«Xwvy¤„# ^špari-extra/.git/objects/4b/0000775000175000017500000000000012301222501014017 5ustar ianianpari-extra/.git/objects/4b/98c8d2845c1954a9b30c4c405c0ed47dbf2e100000444000175000017500000000006012301222501021137 0ustar ianianx+)JMU06f01…”Ô¤ÌÄ<†%4öL*àyÁó˜­×_ñëÛ´2‰vpari-extra/.git/objects/ac/0000775000175000017500000000000012303417013014103 5ustar ianianpari-extra/.git/objects/ac/03424d4b370569bc1b9ec49748562a35a11d590000444000175000017500000000165112303417013020735 0ustar ianianx­VËrÛ6íZ_qf²q‘")ÊŠØ´;iRgêÔãÇt 0…1°(Y›þO¾#?ÖKPJ¬Ž«Öj#"/p÷\–Ê”ÈÒWÉw-³2÷Þ2M£ìÞ5Í&}ŽN;ÏJ%¾Ggk¡«ÍʬG#àÞõ· Z2] Ü ^K/œ—ºŽΡ÷Òy¡=ÊN*qÑ ÍûJð†ê¥ìnø×AjTÌ ø¥thYuǨ¸pk…ƒ3XšuLûG®„f¾s¸4 ÓôýÚµ¿Û7âž5­qeš«N‘Îñɬ%éi^Ló‚V^&ôöq|ýðLtvzË2QüêoXN£ü`–@y<0÷‚œP¾¿¾€“—¢jÛ¸Á9¡¿vr»±²^ú‡Ä¸¤Øjn´ ýç¿|îÛíëe‹`+#9( ºÁÏ”¦P¤®ŽÒ>w­ÞŸ¦¾sšjà4šþWjg”:!t.Eƒe5uõ·ô!6†Ž¤‘ 0éœ8‚.&ÜTÄÓ¤Eb•áb(ö–@“Z;ul§úN3ãßÅT˜8Þá§©1/Ò¤H’Ç8²ƒøÏšÖ†@yà‚'&Ä M¬mœPh.Šé¬ ô|$4ÿ)2Ï4ÑŹ0Ää7ŸœÞ|x¶X¤óéSˆ yŽÎY0JÈó|Qu^&iŸç¿˜Š6[Ñì_"\1jH¦b«L4¼;(S~Ò¼ý Yµpari-extra/.git/branches/0000775000175000017500000000000012301222477013662 5ustar ianianpari-extra/.git/description0000664000175000017500000000011112301222477014334 0ustar ianianUnnamed repository; edit this file 'description' to name the repository. pari-extra/.git/hooks/0000775000175000017500000000000012301222477013220 5ustar ianianpari-extra/.git/hooks/applypatch-msg.sample0000775000175000017500000000070412301222477017360 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : pari-extra/.git/hooks/prepare-commit-msg.sample0000775000175000017500000000232712301222477020142 0ustar ianian#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" pari-extra/.git/hooks/post-update.sample0000775000175000017500000000027512301222477016677 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info pari-extra/.git/hooks/pre-rebase.sample0000775000175000017500000001144212301222477016455 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END pari-extra/.git/hooks/update.sample0000775000175000017500000000703312301222477015713 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 pari-extra/.git/hooks/commit-msg.sample0000775000175000017500000000160012301222477016477 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } pari-extra/.git/hooks/pre-commit.sample0000775000175000017500000000325012301222477016502 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- pari-extra/.git/hooks/pre-applypatch.sample0000775000175000017500000000061612301222477017362 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : pari-extra/.git/DGIT_ARCHIVE0000664000175000017500000000005112301222502013671 0ustar ianian1d7060a0b5714db1132e98611963e65edc766762 pari-extra/.git/logs/0000775000175000017500000000000012301222502013026 5ustar ianianpari-extra/.git/logs/HEAD0000664000175000017500000000422712303436644013477 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1392846146 +0000 reset: moving to refs/remotes/dgit/dgit/sid 1d7060a0b5714db1132e98611963e65edc766762 b270d9bebf4b063fb6808ce4bebee4c8af65b806 Ian Jackson 1392846147 +0000 commit: Dummy change for dgit testing. Add nonexistend build-dependency to break builds in case this package escapes somehow. b270d9bebf4b063fb6808ce4bebee4c8af65b806 b270d9bebf4b063fb6808ce4bebee4c8af65b806 Ian Jackson 1393434019 +0000 checkout: moving from dgit/sid to bad b270d9bebf4b063fb6808ce4bebee4c8af65b806 b270d9bebf4b063fb6808ce4bebee4c8af65b806 Ian Jackson 1393434071 +0000 checkout: moving from bad to dgit/sid b270d9bebf4b063fb6808ce4bebee4c8af65b806 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 Ian Jackson 1393434148 +0000 commit (amend): Dummy change for dgit testing. Add nonexistend build-dependency to break builds in case this package escapes somehow. 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 Ian Jackson 1393442016 +0000 checkout: moving from dgit/sid to v2 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 0718dd7b55be65093691560d064602557c17fb7a Ian Jackson 1393442060 +0000 commit: Dummy change for dgit testing. 0718dd7b55be65093691560d064602557c17fb7a 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 Ian Jackson 1393442078 +0000 checkout: moving from v2 to dgit/sid 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 0718dd7b55be65093691560d064602557c17fb7a Ian Jackson 1393442159 +0000 checkout: moving from dgit/sid to v2 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 0718dd7b55be65093691560d064602557c17fb7a Ian Jackson 1393442181 +0000 checkout: moving from dgit/sid to v2 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 0718dd7b55be65093691560d064602557c17fb7a Ian Jackson 1393442212 +0000 checkout: moving from dgit/sid to v2 pari-extra/.git/logs/refs/0000775000175000017500000000000012301222502013765 5ustar ianianpari-extra/.git/logs/refs/remotes/0000775000175000017500000000000012301222502015443 5ustar ianianpari-extra/.git/logs/refs/remotes/dgit/0000775000175000017500000000000012301222502016372 5ustar ianianpari-extra/.git/logs/refs/remotes/dgit/dgit/0000775000175000017500000000000012301222502017321 5ustar ianianpari-extra/.git/logs/refs/remotes/dgit/dgit/sid0000664000175000017500000000046712301222531020034 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1392846146 +0000 dgit fetch 1d7060a0b5714db1132e98611963e65edc766762 b270d9bebf4b063fb6808ce4bebee4c8af65b806 Ian Jackson 1392846169 +0000 dgit push pari-extra/.git/logs/refs/heads/0000775000175000017500000000000012303436340015062 5ustar ianianpari-extra/.git/logs/refs/heads/dgit/0000775000175000017500000000000012301222502016000 5ustar ianianpari-extra/.git/logs/refs/heads/dgit/sid0000664000175000017500000000134312303417051016512 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1392846146 +0000 reset: moving to refs/remotes/dgit/dgit/sid 1d7060a0b5714db1132e98611963e65edc766762 b270d9bebf4b063fb6808ce4bebee4c8af65b806 Ian Jackson 1392846147 +0000 commit: Dummy change for dgit testing. Add nonexistend build-dependency to break builds in case this package escapes somehow. b270d9bebf4b063fb6808ce4bebee4c8af65b806 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 Ian Jackson 1393434148 +0000 commit (amend): Dummy change for dgit testing. Add nonexistend build-dependency to break builds in case this package escapes somehow. pari-extra/.git/logs/refs/heads/v20000664000175000017500000000054312303436414015340 0ustar ianian0000000000000000000000000000000000000000 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 Ian Jackson 1393442016 +0000 branch: Created from HEAD 2853ffafcf9af960fbf9e293a9b2a0bbd7492990 0718dd7b55be65093691560d064602557c17fb7a Ian Jackson 1393442060 +0000 commit: Dummy change for dgit testing. pari-extra/.git/HEAD0000664000175000017500000000003112303436436012517 0ustar ianianref: refs/heads/dgit/sid pari-extra/.git/config0000664000175000017500000000044612303417054013270 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "dgit"] fetch = +refs/dgit/*:refs/remotes/dgit/dgit/* [remote "origin"] url = ext::/home/ian/things/Dgit/dgit/tests/drs-git-ext %S /pari-extra.git fetch = +refs/heads/*:refs/remotes/origin/* pari-extra/.git/COMMIT_EDITMSG0000664000175000017500000000003712303436414014164 0ustar ianianDummy change for dgit testing. pari-extra/.git/index0000664000175000017500000000101012303436436013123 0ustar ianianDIRCS<žS%Bþ b€¤èè?ŒLD¿™^Ö}·H²üý«ÉëÉdebian/README.DebianS=S=þ b¤è脬BMK7i¼žÄ—HV*5¡Ydebian/changelogS<žS%Bþ b„¤èè~Öÿ‚ÞkÌ*x$?ÉÅM>õ¬Úi debian/compatS<žS%Bþ b‚¤èè(,Œ:nY Yó‚ÄF@kfÇyù÷yEdebian/controlS<žS%Bþ b¤èè·†¨ÖôD$³«Ò±lN¨Tdebian/copyrightS<žS%Bþ bƒíèè+0ûÀÖä9ÃqŒhØËLohÖué debian/rulesBxpr¢ ¢~N€ñ¢·\9²ùpari-extra/.git/refs/0000775000175000017500000000000012301222502013021 5ustar ianianpari-extra/.git/refs/remotes/0000775000175000017500000000000012301222502014477 5ustar ianianpari-extra/.git/refs/remotes/dgit/0000775000175000017500000000000012301222502015426 5ustar ianianpari-extra/.git/refs/remotes/dgit/dgit/0000775000175000017500000000000012301222531016357 5ustar ianianpari-extra/.git/refs/remotes/dgit/dgit/sid0000664000175000017500000000005112301222531017055 0ustar ianianb270d9bebf4b063fb6808ce4bebee4c8af65b806 pari-extra/.git/refs/tags/0000775000175000017500000000000012301222530013760 5ustar ianianpari-extra/.git/refs/tags/debian/0000775000175000017500000000000012303417077015220 5ustar ianianpari-extra/.git/refs/heads/0000775000175000017500000000000012303436420014115 5ustar ianianpari-extra/.git/refs/heads/dgit/0000775000175000017500000000000012303417051015043 5ustar ianianpari-extra/.git/refs/heads/dgit/sid0000664000175000017500000000005112303417051015541 0ustar ianian2853ffafcf9af960fbf9e293a9b2a0bbd7492990 pari-extra/.git/refs/heads/v20000664000175000017500000000005112303436414014366 0ustar ianian0718dd7b55be65093691560d064602557c17fb7a pari-extra/.git/FETCH_HEAD0000664000175000017500000000000012301222522013407 0ustar ianiandgit/tests/worktrees/example_1.0.tar0000664000000000000000000036000012564114317014610 0ustar example/0000775000175000017500000000000012524730557010625 5ustar ianianexample/example0000775000175000017500000000004412524704751012201 0ustar ianian#!/bin/sh echo "this is an example" example/.gitignore0000664000175000017500000000000312524730557012606 0ustar ianian*~ example/debian/0000775000175000017500000000000012555314271012042 5ustar ianianexample/debian/example.install0000664000175000017500000000002012555314271015055 0ustar ianianexample usr/bin example/debian/changelog0000664000175000017500000000021412524731602013706 0ustar ianianexample (1.0) unstable; urgency=low * Test package. -- Ian Jackson Wed, 13 May 2015 21:26:42 +0100 example/debian/control0000664000175000017500000000036612555314271013452 0ustar ianianSource: example Section: devel Priority: extra Maintainer: Ian Jackson Standards-Version: 3.9.4.0 Build-Depends: debhelper (>= 8) Package: example Architecture: all Description: Example package for dgit testing example/debian/rules0000775000175000017500000000041412555314271013121 0ustar ianian#!/usr/bin/make -f binary-indep: @echo EXAMPLE RULES TARGET $@ binary binary-arch: @echo EXAMPLE RULES TARGET $@ dh_install dh_gencontrol dh_builddeb build build-indep build-arch: @echo EXAMPLE RULES TARGET $@ clean: @echo EXAMPLE RULES TARGET $@ dh_clean example/debian/compat0000664000175000017500000000000212524732002013230 0ustar ianian8 example/.git/0000775000175000017500000000000012555315444011464 5ustar ianianexample/.git/info/0000775000175000017500000000000012524730531012411 5ustar ianianexample/.git/info/exclude0000664000175000017500000000036012524730531013764 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ example/.git/objects/0000775000175000017500000000000012555314154013112 5ustar ianianexample/.git/objects/4d/0000775000175000017500000000000012524732042013415 5ustar ianianexample/.git/objects/4d/8f0e7980e2454b960fbd44cf76d11996098caa0000444000175000017500000000024412524732042020511 0ustar ianianx¥Ž;Â0©} ÷H‘¿k[Bˆ6TtÔ{BçþDpºyŘW&ó¶À7Wexample/.git/objects/27/0000775000175000017500000000000012524731655013347 5ustar ianianexample/.git/objects/27/67dfd053a8a3be1e7df2406b5a68ad913a661d0000444000175000017500000000020612524731655020627 0ustar ianianx¥Í=!@akN1½ X61Æv­ì¬gaöG² {ÁîUß eÛÖºÇC«ÌÀ¨FG§iD}4]ç¢u®'Ñ1±ee´> ÚÛR* ”áF!½J†óúüÕ5,+Õ$ç˜9GYê,÷tF[ô-•VJ„ï¾ñßx wñÊõ?Mexample/.git/objects/23/0000775000175000017500000000000012555313627013342 5ustar ianianexample/.git/objects/23/196b8943b580e1844ebd35a1c30a26cd97f2710000444000175000017500000000033712555313627020335 0ustar ianianxuÁJ1 †=÷)rÔÔ…UÐA•õ  , xÏLc7NMKÚ÷ííìY@>¾?bë«ÕY'¨úÆÏÈt4ŽÒ‚£/ f§•ËaŠ¢yE–R‡´…gxÁaÌQà–?–í~Ø3êh½ ‰³Q½Æé ŠCu¹y#ÍLjµ½±—ve'®ÙRª|ž“û=…D ç›;¸¾0fWÝè¿lX%ó 5¬Ô‡'­7 Ál)Êiið´T‚# iqÀ{Tpž Ê…ÅŸ°cõþ•Ëá´|fÿwÿÁÇ}äexample/.git/objects/info/0000775000175000017500000000000012524730531014042 5ustar ianianexample/.git/objects/a2/0000775000175000017500000000000012555277346013427 5ustar ianianexample/.git/objects/a2/a9a3fb5de0b5ba65a2f24bb1bb4c5c3335ecdd0000444000175000017500000000027112555277346021243 0ustar ianianx+)JMU0´0b040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ-H,ap]ò»ôv›ÃqÆß—J¤ìõ]µ®"¯¤(?‡Á‡áøŸŒ˜ Íuçß%.újXU뵪$µ"1· 'U/3¯¸$1'‡átèÿìÒ•›bŽ®wN2Õ8-/S7¹ ¨ÔÜÔT¡¨4'µ˜Áñ‘@¨¤ç¢š 3±ÊÖ¿SúY‰RJ•example/.git/objects/a2/6f8e83ba01707d830f942dc143a46140a876430000444000175000017500000000024412524732714020242 0ustar ianianx¥Ž9Â0©ý ÷H‘ÍÆ+!D µu62æÿ xÝL3šXï÷¥KfÓ³´”tÌÚ¢"g8K\6SÒA!2¢ñˆI<|ãÒ%$—Oä!ª@Ì&­éãä¢÷¿úµ6yôEž|\ŸµÈÝrûÑ!^ßÖaþ.i¨m^ë^j°z²ÎÉ­ÒJ‰øÝíüwH\ŽgñžULxexample/.git/objects/34/0000775000175000017500000000000012555313646013345 5ustar ianianexample/.git/objects/34/0dedffece4a42f9f0c8a6671422b21287982170000444000175000017500000000017412555313646020504 0ustar ianianx+)JMU040c040031QÐKÏ,ÉLÏË/JeØ#ºC~Ûã‘nk’ ößÖ´(xab )©I™‰y s-9Ìmòö$ÄL¾ôù‰×ñó‡~175UH­HÌ-ÈIe˜|1øù£WL;Ö™N²˜»osÏ×2‡ .˜example/.git/objects/34/97096d09b5880e8374b26a77c752d183f5f5350000444000175000017500000000022212555313630020136 0ustar ianianxKÊÉOR026ePVÔ/-.ÒOÊÌÓÏMÌNUÐMãâr‹* ”nf^JjŒ“X”œaÅÅéšœ‘¯àáèàãªêã¬âäâÀÅ™’Ÿ™W\’˜“f§§æ%çç•åC¸I¥™9))©I@‹@,0 ³$¢K”-\É9©‰yD9¬’ ð“KYexample/.git/objects/54/0000775000175000017500000000000012524732042013336 5ustar ianianexample/.git/objects/54/a37c376e8e04f6cc462fdc15201d2e598920560000444000175000017500000000017412524732042020335 0ustar ianianx+)JMU040c040031QÐKÏ,ÉLÏË/JeØ#ºC~Ûã‘nk’ ößÖ´(xab )©I™‰y ßã“<:7ãÝŸ¯.RéUÊ|@cÌMMR+s rR&_ ~~Åè•ÓŽu¦“,æîÛÜóµ „y-´example/.git/objects/94/0000775000175000017500000000000012524730542013345 5ustar ianianexample/.git/objects/94/701078add9237d0eb16fb3528762839c625e0c0000444000175000017500000000026212524730542020257 0ustar ianianxMŽM‹1 †=÷WäXÖ‹ƒ,» AðÛl7Nm‡4#úï­ÎÅà á%Oòœc>Ã|¶œ´yG Я}$Ó’SΩO7Šæ(œ…õñZPAs@NZCÒÀìÑu%'Xóeœ~Ü?£t6Q¢äm–`‡îÛ´ŠÉ£ø2=‘”÷‹…]Ù¥ý2æXY ¿RÏhU¤¶£ÙPqÂýè¶e¡9øË>°‚RQNÁ< N8example/.git/objects/93/0000775000175000017500000000000012524730542013344 5ustar ianianexample/.git/objects/93/d153e7d432ea2802b8ae3592389dbeb38cf5760000444000175000017500000000006212524730542020502 0ustar ianianxKÊÉOR06cPVÔOÊÌÓ/ÎàJMÎÈWP*ÉÈ,V¢Ä<…ÔŠÄÜ‚œT%.) ¥example/.git/objects/4c/0000775000175000017500000000000012524730542013417 5ustar ianianexample/.git/objects/4c/00c7fc685c6829aecfee6271a2f5317a7d4abe0000444000175000017500000000031212524730542020765 0ustar ianianxMÁJA †=ç)r´‡¢EtÑÒJ{P Þ³3qšîtfÈÌŠ¾½S÷â!Ÿ|_†¼]Ý_õiRËò7s`èÙVI±CÇ_à ’TêÏ%P•à$ÖV¬¾RÄ7²cIŸä4w{ÒÑxeŽIêÍ4®¡¯©+ËÖò‡¸3fenàe’à–;Î-_.äáÈ!³âõú‡v›ü?Ë­6Lmª“¶)…;.V%ÏîûùÌó~&Eç¥båR%zø)½Xpexample/.git/objects/75/0000775000175000017500000000000012555313646013352 5ustar ianianexample/.git/objects/75/86dd042be275bca541a022dcea604f07dd22680000444000175000017500000000026312555313646020535 0ustar ianianx¥Î=N1 @aêœÂýŠQ’1ù‘Ú*®à±0Úd²œG {ÕÓÇýz­|À‡9TaE+*¥(+ú’‹åD!D‡ÞoÞùsò.š m\”e“T.Ëýx‡kÌ]Np²ÎZÿܩÿ™÷Ñ¿ª(Ô&z{¤Á;lƒïæVšexample/.git/objects/ef/0000775000175000017500000000000012555314147013506 5ustar ianianexample/.git/objects/ef/39f883b8f27351008a167ce32b8378f1d431a30000444000175000017500000000017412555314147020344 0ustar ianianx+)JMU040c040031QÐKÏ,ÉLÏË/JeØ#ºC~Ûã‘nk’ ößÖ´(xab )©I™‰y ¿[·›§ý \´aÓŠ;×íîó175UH­HÌ-ÈIe˜|1øù£WL;Ö™N²˜»osÏ×2Ä /›example/.git/objects/ce/0000775000175000017500000000000012555272011013474 5ustar ianianexample/.git/objects/ce/36f86cf0ca1ab674e697a4dd771c974031a49a0000444000175000017500000000017412555272011020634 0ustar ianianx+)JMU040c040031QÐKÏ,ÉLÏË/JeØ#ºC~Ûã‘nk’ ößÖ´(xab )©I™‰y :Œ“N:_ºYS‹9C&vahãóJ 1榦 ©‰¹9© “/?¿bôJƒiÇ:ÓIs÷mîùZD¾,Ïexample/.git/objects/db/0000775000175000017500000000000012524731655013504 5ustar ianianexample/.git/objects/db/32274d2bb6cc97ece3834e97ec9fb245bf6fdd0000444000175000017500000000023512524731655021156 0ustar ianianx+)JMU04±`040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ+)ÊÏaða8þ'#&CsÝùwI…‹¾VÕzíƒ*I­HÌ-ÈIÕËÌ+.IÌÉa8ú?»t妘£ë“L5NËËÔMî*575U(*ÍI-fȈq0›½WxqõöuQ ,¦[–*e*Æ<;example/.git/objects/cb/0000775000175000017500000000000012524730542013475 5ustar ianianexample/.git/objects/cb/55ff6b75a9b25cc5af43623528cb1f1c7e938a0000444000175000017500000000004012524730542020706 0ustar ianianxKÊÉOR04cH­HÌ-ÈIU(-.ÒOÊÌãc±ÿexample/.git/objects/b0/0000775000175000017500000000000012524732714013415 5ustar ianianexample/.git/objects/b0/9167403e6807d0aece30b2d7de4c31643325330000444000175000017500000000015712524732714020313 0ustar ianianx-Œ1ƒ0 E»âSuF‚‰ËTvb Â8U€¡·/$Y¾ÞûÃ#‰dúqx½[{ÉRP»ãƦ›nÁôë‚zþNÕL=1¹u‚ƯŸ Ç‰"™VõL±(]A¼gºS™¼¥W¹dÀ £–\Fø£2ßexample/.git/objects/2b/0000775000175000017500000000000012524731652013417 5ustar ianianexample/.git/objects/2b/14f34327798653f097c19af7228d5e2d36a9bb0000444000175000017500000000021312524731652020345 0ustar ianianx%È»‚0`ç>Å?z£i+:à%®š¸™8à¤bkK Dy{Iܾ|¥%t®fü¥wës-ÕCèz*=ï1$Ë¡>~„–¸s×£¥Ê‘e9U–áB×iºph^«gCÉI›˜‡ZÆdåàNÀƒë5ô7a”ÞÂèÂìŠÜ`¥´RBü²Ø,iexample/.git/objects/d5/0000775000175000017500000000000012555272003013416 5ustar ianianexample/.git/objects/d5/d70a4c0d8d1ed43588d7180bece8af8a40264b0000444000175000017500000000021312555272003020676 0ustar ianianxKÊÉOR026cPVÔ/-.ÒOÊÌÓÏMÌNUÐMãâr‹*u3óRR ¬¸8R“3ò‚B}\ƒBƒÜ]CT`ª Š‹’3pªåLɈÏÌ+.IÌÉá±ÓSó’óóJŠò!ܤÒÌœ””Ô$ ™ –˜„Xeã5+9'51¯å`\G¤K example/.git/objects/17/0000775000175000017500000000000012555277356013355 5ustar ianianexample/.git/objects/17/d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf90000444000175000017500000000030112555277356021232 0ustar ianianxÎÏJ1€qÏyй K’É¿‚ˆ=,¢TZÁë8™í®K‰éû[Ô'ðö~|\O§¥ƒ îª7@qlƒž{™rŽÖ[q‘%§Ñz¼ú¤&¥Ù0%IøNÚDsB=mœÍl’ ÆiJ18Ttîsmð@‰×¯Zàfùø­;žjëp¼)y¨í8œ×[¸ qã½N®µÑZñÏn—ÿA1û)á¹Âø¶}zÞ°Ý/pØîïǃú£dRÌexample/.git/objects/f1/0000775000175000017500000000000012555314147013422 5ustar ianianexample/.git/objects/f1/43f4533b873766fe51afc580b2a8dcd73edf0c0000444000175000017500000000030512555314147020715 0ustar ianianx+)JMU026c040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ-H,ap]ò»ôv›ÃqÆß—J¤ìõ]µ®"¯¤(?‡AY2»ÓykÃÿ½¦ s©þ©ª$µ"1· 'U7±(9C/3¯¸$1'‡átèÿìÒ•›bŽ®wN2Õ8-/S7¹ M}f^Jj! 榦 E¥9©Å &Ó9s9·vð5—lÊ*?t±ùëWSìV`€example/.git/objects/e2/0000775000175000017500000000000012555314154013420 5ustar ianianexample/.git/objects/e2/157295db63affb0fdc90c11c60b5f279aaa5870000444000175000017500000000027112555314154020703 0ustar ianianxÎMNÃ0†aÖ>ÅìQœqý#!ÄV\a23nܨve\ÎOœ€Ý·øôêáv½–‹w£«‚fL9F\c^žì°â²F 1[qh ͺÖ6ˆ²Êq'ç3ÅÅ©¢)Kˆ ‰­pN†îckÞ¨Â;ñþÙ*<—Ëïzå­Pß§ó!¨Zejý<Ý÷°CòΦóa1üÃúÏ&û2½}Q(UôöD7X;UÞÌ7˜sV8example/.git/objects/41/0000775000175000017500000000000012555277340013343 5ustar ianianexample/.git/objects/41/e210551949a27c6848cc5d233bfb65f94e3a140000444000175000017500000000022412555277340020334 0ustar ianianxKÊÉOR02³`PVÔ/-.ÒOÊÌÓÏMÌNUÐMãâr‹*u3óRR ¬¸8R“3ò\#}|\‚B}\ƒBƒÜ]CT`ª š‹’3êáLɈÏÌ+.IÌÉá±ÓSó’óóJŠò!ܤÒÌœ””Ô$ Ù –˜„8Ê&Ê®äœÔÄ<¢VÉÚdSÁexample/.git/objects/b2/0000775000175000017500000000000012524730733013416 5ustar ianianexample/.git/objects/b2/5c15b81fae06e1c55946ac6270bfdb293870e80000444000175000017500000000002212524730733020542 0ustar ianianxKÊÉOR0fЪã¥example/.git/objects/9d/0000775000175000017500000000000012555313646013433 5ustar ianianexample/.git/objects/9d/3908373c6ebc605c93d2f3e4380ac7cf48c2fb0000444000175000017500000000027112555313646020647 0ustar ianianx+)JMU0´0b040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ-H,ap]ò»ôv›ÃqÆß—J¤ìõ]µ®"¯¤(?‡AY2»ÓykÃÿ½¦ s©þ©ª$µ"1· 'U/3¯¸$1'‡átèÿìÒ•›bŽ®wN2Õ8-/S7¹ ¨ÔÜÔT¡¨4'µ˜Ád:g.çÖ¾æ’MYåǃ.6ýj åKKexample/.git/objects/45/0000775000175000017500000000000012524732041013335 5ustar ianianexample/.git/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf0000444000175000017500000000002112524732041020563 0ustar ianianxKÊÉOR0b°à4example/.git/objects/e4/0000775000175000017500000000000012524731655013427 5ustar ianianexample/.git/objects/e4/0b6a64ffb4849d3776d5669a5d46eae5e031120000444000175000017500000000017412524731655020512 0ustar ianianx+)JMU040c040031QÐKÏ,ÉLÏË/JeØ#ºC~Ûã‘nk’ ößÖ´(xab )©I™‰y ·Ô}µ·™þæq³ßô7ó7¹îÏ¿ 4ÆÜÔT!µ"1· '•aòÅàçWŒ^i0íXg:Ébî¾Í=_ËÆ/Ñexample/.git/objects/2f/0000775000175000017500000000000012524730542013420 5ustar ianianexample/.git/objects/2f/51b1c88a0f18aebe9b1574326f8b35f656849b0000444000175000017500000000011512524730542020501 0ustar ianianxKÊÉOR07aPVÔ/-.ÒOÊÌÓÏMÌNUÐMãâr‹*u3óRR ¬`¼Äœ¨DbQr†gJF|zj^r~^IQ~=þexample/.git/objects/74/0000775000175000017500000000000012524732714013346 5ustar ianianexample/.git/objects/74/78f8d822f9079aa4520b6f9a1972a9afb1fba90000444000175000017500000000027112524732714020576 0ustar ianianx+)JMU0´0b040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ-H,ap]ò»ôv›ÃqÆß—J¤ìõ]µ®"¯¤(?‡Á‡áøŸŒ˜ Íuçß%.újXU뵪$µ"1· 'U/3¯¸$1'‡átèÿìÒ•›bŽ®wN2Õ8-/S7¹ ¨ÔÜÔT¡¨4'µ˜aÃÄt» ö ëÎlº~ÏÇ0ÅXÕa’KEexample/.git/objects/2c/0000775000175000017500000000000012555272011013411 5ustar ianianexample/.git/objects/2c/0192cbf2cf75b3292a0366081c5da15581e7790000444000175000017500000000027112555272011020315 0ustar ianianx+)JMU0´0b040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ-H,ap]ò»ôv›ÃqÆß—J¤ìõ]µ®"¯¤(?‡Á‡áøŸŒ˜ Íuçß%.újXU뵪$µ"1· 'U/3¯¸$1'‡átèÿìÒ•›bŽ®wN2Õ8-/S7¹ ¨ÔÜÔT¡¨4'µ˜áêu.Þ^¹+¦×%¸ß¼Xßå æ ]âKdexample/.git/objects/pack/0000775000175000017500000000000012524730531014025 5ustar ianianexample/.git/objects/3e/0000775000175000017500000000000012555277346013434 5ustar ianianexample/.git/objects/3e/4c260f8c5eeef3add7252e4533ced8773251650000444000175000017500000000017612555277346020600 0ustar ianianxsŒÿtree 106100644 .gitignore²\¸®áÅYF¬bp¿Û)8pè40000 debian¢©£û]ൺe¢òK±»L\35ìÝ100755 example“ÑSçÔ2ê(¸®5’8¾³Œõvï>0fexample/.git/objects/f7/0000775000175000017500000000000012524732042013422 5ustar ianianexample/.git/objects/f7/5f63a0e2ce98eeac4cf544101a48677a230e280000444000175000017500000000027112524732042020545 0ustar ianianx+)JMU0´0b040031QHÎHÌKOÍÉOgÐùì¬^ÙüaúÁYß•zãtÍVî†)ÊÏ-H,ap]ò»ôv›ÃqÆß—J¤ìõ]µ®"¯¤(?‡Á‡áøŸŒ˜ Íuçß%.újXU뵪$µ"1· 'U/3¯¸$1'‡átèÿìÒ•›bŽ®wN2Õ8-/S7¹ ¨ÔÜÔT¡¨4'µ˜!#^ÄÁlö^áÅÕÛ×E)°˜nYª” N]J9example/.git/objects/39/0000775000175000017500000000000012524732714013347 5ustar ianianexample/.git/objects/39/d1cf1360982eb239348f27d1b066e662a66be90000444000175000017500000000017412524732714020350 0ustar ianianx+)JMU040c040031QÐKÏ,ÉLÏË/JeØ#ºC~Ûã‘nk’ ößÖ´(xab )©I™‰y %?n(ýdŸµ$ˆ;–dÑÊõ¯cnjªZ‘˜[“Ê0ùbðó+F¯4˜v¬3d1wßæž¯e¥ð/example/.git/objects/c7/0000775000175000017500000000000012555272011013416 5ustar ianianexample/.git/objects/c7/ed4be47291657c7ad0c9b34434f848ff4c451a0000444000175000017500000000026512555272011020563 0ustar ianianx¥ŽËjÃ0sÖWì½`V–¬„Bié)M>`³ZÇŽ‰TTåÿkÚOèmÃ0\¹A?¸M«"ÀbÜȤéê¼=Ù”¼×½E£ÉFR_T%7 ~Õ%˜+¡öèS08FÛ'ÖÖuÚ"ï¬QôlS©ðFÞ‰—ï’a;ßÿhÏÓLuénëA–œºRoÝsÙÁñq0hxA¨øw·É¿CJx*pº|?á|8½Ïê;°PÆexample/.git/objects/a7/0000775000175000017500000000000012524730542013420 5ustar ianianexample/.git/objects/a7/f75501f6592151daa068c3a5022ecedba9fa6e0000444000175000017500000000014612524730542020675 0ustar ianianx-Œ1€ måkB4±á3†"¥ð÷"Ðlf¶ðè4/Ý8ðtGù)CÙFH_æP›K4£í”QYAzmW‡÷#½/¼TŸªBr^k9õ-[{kæŸ=-Mexample/.git/branches/0000775000175000017500000000000012524730531013243 5ustar ianianexample/.git/description0000664000175000017500000000011112524730531013715 0ustar ianianUnnamed repository; edit this file 'description' to name the repository. example/.git/gitk.cache0000664000175000017500000000025412555271750013411 0ustar ianian1 1 a26f8e83ba01707d830f942dc143a46140a87643 2767dfd053a8a3be1e7df2406b5a68ad913a661d {4d8f0e7980e2454b960fbd44cf76d11996098caa 2767dfd053a8a3be1e7df2406b5a68ad913a661d} 1 example/.git/hooks/0000775000175000017500000000000012524730531012601 5ustar ianianexample/.git/hooks/applypatch-msg.sample0000775000175000017500000000070412524730531016741 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : example/.git/hooks/prepare-commit-msg.sample0000775000175000017500000000232712524730531017523 0ustar ianian#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" example/.git/hooks/post-update.sample0000775000175000017500000000027512524730531016260 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info example/.git/hooks/pre-rebase.sample0000775000175000017500000001144212524730531016036 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END example/.git/hooks/update.sample0000775000175000017500000000703312524730531015274 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 example/.git/hooks/commit-msg.sample0000775000175000017500000000160012524730531016060 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } example/.git/hooks/pre-commit.sample0000775000175000017500000000325012524730531016063 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- example/.git/hooks/pre-applypatch.sample0000775000175000017500000000061612524730531016743 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : example/.git/COMMIT_EDITMSG~0000664000175000017500000000043112555277346013757 0ustar ianianecho RULES TARGET # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD^1 ..." to unstage) # # modified: debian/rules # example/.git/logs/0000775000175000017500000000000012524731655012432 5ustar ianianexample/.git/logs/HEAD0000664000175000017500000002716512555315334013065 0ustar ianian0000000000000000000000000000000000000000 2767dfd053a8a3be1e7df2406b5a68ad913a661d Ian Jackson 1431548845 +0100 commit (initial): WIP 2767dfd053a8a3be1e7df2406b5a68ad913a661d 095de1d883131b5dec394fc66b80dc3778849832 Ian Jackson 1431548870 +0100 commit: Commit a forbidden thing 2767dfd053a8a3be1e7df2406b5a68ad913a661d 454585b9dc128917e89105894702cb4b46c25f63 Ian Jackson 1431548952 +0100 commit: Commit a forbidden thing 2767dfd053a8a3be1e7df2406b5a68ad913a661d 4d8f0e7980e2454b960fbd44cf76d11996098caa Ian Jackson 1431548962 +0100 commit: WIP 4d8f0e7980e2454b960fbd44cf76d11996098caa 2e45401a7906fffb1d3ab413a1940da72db3b983 Ian Jackson 1431548968 +0100 commit: Commit a forbidden thing 2e45401a7906fffb1d3ab413a1940da72db3b983 4d8f0e7980e2454b960fbd44cf76d11996098caa Ian Jackson 1431548987 +0100 reset: moving to HEAD~ 4d8f0e7980e2454b960fbd44cf76d11996098caa eca40b2d3b425bfa1f5fb601e627f0aee8b0a673 Ian Jackson 1431548987 +0100 commit: will vanish from NEW 4d8f0e7980e2454b960fbd44cf76d11996098caa a26f8e83ba01707d830f942dc143a46140a87643 Ian Jackson 1431549388 +0100 commit: WIP a26f8e83ba01707d830f942dc143a46140a87643 d2150836bedc68ebbd17abe6eb23528b0d6a3261 Ian Jackson 1431549391 +0100 commit: Commit a forbidden thing d2150836bedc68ebbd17abe6eb23528b0d6a3261 a26f8e83ba01707d830f942dc143a46140a87643 Ian Jackson 1431549411 +0100 reset: moving to HEAD~ a26f8e83ba01707d830f942dc143a46140a87643 075ce317f33fac739b528282696396854fa4a083 Ian Jackson 1431549411 +0100 commit: will vanish from NEW 075ce317f33fac739b528282696396854fa4a083 a53c7ca30b5eb31b4441edef35d5cdb6e0ae5274 Ian Jackson 1431549437 +0100 commit: should require --deliberately...questionable a26f8e83ba01707d830f942dc143a46140a87643 1fc780c77df333b96173da36f3b8e1b3eb7ee217 Ian Jackson 1431550090 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 bf14be356f10ab56bab614d159b786f2e6e625fa Ian Jackson 1431813556 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 efc6ffcb6f6f81772690c29d067ebb70b5759645 Ian Jackson 1431813625 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 e7e77a7384557ae4f35c939667660102aa6e09a9 Ian Jackson 1431813668 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 08143a8c5e55abf8ca6cc43eed4b61705d1563e3 Ian Jackson 1431813848 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 db9149c7438bbd2b50d6973c12847dba0c00b45f Ian Jackson 1431814120 +0100 commit: Commit a forbidden thing db9149c7438bbd2b50d6973c12847dba0c00b45f a26f8e83ba01707d830f942dc143a46140a87643 Ian Jackson 1431814136 +0100 reset: moving to HEAD~ a26f8e83ba01707d830f942dc143a46140a87643 6de659334d16fb1a493cce4075720068c2ecddf3 Ian Jackson 1431814136 +0100 commit: will vanish from NEW a26f8e83ba01707d830f942dc143a46140a87643 c7ed4be47291657c7ad0c9b34434f848ff4c451a Ian Jackson 1437955081 +0100 commit: echo RULES TARGET c7ed4be47291657c7ad0c9b34434f848ff4c451a 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 Ian Jackson 1437957862 +0100 commit (amend): echo EXAMPLE RULES TARGET 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 Ian Jackson 1437964139 +0100 checkout: moving from master to indep-arch 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 7586dd042be275bca541a022dcea604f07dd2268 Ian Jackson 1437964198 +0100 commit: Provide indep-arch branch 7586dd042be275bca541a022dcea604f07dd2268 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 Ian Jackson 1437964201 +0100 checkout: moving from indep-arch to master 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 7586dd042be275bca541a022dcea604f07dd2268 Ian Jackson 1437964255 +0100 checkout: moving from master to bad-build-deps 7586dd042be275bca541a022dcea604f07dd2268 0d1c80affdc8c3bf9d8678e7c9a104be23536fc8 Ian Jackson 1437964255 +0100 commit: bad-build-deps 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 7586dd042be275bca541a022dcea604f07dd2268 Ian Jackson 1437964283 +0100 checkout: moving from master to indep-arch 7586dd042be275bca541a022dcea604f07dd2268 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964391 +0100 commit (amend): Provide indep-arch branch e2157295db63affb0fdc90c11c60b5f279aaa587 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964398 +0100 checkout: moving from indep-arch to bad-build-deps e2157295db63affb0fdc90c11c60b5f279aaa587 4787e69fac3e7c9d7a5b3dc3e8547d5f64969d67 Ian Jackson 1437964398 +0100 commit: bad-build-deps e2157295db63affb0fdc90c11c60b5f279aaa587 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 Ian Jackson 1437964473 +0100 checkout: moving from indep-arch to master 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964478 +0100 checkout: moving from master to bad-build-deps e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964478 +0100 commit: bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964478 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964484 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964487 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964493 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964496 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964503 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964507 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964514 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964519 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964526 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964529 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964537 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964540 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964547 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964550 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964559 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964562 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964565 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964566 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964569 +0100 checkout: moving from indep-arch to bad-build-deps 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964571 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 2d1ef064e0514ff4ae8578f4fa7a11fd44a70b07 Ian Jackson 1437964576 +0100 checkout: moving from indep-arch to bad-build-deps 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964994 +0100 checkout: moving from master to bad-build-deps e2157295db63affb0fdc90c11c60b5f279aaa587 c01ce4124b90845f269e18e26354b0439e38130a Ian Jackson 1437964994 +0100 commit: bad-build-deps c01ce4124b90845f269e18e26354b0439e38130a e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964994 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 c01ce4124b90845f269e18e26354b0439e38130a Ian Jackson 1437965001 +0100 checkout: moving from indep-arch to bad-build-deps c01ce4124b90845f269e18e26354b0439e38130a e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437965004 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 c01ce4124b90845f269e18e26354b0439e38130a Ian Jackson 1437965010 +0100 checkout: moving from indep-arch to bad-build-deps c01ce4124b90845f269e18e26354b0439e38130a e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437965014 +0100 checkout: moving from bad-build-deps to indep-arch e2157295db63affb0fdc90c11c60b5f279aaa587 c01ce4124b90845f269e18e26354b0439e38130a Ian Jackson 1437965020 +0100 checkout: moving from indep-arch to bad-build-deps example/.git/logs/refs/0000775000175000017500000000000012524731655013371 5ustar ianianexample/.git/logs/refs/heads/0000775000175000017500000000000012555313553014452 5ustar ianianexample/.git/logs/refs/heads/master0000664000175000017500000000740312555277356015706 0ustar ianian0000000000000000000000000000000000000000 2767dfd053a8a3be1e7df2406b5a68ad913a661d Ian Jackson 1431548845 +0100 commit (initial): WIP 2767dfd053a8a3be1e7df2406b5a68ad913a661d 095de1d883131b5dec394fc66b80dc3778849832 Ian Jackson 1431548870 +0100 commit: Commit a forbidden thing 2767dfd053a8a3be1e7df2406b5a68ad913a661d 454585b9dc128917e89105894702cb4b46c25f63 Ian Jackson 1431548952 +0100 commit: Commit a forbidden thing 2767dfd053a8a3be1e7df2406b5a68ad913a661d 4d8f0e7980e2454b960fbd44cf76d11996098caa Ian Jackson 1431548962 +0100 commit: WIP 4d8f0e7980e2454b960fbd44cf76d11996098caa 2e45401a7906fffb1d3ab413a1940da72db3b983 Ian Jackson 1431548968 +0100 commit: Commit a forbidden thing 2e45401a7906fffb1d3ab413a1940da72db3b983 4d8f0e7980e2454b960fbd44cf76d11996098caa Ian Jackson 1431548987 +0100 reset: moving to HEAD~ 4d8f0e7980e2454b960fbd44cf76d11996098caa eca40b2d3b425bfa1f5fb601e627f0aee8b0a673 Ian Jackson 1431548987 +0100 commit: will vanish from NEW 4d8f0e7980e2454b960fbd44cf76d11996098caa a26f8e83ba01707d830f942dc143a46140a87643 Ian Jackson 1431549388 +0100 commit: WIP a26f8e83ba01707d830f942dc143a46140a87643 d2150836bedc68ebbd17abe6eb23528b0d6a3261 Ian Jackson 1431549391 +0100 commit: Commit a forbidden thing d2150836bedc68ebbd17abe6eb23528b0d6a3261 a26f8e83ba01707d830f942dc143a46140a87643 Ian Jackson 1431549411 +0100 reset: moving to HEAD~ a26f8e83ba01707d830f942dc143a46140a87643 075ce317f33fac739b528282696396854fa4a083 Ian Jackson 1431549411 +0100 commit: will vanish from NEW 075ce317f33fac739b528282696396854fa4a083 a53c7ca30b5eb31b4441edef35d5cdb6e0ae5274 Ian Jackson 1431549437 +0100 commit: should require --deliberately...questionable a26f8e83ba01707d830f942dc143a46140a87643 1fc780c77df333b96173da36f3b8e1b3eb7ee217 Ian Jackson 1431550090 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 bf14be356f10ab56bab614d159b786f2e6e625fa Ian Jackson 1431813556 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 efc6ffcb6f6f81772690c29d067ebb70b5759645 Ian Jackson 1431813625 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 e7e77a7384557ae4f35c939667660102aa6e09a9 Ian Jackson 1431813668 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 08143a8c5e55abf8ca6cc43eed4b61705d1563e3 Ian Jackson 1431813848 +0100 commit: Commit a forbidden thing a26f8e83ba01707d830f942dc143a46140a87643 db9149c7438bbd2b50d6973c12847dba0c00b45f Ian Jackson 1431814120 +0100 commit: Commit a forbidden thing db9149c7438bbd2b50d6973c12847dba0c00b45f a26f8e83ba01707d830f942dc143a46140a87643 Ian Jackson 1431814136 +0100 reset: moving to HEAD~ a26f8e83ba01707d830f942dc143a46140a87643 6de659334d16fb1a493cce4075720068c2ecddf3 Ian Jackson 1431814136 +0100 commit: will vanish from NEW a26f8e83ba01707d830f942dc143a46140a87643 c7ed4be47291657c7ad0c9b34434f848ff4c451a Ian Jackson 1437955081 +0100 commit: echo RULES TARGET c7ed4be47291657c7ad0c9b34434f848ff4c451a 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 Ian Jackson 1437957862 +0100 commit (amend): echo EXAMPLE RULES TARGET example/.git/logs/refs/heads/indep-arch0000664000175000017500000000103112555314154016400 0ustar ianian0000000000000000000000000000000000000000 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 Ian Jackson 1437964139 +0100 branch: Created from HEAD 17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 7586dd042be275bca541a022dcea604f07dd2268 Ian Jackson 1437964198 +0100 commit: Provide indep-arch branch 7586dd042be275bca541a022dcea604f07dd2268 e2157295db63affb0fdc90c11c60b5f279aaa587 Ian Jackson 1437964391 +0100 commit (amend): Provide indep-arch branch example/.git/HEAD0000664000175000017500000000002712555314271012104 0ustar ianianref: refs/heads/master example/.git/config0000664000175000017500000000013412524730531012644 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true example/.git/COMMIT_EDITMSG0000664000175000017500000000001712555315302013542 0ustar ianianbad-build-deps example/.git/index0000664000175000017500000000112012555315432012505 0ustar ianianDIRCUµšÂUS±oþkϤèè²\¸®áÅYF¬bp¿Û)8pè .gitignoreUµšÂUS³‚þkÓ¤èèŒ+óC'y†Sð—Áš÷"^-6©»debian/changelogUµšÂUS´þkÖ¤èèE¤ûuÛ†@ÐÀ÷¥d½Mª¿ debian/compatUµšÂUµ˜¹þiâ¤èèöLÇüh\h)®Ïîbq¢õ1z}J¾debian/controlUµšÂUµ˜¹þiå¤èèËUÿku©²\ůCb5(Ë~“Šdebian/example.installUµšÂUµ˜¹þiðíèè AâUI¢|hHÌ]#;ûeùN: debian/rulesUµšÂUS‰éþkÍíèè$“ÑSçÔ2ê(¸®5’8¾³ŒõvexampleØQ÷#N¹ü6>ÎÛzèºN8üäexample/.git/refs/0000775000175000017500000000000012524730531012415 5ustar ianianexample/.git/refs/tags/0000775000175000017500000000000012524730531013353 5ustar ianianexample/.git/refs/heads/0000775000175000017500000000000012555314154013504 5ustar ianianexample/.git/refs/heads/master0000664000175000017500000000005112555277356014732 0ustar ianian17d67dbd8f2a46fa824ed7aa5aecd7893ac1dcf9 example/.git/refs/heads/indep-arch0000664000175000017500000000005112555314154015435 0ustar ianiane2157295db63affb0fdc90c11c60b5f279aaa587 example-arch_1.0_i386.deb0000644000175000017500000000125612555315333013340 0ustar ianian! debian-binary 1437965018 0 0 100644 4 ` 2.0 control.tar.gz 1437965018 0 0 100644 304 ` ‹íÑQKÃ0ð>çSÜX·´Ë*CDA&ƒï¡=k\MÆ5õÓ›­¢ >MPþ? ÉõzÉåÓìèfIeÌaN>χµ.Œ1¥6eY¤ýªÒ&#“ý‚¡Vˆ2 !~÷Óù•OëࣄîÈý_Ìç_ö¿œ›ý׺,ŠŒfèÿÑ­m½µ-/‰Ÿíã®ã‰•ú^m õû¦ºeé]ðKÒùL]¤¹Žƒ¤Wž,Ôu>¦Á²¤•õt²öÁÓ©{Wçé+Û¼fϾɃ´ù°=S+ŸÞ¿ë¸™lÜkJ§+µI©?kø‰;µÄÅ—}5Q¬ºä¾·C®Æi_5íÆ»Ð]jZ)roUð?½‚Óý_(data.tar.gz 1437965019 0 0 100644 190 ` ‹íÒ± ƒ0@ÑÌ~Ej÷šÄ<ó=¶ ­£ÐϯJ§vR,ÜCà…$ÛÍ%S›3“ ²ÌÉ÷\öÖ‰Hn%ÏÝt‚¥Eí`ŒCÙk­ú®ÖÞýºÿS—lŒ}v¤þVkÄÑÇþצ͎Ôߺ@ÿûW¯òñ¼W[õ+ý½Ÿû;Œ2÷wEá”6ôßÜù´ÄuRÝêN§CÝD=­²ÕŸ‘& Ú°£oÿ(example-indep_1.0_all.deb0000644000175000017500000000125612555315332013600 0ustar ianian! debian-binary 1437965018 0 0 100644 4 ` 2.0 control.tar.gz 1437965018 0 0 100644 303 ` ‹íÑQKÃ0ð>çSÜX·¬Ë CDA&ƒï¡=k\MÊ5õÓÛQPŸ&(ÿ”éåríåóìèIi̸&Ÿ×1ÖKcL¡MQ,Ó~Yj“‘É~ÁÐG+D™„¿Ëûéý•ϫࣄöÈó_¯V_οX­?Î_ëbYd´Àüng«ƒmxCüdº–gÎ×Ü©}¤zßU7,½ ~C:_¨s©î\ä*’RlÛªkë|Lˆ¶ÖÓUªÚO'î~ŠÎÒ +‡¼fϾ΃4ùp8U[ŸþÛr=Û»—TM—jŸ*wÕüÈ­Ú‰ ââó[3Q¬ºà¾×M)—S4vMÝô1t„êÆEŠÜGç•üK¯ “*¾( data.tar.gz 1437965018 0 0 100644 189 ` ‹íÒ± ƒ0@ÑÌ~Ej÷šÄ<ó=¶ ­£ÐϯJ§vR,ÜCà…$ÛÍ%S›3“ ²ÌÉ÷\öÖ‰Hn%Ïít‚õJ‹ÚÁ‡²×Zõ]7¬½ûuÿ§.Ùûì`ý­'ô߯ÿµi³#õ·.ÐçþÕ«|<ïÕVýÃJïçþÎãƒÌý]Q8¥ ý7w>-ñcT·ºÓéP7QO«lõçC¤‰‡öƒ¶ø( dgit/tests/worktrees/pari-extra_3-1.tar0000664000000000000000000026400012521374563015242 0ustar pari-extra/0000775000175000017500000000000012242154445011237 5ustar ianianpari-extra/debian/0000775000175000017500000000000012367464177012477 5ustar ianianpari-extra/debian/copyright0000664000175000017500000000066712242154445014425 0ustar ianianThis package was debianized by Bill Allombert ballombe@debian.org on Fri, 17 Nov 2000 17:59:46 +0100. It was downloaded from ftp://pari.math.u-bordeaux.fr/pub/pari/packages Copyright: PARI/GP is copyright 1989-2006 by the PARI group and distributed under the terms of the GNU General Public License. On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. pari-extra/debian/README.Debian0000664000175000017500000000147712242154445014533 0ustar ianianpari-extra for Debian ---------------------- This package used to contains optional data files fo PARI/GP. It is now a dummy package and it is replaced by 3 packages: pari-galdata: Galois Resolvant files for the polgalois function for degrees 8, 9, 10 and 11 pari-elldata: PARI version of the Elliptic curve data by J. E. Cremona, , for use with ellsearch, ellidentity and ellgenerators. pari-seadata: modular polynomials for p < 500, for use with ellap. These polynomials were extracted from the ECHIDNA databases available at and computed by David R. Kohel (kohel@maths.usyd.edu.au) University of Sydney Feel free to remove it. -- Bill Allombert Fri, 05 Aug 2011 14:18:43 +0200 pari-extra/debian/changelog0000664000175000017500000000361412242154445014337 0ustar ianianpari-extra (3-1) unstable; urgency=low * This package is now a dummy packages, replaced by pari-galdata and pari-elldata. * debian/control: - Depends on pari-galdata, pari-elldata and pari-seadata. - Suggests: galpol * Bump standard version to 3.9.2 * Move to debhelper v5 (May JoeyH dream of swirls). -- Bill Allombert Fri, 05 Aug 2011 14:07:02 +0200 pari-extra (2.1-1) unstable; urgency=low * New upstream bugfix release - elldata was missing some curves. * debian/watch: removed (cannot work). -- Bill Allombert Wed, 4 Oct 2006 17:36:44 +0200 pari-extra (2-1) unstable; urgency=low * New upstream release - this release is not compatible with PARI/GP 2.1. - this release include galdata and elldata. * Bump standard version to 3.7.2. * Update description. * Move to debhelper v4 (May JoeyH dream of swirls). -- Bill Allombert Sat, 3 Jun 2006 16:48:44 +0200 pari-extra (1-4) unstable; urgency=low * Bump standard version to 3.6.1. * update FTP site in debian/watch and debian/copyright. * description: Rename Université to University to avoid trouble with non latin-1 charsets. Thanks Denis Barbier. Closes: #245594. -- Bill Allombert Tue, 27 Apr 2004 19:04:04 +0200 pari-extra (1-3) unstable; urgency=low * Bump standard version to 3.5.9. * Rebuild with new debhelper to remove the /usr/share/doc transition code. * Clean up debian/rules. -- Bill Allombert Sun, 6 Apr 2003 17:10:00 +0200 pari-extra (1-2) unstable; urgency=low * Improved description. -- Bill Allombert Wed, 17 Oct 2001 19:35:11 +0200 pari-extra (1-1) unstable; urgency=low * Initial Release. Closes: BUG#99173 -- Bill Allombert Fri, 9 Mar 2001 14:49:27 +0100 Local variables: mode: debian-changelog End: pari-extra/debian/control0000664000175000017500000000242012367464177014100 0ustar ianianSource: pari-extra Build-Depends: debhelper (>=5) Section: math Priority: optional Maintainer: Bill Allombert Standards-Version: 3.9.2.0 Package: pari-extra Architecture: all Depends: pari-galdata, pari-elldata, pari-seadata, ${misc:Depends} Suggests: pari-gp, pari-galpol Description: PARI/GP Computer Algebra System extra data files PARI/GP is a widely used computer algebra system designed for fast computations in number theory (factorizations, algebraic number theory, elliptic curves...), but also contains a large number of other useful functions to compute with mathematical entities such as matrices, polynomials, power series, algebraic numbers, etc., and a lot of transcendental functions. PARI is also available as a C library to allow for faster computations. . Originally developed by Henri Cohen and his co-workers (University Bordeaux I, France), PARI is now under the GPL and maintained by Karim Belabas with the help of many volunteer contributors. . This is a dummy package which depends on pari-galdata: the Galois resolvants for the polgalois function. pari-elldata: the elliptic curves database for the ellsearch function. pari-seadata: the modular polynomials for the ellap function. It can be safely removed after the upgrade. pari-extra/debian/rules0000775000175000017500000000145312242154445013544 0ustar ianian#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Modified for pari-extra by Bill Allombert 2001 # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 build: build-stamp build-stamp: dh_testdir touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs # Build architecture-independent files here. binary-arch: build install binary-indep: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs dh_link dh_strip dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install pari-extra/debian/compat0000664000175000017500000000000212242154445013657 0ustar ianian5 pari-extra/.git/0000775000175000017500000000000012367464177012116 5ustar ianianpari-extra/.git/info/0000775000175000017500000000000012242154443013031 5ustar ianianpari-extra/.git/info/exclude0000664000175000017500000000036012242154443014404 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ pari-extra/.git/dgit/0000775000175000017500000000000012242154445013027 5ustar ianianpari-extra/.git/objects/0000775000175000017500000000000012367464122013535 5ustar ianianpari-extra/.git/objects/3b/0000775000175000017500000000000012242154444014034 5ustar ianianpari-extra/.git/objects/3b/61dfd360f5b264280b59681f4bc300b24f65690000444000175000017500000000145112242154444020745 0ustar ianianx­•ÛnÛF†{­§ 7N"R<ɪØj'Mâ n Ðë%wB-¼Ü%ö EÔçÈ‹uv)9 :PÑ;r@ÎrþùþŸÔ ä˲øn`F$øÙge’¿¯¬cÄÀ›U»ýIêÍdð îWÂÂÀÚGÖ!Ð¥Ò`À}ßo÷e;ƒƒd-rhB•ºwLræ0Å© ŒE”±˜ÆÆÁÔ¬ÕÊ-ëøToq@Å-huÐgzÐ t Y8&tHàÎwZgk ó-ãA—¾€æSœk4VPw§¡L—i¹Ök ú¦Ê ¬çpvͶðQãöpƒ¬ý ìFi_¦¤M’À¥.¤Ô}ƒÆÁ ¯gKµé~xgIJ9\øŠ,Ï!¯êlQg¼ÎŠ,›Lþ¹Ž"Í¿±ßq~°.~Rã»Oâ3É/‘YÜ©°“6ÌB/¬ª«{„Ö›5Úù7̵«šô$‡³–)¥l´y*÷ŠH‹S¾»¿+h\¡‚I‚q#9щON¶Ft+·ìI˜nQ1ðA‰è?÷å¯`·§Ûm¸ck-8Pøý"#ÏŠÌ*i»*É¡]1cÑÙ”b‰©GKq¡‡Kf&…7R[$÷¿(ªù|YdÓ{S(p1˜ mEQYgäÔ£çIù_¥SêÄÐ¹ÅÆ ÉGd¹úkú£#Á­fÞš™¥ÑqÆuK 1E»!ÖjŽc³7жµßŽñ28ý„˜ºóŠÐ:ßÏ_çYeÇ œ'ųó_õƒ‰r`¾&ÆI¾ØÇ …æ².ç5¥ç‘ÐüVd^)’‹I¢0ÆäWN.Þ¿X.óEyŠP1Ïa ×,‚ó¼ZÖ„Îë,yþ›né°5ýÃ?ÕÖ“žÖTï6“êC©»É¯Š×“¿cªpari-extra/.git/objects/info/0000775000175000017500000000000012242154443014462 5ustar ianianpari-extra/.git/objects/1d/0000775000175000017500000000000012242154445014035 5ustar ianianpari-extra/.git/objects/1d/7060a0b5714db1132e98611963e65edc7667620000444000175000017500000000052112242154445020605 0ustar ianianxÍNã0…Yû)Ž4`hHÒ„i ˆBb5¼À}›Xø'²vúö8©X°ewõéú;>WzkuB[·g)0£é¶¹Qõ¦ieµmÚvëR6²)[Y²j~©nWsU šÒàµ1x0ÆÛŽCÂ}G§ù¯âN“+|èÿ ZWuÛÜ”uŸeU–B.©‰¿û^ˆ‘‚^ñÿçëUuÉÅDá;L¡g'¿?\âmÐ#Éwêytþ‚š¬=~âx…À£!É ÝL³½'£(È©¬Á ²Y`±ˆO¯¥w)xs»l­ðÄ#;áÝÏÕÁl=È4ÇÌF`…SßsLñ9ôf zœìˆÜÏ) {Qg{òXÛ¢^V^ýžg’ÿ4°ói÷-Î_éˆÏÇg¨ÀdáwˆL¼(„ømGRî¼ Þ" rÐ{æ«pari-extra/.git/objects/7e/0000775000175000017500000000000012242154444014043 5ustar ianianpari-extra/.git/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da690000444000175000017500000000002112242154444021556 0ustar ianianxKÊÉOR0b0å 1pari-extra/.git/objects/d0/0000775000175000017500000000000012367464121014037 5ustar ianianpari-extra/.git/objects/d0/38a26d4422d3f0aec47db59752ab55656225160000444000175000017500000000133212367464121020741 0ustar ianianxeS]o1äÙ¿bxh¥ä T0u¢f0#Ϋñ’ƒÊSxÖ‘R1YÉï$ ·¨4Vš„kЊ÷Ŷ1õÉÝÑg¦0i™|d þÜ:Õ*Î6o­¦-i;ðfª>“qŠcБɼ:ž'í|gÝ'ÎîÚ¦H‡–ÖÕ„ñܰÔOL[»ž’”HfYE^'¬Ö_3\hRö…+ÚÃ’X‹ÈFó>¤v&/z4#l­Ž&PVaØg^«u~Rq—è%G Ž}?rÐs·`×)ÞL=¬ûLE*SÆ`…ÚòcGÞê-šà³eé„×È-I‡ÿyÞ£òMÿå.„¥Ðˆ/p?¹ÝOö½€z[GÎæi~N1p8}@¢ŠÀc“z稷[Þ6©ºI@Z‡5M.-oW÷¸ûøóN€øX_нpari-extra/.git/objects/ef/0000775000175000017500000000000012367464122014127 5ustar ianianpari-extra/.git/objects/ef/77eb0bbb798820500289c3071163912f40d24d0000444000175000017500000000006012367464122020662 0ustar ianianx+)JMU06f01…”Ô¤ÌÄ<?ߟAûâ|¸¾¬^¡Zvð‹‡€ —1ÿƒpari-extra/.git/objects/6d/0000775000175000017500000000000012367464122014046 5ustar ianianpari-extra/.git/objects/6d/fc5e6eaac8b1e1067fb1c37909b1ffbb4a79d40000444000175000017500000000026712367464122021562 0ustar ianianx¥ÎMjÃ0@á®uŠÙÌŒ,$(!…nÚ[ègâ¨&ReèñÒ#t÷V/µÛ­ Ðì^F¹X+cŒÖ;§qAÔΧ-ÏžôÅ`Ö&«{èRP¶È0.–LŽD³ï˜Èó,¼HN–Ù²Vá×Öá3Tø iÛ[…·òýWçt-¡oÓúT©yj}ŽídТ3¬^‘Uzr‡ü{¤Þs†ØÖc‡!?FƒÙS/÷QZU¿ÆU?pari-extra/.git/objects/86/0000775000175000017500000000000012242154444013765 5ustar ianianpari-extra/.git/objects/86/1812a8d6f44424b3abd2b11e6c1e1e4ea810540000444000175000017500000000047312242154444021066 0ustar ianianxmËNÃ0EÙÖ_qw,h“”G!YQ@T•ªR!Øc'“ı#?hË×ã¤bÄÆÙwΜ±PFàú*?{k¥CÏËOÞöÜ¡"!¹–ßTAñ •ÂR)Ó ²ž ~*ïO©ÄØFãÙÊ)æ·Øš/\fYëâ&/®¸ÈæY–0¶ö'¸Ùkexáµ5jßiÚs+“Žû6 3alE<’Ú¦}ã[ón“Ð&[’ æWÅ Öû’ âxh‰ÈF5Iö€!Ÿz-)°ÁÎLÖ šç2­Ñí=çËéóOeÅVej.3â¼Ú 9¨<…g)U³åý΢p‹Ú`c(@¸£y_lSÏ‘Ü}f ³–ÙGâÏW¯;ÍÙæ­)Ú’q#o¦™à#Y¯9=Ù«çyÒ-vÎßs’áì‡ÕÛé8ÁÊyE˜~ÁKýÀ´%±ë9I™¤e‰U”uÂíúsM*Ã>qEXë`ÅhÞ‡€ÜÎìÅ€v‚­3ÉF**,ûÌku>Ì*¾gzÙPi&zéìzÍ›QsáÁY°/Á\¤:g nÑ8~ì)8³EC±,Ÿð¹%ùðà?Ï{P¾á¿Ü•‚°:ñî'·û1о·3ÐàTâlžæçÇÓ÷w$Zh¶¹wž·åýa›«›¤±ó¨ˆY‹o7Íbpari-extra/.git/objects/a4/0000775000175000017500000000000012242154444014034 5ustar ianianpari-extra/.git/objects/a4/e028bc92700ce80ce3068d4f21ec45ed66d81c0000444000175000017500000000032512242154444021240 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:ƒuâýË _7¥hpGfÈ{fØäŸš S”Ÿ[XÂPwíÓ½ì3Z*ö'úÚ}]#r ¡"¯¤(?‡K'9wû)Î×R’¼ ЦÇß?Þ7¤ ²(3=£„¡MBhŵ/.*›W_Ú(—#'ç·B ¨ÈÜÔT¡¨4'µ˜Áà÷kO,ödÜ8í“/šq­ôe='hYÛpari-extra/.git/objects/4e/0000775000175000017500000000000012367464122014045 5ustar ianianpari-extra/.git/objects/4e/4df952be5e4c0af4aba82576c1f44810114a330000444000175000017500000000032512367464122021154 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:ƒuâýË _7¥hpGfÈ{fØäŸš S”Ÿ[XÂPwíÓ½ì3Z*ö'úÚ}]#r ¡"¯¤(?‡á‚Å¢\¥ËÖ©Ý:=huhj’ª܂ʢÌôŒ†6 ¡×¾¸¨l^}i£\Žœœß  "sSS…¢ÒœÔbƒß®=±<\Ø“qã´O¾hƵҗõåZäpari-extra/.git/objects/30/0000775000175000017500000000000012242154444013752 5ustar ianianpari-extra/.git/objects/30/fbc0d6e439c3718c68d8cb4c6f1568d675e97f0000444000175000017500000000066012242154444021224 0ustar ianianx]RQoÔ0 æõò+ŒöÜ» ÁM€àÄÄ ‰ 1 ‰§)iÝ6ZWNŠîþ=NÚ¢õ^Z;ù>ÛßçGÞ—å««×»1ðÎX¿ëõ3BѨ+xÐýàj4VûÄNGƒDrÜ¡·ýv÷ g¶m¡ÜïßA¤ô߃9ÃwÂ31„ýAµm,ÖÐàÙxЬî`ƒ/ÎQo#|0zŠ?O#l‰ÛOðæúº”2¾¢¾Ge$+sÄ‘=‡¿È†BO5JC< $žŸ~ßþ:Ü?Ü~,•2£uõ ä_¢ަøFmêî)bˆµeµ‰4VÝ «*‡Ú_Àf Eµá^<\qRÉLSÊziéÜÜÝlUE’qȈ™$%úIh®:±íXX_ã€òS›¶Õ!‹²UÍç"aç–0#¦»L½¼\™p9×2UáåxxÊfuVuÚ·è¨ ¡Îúç„Èv'»¡a¢5ö$Ϫ_Õ)-ÊÞ}dr9íë·aœ‘y™ 7‹9/Ä-IrAmïïþ,zóV–ûìÄ’$ðÿ·ìÎápari-extra/.git/objects/8c/0000775000175000017500000000000012242154444014042 5ustar ianianpari-extra/.git/objects/8c/4c1644bf995ed67db748b2fcfd8fabc919ebc90000444000175000017500000000100512242154444021601 0ustar ianianxmSËnÛ0ìY_±Çµ))N׌¸q’ºŠÀM?`%®-Ö)”Uý}–ô=”'Ü™!+m+˜ÏÊ:5¥¿Á!쬃5U M6ýïʲ·Fyè°>àž ÷$!X¨­ ¨ŒÛe jNiò ¯«í&y° ÀíÆ€ û¶³  *Ý:ê4Ö \0»PùEÆ¥,t:b/àµe¬-y«h•ÍAh:«¹4VìzSGUi:I{Gä3à5ŸÀ— ”Dî²<>DÑp$çc¯Ý%Ô'­XCÝ»#¦d™ß< xtÔòð“~ß„Ð-ò|Ñbh¼06µèyǨѦüÕù.tyi9I ÙÓ0¨Ð‹ñ„®n&q«$™ Â˜óyO†ë¼8‹çâ“;­•½FmmêŸáîŠâJìD¢}kÈ'÷®m9‚ô>êÀ©ìœmO^<~Û¬®’ ú³©xD¥±ÒàbÕ’ÏFô~”‚d/°Ï¶!ËÊçËD£¨mÛõ‘Š]ãQIØ ø ácª8úÎ'ømTÊŠÝá¬~ÒИeÏÄM;N<¾Ò‡¦»Ó)|UZÃJkÛVäXl…§ýƒL_@X·_<;5âVýnв„òvQη3ø\ÜEö«»pari-extra/.git/objects/pack/0000775000175000017500000000000012242154443014445 5ustar ianianpari-extra/.git/objects/4b/0000775000175000017500000000000012242154444014035 5ustar ianianpari-extra/.git/objects/4b/98c8d2845c1954a9b30c4c405c0ed47dbf2e100000444000175000017500000000006012242154444021155 0ustar ianianx+)JMU06f01…”Ô¤ÌÄ<†%4öL*àyÁó˜­×_ñëÛ´2‰vpari-extra/.git/branches/0000775000175000017500000000000012242154443013663 5ustar ianianpari-extra/.git/description0000664000175000017500000000011112242154443014335 0ustar ianianUnnamed repository; edit this file 'description' to name the repository. pari-extra/.git/hooks/0000775000175000017500000000000012242154443013221 5ustar ianianpari-extra/.git/hooks/applypatch-msg.sample0000775000175000017500000000070412242154443017361 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : pari-extra/.git/hooks/prepare-commit-msg.sample0000775000175000017500000000232712242154443020143 0ustar ianian#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" pari-extra/.git/hooks/post-update.sample0000775000175000017500000000027512242154443016700 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info pari-extra/.git/hooks/pre-rebase.sample0000775000175000017500000001144212242154443016456 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END pari-extra/.git/hooks/update.sample0000775000175000017500000000703312242154443015714 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 pari-extra/.git/hooks/commit-msg.sample0000775000175000017500000000160012242154443016500 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } pari-extra/.git/hooks/pre-commit.sample0000775000175000017500000000325012242154443016503 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- pari-extra/.git/hooks/pre-applypatch.sample0000775000175000017500000000061612242154443017363 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : pari-extra/.git/DGIT_ARCHIVE0000664000175000017500000000005112242154445013707 0ustar ianian1d7060a0b5714db1132e98611963e65edc766762 pari-extra/.git/logs/0000775000175000017500000000000012242154445013044 5ustar ianianpari-extra/.git/logs/HEAD0000664000175000017500000000430212367465161013477 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1384700197 +0000 reset: moving to refs/remotes/dgit/dgit/sid 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407084572 +0100 checkout: moving from dgit/sid to HEAD~0 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407084626 +0100 commit: Add bogus text to Description 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407084671 +0100 checkout: moving from 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 to dgit/sid 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407084820 +0100 checkout: moving from master to bogus 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407084904 +0100 checkout: moving from master to bogus 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407084996 +0100 checkout: moving from master to bogus 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407085019 +0100 checkout: moving from master to bogus 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407085065 +0100 checkout: moving from master to bogus 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407085068 +0100 checkout: moving from bogus to master 1d7060a0b5714db1132e98611963e65edc766762 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407085166 +0100 checkout: moving from master to bogus 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407085169 +0100 checkout: moving from bogus to master pari-extra/.git/logs/refs/0000775000175000017500000000000012242154445014003 5ustar ianianpari-extra/.git/logs/refs/remotes/0000775000175000017500000000000012242154445015461 5ustar ianianpari-extra/.git/logs/refs/remotes/dgit/0000775000175000017500000000000012242154445016410 5ustar ianianpari-extra/.git/logs/refs/remotes/dgit/dgit/0000775000175000017500000000000012242154445017337 5ustar ianianpari-extra/.git/logs/refs/remotes/dgit/dgit/sid0000664000175000017500000000023412242154445020040 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1384700197 +0000 dgit fetch pari-extra/.git/logs/refs/heads/0000775000175000017500000000000012367464142015075 5ustar ianianpari-extra/.git/logs/refs/heads/dgit/0000775000175000017500000000000012242154445016016 5ustar ianianpari-extra/.git/logs/refs/heads/dgit/sid0000664000175000017500000000257112367465140016532 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1384700197 +0000 reset: moving to refs/remotes/dgit/dgit/sid 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407084805 +0100 Branch: renamed refs/heads/dgit/sid to refs/heads/master 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407084890 +0100 Branch: renamed refs/heads/dgit/sid to refs/heads/master 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407084982 +0100 Branch: renamed refs/heads/dgit/sid to refs/heads/master 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407085005 +0100 Branch: renamed refs/heads/dgit/sid to refs/heads/master 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407085051 +0100 Branch: renamed refs/heads/dgit/sid to refs/heads/master 1d7060a0b5714db1132e98611963e65edc766762 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1407085152 +0100 Branch: renamed refs/heads/dgit/sid to refs/heads/master pari-extra/.git/logs/refs/heads/bogus0000664000175000017500000000022612367464142016137 0ustar ianian0000000000000000000000000000000000000000 6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 Ian Jackson 1407084642 +0100 push pari-extra/.git/HEAD0000664000175000017500000000003112367464177012534 0ustar ianianref: refs/heads/dgit/sid pari-extra/.git/config0000664000175000017500000000044512242154443013271 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "dgit"] fetch = +refs/dgit/*:refs/remotes/dgit/dgit/* [remote "origin"] url = /home/ian/things/Dgit/dgit/tests/tmp/clone-nogit/git/pari-extra.git fetch = +refs/heads/*:refs/remotes/origin/* pari-extra/.git/COMMIT_EDITMSG0000664000175000017500000000003612367464122014172 0ustar ianianAdd bogus text to Description pari-extra/.git/index0000664000175000017500000000101012367464177013140 0ustar ianianDIRCSÞg²RˆÙ%þ 鶤èè?ŒLD¿™^Ö}·H²üý«ÉëÉdebian/README.DebianSÞg²RˆÙ%þ 鸤èèŒ;aßÓ`õ²d( YhKòOeidebian/changelogSÞg²RˆÙ%þ êà¤èè~Öÿ‚ÞkÌ*x$?ÉÅM>õ¬Úi debian/compatSÞhSÞhþ êÞ¤èè ,cm·Ê ë `!5Çï÷LJZdebian/controlSÞg²RˆÙ%þ éQ¤èè·†¨ÖôD$³«Ò±lN¨Tdebian/copyrightSÞg²RˆÙ%þ êßíèè+0ûÀÖä9ÃqŒhØËLohÖué debian/rulesŸ‘¥Î0ÎG «uUãÃfÞpari-extra/.git/refs/0000775000175000017500000000000012242154445013037 5ustar ianianpari-extra/.git/refs/remotes/0000775000175000017500000000000012242154445014515 5ustar ianianpari-extra/.git/refs/remotes/dgit/0000775000175000017500000000000012242154445015444 5ustar ianianpari-extra/.git/refs/remotes/dgit/dgit/0000775000175000017500000000000012242154445016373 5ustar ianianpari-extra/.git/refs/remotes/dgit/dgit/sid0000664000175000017500000000005112242154445017071 0ustar ianian1d7060a0b5714db1132e98611963e65edc766762 pari-extra/.git/refs/tags/0000775000175000017500000000000012242154443013773 5ustar ianianpari-extra/.git/refs/heads/0000775000175000017500000000000012367464142014131 5ustar ianianpari-extra/.git/refs/heads/dgit/0000775000175000017500000000000012242154445015052 5ustar ianianpari-extra/.git/refs/heads/dgit/sid0000664000175000017500000000005112242154445015550 0ustar ianian1d7060a0b5714db1132e98611963e65edc766762 pari-extra/.git/refs/heads/bogus0000664000175000017500000000005112367464142015167 0ustar ianian6dfc5e6eaac8b1e1067fb1c37909b1ffbb4a79d4 dgit/tests/tartree-edit0000775000000000000000000000257612521374563012400 0ustar #!/bin/sh set -e fail () { echo >&2 "$0: $*"; exit 1; } case "$#.$1" in 2.edit|2.done) mode="$1"; arg="$2" ;; 2.-*) fail "no options understood" ;; *) fail "usage: tartree-edit edit|done DIRECTORY" ;; esac case "$arg" in *.tar) base=${arg%.tar} ;; *.edit) base=${arg%.edit} ;; *) base=${arg} ;; esac tryat_pre () { local b="$1" rm -rf "$b.tmp" if test -f "$b.tar" && test -f "$b.edit"; then echo "$b.edit exists, deleting possibly-obsolete $b.tar" rm "$b.tar" fi } tryat_edit () { local b="$1" if test -d "$b.edit"; then echo "$b.edit already exists" exit 0 fi if test -f "$b.tar"; then mkdir "$b.tmp" (set -e; cd "$b.tmp"; tar xf "$b.tar") mv "$b.tmp" "$b.edit" rm "$b.tar" echo "$b.edit ready" exit 0 fi } tryat_done () { local b="$1" if test -d "$b.edit"; then (set -e; cd "$b.edit"; tar cf "$b.tmp" *) mv "$b.tmp" "$b.tar" mv "$b.edit" "$b.tmp" rm -rf "$b.tmp" echo "$b.tar regenerated" exit 0 fi if test -f "$b.tar"; then echo "$b.tar already exists and $b.edit doesn't" exit 0 fi } tryat () { local b="$1" if ! test -f "$b.tar" && ! test -d "$b.edit"; then return fi tryat_pre "$b" tryat_$mode "$b" fail "unexpected situation in $b.*" } case "$arg" in /*) tryat "$base" ;; *) pwd=`pwd` tryat "$pwd/$base" tryat "$pwd/git-srcs/$base" tryat "$pwd/tests/git-srcs/$base" fail "could not find $base..." ;; esac dgit/tests/Makefile0000664000000000000000000000055412564114317011507 0ustar # usage: tests/using-intree make -f tests/Makefile # (optionally setting TESTSCRIPTS='tests/tests/foo tests/tests/bar') TESTSCRIPTS ?= $(shell tests/enumerate-tests) TESTNAMES := $(notdir $(TESTSCRIPTS)) all: $(foreach t,$(TESTNAMES),tests/tmp/$t.ok) @echo "ALL PASSED" tests/tmp: mkdir -p $@ tests/tmp/%.ok: tests/tmp tests/tests/$* >tests/tmp/$*.log 2>&1 dgit/tests/pkg-srcs/0000775000000000000000000000000012566045044011576 5ustar dgit/tests/pkg-srcs/pari-extra_3-1.diff.gz0000664000000000000000000000446612521374563015517 0ustar ‹­XmsÛ6þ\ýнÉÍœS‰”hIvÄk2~Mì6N.utÁh0‚~4Øàè¨×X ¥¡Ö<ú§×ïõ?­„Á’;¶äPž‚U(i™Ta…’,ƒ”YÔ(2nP/\ß\ß]‡pi—Kµi™ç[²Àëb2á>k^d,AÍó-Œë½LL»;s—,#õ1¼c™BùnT¶fÒ6j°+…Ê–^bQÊ„ sŸR¾Ôœ›^ðÏ«ÌÜöQÔìÁ³j2Ö\Z®Nñy– t4¤Ôkî}E[ á<„SÍs„`àõÿ°²¶ˆ‡ÃÍfæÌ®L(•µ!KÂònX ZBkø+O† [ IÓ›³¡õ6®Í1œéd5 Ÿ"åÒ »uFãó’K®™UÚ„(îÈUZfL[©rÁ2P?Àt4jvk6bEèwþ´â†wÖm¸æà²%±Ÿ…V¹äôâòìñCbÎL .[3‘±y†Áµ #”ÅMYYˆf³C‚ÿŸ¹ÌU| Ü'{¥R±_J“‡‚¿ !!"=Ÿ%/ÇTE«°q?[j,"Iõ4W˜[˜›œ¶ä÷…Bug¿ü|~sòñöüµ«Äy)²4÷_`,º[½óؾKW¿Xnl*4>XU&«®x¯ŸdœÉ¯D«­”Å'#¤Ý…$á–’lm=­LyZ>ØÁü¯j!ÊÒóNHP% ËăB¦¼à’jºj`+,3„ÃÍô6 ájg¨ô9püW·ú«ÏÏX›¥ÓyÁï]Ju_&+&—?”ª«Óés:«|Bm-ÑjÑØ)ïLÞ 3Uá‹ß|sì–&b÷uiRé¹îµ¦Báïx:‹'ؽ¢ÑÈõBœÒN¿ÚÈL±´îô ׿Él×¼Ã2˜+rVÞ‡ =,ʹû6¬6i:­ýqÓ»¢4ãÛ½èÕ,@KÈ &nâ.µ* 7RAY6w3 ÄbB“”¥ôª2u·wnfp]Î3ÍïEÂ¥áΟï>ÊŠÙäð½å=˜­±<7§€Â™qKjïí#ZQGW/$”h[dI¼E¿\‡6+¦9%R€ ó¢]~ÿ74ä»g²£®³ÝÙÑH´²ã`ü%‘ÛÑKÄ ³gïß¡ÔTpÛ×™Ú¸IßC'—ºŒ¬!\ƒk3/Š‹ŸÐm®zÕM&»½\€øS3”‚mUƒŽ ð6} ëå·åM²&\XPã ½NʼtS¦L§ KÃA3gá¾—¹¢!¯šyë)ì]1?õ. Õœår³:3/ÿ60:ŒGûèwC³FÏçß@Y`Ö“aór‰ÍC­­¦„ÔxQ™æÂ!—`TÎ=#5ÝPl˜¥ âùN {˜ºHBa£ôÝ·zûž&ð1±àj»Çø Fšò¸·ßæëN:ÖP½óIjÁ÷]AœÒñÕº¥ ®áãëd’•)‡VêB7aŸH¢Ãp¿ú\à âZ&ÑÂrÂé5ùÓë–Y| ?–²Ñ~µð(˜<øÞT~qÞ¾ýt H¢ ÄN.ù¾üÅÄjr®A(Æ“™d˜” ÿßi§;Ç'¶VHê±W”uP}%š•a¨e6>m¸5!6.&ï v‰1>az.àÂi†l{ËýÉt:›|#ÆŸJ>€ýC8.4a<Á‘°Šwb<þãO±1y¡î9‹Kc‰eðA‡C­Á‚„ ‘b±#‰§Ï¤íÔ1™íÓÀ·æZ)1×jÆTÜÑ(Fް‡ýgp¸DJèZN·l¾¹á ]©ND±Ocì³;lz®á\JÄiÂï¹sòùÝ‹Ù,:ÿþ3¸bº2pOf1¦“ãS¤ì½JpÃ5šIVÑE{â*TAkîŸË4~ŽBV¼y'ôßÛ7=3GnU©ÜõaU¯ïN#A5šãVî½y=}‰kxâ ™øò7-Ћ„¼¾çéõ¯˜pw?\Ç¿ 1TZ† ~ö•ûq:°®=ûèÚyÜ:/ÅàN8Ñ»ÙÄ C%ð×ã¨LâjåÐ’†Tx%Å Ñæ(ÆY»—Õ“æÔ_HhttÉç˜t·ŽHúk‘Ö½&Q‹ïâ¨)϶þÊ,©u°J‡'£T'b)«“÷‚¤ñ•,## 5bYºÔžeö,±”ß¼À ÖˆLµ#H×Q¼smeÂ0|9@~aqiÝá1l»X7õz] u¸;¢EIÄ«¾M3þêϹâÛ¥ Ç%¼»£xœ5t*'¢ÂÈ'D,[wJdX¡6¨ßp-ø#à+n“pধuÓ6*š›Tü"› ÃFSsÑùˆ¦æJ“w]kVJXÑQ€'ÚêÀf؂ʰ&Ãla+ØËb©™Ÿ§½ÿïï€ûydgit/tests/pkg-srcs/pari-extra_3.orig.tar.gz0000664000000000000000000000017112521374563016163 0ustar ‹¿Ü;NíÎ1 Â@Ð=Ê^ ˜MØÝóD°¤5‚Ç7‚6Z%Õ{ÍÀŸ)þujswy¬mêÆSØG¿©9¿2ÕÜæ[H©¤RsÊvO©ŽCˆy§¾ÜoëÔb çyY~íþõp 'ƒžÜ{(dgit/tests/pkg-srcs/ruby-rails-3.2_3.2.6.orig.tar.gz0000664000000000000000000000167112521374563017012 0ustar ‹¼lâOíWMÛ6õY¿bº‡ H«[ 4è!hÓëè!E!ÐÒØf-‘*IÙqýíÊk[^g·2°A˜†ERCÎÌ›!5TŒ×ÚO‚8Hï'Ÿ !!›Íì3ÊfáðyÀ$в,œ¦iœM'a”„ét³ÏeÐ6LL ª¹’ÏÉýßû¯jÿ «˜aÁ®©_S‡ p:>ÿ,Žâ'ñŸ%Y4ð5x7ß÷á;ÕÍw÷rþ–&ÿ›<ÿ­Å’/xÉ —<ÁÌ¡OoƒJÓ`þ‰Y¿ï_°bz•CB­V¡Â™¦¨«qÙ 0ºïø½„qÿŸÒÿqõ>#½¶ff!UCÊI™Ç:³’ÊÎõáÛð Þ#Ø Gï™ÐZ +$þÝqe5ι¨¸Êž^‰ÊåŠqZÿ?=rDâ0Šý0õ£Â0ïðÁ«°EQ¡(9îõ]ºûî ²³¾ì9b¥áÔ]ÛJežx¿`µF{4ÎÒÃ÷¼¢Ýð‰ÕNRvyR Å`‘³eölZ}¸ûñ®oÛÞ‹!Úã¨=ÎâsX'´ãA;=¶ŸÄ ÀìZ²6W0¼ÁSd‹s³èÝ¿Š^)ZV®Gsß6·ñ•©«°”ªÍnrÛì&W³«eGß‘ÑüNo›ßé•'CCŸ(T£ÙÝ6»³ÑìÚO¿¡/áhfÓÛf6Íì¼Õ5)›½"±ÿ¾½ž×hö2±Ñ ^’yáÝ•dfTŒéRñÖôK<¥@†=Ør¸‹®®}ªãË5lq EÔn¥Zƒ¤9 ÿ+ *’–KzÕP±¸bmK•£¦Ù¢m/\°yV¨êìaÍÍ.€_ P¼èÌfKÔ0G*.9iƒRVdÇ‚m¤âbIbC6[Æ$ùbû ¾¤yv(ðОL9T¶hý©–]eV\¬ibPÊÆÃXvƪ×ûÊ?–S_±BU²,ü(5h®dƒ-Ù˜Ãʘ6¿¿ßn·©}ÙHµôj^Òª‡)­Ô¦à‚<¯ë¢!*úé^¯Dö\? >†¤h™YíkášÏ£Uaµ/Ü ždçyn^df¿áß>îøy¹ÏÊYæ=““§Œôáͱu?šo‚ìܧ%6úKû'cüJŽ­ôÒ¯„¯skú˜’zÚKŠª’½à]:mY‰cOó¥ T-Ö¸#1=¼ždOwMÉü|¾i«Õ‡«äqkžAÊ¿A é›°ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒÃ·…ÿ(á@c(dgit/tests/pkg-srcs/ruby-rails-3.2_3.2.6-1.debian.tar.gz0000664000000000000000000000437112521374563017432 0ustar ‹íïsÛº­_Ÿþ ,ënIÏ’å±o~I_œXi´9vÎvÒöËz´EÛ\%Q#©øy»·¿} e'¶›6ù’ôm%.gË  P":f$-¿zN𚇇æa÷ÛçœÅT¶às¶æÝÂäЯ»&Cì[Áe)M(£.H*%O.›ÐT"ÿà׌(®¨H˜”Œ§À$Ì© ã%ÌIJ0”Ÿ;˜Ò–@q é2*ð±",E=€ÖÐѤjŽ|$Ÿª©# ¸ð„dh<¡©"J/8Õ*À¾šSØ®fì˜U"JbX zp= ´Ï¦Ñh86ÑLJH4‰óHK±ŽYÂVKèéÆ8ÒÑls‰JhQKðˆMõ75šeù8fr^‚ˆiÞã\!Rj¤±WIkRæ$Q0dÁPt£î½|†H/“i£ª•™¤Æ,æ<ÙÖ…¡DÓ\¤¸(5“"Žf3kþƒN”Æhú)±ŠÐÚMx1­”l9à90ÂQ2æ·îN¤\¡¼…z²ûÝ] É9‰cÓ•Ùpi42ÙÔIhÐÅSS±d\˜5wuõ .öÏGïÛƒÂ!\ ú7a'èÀ^{ˆ¿÷Jð>]ô¯G€ƒvoôúçÐî}„¿…½N ‚Wƒ`8„þÀðòªˆ {gÝëNØ{§8±×A7¼ GÈuÔ7+®x…ÁPs» gø³}vÃÑÇ’çᨧ¹ž÷І«ö`ž]wÛ¸º\õ‡ ÐA¾½°w>Àe‚Ë 7òpYÄApƒ?`xÑîvõZ´¯QÎúWị\ô»‘§ÊÖ>íÅZ¨×Y·^– Ó¾l¿ ̬>²Aõ4]! ¼¿4N¯ØÆ¿³QØïiMÎú½Ñ–PÑÁènîûp” =‡Ú&çƒþ%ê¨mŠSú† NìmïímAýûzÜq„NÐî"³¡žl´\S{weuÍíÄ -O«ZïMqP;fî"£6+׊°pŽ0BéÓ%1²K$F ƒá¸4KõA4SñÜýNî‘£™¾Wÿ¯^½ËÿëÍJC×ÕFÍÞÿ/üC9—¢ú¡ê •DMæÏéÿߪÿ+µæÿ׫Mãÿµºõÿ—€•#לU}ž¹¦)LU‚HÄŒ«ùfQ0™1WÇ‹M̱)rxðÞî¾÷æÀC£z³Ù–ÂÿLýŸdD}'ÿ÷}óþ§Ñ¨W*õš~ÿãך¶þhZµþ¿™@½¼ÿ×k‡µõýˆÙ€îÿU}{ÿ¿¬tÛï!5ý¨ï\ †•«Z¶€gMbç’°T÷Ë(&ì«rx ÓûÀd p?,áh'¥p“ûÁ“˜Iõ@’ñÖ¹ÎbN°’Æâý‰5zçÒ-&¹mÝe¢Q –T:§ºq;4£iTt°œÉ°Dß{ MÏ÷ýÿ”³™*ެïÕ¥Å[„{þìJt}N”ö)ˆÉRÇHÝC×­Ó)×tHJ’˜J/7£jN…#=oA–°ä9D<ý³~}QD"BHOM»\NHêèW(ˆDybŠk¥³]¥Ñý{žéÅÆ\)žxàZª¹–¼¦IEuÃ_·ÓM~S ¬fVŽ Standards-Version: 3.9.2.0 Build-Depends: debhelper (>= 5), package-does-not-exist Package-List: pari-extra deb math optional Checksums-Sha1: ff281e103ab11681324b0c694dd3514d78436c51 121 pari-extra_3.orig.tar.gz 810c43d186ad2552d65949acf4a065fcfc823636 2484 pari-extra_3-2~dummy1.diff.gz Checksums-Sha256: ac1ef39f9da80b582d1c0b2adfb09b041e3860ed20ddcf57a0e922e3305239df 121 pari-extra_3.orig.tar.gz 41f47f24df7f50555f43549bd8377cce046750d29f69903e04b7fbfe396a0a73 2484 pari-extra_3-2~dummy1.diff.gz Files: 76bcf03be979d3331f9051aa88439b8b 121 pari-extra_3.orig.tar.gz eff09e2ace409a150646c4994f17f800 2484 pari-extra_3-2~dummy1.diff.gz dgit/tests/pkg-srcs/pari-extra_3-1.dsc0000664000000000000000000000172312521374563014732 0ustar -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.0 Source: pari-extra Binary: pari-extra Architecture: all Version: 3-1 Maintainer: Bill Allombert Standards-Version: 3.9.2.0 Build-Depends: debhelper (>= 5) Package-List: pari-extra deb math optional Checksums-Sha1: ff281e103ab11681324b0c694dd3514d78436c51 121 pari-extra_3.orig.tar.gz 080078dbc51e4194d209cb5abe57e2b25705fcaa 2358 pari-extra_3-1.diff.gz Checksums-Sha256: ac1ef39f9da80b582d1c0b2adfb09b041e3860ed20ddcf57a0e922e3305239df 121 pari-extra_3.orig.tar.gz bf4672acd5302b9eebee2f3bf5269022279e531204d7172b8761bb10fae3517a 2358 pari-extra_3-1.diff.gz Files: 76bcf03be979d3331f9051aa88439b8b 121 pari-extra_3.orig.tar.gz 02a39965adb84da9b3e6b5c5a0a4c378 2358 pari-extra_3-1.diff.gz -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAk5CvdoACgkQeDPs8bVESBX0mACeK3Yf9y22T2b6tw8eVQ8XSYxH ix4AoJJ3jrGJ4HXJNv/wbvmvBkkybvYJ =hkic -----END PGP SIGNATURE----- dgit/tests/pkg-srcs/pari-extra_3-2~dummy1.diff.gz0000664000000000000000000000466412521374563017053 0ustar ‹­XmsÛ¸þÿŠí¤3uN"%Yr±IƯI|—\§Ÿ® I¬)€H˺Nûú;úÇú,@ÒdbÙÍÍyæ." ,vŸÝ}vAP.LÈÛˆ`j“.‰œ¥B boð¸,vz½^gÙ·+)ö‡ÔõGc:<Üé}^¦›âk±´–üžôW™ÐlCÇi–ÑQ–éÕLœ0þ÷¡_E¤½1iŸFôQßÐÞp8ÄïhMžSo8ÃÞNï¼ðòõZeZ$?7zEó"V;\‰b–ÁL›DŠò6œ›A^ÎÜ·A¥¢eI'µ=?]]žÞ^ìh ¥ÑôÅ4€&ÏÙˆb)‰WÑÂè2'¡JR[˜tVP£T‰4;=^UH³²¤çnËÛ_è­TÒˆŒ.ÊY–Æô>¥²ÒÙóä“¢S‡¯¼OUyKvc ¹²}' Ö«<“‹½-î‘ ]¹CØLÒ\C'JýmPZ3°Ka$¼¸Zid~©…ÉïÿEžìEÇåÙÑ釳Ð+º5Bº«ZQ²7rQr·ºª¥÷þ18°*-P.4ðP…H΋T+ÀšˆÓLZȥʓ!!T°]é5 JÊÕjÃxYì¼Ô}62ÏDìÃt\Ÿe]H8u"cñ½™ÆúKiuv#TÑhœCr-üŠy©bVÌ}JäÂHŽ7Âß‹>MàCwühÔœ!³ê ^7ÒXÞ^yú,ËRS\šém…®?†tÒ‰‘ð¦è{ù/—…Kƒõzí²À†JE(â°¼äËh þ.ãÒeÀ’^÷–€ÖKX§Å’ Ž•ÂÄË>ÿL©Š´Ø8¥ñ¼pQWhcÃÆ,÷¬tRfÂ0¥W©È7iB—!ýÄ+i×m8üFÐ3ú¢Rç2@—]m%7ŒÌ‰msxŸƒ–ý聾k]N¤—÷pâkò”8ܧ£rJh4‰F/¢É”bz8kã¥P ™éÅvNoV´²õ`øu¶îŽƒ½»=ÑÙ‚qþ3•Áo^ezí¬¢è”‘ë`<+¤-Rµ‰Ž’©ä-˜SñY™fIÈ, XywÌŒ×þ³e‹ái¸¿ÅÒÆ"GZ½’K½n€½’J%2U¯„¿/mþs(oÓhÖ«Rµ* Š`ÙÀŠ¿»Ì¬ÍÌîSuY§!•~‡lÚìÂÁçÍnóAèE7åWFg‘_€=3Ëu³-ªßᢺ¢a½ýª\@¥ÂF„H;Öq¹Ê fªD˜¤a"Äï8œ†{~Íd¼‚^ÈÐ ÝìÓîNÒróŽxnÅ©`שÉì³ß!â‡Ñp¯Šø¯\³ŽuÎG¹¦2G©fÅfåbžÞ™5íTãŽÅ*µÑê˳®íºb-ŠxU9Ð.ê-ˆ–ÖÚ\¯µ‘IŸhBŸâ‚\£–gü<šL¶Xû}¶~e¤KŸêÒÂQž(RæMÇÉu\Ãû÷©8+I­Ð¥nÀ>Dá^µèKŽ(gÈb“ºBn ¯Éï^W¢àcú±Tà@ûÅVÀGÁäÀ°öy…áðˆ³öÍç B¡`;±ä›É¯Úì&æ„"tJ (›’óßÿðI­ „'q£Q¸ÀeíTïGÐ.epµ FLÐÆÊ† .¡®-ØDÁÇÇÂÌRiÐWd…5¢§{“ýýéä;1þ\Ê>íÐQnã úèhˆ,ÞŠñø·c¼bò‹.¥«>ŒÒà.‚î 07­n8Ñ1 رÄX'²’v‚hWð[íSfÒ~o¬q•¡ç5cNîÑ0Â`³‡½Gp8_åÆQN7m¾›pPç*±oÆûxv‹NιvhÂ/=?ÜÅÎñ—·O§ÓÑÁø7ð?Méƒ0•‚“h2öüÈÂÞëÞ@MÖŠ›uô2ª\´Úž3•DôH¾¬>0õúïíifêú£+]š§ÞíÚé»v¦*ÍQ+w_¿ÚÖ¯[ ÑÒ ßÀ5B%cŸàÜ_b5)t,6Q3ãìô>`æá¹GšèÿBB«„±ÁÏ>c"_ÆCâ…W¥«ÿº~ðS\”_ u§×³½ËèwZŒ>ýñŸ(¡qTíü4iš /$ï7Ò\ëqÚæ¸ºøfÜÀÐ…œ!¯ÜTìG‚Ö̇àj ï(á˜X²ãZ†¨døÉšó'](ž*Тλ Z+X ×qª’ÑeÆÐfC»sŒ!pʯ~A¿–ˆÁ¬³G1ÙÙl†pý¬,°Ç¶æW:F>ÕûQÒ4d¸ùh^rCVO’Ö½ÎOo&ÿK9Ü|–r'\r)±üÕ`¾‡’­yŠË5†*²Ò¤ò ðJqØwÕÊiÛÀô»ö¼ÀaNa…»íj `lÛ e)¤_“ŸëlèЛ%ñŸ–)bÎKä 8÷ò;©LŠpXJåT[º;š€Û-(M»­òw\]úÐ9›ûªÇØ×zrWîîiüÊÅ{'oUg–;í'抎eÆÃ¥G‹!3™ÁT±¡•ªÎåï€üDì,qÓ€ ÆÎ@ëe %w;Sh÷šÁ)æ/L}ÕðÐ-C؈hnxáW!Ø Ë¤fÈ¿GR3ÎóÂm#}%DäçE}ûdŜӰn’ż¨`/ó…¾Î>LÍ®än%fÿµEËhᘖŸþÁÕ÷Yª+q-)˜ãÚ>žþ:Åʈ‚“ÍÞñtÈkùn­}8=àÆ¿Swñ‚.!i­[ûA'é<­ˆ¤U8¿¹ôÜRî¸Â±œ/Š/æb¾ÙÆy `Å!‚О¡ ²³§ò6×wúî—ŸÏ.?]½rI®÷‰ªyåz•Wïüjä“dù âIjðPh&‹Îò^ÌMÏ7K«£5hò‰YÒîF^á¶²Œ”›…,«TyXžrÌÄþWµëÜõìSrÅ”D«$©ª¯ êû7&Ãwƒj^\L•<Žÿêvóùkµtl;/ª …î˦õ°äßg©ºö¿ø¦¸Æ ä‡ä®¶bÍù¸{œœùgî·ê…ŸWɾ-ëÅη´¶Öµl¥,;½ðâݧ­íwÛººúÝ ôHÅ3ä-”û|—ª.O÷wþ«\d{dgit/tests/pkg-srcs/ruby-rails-3.2_3.2.6-1.dsc0000664000000000000000000000265112521374563015554 0ustar -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 3.0 (quilt) Source: ruby-rails-3.2 Binary: ruby-rails-3.2, rails3 Architecture: all Version: 3.2.6-1 Maintainer: Debian Ruby Extras Maintainers Uploaders: Antonio Terceiro Dm-Upload-Allowed: yes Homepage: http://www.rubyonrails.org Standards-Version: 3.9.3 Vcs-Browser: http://git.debian.org/?p=pkg-ruby-extras/ruby-rails.git;a=summary Vcs-Git: git://git.debian.org/pkg-ruby-extras/ruby-rails-3.2.git Build-Depends: debhelper (>= 7.0.50~), gem2deb (>= 0.3.0~) Package-List: rails3 deb ruby optional ruby-rails-3.2 deb ruby optional Checksums-Sha1: f36c3866b22de8ff6875fdbbfbcfb8d18e1f5a89 953 ruby-rails-3.2_3.2.6.orig.tar.gz 7208250afe7083e258d1fa36cc3a60527608df11 2297 ruby-rails-3.2_3.2.6-1.debian.tar.gz Checksums-Sha256: 207cfb1ef70aa9458c776deeda8e38ac977cbc852209828793b27d55bebc7bea 953 ruby-rails-3.2_3.2.6.orig.tar.gz 55decdcdc8248a4153fb7e5688ffdc3c3a2661a95f3870edba3e1eaf40907088 2297 ruby-rails-3.2_3.2.6-1.debian.tar.gz Files: 05a3954762c2a2101a10dd2efddf7000 953 ruby-rails-3.2_3.2.6.orig.tar.gz 87bdb28ef5053d825bda80e959e2fd1c 2297 ruby-rails-3.2_3.2.6-1.debian.tar.gz Ruby-Versions: all -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAk/nrgIACgkQDOM8kQ+cso9TjgCfcDl8MvUtKVZP6bPP9IrO93hP TnAAn1aA67N088u6u/S2VA8UhYjNXhpO =7sbS -----END PGP SIGNATURE----- dgit/tests/gnupg/0000775000000000000000000000000012521374563011167 5ustar dgit/tests/gnupg/dm.txt0000664000000000000000000026764612521374563012355 0ustar Fingerprint: A7830CCABA4AFF02E50213FE8F32B4422F52107F Uid: Adrian Knoth Allow: a2jmidid (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), ardour (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), ardour3 (218EE0362033C87B6C135FA4A3BABAE2408DD6CF), calf (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), jack-audio-connection-kit (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), jackd-defaults (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), jackd2 (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), kmidimon (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), libdrumstick (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), libffado (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), midisport-firmware (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), qjackctl (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C), zita-at1 (04160004A8276E40BB9890FBE8A48AE5311D765A) Fingerprint: 834C97925D15D2A573C2478777013C58233007A7 Uid: Ahmed Toulan Allow: gdigi (9F73032EEAC9F7AD951F280ECB668E29A3FD0DF7) Fingerprint: 487FCD050895105F43C206089B2E6B82752DB03B Uid: Alberto Luaces Fernández Allow: openscenegraph (2A8E80505C486298430DD0937F7606A445DCA80E) Fingerprint: 2875F6B1C2D27A4F0C8AF60B2A714497E37363AE Uid: Aleksey Kravchenko Allow: rhash (75FFFC9F717B526296A20609BDD933B785FEC17F) Fingerprint: 3224C4469D7DF8F3D6F41A02BBC756DDBE595F6B Uid: Alexander Chernyakhovsky Allow: byobu (51892A7D16D049BB046BDC7797325DD8F9FDD506), config-package-dev (51892A7D16D049BB046BDC7797325DD8F9FDD506), hesiod (198F5EAE4F00F3D1E9A7BC50B1CA92E8A7D86B95) Fingerprint: 085C34EAC00FC1E6615982C13C13A8C2D9012EC1 Uid: Alexander Golovko Allow: bacula (C331BA3F75FB723B5873785B06EAA066E397832F), bacula-doc (C331BA3F75FB723B5873785B06EAA066E397832F) Fingerprint: B1A51EB2779DD01743CC19BA1CF792111B5228B0 Uid: Alexandre Mestiashvili Allow: bowtie2 (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), cufflinks (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), libdancer-session-cookie-perl (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), libpam-abl (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), pycorrfit (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), seq-gen (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), tophat (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), transtermhp (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1) Fingerprint: 800A1489C2F186F57C3D41C734705168FE9F0236 Uid: Alexandre Raymond Allow: password-gorilla (710F265D7B816542F23CE054D4B7DDF7B16CCA95), restartd (710F265D7B816542F23CE054D4B7DDF7B16CCA95) Fingerprint: 5B76E76B4AAD389A76F9BCF99688FFC1C78102DF Uid: Allison Randal Allow: parrot (A4F455C3414B10563FCC9244AFA51BD6CDE573CB) Fingerprint: 7FEB617A87114E1BDE8C89C92713E679084651AF Uid: Andrea Colangelo Allow: fortune-mod (8F049AD82C92066C7352D28A7B585B30807C2A87), key-mon (66B4DFB68CB24EBBD8650BC4F4B4B0CC797EBFAB), tennix (DDC53E5130FD08223F98945649086AD3EBE2F31F) Fingerprint: 0BCA751BEEB81FBC7661BEA5C412AF7E994376FD Uid: Andreas Hildebrandt Allow: ball (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1) Fingerprint: 1662F3FE0EF53DE5E6CE0031B446EEA8329A945A Uid: Andreas Noteng Allow: checkinstall (218EE0362033C87B6C135FA4A3BABAE2408DD6CF), transgui (374FF2AD0A12935FD0B0C84F1B132E01CEC6AD46) Fingerprint: DB306E4B10FFD98EF4DB55D7194B631AB2DA2888 Uid: Andreas Rönnquist Allow: devilspie2 (B3131A451DBFDF7CA05B4197054BBB9F7D806442), sciteproj (B3131A451DBFDF7CA05B4197054BBB9F7D806442) Fingerprint: 34CA12A3C6F8B15672C2D0D7D286CE0C0C62B791 Uid: Andrew Ruthven Allow: mythtv-status (8C470B2A0B31568E110D432516281F2E007C98D1) Fingerprint: 3E02FD6656295952110BAB99F51B18C720248224 Uid: Apollon Oikonomopoulos Allow: beanstalkc (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), beanstalkd (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), ganeti (4C951CEC98B44B68A286FF458489B14D8807529B), ioping (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), python-hiredis (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), redsocks (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), ruby-hiredis (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), xmobar (A9592C521CB904077D6598009D0B5E5B1EEC8F0E) Fingerprint: C1FABEE40A628709CCFB7D2C964D005C0CA7686C Uid: Artur R. Czechowski Allow: imms (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), lwatch (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), rrdcollect (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06) Fingerprint: AF031CB8DFFB7DC5E1EEEB04A7C9FF063F3D2E03 Uid: Axel Wagner Allow: shellex (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D) Fingerprint: D6E01EC516A5DFCEF71956D3775079E5B850BC93 Uid: Bernhard Schmidt Allow: torrus (A3C282024F979BAD6ED484D18196A5446BBA3C84) Fingerprint: EC9F905D866DBE46A896C827BE0C924203F4552D Uid: ChangZhuo Chen Allow: ibus-chewing (374FF2AD0A12935FD0B0C84F1B132E01CEC6AD46), libchewing (374FF2AD0A12935FD0B0C84F1B132E01CEC6AD46) Fingerprint: 1DE86AB01897A330D973D77C50DD5A29FB099999 Uid: Chris Boot Allow: ppp (1F2232EEE56FD048EAEFE47F1467F0D8E1EE3FB1), ulogd2 (0A55B7C51223394286EC74C35394479DD3524C51) Fingerprint: 7D1ACFFAD9E0806C9C4CD3925C13D6DB93052E03 Uid: Christian Hofstaedtler Allow: boot-info-script (556509901902AF06ADC6E01C04AAE5B397F1AAAC), bundler (556509901902AF06ADC6E01C04AAE5B397F1AAAC), cciss-vol-status (556509901902AF06ADC6E01C04AAE5B397F1AAAC), gist (556509901902AF06ADC6E01C04AAE5B397F1AAAC), grml-debootstrap (556509901902AF06ADC6E01C04AAE5B397F1AAAC), grml-rescueboot (556509901902AF06ADC6E01C04AAE5B397F1AAAC), grml2usb (556509901902AF06ADC6E01C04AAE5B397F1AAAC), pbundler (556509901902AF06ADC6E01C04AAE5B397F1AAAC), ruby-mechanize (556509901902AF06ADC6E01C04AAE5B397F1AAAC), salt (556509901902AF06ADC6E01C04AAE5B397F1AAAC) Fingerprint: 08F084DA146C873C361AAFA8E76004C5CEF0C94C Uid: Christian Kastner Allow: diveintopython3 (CDB5A1243ACDB63009AD07212D4EB3A6015475F5) Fingerprint: 08CD6D1255FA3A875C1FB096398D1112D3A4BDE1 Uid: Christian M. Amsüss Allow: openscad (9A57344C54D3C8610A5F22FCBAA569D0CBF12A6A) Fingerprint: 3688337C0D3E372594ECE4018D52CDE95117E119 Uid: Christian Welzel Allow: typo3-src (B8BF54137B09D35CF026FE9D091AB856069AAA1C) Fingerprint: 7062DAA4F001B9C6616700CF68C287DFC6A80226 Uid: Colin King Allow: eventstat (73EE922658C2E07340EA9613E7F710555409E422), powerstat (73EE922658C2E07340EA9613E7F710555409E422), thermald (73EE922658C2E07340EA9613E7F710555409E422) Fingerprint: 709F54E4ECF3195623326AE3F82E5CC04B2B2B9E Uid: Daniel Baumann Allow: clzip (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC), criu (A4AD7A700EE5F70F31B16FA32127371B9BB23062), dosfstools (A4AD7A700EE5F70F31B16FA32127371B9BB23062), foxtrotgps (A4AD7A700EE5F70F31B16FA32127371B9BB23062), fuse (A4AD7A700EE5F70F31B16FA32127371B9BB23062), gfxboot (A4AD7A700EE5F70F31B16FA32127371B9BB23062), gfxboot-examples (A4AD7A700EE5F70F31B16FA32127371B9BB23062), gfxboot-themes (A4AD7A700EE5F70F31B16FA32127371B9BB23062), git-stuff (A4AD7A700EE5F70F31B16FA32127371B9BB23062), gnu-efi (A4AD7A700EE5F70F31B16FA32127371B9BB23062), irker (A4AD7A700EE5F70F31B16FA32127371B9BB23062), libcgroup (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-boot (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-build (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-config (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-debconfig (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-images (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-manual (A4AD7A700EE5F70F31B16FA32127371B9BB23062), live-tools (A4AD7A700EE5F70F31B16FA32127371B9BB23062), lunzip (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC), lxc (A4AD7A700EE5F70F31B16FA32127371B9BB23062), lzd (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), lzip (A4AD7A700EE5F70F31B16FA32127371B9BB23062), lziprecover (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC), lzlib (A4AD7A700EE5F70F31B16FA32127371B9BB23062), ntfs-3g (A4AD7A700EE5F70F31B16FA32127371B9BB23062), pdlzip (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC), plymouth (A4AD7A700EE5F70F31B16FA32127371B9BB23062), plzip (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC), python-irc (A4AD7A700EE5F70F31B16FA32127371B9BB23062), syslinux (A4AD7A700EE5F70F31B16FA32127371B9BB23062), tftp-hpa (A4AD7A700EE5F70F31B16FA32127371B9BB23062), vsftpd (A4AD7A700EE5F70F31B16FA32127371B9BB23062), zutils (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC) Fingerprint: 160853D573C1690115FA4B78B012AD8CF19F599F Uid: Darren Salt Allow: glbsp (93005DC27E876C37ED7BCA9A98083544945348A4), gxine (93005DC27E876C37ED7BCA9A98083544945348A4), mercurial-buildpackage (93005DC27E876C37ED7BCA9A98083544945348A4), playmidi (93005DC27E876C37ED7BCA9A98083544945348A4), pngmeta (93005DC27E876C37ED7BCA9A98083544945348A4), rfkill (93005DC27E876C37ED7BCA9A98083544945348A4), xine-lib (93005DC27E876C37ED7BCA9A98083544945348A4), xine-lib-1.2 (93005DC27E876C37ED7BCA9A98083544945348A4), xine-ui (93005DC27E876C37ED7BCA9A98083544945348A4) Fingerprint: AE0DBF5A92A5ADE49481BA6F8A3171EF366150CE Uid: David Steele Allow: gnome-gmail (467348C85F3A5A9B2B0D169EBF1E9D1F76D52AC4) Fingerprint: 126064058E7A80FE7D0672298F342172F407DB73 Uid: Devid Antonio Filoni Allow: gexiv2 (DDC53E5130FD08223F98945649086AD3EBE2F31F), granite (DDC53E5130FD08223F98945649086AD3EBE2F31F), ircp-tray (DDC53E5130FD08223F98945649086AD3EBE2F31F), libraw (DDC53E5130FD08223F98945649086AD3EBE2F31F), msn-pecan (DDC53E5130FD08223F98945649086AD3EBE2F31F), shotwell (DDC53E5130FD08223F98945649086AD3EBE2F31F), sqlheavy (DDC53E5130FD08223F98945649086AD3EBE2F31F), sushi (DDC53E5130FD08223F98945649086AD3EBE2F31F) Fingerprint: 1AFC09386700D1A8F05C65ADE5AB5F161CDD0D98 Uid: Diane Trout Allow: ktp-accounts-kcm (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-approver (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-auth-handler (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-call-ui (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-contact-list (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-contact-runner (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-desktop-applets (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-filetransfer-handler (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-kded-integration-module (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-send-file (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), ktp-text-ui (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), meta-kde-telepathy (12DDFA84AC23B2BBF04B313CAB645F406286A7D0) Fingerprint: 6EE50664D18E4E0CB8B43DF700E89439F228292B Uid: Dima Kogan Allow: feedgnuplot (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), libdogleg (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), liblbfgs (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), tcpflow (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), vlfeat (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), xcscope-el (E50AFD55ADD27AAB97163A8B21D20589974B3E96) Fingerprint: 2626C74FA4EA17DF304B1EF2A03F52085D424895 Uid: Dimitrios Eftaxiopoulos Allow: freefem++ (20691DFCC2C98C47952984EE00018C22381A7594), mathgl (20691DFCC2C98C47952984EE00018C22381A7594) Fingerprint: 3A82860837A0CD32470F91E62AC1E075F5ED1B25 Uid: The Roman People Allow: not-a-package (BCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A), pari-extra (BCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A) Fingerprint: F24299FF1BBC9018B906A4CB6026936D2F1C8AE0 Uid: Dmitry Shachnev Allow: mathjax (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), mathjax-docs (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), pymarkups (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), pyqt5 (7523647B95E5047547EC2BBA1DA8DA33DDCD686A), python-gdata (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), python-markdown (ECA1E3F28E112432D485DD95EB36171A6FF9435F), python-qt4 (7523647B95E5047547EC2BBA1DA8DA33DDCD686A), python-secretstorage (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), retext (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), sip4 (7523647B95E5047547EC2BBA1DA8DA33DDCD686A), sphinx (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1), woff-tools (6EB223D7D71E67A53C93A7DA3B56E2BBD53FDCB1) Fingerprint: 71B8F031E648BCD95EAC18FA47712171F2ED62FB Uid: Elmar Heeb Allow: autocutsel (F067EA2726B9C3FC1486202EC09E1D8995930EDE) Fingerprint: 64CF7C59E56B38F04CA6F861C9F1CBF56351F719 Uid: Elías Alejandro Año Mendoza Allow: fdclone (04160004A8276E40BB9890FBE8A48AE5311D765A), gpick (04160004A8276E40BB9890FBE8A48AE5311D765A), uget (04160004A8276E40BB9890FBE8A48AE5311D765A) Fingerprint: 5201B8B5039F3F03E628F16B826355E260F7BCB2 Uid: Emile Joubert Allow: rabbitmq-server (325A3DD1F8D5E51C5D1D83725EB9E72A228A3AE4) Fingerprint: 1D68927B7F2964590BB000F0AE0C84BB0A2368F0 Uid: Emilien Klein Allow: nautilus-image-manipulator (E1D8579682144687E416948C859FEF67258E26B1) Fingerprint: B8CE4DE21080DCF903E16C40F513C419E4B9D0AC Uid: Emmanuel Bourg Allow: ant (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ant-contrib (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ant1.7 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), antlr (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), antlr-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), antlr3 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), apache-log4j1.2 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), apache-pom (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), asm (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), asm2 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), asm3 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), aspectj-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), avalon-framework (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), axis (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), batik (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), bcel (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), bouncycastle (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), build-helper-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), cglib (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), checkstyle (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-beanutils (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-configuration (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-csv (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-daemon (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-exec (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-httpclient (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-io (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-javaflow (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-jci (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-math (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-math3 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-parent (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-pool (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), commons-vfs (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), derby (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), dom4j (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), doxia-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ehcache (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), excalibur-logger (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), excalibur-logkit (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), exec-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-bundlerepository (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-framework (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-gogo-command (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-gogo-runtime (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-gogo-shell (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-main (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-osgi-obr (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-shell (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-shell-tui (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), felix-utils (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), fop (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), guava-libraries (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), hessian (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), hsqldb (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), hsqldb1.8.0 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), httpcomponents-client (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), httpcomponents-core (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ivy (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jakarta-jmeter (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jakarta-log4j (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jakarta-taglibs-standard (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jarjar-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jasperreports (E50AFD55ADD27AAB97163A8B21D20589974B3E96), jasperreports3.7 (E50AFD55ADD27AAB97163A8B21D20589974B3E96), java3d (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), javacc (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), javacc-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jcifs (E50AFD55ADD27AAB97163A8B21D20589974B3E96), jenkins-dom4j (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jmock (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), joda-convert (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jsch (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jsoup (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), junit (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), junit4 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), jzlib (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libapache-poi-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libasm4-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-attributes-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-cli-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-codec-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-collections-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-collections3-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-compress-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-dbcp-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-digester-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-discovery-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-el-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-fileupload-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-jexl-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-jexl2-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-jxpath-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-lang-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-lang3-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-launcher-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-logging-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-modeler-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-net-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-net1-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-net2-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-openpgp-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libcommons-validator-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libfreemarker-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libhamcrest-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libhibernate3-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libitext-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libitext5-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libj2ssh-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libjgroups-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libjoda-time-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libjtype-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libmiglayout-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libmx4j-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), liboro-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libproxool-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), librelaxng-datatype-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libswingx-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libswingx1-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libws-commons-util (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libws-commons-util-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libxalan2-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libxerces2-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libxml-security-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), libxmpcore-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libxstream-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), lucene-solr (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), lucene2 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-antrun-extended-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-antrun-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-assembly-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-bundle-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-clean-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-compiler-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-dependency-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-ear-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-ejb-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-hpi-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-install-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-invoker-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-jar-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-javadoc-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-plugin-tools (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-project-info-reports-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-resources-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-shade-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-site-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-source-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-stapler-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven-war-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven2 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), maven2-core (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), mina (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), mina2 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), munge-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), mysql-connector-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ognl (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), opencsv (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), plexus-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), properties-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), sitemesh (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), substance (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), surefire (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), tagsoup (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), uima-addons (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), uima-as (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), uimaj (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), vecmath (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), velocity (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), velocity-tools (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), xml-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), xmlbeans-maven-plugin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), xmlunit (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), xz-java (DEE63CAACE54B9B27DDCD34A88E5D733DD899610) Fingerprint: F6258DF2BFF9A73F5B1E15C306456DD791E95791 Uid: Emmanuel Kasper Kasprzyk Allow: mame (73ED4244FD43588620AC2644258494BA917A225E), mess (73ED4244FD43588620AC2644258494BA917A225E) Fingerprint: FC3D302E02E469C30AA89067F7D931D4B882EBD7 Uid: Eric Cooper Allow: approx (58EB0999C64E897EE894B8037853DA4D49881AD3), ocaml-sha (02054829E12D0F2A8E648E62745C4766D4CACDFF) Fingerprint: 73571E85C19F4281D8C97AA86CA41A7743B8D6C8 Uid: Erik de Castro Lopo Allow: libsamplerate (B2F9C5E313771B0DC8B0F6B503C0023E05410E97), libsndfile (B2F9C5E313771B0DC8B0F6B503C0023E05410E97), sndfile-tools (B2F9C5E313771B0DC8B0F6B503C0023E05410E97) Fingerprint: 11DD7D0BBA65B6AE507DD59200AB067AE47B79A4 Uid: Eugen Dedu Allow: ekiga (75FFFC9F717B526296A20609BDD933B785FEC17F), opal (75FFFC9F717B526296A20609BDD933B785FEC17F), ptlib (75FFFC9F717B526296A20609BDD933B785FEC17F) Fingerprint: 4D60D518D9ADC00459A27B1CD7D3402E0106630C Uid: Eugene Zhukov Allow: epubcheck (693367FFAECD8EAACD1F063B0171E1828AE09345), xml-maven-plugin (693367FFAECD8EAACD1F063B0171E1828AE09345) Fingerprint: ECA5F5232FE1F8E3B1303ACB5E326303C98B5D5D Uid: Federico Ceratto Allow: cmd2 (2BABC6254E66E7B8450AC3E1E6AA90171392B174), debtags (66B4DFB68CB24EBBD8650BC4F4B4B0CC797EBFAB), easyzone (2BABC6254E66E7B8450AC3E1E6AA90171392B174), freshen (2BABC6254E66E7B8450AC3E1E6AA90171392B174), gitmagic (2BABC6254E66E7B8450AC3E1E6AA90171392B174), pudb (2BABC6254E66E7B8450AC3E1E6AA90171392B174), pymongo (2BABC6254E66E7B8450AC3E1E6AA90171392B174), python-bottle (2BABC6254E66E7B8450AC3E1E6AA90171392B174), python-enum (2BABC6254E66E7B8450AC3E1E6AA90171392B174), python-nmap (2BABC6254E66E7B8450AC3E1E6AA90171392B174), python-xattr (2BABC6254E66E7B8450AC3E1E6AA90171392B174), runsnakerun (2BABC6254E66E7B8450AC3E1E6AA90171392B174), squaremap (2BABC6254E66E7B8450AC3E1E6AA90171392B174), tgmochikit (2BABC6254E66E7B8450AC3E1E6AA90171392B174), turbojson (2BABC6254E66E7B8450AC3E1E6AA90171392B174), turbokid (2BABC6254E66E7B8450AC3E1E6AA90171392B174), uncertainties (2BABC6254E66E7B8450AC3E1E6AA90171392B174) Fingerprint: CAF85751553EAC43538D56487F3805C7D82FB9C8 Uid: Felix Zielcke Allow: grub (AC0A4FF12611B6FCCF01C111393587D97D86500B), grub-installer (AC0A4FF12611B6FCCF01C111393587D97D86500B), grub2 (AC0A4FF12611B6FCCF01C111393587D97D86500B), libaal (AC0A4FF12611B6FCCF01C111393587D97D86500B), reiser4progs (AC0A4FF12611B6FCCF01C111393587D97D86500B), reiserfsprogs (AC0A4FF12611B6FCCF01C111393587D97D86500B) Fingerprint: 0FB1803BC91D1B601E2A2C22702A26DB4CCB3FFC Uid: Floris Bruynooghe Allow: omniorb-dfsg (4B74F71B1C2272344249BF53CF62D79438E68E0E), python-omniorb (4B74F71B1C2272344249BF53CF62D79438E68E0E) Fingerprint: 25F3B67F038187D3ADF60A3329E36B9A01ED3AC7 Uid: Frank Habermann Allow: ckeditor (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), fckeditor (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), knowledgeroot (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), prototypejs (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), scriptaculous (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tinymce (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), zendframework (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E) Fingerprint: B5BCBDDE7CA813D4F6A3D135A7771D09B55C9C2B Uid: Gabriele Giacone <1o5g4r8o@gmail.com> Allow: critterding (E50AFD55ADD27AAB97163A8B21D20589974B3E96), gnash (E50AFD55ADD27AAB97163A8B21D20589974B3E96), jedit (E50AFD55ADD27AAB97163A8B21D20589974B3E96), jxplorer (E50AFD55ADD27AAB97163A8B21D20589974B3E96), pidgin-skype (DDC53E5130FD08223F98945649086AD3EBE2F31F), sunflow (E50AFD55ADD27AAB97163A8B21D20589974B3E96), sweethome3d (65A12DF4FE31AD6BAC4D76AE3355F4D63B5821CC), sweethome3d-furniture (E50AFD55ADD27AAB97163A8B21D20589974B3E96), sweethome3d-furniture-editor (E50AFD55ADD27AAB97163A8B21D20589974B3E96), sweethome3d-furniture-nonfree (E50AFD55ADD27AAB97163A8B21D20589974B3E96), sweethome3d-textures-editor (E50AFD55ADD27AAB97163A8B21D20589974B3E96), ubiquity-extension (A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C) Fingerprint: 2985B56E5FBC9D9C21E9597B8B6EF2528F075E1D Uid: Gianfranco Costamagna Allow: boinc (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), boinc-app-milkyway (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), boinc-app-seti (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), docbook2x (B5E7DDCA01B39BEE841B1E199B46F1FB088F6B8C), hedgewars (1B23D4F88EC0D9020555E438AB8C00CFF8E26537), qviaggiatreno (E5D870FFBB267D90D52C56B5347A7D93176015ED) Fingerprint: 05D0169C26E41593418129DF199A64FADFB500FF Uid: Gregor Jasny Allow: c-ares (3BDC04824EA81277AE46EA72F98825AC26B47B9F), v4l-utils (3BDC04824EA81277AE46EA72F98825AC26B47B9F) Fingerprint: 519B6955BF534A43E3D60827554297EDF9CCA585 Uid: Guo Yixuan Allow: boinc (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), boinc-app-seti (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), gcc-4.4-doc-non-dfsg (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), gcc-4.6-doc (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), gcc-4.7-doc (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), gcc-4.8-doc (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), gcc-doc-defaults (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), pod2pdf (36E2EDDEC21FEC8F77B87436D362B62A54B99890) Fingerprint: 4656B626E481EE4E7EC572DA46CC5C63F318A56A Uid: Helge Kreutzmann Allow: asclock (F849E2025D1C194DE62BC6C829BE5D2268FD549F), goobox (F849E2025D1C194DE62BC6C829BE5D2268FD549F), linuxinfo (F849E2025D1C194DE62BC6C829BE5D2268FD549F) Fingerprint: DF2494F9FA1BDEFC1A718FFCD350BB0228F60193 Uid: Hsin-Yi Chen Allow: python-ucltip (DA06F3E341E999EC18C376DDA108FBC534A26946), python-vsgui (DA06F3E341E999EC18C376DDA108FBC534A26946) Fingerprint: 7405E745574809734800156DB65019C47F7A36F8 Uid: IOhannes m zmölnig Allow: assimp (5E61C8780F86295CE17D86779F0FE587374BBE81), gem (5E61C8780F86295CE17D86779F0FE587374BBE81), pd-iemambi (5E61C8780F86295CE17D86779F0FE587374BBE81), pd-iemmatrix (5E61C8780F86295CE17D86779F0FE587374BBE81), pd-iemnet (5E61C8780F86295CE17D86779F0FE587374BBE81), pd-osc (5E61C8780F86295CE17D86779F0FE587374BBE81), pd-readanysf (5E61C8780F86295CE17D86779F0FE587374BBE81), pd-zexy (5E61C8780F86295CE17D86779F0FE587374BBE81), pdp (5E61C8780F86295CE17D86779F0FE587374BBE81), puredata (5E61C8780F86295CE17D86779F0FE587374BBE81), v4l2loopback (5E629EE5232197357B84CF4332247FBB40AD1FA6) Fingerprint: 9D5CEE01334F46CE2FEF6DC6EC63699779074FA8 Uid: Ian Campbell Allow: flash-kernel (B60EBF2984453C70D74CF478FF914AF0C2B35520), qcontrol (F849E2025D1C194DE62BC6C829BE5D2268FD549F), xserver-xorg-video-ivtvdev (33B18B87928138D4E7AE88FF7867D53C747935DD) Fingerprint: 068B8122734EF48428A2E477BC2CB1A2686FF87F Uid: Ignace Mouzannar Allow: lshell (F8921D3A7404C86E11352215C7197699B29B232A) Fingerprint: B11E2D9D2861F45188B200A158B29F8CF74EC6C8 Uid: Iulian Udrea Allow: haskell-adjunctions (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-algebra (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-bifunctors (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-categories (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-comonad (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-comonad-transformers (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-comonads-fd (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-contravariant (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-data-lens (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-distributive (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-free (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-keys (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-maths (4E469519ED677734268FBD958F7BF8FC4A11C97A), haskell-representable-functors (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-representable-tries (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-semigroupoids (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), haskell-void (3D0EFB95E7B5237F16E82258E352D5C51C5041D4) Fingerprint: 7BF5F6AC36431F5D40DC137A4CF2B218F54DAE3D Uid: Jakob Haufe Allow: blogofile (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), glabels (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), minitube (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D) Fingerprint: 80887BA0E28203ADC125E0049D50E144E6357327 Uid: James Hunt Allow: procenv (D764F6CC2AB59A38B1147D73887B60618B3C16AE), utfout (D764F6CC2AB59A38B1147D73887B60618B3C16AE) Fingerprint: B65D085B94117B813160B659ED34CEABE27BAABC Uid: Jameson Graef Rollins Allow: assword (0EE5BE979282D80B9F7540F1CCD2ED94D21739E9) Fingerprint: 0896F05999C906DBB3BCD04BF1E30FE50CA6B4AA Uid: Jan Beyer Allow: bibus (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), gwyddion (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1) Fingerprint: 4617E5FBC56DACB67C8CDE643A4CB2701A89CC23 Uid: Jan-Pascal van Best Allow: spotweb (D53A815A3CB7659AF882E3958EEDCC1BAA1F32FF) Fingerprint: 4A543513D2DF6351A8178EA35B019455E2B84FA5 Uid: Jaromír MikeÅ¡ Allow: aliki (04160004A8276E40BB9890FBE8A48AE5311D765A), amb-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), ambdec (04160004A8276E40BB9890FBE8A48AE5311D765A), ardour3 (218EE0362033C87B6C135FA4A3BABAE2408DD6CF), brp-pacu (04160004A8276E40BB9890FBE8A48AE5311D765A), caps (218EE0362033C87B6C135FA4A3BABAE2408DD6CF), clthreads (04160004A8276E40BB9890FBE8A48AE5311D765A), clxclient (04160004A8276E40BB9890FBE8A48AE5311D765A), composite (04160004A8276E40BB9890FBE8A48AE5311D765A), dataquay (04160004A8276E40BB9890FBE8A48AE5311D765A), drc (04160004A8276E40BB9890FBE8A48AE5311D765A), drumkv1 (04160004A8276E40BB9890FBE8A48AE5311D765A), ebumeter (04160004A8276E40BB9890FBE8A48AE5311D765A), eq10q (04160004A8276E40BB9890FBE8A48AE5311D765A), faustworks (04160004A8276E40BB9890FBE8A48AE5311D765A), fil-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), garmindev (5701F1D0D18B87E61AA31F3DC073D2287FFB9E9B), gmidimonitor (04160004A8276E40BB9890FBE8A48AE5311D765A), gtklick (04160004A8276E40BB9890FBE8A48AE5311D765A), gwc (04160004A8276E40BB9890FBE8A48AE5311D765A), gxtuner (04160004A8276E40BB9890FBE8A48AE5311D765A), invada-studio-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), invada-studio-plugins-lv2 (04160004A8276E40BB9890FBE8A48AE5311D765A), ir.lv2 (04160004A8276E40BB9890FBE8A48AE5311D765A), jaaa (04160004A8276E40BB9890FBE8A48AE5311D765A), jack-capture (04160004A8276E40BB9890FBE8A48AE5311D765A), jack-midi-clock (04160004A8276E40BB9890FBE8A48AE5311D765A), jalv (04160004A8276E40BB9890FBE8A48AE5311D765A), japa (04160004A8276E40BB9890FBE8A48AE5311D765A), jconvolver (04160004A8276E40BB9890FBE8A48AE5311D765A), jkmeter (04160004A8276E40BB9890FBE8A48AE5311D765A), jmeters (04160004A8276E40BB9890FBE8A48AE5311D765A), jnoise (04160004A8276E40BB9890FBE8A48AE5311D765A), jnoisemeter (04160004A8276E40BB9890FBE8A48AE5311D765A), klick (04160004A8276E40BB9890FBE8A48AE5311D765A), ladspa-sdk (218EE0362033C87B6C135FA4A3BABAE2408DD6CF), libinstpatch (04160004A8276E40BB9890FBE8A48AE5311D765A), libltc (04160004A8276E40BB9890FBE8A48AE5311D765A), lv2-c++-tools (04160004A8276E40BB9890FBE8A48AE5311D765A), lv2core (04160004A8276E40BB9890FBE8A48AE5311D765A), lv2dynparam1 (04160004A8276E40BB9890FBE8A48AE5311D765A), lv2fil (04160004A8276E40BB9890FBE8A48AE5311D765A), mcp-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), meterbridge (04160004A8276E40BB9890FBE8A48AE5311D765A), midisnoop (04160004A8276E40BB9890FBE8A48AE5311D765A), nekobee (04160004A8276E40BB9890FBE8A48AE5311D765A), paulstretch (04160004A8276E40BB9890FBE8A48AE5311D765A), petri-foo (04160004A8276E40BB9890FBE8A48AE5311D765A), phat (04160004A8276E40BB9890FBE8A48AE5311D765A), plotmm (04160004A8276E40BB9890FBE8A48AE5311D765A), pyliblo (04160004A8276E40BB9890FBE8A48AE5311D765A), qlandkartegt (5701F1D0D18B87E61AA31F3DC073D2287FFB9E9B), qmidiarp (04160004A8276E40BB9890FBE8A48AE5311D765A), qmidiroute (04160004A8276E40BB9890FBE8A48AE5311D765A), rev-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), rubberband (04160004A8276E40BB9890FBE8A48AE5311D765A), samplv1 (04160004A8276E40BB9890FBE8A48AE5311D765A), showq (04160004A8276E40BB9890FBE8A48AE5311D765A), sineshaper (04160004A8276E40BB9890FBE8A48AE5311D765A), slv2 (04160004A8276E40BB9890FBE8A48AE5311D765A), sonic-visualiser (04160004A8276E40BB9890FBE8A48AE5311D765A), sooperlooper (04160004A8276E40BB9890FBE8A48AE5311D765A), specimen (04160004A8276E40BB9890FBE8A48AE5311D765A), swami (04160004A8276E40BB9890FBE8A48AE5311D765A), synthv1 (04160004A8276E40BB9890FBE8A48AE5311D765A), tap-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), tap-plugins-doc (04160004A8276E40BB9890FBE8A48AE5311D765A), vamp-plugin-sdk (04160004A8276E40BB9890FBE8A48AE5311D765A), vco-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), wah-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), x42-plugins (04160004A8276E40BB9890FBE8A48AE5311D765A), xjadeo (04160004A8276E40BB9890FBE8A48AE5311D765A), yoshimi (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-ajbridge (218EE0362033C87B6C135FA4A3BABAE2408DD6CF), zita-alsa-pcmi (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-at1 (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-convolver (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-lrx (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-mu1 (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-resampler (04160004A8276E40BB9890FBE8A48AE5311D765A), zita-rev1 (04160004A8276E40BB9890FBE8A48AE5311D765A), zynaddsubfx (04160004A8276E40BB9890FBE8A48AE5311D765A) Fingerprint: E8CDDDFCE25A166FAF617CB647D23A6E56164AC2 Uid: Jean-Michel Vourgère Allow: mdbtools (1EBA24A7DAAE662C6FF34B37C7F521C122B282CA) Fingerprint: 0D80EABB04476E542C9408E10ADB299C1F137C9F Uid: Jeroen Dekkers Allow: sbjson (F1F3A87ED983DFAD791ADAD83DAF54A21EEF5276), sogo (F1F3A87ED983DFAD791ADAD83DAF54A21EEF5276), sope (F1F3A87ED983DFAD791ADAD83DAF54A21EEF5276) Fingerprint: 5E787F8DB58F02AF5C63C9DD4A2254641FE1B08B Uid: Joachim Wiedorn Allow: backup2l (73471499CC60ED9EEE805946C5BD6C8F2295D502), duply (B2FF1D95CE8F7A22DF4CF09BA73E0055558FB8DD), fox1.6 (820F6308F2B08DA24D3EC20E750807B5551BE447), lilo (B3131A451DBFDF7CA05B4197054BBB9F7D806442), squidguard (D5C2F9BFCA128BBA22A77218872F702C4D6E25A8), xfe (9FED5C6CE206B70A585770CA965522B9D49AE731) Fingerprint: 1D75E212B34CF4BFA9E0D0D8DE6DE039C1CFC265 Uid: Joao Eriberto Mota Filho Allow: album (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), album-data (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), bittwist (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), chaosreader (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), core-network (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), diskscan (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), ext4magic (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), f3 (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), gconjugue (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), hapm (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), hlbr (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), hlbrw (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), iceweasel-linky (5818BF0C98A32B8382BFD3B4564126F229F19BD1), jp2a (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), libpcapnav (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), lime-forensics (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), linky (5818BF0C98A32B8382BFD3B4564126F229F19BD1), mac-robber (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), netmate (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), pacman4console (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), pcapfix (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), pdfcrack (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), phpwebcounter (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), phpwebcounter-extra (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), sentinella (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F), vokoscreen (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), volatility (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), volatility-profiles (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE), yara (B2DEE66036C40829FCD0F10CFC0DB1BBCD460BDE) Fingerprint: 102E2FE7D5141DBD12B260FCB09E40B0F2AE6AB9 Uid: Joe Healy Allow: salt (2CCB26BC5C49BC221F20794255C9882D999BBCC4) Fingerprint: B3F8B98212122A2015555F1E8B1344DE9F807F14 Uid: Johannes Ring Allow: doconce (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), dolfin (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), fenics (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ferari (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ffc (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), fiat (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), instant (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), preprocess (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ptex2tex (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), scitools (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), syfi (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ufc (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ufl (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), viper (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), vmtk (DEE63CAACE54B9B27DDCD34A88E5D733DD899610) Fingerprint: CACE80AE01512F9AE8AB80D61C01F443C9C93C5A Uid: John Stamp Allow: kcometen4 (7A33ECAA188B96F27C917288B3464F896AA15948), lastfm (8F049AD82C92066C7352D28A7B585B30807C2A87), liblastfm (8F049AD82C92066C7352D28A7B585B30807C2A87) Fingerprint: CFC5B232C0D082CAE6B3A166F04CEFF6016CFFD0 Uid: Jonas Genannt Allow: gitalist (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), graphite-carbon (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), graphite-web (F607B30B062EA443D33C70E0396DA361FE5F1D7F), libalgorithm-dependency-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libapp-cache-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libaudio-mixer-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libcatalyst-plugin-unicode-encoding-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libcatalyst-view-component-subinclude-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libcrypt-hcesha-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libdatetime-format-duration-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libdbd-ldap-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libfile-flat-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libgit-pure-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libjavascript-rpc-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libmoosex-types-iso8601-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libparams-util-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libpasswd-unix-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libpod-tests-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libprefork-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libtemplate-plugin-cycle-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libtemplate-plugin-utf8decode-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libtest-classapi-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libtest-inline-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), libtest-utf8-perl (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), mcollective (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), python-ceres (F607B30B062EA443D33C70E0396DA361FE5F1D7F), python-whisper (F607B30B062EA443D33C70E0396DA361FE5F1D7F), ruby-gelf (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), ruby-stomp (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E) Fingerprint: 6150F716E9FEE0D115B073EB156EEC0737AD3296 Uid: Jonathan McCrohan Allow: dtv-scan-tables (26C0976C594BE3C7A5A392DDF7180D26AEDAA642), figlet (3BE16591C78C2AA431DDAEEF640602273516D372), lcd4linux (93005DC27E876C37ED7BCA9A98083544945348A4), nyancat (CDB5A1243ACDB63009AD07212D4EB3A6015475F5), transmission-remote-cli (8AE6CDFF6535192FB5B659212262D36F7ADF9466), wavemon (843E5FA61E6063389876D2E5EE4AFD69EC65108F) Fingerprint: 8B77BA48391B3CE51C22953132CC4AAC028756FF Uid: Julian Taylor Allow: fftw3 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ipython (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), keepass2 (3D0EFB95E7B5237F16E82258E352D5C51C5041D4), libmatheval (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), node-marked (03C4E7ABB880F524306E48156611C05EDD39F374), pycxx (7523647B95E5047547EC2BBA1DA8DA33DDCD686A), python-scipy (0C19C882237D25D43B8A41BE70373CF1290DB9CE), pyzmq (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645) Fingerprint: C11CA58C0175C240D58C30C8D27DDE1140A2F113 Uid: KURASHIKI Satoru Allow: bzr-email (58E1222F9696C885A3CD104C5D328D082AAAB140), e2wm (678AC67A3C5A16058122D62171A802D0BCD1BC92), emacs-calfw (5E629EE5232197357B84CF4332247FBB40AD1FA6), emacs-window-layout (5E629EE5232197357B84CF4332247FBB40AD1FA6), goldencheetah (031C623D94EF1F3EF17B1C84E5EFAB90080EA63C), howm (5E629EE5232197357B84CF4332247FBB40AD1FA6), hyperestraier (5E629EE5232197357B84CF4332247FBB40AD1FA6), mha4mysql-manager (5E629EE5232197357B84CF4332247FBB40AD1FA6), mha4mysql-node (5E629EE5232197357B84CF4332247FBB40AD1FA6), mysqltuner (5E629EE5232197357B84CF4332247FBB40AD1FA6), qdbm (5E629EE5232197357B84CF4332247FBB40AD1FA6), ruby-serverspec (0B29D88E42E6B765B8D8EA507839619DD439668E), ruby-specinfra (0B29D88E42E6B765B8D8EA507839619DD439668E), yaskkserv (031C623D94EF1F3EF17B1C84E5EFAB90080EA63C), yatex (0B29D88E42E6B765B8D8EA507839619DD439668E) Fingerprint: B1A47069121F6642BB3D7F3E20B7283AFE254C69 Uid: Keith Winstein Allow: mosh (FBE01342FCEFD379D3DCE61764959FE9838DF19C) Fingerprint: 770B5CDBFB4B868B61434845C617869F1478504E Uid: Keng-Yu Lin Allow: codecgraph (DA06F3E341E999EC18C376DDA108FBC534A26946), ibus-array (DA06F3E341E999EC18C376DDA108FBC534A26946), urfkill (DA06F3E341E999EC18C376DDA108FBC534A26946) Fingerprint: DF603D3A3C151B2CDF1952F418DD4D72F2CBCA06 Uid: Kiwamu Okabe Allow: carettah (5E629EE5232197357B84CF4332247FBB40AD1FA6), ghc-mod (5E629EE5232197357B84CF4332247FBB40AD1FA6), haskell-hcwiid (5E629EE5232197357B84CF4332247FBB40AD1FA6), howm (5E629EE5232197357B84CF4332247FBB40AD1FA6), jhc (0B29D88E42E6B765B8D8EA507839619DD439668E), uim (0B29D88E42E6B765B8D8EA507839619DD439668E) Fingerprint: 281C6E4D93EFF746CAA9C2E8E40215299C840E81 Uid: Koichi Akabe Allow: bzr-search (5E629EE5232197357B84CF4332247FBB40AD1FA6), bzr-stats (5E629EE5232197357B84CF4332247FBB40AD1FA6), bzr-upload (5E629EE5232197357B84CF4332247FBB40AD1FA6), glogic (5E629EE5232197357B84CF4332247FBB40AD1FA6), hts-voice-nitech-jp-atr503-m001 (5E629EE5232197357B84CF4332247FBB40AD1FA6), htsengine (5E629EE5232197357B84CF4332247FBB40AD1FA6), ngraph-gtk (5E629EE5232197357B84CF4332247FBB40AD1FA6), open-jtalk (5E629EE5232197357B84CF4332247FBB40AD1FA6), py3cairo (5E629EE5232197357B84CF4332247FBB40AD1FA6), python-twitter (5E629EE5232197357B84CF4332247FBB40AD1FA6), qr-tools (58E1222F9696C885A3CD104C5D328D082AAAB140), xflr5 (58E1222F9696C885A3CD104C5D328D082AAAB140) Fingerprint: 0F65B88F1EB8928A3DF9D76C28466F1A54C2A185 Uid: Laurent Léonard Allow: gtk-vnc (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), kio-ftps (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), ocaml-libvirt (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), virt-manager (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), virt-top (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), virt-viewer (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), virt-what (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), virtinst (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426) Fingerprint: FA9A6C62AEA901A663C7A0160A4B6370D2318442 Uid: Lifeng Sun Allow: cernlib (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), clhep (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), fastjet (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), fflas-ffpack (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), geant321 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), givaro (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), hepmc (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), herwig++ (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), lhapdf (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), looptools (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), mclibs (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), ntl (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), paw (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), pythia8 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), rivet (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), root-system (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), siscone (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), thepeg (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), yaml-cpp (DEE63CAACE54B9B27DDCD34A88E5D733DD899610) Fingerprint: FBFC21C78686E0451268694738548517DAD3D5EE Uid: Luis Uribe Allow: phpunit-story (E4F0EDDF374F2C50D4735EC097833DC998EF9A49) Fingerprint: B97BD6A80CAC4981091AE547FE558C72A67013C3 Uid: Maarten Lankhorst Allow: glw (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libdrm (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libfontenc (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libfs (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libglu (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libice (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libpciaccess (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libsm (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libx11 (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxau (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxaw (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxcomposite (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxcursor (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxdamage (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxdmcp (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxext (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxfixes (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxfont (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxi (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxinerama (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxkbcommon (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxkbfile (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxmu (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxp (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxpm (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxrandr (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxrender (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxres (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxss (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxt (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxtst (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxv (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxvmc (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxxf86dga (7B27A3F1A6E18CD9588B4AE8310180050905E40C), libxxf86vm (7B27A3F1A6E18CD9588B4AE8310180050905E40C), mesa (7B27A3F1A6E18CD9588B4AE8310180050905E40C), mesa-demos (7B27A3F1A6E18CD9588B4AE8310180050905E40C), pixman (7B27A3F1A6E18CD9588B4AE8310180050905E40C), wayland (7B27A3F1A6E18CD9588B4AE8310180050905E40C), weston (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11-xserver-utils (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-bigreqs (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-composite (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-core (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-damage (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-dmx (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-dri2 (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-fixes (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-fonts (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-gl (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-input (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-kb (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-print (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-randr (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-record (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-render (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-resource (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-scrnsaver (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-video (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xcmisc (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xext (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xf86bigfont (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xf86dga (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xf86dri (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xf86vidmode (7B27A3F1A6E18CD9588B4AE8310180050905E40C), x11proto-xinerama (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xft (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xorg (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xorg-server (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-acecad (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-aiptek (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-elographics (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-evdev (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-joystick (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-keyboard (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-mouse (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-mutouch (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-synaptics (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-vmmouse (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-input-void (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-ati (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-cirrus (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-dummy (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-fbdev (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-intel (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-mach64 (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-mga (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-modesetting (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-neomagic (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-nouveau (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-openchrome (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-qxl (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-r128 (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-s3 (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-savage (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-siliconmotion (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-sis (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-sisusb (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-tdfx (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-trident (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-vesa (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xserver-xorg-video-vmware (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xtrans (7B27A3F1A6E18CD9588B4AE8310180050905E40C) Fingerprint: C98D9133762ACACB50A0E8B13A8336743AF72612 Uid: Maia Kozheva Allow: smplayer (04160004A8276E40BB9890FBE8A48AE5311D765A), smplayer-themes (04160004A8276E40BB9890FBE8A48AE5311D765A) Fingerprint: 861486250177633EE01392AD26CAA901117A251E Uid: Marcin Juszkiewicz Allow: vboot-utils (6A41FE6D5D7B2911D0E47FE80CE33C910F9CB28F) Fingerprint: 549D24B3A7CD941FAEE117F162955F6B9B1F5883 Uid: Markus Frosch Allow: icinga-web (CC992DDDD39E75B0B0AAB25CD35BBC99BC7D020A), nagvis (6E3966C1E1D15DB973D05B491E45F8CA9DE23B16) Fingerprint: ACF3D088EF32EDEF6A1A835FD9AD14B9513B51E4 Uid: Markus Koschany Allow: angrydd (62FF8A7584E029569546000674263B37F5B5F913), berusky2 (62FF8A7584E029569546000674263B37F5B5F913), berusky2-data (62FF8A7584E029569546000674263B37F5B5F913), box2d (D53A815A3CB7659AF882E3958EEDCC1BAA1F32FF), bullet (62FF8A7584E029569546000674263B37F5B5F913), byzanz (62FF8A7584E029569546000674263B37F5B5F913), easymock (E50AFD55ADD27AAB97163A8B21D20589974B3E96), foobillardplus (62FF8A7584E029569546000674263B37F5B5F913), freeorion (62FF8A7584E029569546000674263B37F5B5F913), gamazons (55043B43EFEB282F587CF5816598789058A23DE9), gtkatlantic (62FF8A7584E029569546000674263B37F5B5F913), iftop (50BC7CF939D20C272A6B065652B6BBD953968D1B), libgetopt-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libjide-oss-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), lincity-ng (62FF8A7584E029569546000674263B37F5B5F913), marsshooter (62FF8A7584E029569546000674263B37F5B5F913), mediathekview (FBDF66F84CAC5E588EC477E49FCF2CCD3F3E6426), mockito (E50AFD55ADD27AAB97163A8B21D20589974B3E96), opencity (D53A815A3CB7659AF882E3958EEDCC1BAA1F32FF), osmo (62FF8A7584E029569546000674263B37F5B5F913), performous (D53A815A3CB7659AF882E3958EEDCC1BAA1F32FF), pyblosxom (62FF8A7584E029569546000674263B37F5B5F913), xarchiver (62FF8A7584E029569546000674263B37F5B5F913) Fingerprint: ED6762360784E331E25303D6025AFE95AC9DF31B Uid: Markus Wanner Allow: asio (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), flightgear (9A57344C54D3C8610A5F22FCBAA569D0CBF12A6A), flightgear-data (9A57344C54D3C8610A5F22FCBAA569D0CBF12A6A), monotone (23499FA0AE0DE2BA9E18560DC7D930259DFFAAD4), postgis (FED969C79E6721F57D9552706864730DF095E5E4), simgear (9A57344C54D3C8610A5F22FCBAA569D0CBF12A6A) Fingerprint: AC297E5C46B9D0B61C717681D6D09BE48405BBF6 Uid: Mathias Behrle Allow: hgnested (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), openoffice-python (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), python-sql (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), pywebdav (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), relatorio (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), suds (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-client (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-meta (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-be (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-de-skr03 (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-invoice (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-invoice-history (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-invoice-line-standalone (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-product (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-account-statement (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-analytic-account (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-analytic-invoice (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-analytic-purchase (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-analytic-sale (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-calendar (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-calendar-classification (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-calendar-scheduling (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-calendar-todo (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-company (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-company-work-time (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-country (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-currency (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-dashboard (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-google-maps (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-ldap-authentication (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-ldap-connection (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-party (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-party-siret (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-party-vcarddav (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-product (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-product-cost-fifo (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-product-cost-history (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-product-price-list (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-project (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-project-plan (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-project-revenue (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-purchase (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-purchase-invoice-line-standalone (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-sale (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-sale-opportunity (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-sale-price-list (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock-forecast (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock-inventory-location (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock-location-sequence (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock-lot (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), tryton-modules-stock-product-location (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock-supply (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-stock-supply-day (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-modules-timesheet (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-neso (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-proteus (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), tryton-server (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), vatnumber (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E) Fingerprint: 20BB3CCECFE50A6139A57E9A1BB375334D750376 Uid: Mats Erik Andersson Allow: netsed (7C0717F9FA2B2B9D788B141BA6DC24D9DA2493D1) Fingerprint: 95FAA648DE7D0AECC8DDCB984E9018E0A329126B Uid: Matteo Cypriani Allow: astyle (00C3E184E8AF12711856DFD280D0A42FF2C850CA), pyfeed (5F35F67BAFA8B6D581CA08EBD003852FBD52529E), salutatoi (5F35F67BAFA8B6D581CA08EBD003852FBD52529E), urwid-satext (5F35F67BAFA8B6D581CA08EBD003852FBD52529E), xmlelements (5F35F67BAFA8B6D581CA08EBD003852FBD52529E) Fingerprint: 4E8E810A6B445FDE68DAD0258062398983B2CF7A Uid: Matteo F. Vescovi Allow: babl (73ED4244FD43588620AC2644258494BA917A225E), blender (04160004A8276E40BB9890FBE8A48AE5311D765A), entangle (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), gegl (73ED4244FD43588620AC2644258494BA917A225E), glew (04160004A8276E40BB9890FBE8A48AE5311D765A), gtkpod (04160004A8276E40BB9890FBE8A48AE5311D765A), libebml (04160004A8276E40BB9890FBE8A48AE5311D765A), libmatroska (04160004A8276E40BB9890FBE8A48AE5311D765A), mp4v2 (04160004A8276E40BB9890FBE8A48AE5311D765A), opencolorio (04160004A8276E40BB9890FBE8A48AE5311D765A), openimageio (2BABC6254E66E7B8450AC3E1E6AA90171392B174), totalopenstation (04160004A8276E40BB9890FBE8A48AE5311D765A), yafaray (04160004A8276E40BB9890FBE8A48AE5311D765A), yafaray-exporter (04160004A8276E40BB9890FBE8A48AE5311D765A) Fingerprint: 7F6A9F44282018E218DE24AACF49D0E68A2FAFBC Uid: Matthijs Kooijman Allow: catcodec (73ED4244FD43588620AC2644258494BA917A225E), grfcodec (73ED4244FD43588620AC2644258494BA917A225E), nforenum (73ED4244FD43588620AC2644258494BA917A225E), nml (73ED4244FD43588620AC2644258494BA917A225E), openttd (73ED4244FD43588620AC2644258494BA917A225E), openttd-opengfx (73ED4244FD43588620AC2644258494BA917A225E), openttd-openmsx (73ED4244FD43588620AC2644258494BA917A225E), openttd-opensfx (73ED4244FD43588620AC2644258494BA917A225E) Fingerprint: D8812F4065320B8DCA3CEF18694CADEF51C7B5B6 Uid: Michael Fladischer Allow: cairosvg (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), django-countries (CDB5A1243ACDB63009AD07212D4EB3A6015475F5), django-floppyforms (A9592C521CB904077D6598009D0B5E5B1EEC8F0E), django-markupfield (CDB5A1243ACDB63009AD07212D4EB3A6015475F5), django-nose (CDB5A1243ACDB63009AD07212D4EB3A6015475F5), django-picklefield (CDB5A1243ACDB63009AD07212D4EB3A6015475F5), django-reversion (F78CBA07817BB149A11D339069F2FC516EA71993), sorl-thumbnail (A9592C521CB904077D6598009D0B5E5B1EEC8F0E) Fingerprint: DD66EBB6F93FAA322F0CB74E49F47A3A48F81543 Uid: Michael Ziegler Allow: mumble-django (8A306ED1C122B4D524D05137A780421C68021CE4), python-django-extdirect (DDC53E5130FD08223F98945649086AD3EBE2F31F), python-django-piston (DDC53E5130FD08223F98945649086AD3EBE2F31F), python-django-rosetta (DDC53E5130FD08223F98945649086AD3EBE2F31F) Fingerprint: D003326F93F33345EF9ADC4BD61360421C9B1AE5 Uid: Michele Cane Allow: lyz (C331BA3F75FB723B5873785B06EAA066E397832F), zotero-standalone-build (C331BA3F75FB723B5873785B06EAA066E397832F) Fingerprint: 4CB7FE1E280ECC90F29A597E6E608B637D8967E9 Uid: Miguel Landaeta Allow: codenarc (E50AFD55ADD27AAB97163A8B21D20589974B3E96), eclipselink (E50AFD55ADD27AAB97163A8B21D20589974B3E96), euca2ools (E50AFD55ADD27AAB97163A8B21D20589974B3E96), gant (E50AFD55ADD27AAB97163A8B21D20589974B3E96), gmetrics (E50AFD55ADD27AAB97163A8B21D20589974B3E96), groovy (E50AFD55ADD27AAB97163A8B21D20589974B3E96), hawtjni (E50AFD55ADD27AAB97163A8B21D20589974B3E96), jansi (E50AFD55ADD27AAB97163A8B21D20589974B3E96), jansi-native (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libhibernate-jbosscache-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libhibernate3-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libjsr166y-java (B3131A451DBFDF7CA05B4197054BBB9F7D806442), libjsr305-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libspring-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libspring-security-2.0-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libspring-webflow-2.0-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), libswarmcache-java (E50AFD55ADD27AAB97163A8B21D20589974B3E96), openjpa (E50AFD55ADD27AAB97163A8B21D20589974B3E96), pyzmq (E50AFD55ADD27AAB97163A8B21D20589974B3E96), svnkit (E50AFD55ADD27AAB97163A8B21D20589974B3E96), tomcat7 (E50AFD55ADD27AAB97163A8B21D20589974B3E96), xpra (E50AFD55ADD27AAB97163A8B21D20589974B3E96) Fingerprint: 930750035A15E27C3830740728FA801A43BDD637 Uid: Mike Miller Allow: cdargs (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), deltarpm (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), network-manager-openconnect (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), openconnect (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), rlwrap (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D), vpnc-scripts (424E14D703E7C6D43D9D6F364E7160ED4AC8EE1D) Fingerprint: F532DA10E563EE84440977A19D0470BDA6CDC457 Uid: Neutron Soutmun Allow: flvmeta (32CC490E5A70B23DD6AA5AB2A2EBAED1B6F90241), ipset (3BE9A67148F348F23E1E2076C72B51EE9D80F36D), xiterm+thai (32CC490E5A70B23DD6AA5AB2A2EBAED1B6F90241) Fingerprint: A9272E9AB03BF2D1DC4C99D4C4DCB25AD71A5972 Uid: Nicolas Bourdaud Allow: cinnamon (A7ADD22D796EA275C7C9D1033036AD8EA51A4FDD), muffin (A7ADD22D796EA275C7C9D1033036AD8EA51A4FDD) Fingerprint: BAFC6C85F7CB143FEEB6FB157115AFD07710DCF7 Uid: Ole Streicher Allow: cpl (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), cpl-plugin-amber (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-fors (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-giraf (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-hawki (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-kmos (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-sinfo (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-uves (BCADFB52B41998D74D99D98E93945348E0DC2840), cpl-plugin-xsh (BCADFB52B41998D74D99D98E93945348E0DC2840), esorex (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), fitsverify (BCADFB52B41998D74D99D98E93945348E0DC2840), ftools-fv (2CA20F848E5C29E3E410438221C747D36A461052), funtools (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), iausofa-c (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), python-astropy (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), python-cpl (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), python-pyds9 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), python-pywcs (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), saods9 (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), sextractor (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), skycat (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), starlink-ast (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), starlink-pal (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), tcl-fitstcl (2CA20F848E5C29E3E410438221C747D36A461052), tcl-signal (2CA20F848E5C29E3E410438221C747D36A461052), tk-html3 (2CA20F848E5C29E3E410438221C747D36A461052), tk-table (2CA20F848E5C29E3E410438221C747D36A461052), wcslib (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), wcstools (DEE63CAACE54B9B27DDCD34A88E5D733DD899610), xpa (2CA20F848E5C29E3E410438221C747D36A461052) Fingerprint: 2EE7A7A517FC124CF115C354651EEFB02527DF13 Uid: Peter Pentchev Allow: bomstrip (AEA0C44ECB056E93630D9D33DBBE9D4D99D2A004), cookietool (80E976F14A508A48E9CA3FE9BC372252CA1CF964), donkey (E90F0889545E78C82A9DE74EAF2283AA76E2AC7B), freealut (80E976F14A508A48E9CA3FE9BC372252CA1CF964), gtkcookie (D1E1316E93A760A8104D85FABB3A68018649AA06), mbuffer (E90F0889545E78C82A9DE74EAF2283AA76E2AC7B), mdk (D1E1316E93A760A8104D85FABB3A68018649AA06), prips (E50AFD55ADD27AAB97163A8B21D20589974B3E96), qliss3d (E90F0889545E78C82A9DE74EAF2283AA76E2AC7B), tina (E90F0889545E78C82A9DE74EAF2283AA76E2AC7B) Fingerprint: 1B49F933916A37A3F45A1812015F4DD4A70FB705 Uid: Phillip Susi Allow: gparted (C6045C813887B77C2DFF97A57C56ACFE947897D8) Fingerprint: 0CA75D987B8ECF6EA9443AD839091E8123CE1C09 Uid: Prach Pongpanich Allow: doodle (32CC490E5A70B23DD6AA5AB2A2EBAED1B6F90241), php-cache-lite (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-calendar (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-html-template-it (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-http (E0D3FAAA6F50A5DA9D5B293833961588E1C21845), php-mdb2-driver-mysql (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-mdb2-driver-pgsql (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-net-dime (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-net-ldap (E0D3FAAA6F50A5DA9D5B293833961588E1C21845), php-net-sieve (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-net-socket (E0D3FAAA6F50A5DA9D5B293833961588E1C21845), php-net-url (E0D3FAAA6F50A5DA9D5B293833961588E1C21845), php-services-weather (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), php-soap (E4F0EDDF374F2C50D4735EC097833DC998EF9A49), ruby-bson (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-bson-ext (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-mongo (30414D81DC28290C25686DE3DA4958F611E149E9) Fingerprint: A5F9C48C4059B6886CC57A426F7818A9B98F62B1 Uid: Ralph Amissah Allow: diakonos (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), rant (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), sisu (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E), sisu-markup-samples (709F54E4ECF3195623326AE3F82E5CC04B2B2B9E) Fingerprint: B51A517CB49EFC4F07E0E79CA49E7C3CDE3CCE66 Uid: Reto Buerki Allow: ahven (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), apq (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), apq-postgresql (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), dbusada (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), libalog (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), pcscada (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06) Fingerprint: 24093F016FFE8602EF449BB84C8EF3DA3FD37230 Uid: Reuben Thomas Allow: libpaper (655426C9FA10C1D1D3D199C221672570174FEE35), plptools (655426C9FA10C1D1D3D199C221672570174FEE35), psutils (655426C9FA10C1D1D3D199C221672570174FEE35) Fingerprint: AE927C799353DB4609B273BC085A9B327C2CAEB8 Uid: Rogério Theodoro de Brito Allow: avr-evtd (C42623B760FA5999693F0782690D6214A504FECA), cdparanoia (C42623B760FA5999693F0782690D6214A504FECA), dvd+rw-tools (C42623B760FA5999693F0782690D6214A504FECA), dvdisaster (C42623B760FA5999693F0782690D6214A504FECA), fontforge (C42623B760FA5999693F0782690D6214A504FECA), fontforge-doc (C42623B760FA5999693F0782690D6214A504FECA), fonts-anonymous-pro (C42623B760FA5999693F0782690D6214A504FECA), fonts-linuxlibertine (C42623B760FA5999693F0782690D6214A504FECA), handbrake (C42623B760FA5999693F0782690D6214A504FECA), libtorrent (C42623B760FA5999693F0782690D6214A504FECA), parallel (C42623B760FA5999693F0782690D6214A504FECA), rtorrent (C42623B760FA5999693F0782690D6214A504FECA), tunesviewer (C42623B760FA5999693F0782690D6214A504FECA), usbmount (C42623B760FA5999693F0782690D6214A504FECA), vrms (C42623B760FA5999693F0782690D6214A504FECA), youtube-dl (C42623B760FA5999693F0782690D6214A504FECA) Fingerprint: 0386CF054A81948D6D9FA7EA94842BC86E511C31 Uid: Rolf Leggewie Allow: bugz (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), ffgtk (E50AFD55ADD27AAB97163A8B21D20589974B3E96), fslint (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), gbirthday (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), gjots2 (E50AFD55ADD27AAB97163A8B21D20589974B3E96), isdnutils (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), kasumi (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), n2n (E50AFD55ADD27AAB97163A8B21D20589974B3E96), pastebinit (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), polipo (E50AFD55ADD27AAB97163A8B21D20589974B3E96), scim (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB), scim-anthy (3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB) Fingerprint: 42E2C8DE8C173AB102F52C6E7E60A3A686AE8D98 Uid: Ryan Finnie Allow: 2ping (8A46ADB3FC4B4B24DF1728BACCDFE49B0A0AC927), digitemp (8A46ADB3FC4B4B24DF1728BACCDFE49B0A0AC927), grepcidr (8A46ADB3FC4B4B24DF1728BACCDFE49B0A0AC927), isomd5sum (8A46ADB3FC4B4B24DF1728BACCDFE49B0A0AC927), robotfindskitten (8A46ADB3FC4B4B24DF1728BACCDFE49B0A0AC927) Fingerprint: 3412EA181277354B991BC869B2197FDB5EA01078 Uid: Sam Morris Allow: pymsnt (6ADD5093AC6D1072C9129000B1CCD97290267086), sensors-applet (22D52C906D6677F159F10030001CDE6A6B79D401) Fingerprint: 0EED77DC41D760FDE44035FF5556A34E04A3610B Uid: Sascha Steinbiss Allow: aragorn (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), genometools (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), ltrsift (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), mussort (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1) Fingerprint: 218F6A654090B4086FD42E9AA35A4E6EF00175CA Uid: Sebastien NOEL Allow: cksfv (7E0ED3D2B34A03B15F9F3121C7F7F9660D82A682), oss4 (7E0ED3D2B34A03B15F9F3121C7F7F9660D82A682) Fingerprint: DB667AE2E7C792EF6374EFDF39C9A0B640262AF0 Uid: Sergey B Kirpichev Allow: festvox-ru (1B23D4F88EC0D9020555E438AB8C00CFF8E26537), libapache2-mod-bw (1B23D4F88EC0D9020555E438AB8C00CFF8E26537), libapache2-mod-qos (3E4FB7117877F589DBCF06D6E619045DF2AC729A), libapache2-mod-rpaf (7C0717F9FA2B2B9D788B141BA6DC24D9DA2493D1), monit (63CB1DF1EF12CF2AC0EE5A329C27B31342B7511D), parser (1B23D4F88EC0D9020555E438AB8C00CFF8E26537), parser-mysql (1B23D4F88EC0D9020555E438AB8C00CFF8E26537), php-geoip (1B23D4F88EC0D9020555E438AB8C00CFF8E26537), php-memcache (C644D0B392F48FE44662B5411558944599E81DA0), php-memcached (C644D0B392F48FE44662B5411558944599E81DA0) Fingerprint: 19FBC4D3DAE94406B13A9DDE19755664855E7273 Uid: Simon Chopin Allow: alot (8F049AD82C92066C7352D28A7B585B30807C2A87), pytest (F78CBA07817BB149A11D339069F2FC516EA71993) Fingerprint: 0424D4EE81A0E3D119C6F835EDA21E94B565716F Uid: Simon Josefsson Allow: gss (E784364E8DDE7BB370FBD9EAD15D313882004173), libidn (C6045C813887B77C2DFF97A57C56ACFE947897D8), libidn2-0 (C6045C813887B77C2DFF97A57C56ACFE947897D8), libntlm (DF813B226DD39A2C530F6F7D0ABA650372FD9571), oath-toolkit (A28411A596193171331802C0B65A4871CA19D717), python-pyhsm (A28411A596193171331802C0B65A4871CA19D717), python-yubico (A28411A596193171331802C0B65A4871CA19D717), shishi (E784364E8DDE7BB370FBD9EAD15D313882004173), ykclient (A28411A596193171331802C0B65A4871CA19D717), yubico-pam (A28411A596193171331802C0B65A4871CA19D717), yubikey-ksm (0EE5BE979282D80B9F7540F1CCD2ED94D21739E9), yubikey-personalization (A28411A596193171331802C0B65A4871CA19D717), yubikey-personalization-gui (A28411A596193171331802C0B65A4871CA19D717), yubikey-val (0EE5BE979282D80B9F7540F1CCD2ED94D21739E9) Fingerprint: 50713992E9A91E77240128915675ADD39CF02226 Uid: Simone Rossetto Allow: qsapecng (FED969C79E6721F57D9552706864730DF095E5E4) Fingerprint: 4C004DF209F263ABFD8638C795DE059D8D7FCA91 Uid: Stefan Potyra Allow: faucc (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C), fauhdlc (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C), faumachine (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C), invaders (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C), min12xxw (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C), trigger-rally (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C), trigger-rally-data (1B954398F362AD2DC5E6718BBAB12CF0C7C58F7C) Fingerprint: 3C0B6EB0AB2729E8CE2255A7385AE490868EFA66 Uid: Stefan Völkel Allow: dtach (CC992DDDD39E75B0B0AAB25CD35BBC99BC7D020A), revelation (CC992DDDD39E75B0B0AAB25CD35BBC99BC7D020A) Fingerprint: 522D7163831C73A635D12FE5EC371482956781AF Uid: Sven Eckelmann Allow: batctl (B8BF54137B09D35CF026FE9D091AB856069AAA1C), batmand (B8BF54137B09D35CF026FE9D091AB856069AAA1C), exactimage (693367FFAECD8EAACD1F063B0171E1828AE09345), g3dviewer (B8BF54137B09D35CF026FE9D091AB856069AAA1C), libg3d (B8BF54137B09D35CF026FE9D091AB856069AAA1C), mupen64plus (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-audio-sdl (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-core (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-input-sdl (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-rsp-hle (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-rsp-z64 (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-ui-console (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-video-arachnoid (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-video-glide64 (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-video-rice (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), mupen64plus-video-z64 (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), s3d (B8BF54137B09D35CF026FE9D091AB856069AAA1C) Fingerprint: 285F2178A82FE496A2E69E103B106E718D6B31AC Uid: Sven Joachim Allow: autoconf-dickey (5D2FB320B825D93904D205193938F96BDF50FEA5), ncurses (5D2FB320B825D93904D205193938F96BDF50FEA5), xserver-xorg-video-nouveau (7B27A3F1A6E18CD9588B4AE8310180050905E40C), xterm (7B27A3F1A6E18CD9588B4AE8310180050905E40C) Fingerprint: 1C17166DC55780466188885142EE72DAC27319AD Uid: Thomas Bechtold Allow: check (2B12EC0512C01AE25D559F3F4BA00E72145B6966), d-feet (09B3AC2ECB169C904345CC546AE1DF0D608F22DC) Fingerprint: 0D86778C9DDFC4600BBBDB1710A46FFB90D53618 Uid: Thomas Friedrichsmeier Allow: rkward (73471499CC60ED9EEE805946C5BD6C8F2295D502) Fingerprint: 76040205597FA696F1313BCA07FC4891042BA65A Uid: Thomas Koch Allow: maven-debian-helper (E50AFD55ADD27AAB97163A8B21D20589974B3E96), maven-repo-helper (E50AFD55ADD27AAB97163A8B21D20589974B3E96) Fingerprint: F69AFC03593F5D866B748D908BDEAA5952784983 Uid: Thomas Krennwallner Allow: clasp (467348C85F3A5A9B2B0D169EBF1E9D1F76D52AC4), coala (467348C85F3A5A9B2B0D169EBF1E9D1F76D52AC4), depqbf (467348C85F3A5A9B2B0D169EBF1E9D1F76D52AC4), gringo (467348C85F3A5A9B2B0D169EBF1E9D1F76D52AC4), runlim (467348C85F3A5A9B2B0D169EBF1E9D1F76D52AC4) Fingerprint: 92429807C9853C0744A68B9AAE07828059A53CC1 Uid: Thomas Leonard Allow: zeroinstall-injector (3BE9A67148F348F23E1E2076C72B51EE9D80F36D) Fingerprint: E4D7FFE905DC76C272F331D5381D2AC78124B100 Uid: Thomas Müller Allow: owncloud (B73B7544AA9E528E838E88F9241061CA50064181), php-sabredav (B73B7544AA9E528E838E88F9241061CA50064181), quassel (09B3AC2ECB169C904345CC546AE1DF0D608F22DC) Fingerprint: D5EA745C0B1FA932EB5CF7DA771750766E1C720B Uid: Thomas Pierson Allow: clementine (12DDFA84AC23B2BBF04B313CAB645F406286A7D0), libqxt (ECF2DEA89EB90C612440B2B84814DEC22B307C3C) Fingerprint: 752DE27C4DEB17019B4B6623CB703165A88984DC Uid: Timo Aaltonen Allow: ding-libs (7E0ED3D2B34A03B15F9F3121C7F7F9660D82A682), libwacom (90750D0B5211C8962AD67137853575EC4A08B2FE), sssd (7E0ED3D2B34A03B15F9F3121C7F7F9660D82A682) Fingerprint: 8CCC1BA8590FF029D17C708FC1BCD3C72AA28B6B Uid: Tobias Stefan Richter Allow: nexus (B66CD97ACE820575D38E8B7B79B0126693701EEF) Fingerprint: 9E932D1E0B31CF850AFC799E6F3E6153163E0577 Uid: Tom Jampen Allow: rt-authen-externalauth (A4AD7A700EE5F70F31B16FA32127371B9BB23062), texstudio (A4AD7A700EE5F70F31B16FA32127371B9BB23062) Fingerprint: 9E81ED79FA81D45C0F830E139FB9262724B17D29 Uid: Tomasz Buchert Allow: miredo (BBBD45EA818AB86FF67E7285D3E17383CFA7FF06), stellarium (8C470B2A0B31568E110D432516281F2E007C98D1), verbiste (8C470B2A0B31568E110D432516281F2E007C98D1) Fingerprint: A481824E7DD39C0EC40A488EC654FB332AD59860 Uid: Tomasz Rybak Allow: pycuda (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), pyopencl (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), pytools (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645) Fingerprint: CC7A536FE267C679439BE8C429572B2F500BF4A2 Uid: Tshepang Lekhonkhobe Allow: wajig (344C9EC6707AFA176FE260B1099491F791B0D3B7) Fingerprint: 0D2511F322BFAB1C1580266BE2DCDD9132669BD6 Uid: Uwe Kleine-König Allow: rt-tests (EE01B7C2126C2847EADFC720C24B65A2672C8B12) Fingerprint: C517C25DE408759D98A4C96B6C8F74AE87700B7E Uid: Vasudev Kamath Allow: aspell-kn (190A8C7607743E3130603836A1183F8ED1028C8D), ctpp2 (9FE3E9C36691A69FF53CC6842C7C3146C1A00121), dwm (190A8C7607743E3130603836A1183F8ED1028C8D), editorconfig-core (9FE3E9C36691A69FF53CC6842C7C3146C1A00121), fonts-beng (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-beng-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-deva (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-deva-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-eeyek (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-font-awesome (9BFBAEE86C0AA5FFBF2207829AF46B3025771B31), fonts-gubbi (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-gujr (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-gujr-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-guru (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-guru-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-indic (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-johnsmith-induni (D5C2F9BFCA128BBA22A77218872F702C4D6E25A8), fonts-knda (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-knda-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lato (D5C2F9BFCA128BBA22A77218872F702C4D6E25A8), fonts-lohit-beng-assamese (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-beng-bengali (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-deva (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-gujr (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-guru (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-knda (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-mlym (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-orya (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-taml (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-taml-classical (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-lohit-telu (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-mlym (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-nakula (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-navilu (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-orya (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-orya-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-pagul (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-sahadeva (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-samyak (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-smc (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-taml (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-taml-tamu (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-taml-tscu (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-telu (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-telu-extra (190A8C7607743E3130603836A1183F8ED1028C8D), fonts-teluguvijayam (190A8C7607743E3130603836A1183F8ED1028C8D), pugixml (9FE3E9C36691A69FF53CC6842C7C3146C1A00121), pypdflib (190A8C7607743E3130603836A1183F8ED1028C8D), ttf-indic-fonts (190A8C7607743E3130603836A1183F8ED1028C8D), zimlib (9FE3E9C36691A69FF53CC6842C7C3146C1A00121) Fingerprint: D53A815A3CB7659AF882E3958EEDCC1BAA1F32FF Uid: Vincent Cheng Allow: 0ad (314E3B2D605A6EB35A7D8119F628EB934743206C), 0ad-data (314E3B2D605A6EB35A7D8119F628EB934743206C), ardentryst (7A33ECAA188B96F27C917288B3464F896AA15948), bumblebee (693367FFAECD8EAACD1F063B0171E1828AE09345), cherrytree (3A9E7D149697510A3E37CD95C38E8160A17841FE), conky (A6C7B88B9583046A11C5403E0B00FB6CEBE2D002), conky-all (A6C7B88B9583046A11C5403E0B00FB6CEBE2D002), dbus-c++ (7A33ECAA188B96F27C917288B3464F896AA15948), exaile (7A33ECAA188B96F27C917288B3464F896AA15948), gnote (7A33ECAA188B96F27C917288B3464F896AA15948), irrlicht (9FED5C6CE206B70A585770CA965522B9D49AE731), mailnag (3A9E7D149697510A3E37CD95C38E8160A17841FE), mangler (7CE3D0F2EE36C94FAEF6139C721A2B30C154998C), primus (693367FFAECD8EAACD1F063B0171E1828AE09345), pygame (F58548B594504CC6AD853EC3F41FED8E33FC40A4), supertuxkart (9FED5C6CE206B70A585770CA965522B9D49AE731), wesnoth-1.10 (5393ACF308011A978845026331FCE7E7DD079461), wesnoth-1.11 (5393ACF308011A978845026331FCE7E7DD079461) Fingerprint: 081CB7CDFF042BA994EA36B28B7F7D30CAF14EFC Uid: Wolodja Wentland Allow: leiningen (8F049AD82C92066C7352D28A7B585B30807C2A87), robert-hooke (8F049AD82C92066C7352D28A7B585B30807C2A87) Fingerprint: 11F4DE9F1FAF6581F2BA3496548662D00E41645E Uid: Xavier Grave Allow: liblog4ada (23499FA0AE0DE2BA9E18560DC7D930259DFFAAD4), libxmlezout (23499FA0AE0DE2BA9E18560DC7D930259DFFAAD4), music123 (23499FA0AE0DE2BA9E18560DC7D930259DFFAAD4), polyorb (23499FA0AE0DE2BA9E18560DC7D930259DFFAAD4), python-gnatpython (23499FA0AE0DE2BA9E18560DC7D930259DFFAAD4) Fingerprint: B4F77FC8667E12B6587FE893DE39E437F2CC5398 Uid: Xiangfu Liu Allow: fped (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1), xburst-tools (84C1977A89E7EFED3E5CA62E2FD8BEDAC020EED1) Fingerprint: B86CB5487CC4B58F0CA3856E7EE852DEE6B78725 Uid: Yauheni Kaliuta Allow: dictem (A8DF13269E5D9A38E57CFAC29D20F6503E338888) Fingerprint: 66A4EA704FE240558D6AC2E69394F354891D7E07 Uid: Youhei SASAKI Allow: cairo-dock (5E629EE5232197357B84CF4332247FBB40AD1FA6), cairo-dock-plug-ins (5E629EE5232197357B84CF4332247FBB40AD1FA6), cmigemo (5E629EE5232197357B84CF4332247FBB40AD1FA6), coderay (0B29D88E42E6B765B8D8EA507839619DD439668E), howm (0B29D88E42E6B765B8D8EA507839619DD439668E), jekyll (30414D81DC28290C25686DE3DA4958F611E149E9), pry (0B29D88E42E6B765B8D8EA507839619DD439668E), rabbit (0B29D88E42E6B765B8D8EA507839619DD439668E), rail (0B29D88E42E6B765B8D8EA507839619DD439668E), rake-compiler (30414D81DC28290C25686DE3DA4958F611E149E9), rttool (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-albino (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-bacon (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-bluefeather (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-classifier (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-directory-watcher (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-eim-xml (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-fast-stemmer (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-fftw3 (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-grib (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-hdfeos5 (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), ruby-hikidoc (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-kramdown (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-lapack (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-mathml (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-method-source (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-multibitnums (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-narray (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-narray-miss (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), ruby-net-irc (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-netcdf (6D2EB3CAF6BCD06EEF42247F60305B31C09FD35A), ruby-ole (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-pgplot (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-posix-spawn (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-rack (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-rack-protection (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-rack-test (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-redcarpet (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-sdl (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-sinatra (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-slop (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-tilt (30414D81DC28290C25686DE3DA4958F611E149E9), ruby-unf-ext (30414D81DC28290C25686DE3DA4958F611E149E9) Fingerprint: 816790FE0A75677E2A6C22C814135D277B88D7E5 Uid: YunQiang Su Allow: brise (3A9E7D149697510A3E37CD95C38E8160A17841FE), chmsee (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-anthy (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-chewing (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-cloudpinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-configtool (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-fbterm (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-googlepinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-hangul (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-libpinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-m17n (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-qt5 (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-rime (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-sayura (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-sunpinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-table-extra (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-table-other (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-ui-light (3A9E7D149697510A3E37CD95C38E8160A17841FE), fcitx-unikey (3A9E7D149697510A3E37CD95C38E8160A17841FE), ibus-googlepinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), ibus-sunpinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), ibus-table (3A9E7D149697510A3E37CD95C38E8160A17841FE), kcm-fcitx (3A9E7D149697510A3E37CD95C38E8160A17841FE), libchewing (3A9E7D149697510A3E37CD95C38E8160A17841FE), libcitygml (3A9E7D149697510A3E37CD95C38E8160A17841FE), libgooglepinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), libpinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), libpyzy (3A9E7D149697510A3E37CD95C38E8160A17841FE), librime (3A9E7D149697510A3E37CD95C38E8160A17841FE), lunar-date (3A9E7D149697510A3E37CD95C38E8160A17841FE), nam (3A9E7D149697510A3E37CD95C38E8160A17841FE), ns2 (3A9E7D149697510A3E37CD95C38E8160A17841FE), ns3 (3A9E7D149697510A3E37CD95C38E8160A17841FE), open-gram (3A9E7D149697510A3E37CD95C38E8160A17841FE), opencc (3A9E7D149697510A3E37CD95C38E8160A17841FE), otcl (3A9E7D149697510A3E37CD95C38E8160A17841FE), savi (3A9E7D149697510A3E37CD95C38E8160A17841FE), sheepdog (3A9E7D149697510A3E37CD95C38E8160A17841FE), sunpinyin (3A9E7D149697510A3E37CD95C38E8160A17841FE), tclcl (3A9E7D149697510A3E37CD95C38E8160A17841FE) Fingerprint: 8206A19620847E6D0DF8B176BC196A94EDDDA1B7 Uid: أحمد المحمودي Allow: covered (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), dico (6ADD5093AC6D1072C9129000B1CCD97290267086), drawtiming (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), fonts-hosny-amiri (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), fribidi (C644D0B392F48FE44662B5411558944599E81DA0), geda-gaf (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), geda-xgsch2pcb (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), gnucap (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), gst123 (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), gtkwave (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), gwave (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), harfbuzz (90750D0B5211C8962AD67137853575EC4A08B2FE), hijra (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), islamic-menus (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), itools (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), iverilog (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), libitl (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), libitl-gobject (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), monajat (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), othman (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), pcb (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), pyfribidi (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), python-whoosh (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), sl-modem (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), thawab (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF), verilator (41352A3B4726ACC590940097F0A98A4C4CD6E3D2), xpra (1D2FA89858DAAF6217862DF7AEF6F1A2A7457645), zekr (BD838A2BAAF9E3408BD9646833BE1A0A8C2ED8FF) dgit/tests/gnupg/trustdb.gpg0000664000000000000000000000264012521374563013357 0ustar gpgRåšÙ "  ¼Ò,Ø2C·=úÃ>£ÛËÀ9±=Š §Qç¨úF{éÄbÕçœØ3­ûê :‚†7 Í2G‘æ*Áàuõí%! ƒ‚vбs 7/`ß^\dBùzéf ;?¸­ï®ø \¨h¿¬;Ð9# €£/<þÄvºÉ~£h2ÌkÐ>`‚í!£-¼r1½j¨Hêæý&O náhþÈD•˜2ë »wñ ' }½ óú/Ú÷ëmpÉ®ÉgàëkHwӧ몇"CvLÝ#À`ãÒåHà<}øBO’ÊÑž F~'øÐˆŒ÷:2º†ÒÅÜÀqùÐ@)Ž·{0ÔFÚVëÅÔ†#`? uD?b ®­¾Û•˜öQ>FÒ²-» šFâWÍ€·H XRÝv°n™˜ €Hví~O!B7 Æ‹ñÞÅån“~Øs•‹ %;ŠÑjd¢6RÊQ±åÝÌêæk pÛžäÈrÍš(¢É…ãH]l›I³í2¾ñºìcErìûórñàÃ^|ú©N²n²ßµB œB/³ì„ÆÚ9~QštÎà ʪ;ÒàËù˜üXá»BÏGʯ C¹Õ9ƒ¯€p=kµ‹åÌ,NŒ~*gñ-ÄÌ Gª×cÒ/+±+5mk†F¶¸÷êOúlßW­öÀ¿Ó"G¡õ!â—é•¡ücì­dÐûmèÀ³J'KŽùdgit/tests/gnupg/secring.gpg0000664000000000000000000001653212521374563013327 0ustar •˜RˆÜ#Ëç 5.Z^Q}H”Œd’å¯ðÁšäÜ!ðü:‘ÁÝO”E· ñ‰áÀ v‘w}*‰aòÀˆ‘”!Ðòƒ~Ü\ Ô|Áó„f<ÿu† ›àÏnLJ¸À,Ã9;xÃ{Æ:+Õ¶­BD°—”•óŽÏ“0 !nØk»5+èéÔ™ †´ˆ67Õ˜iW„¤YÄ«eÜ(«l˃ùyï¯À‹+ïj»Lf׫ˆDwêp‰mAÝ4;uhôç}Ðããyä~™ôₚ–qšºYèñù0S[¶´û ,ž¬$Ù:øâÁpcõB‚ª¯- ^R6ÿ1ü ¿‹xÒ(‘ ç[?Ì›»óTÑD Ñp<̦ô÷ùB,íY/íNã¾9' ÂÀˆ)Æ 9äOÏ©²‚9æ’Kó^}ôо¿×5°HÐB^XKϛ֨×ßt|8â"¤Òç»×#²QDdàúAkÀtŠiØ8*W3%ÓÎ89ôÑ熸îãËŒL?FùÓ4&BÈîóä¼×À+eg·éѤ°­¦Ï-GBõN&CÁ·Á/ÄsH404#4Ö»ñ³KÇ¥DÎÀÖs\E;4"ï¼Ñ ÷0 Ø‚5ü1éqr!Ëë+ŠŽº‰¤é1z4e*¤:g2Ã>=©9Á5×|»€»UNxÁoàóšFêDJyQ5ÖmVÆ:¦–ÕªŒÎ‡aÚë*Z£9ßþŒ¤Õÿ}0ë&з½‘'¡u‚•%ñ?:‡8ó–c‚Љ]©íùßSŽ–<¿¬cÇQòi΂ü­xáÑн?Ï4µÂï%F£Eב£Á¥˜D¨AºækQ"íTÔ¡S(Ä'ßy³"îÚ4;‹–Š}˜ÖÞÉ­‹„t?àGfôÍ”yV'~‰%O‰i²`¿Î)i ±Ÿä60®i-Fþx/jø¨z‹Ù~z‚úY[®ØqSMR:‚í¥£. ?·)†dJ+áQTýšgqFôŽtþOç%$¨~2Ñ>‹–e§¸aBa gÒÒè滜8ñÜ üs†/öÿg|Z}' HZT NéföÉ/­w¸³0|ÂôÈ#Õ”ˆú’€tg黂HÊ^mSGö@qŽEßÌpÿ"÷Ôq+'(•Õ" 9´-Senatus Romanus (test key) ‰8"RˆÜî  € £ÛËÀ9±=Š6ý"$_±ºuùU–Þƒ)¡G“ßZo={ðS+É4É =÷ˆìÖÀÙ¹Övá¾XÌ&‘ØrRžl£>³|ŒŸPAE×Xi¾“æñ±¡öæß_3XŠß¥ª²Yg?l¯ÒõGØdˆx‘ŒyG†wÐ[Êig_0@,¶$ì2£4àJÁFú³Ö­¸yp#Œù$qŠjñèåì¡Q‚DLUQ/bŠÆPe$Þü’IP¨Ï3ÔÞÀIO ©ëNb¼*@AÜFÂça4àçg¾´¼%®œÊÒ¬lnP-GÔï‹.Q•PÕò¨}°‚Õ+iÎÍÔIáî*Ðl˃%G°˜RˆÜîàyA-Äb½(Ùæ[=JÜgw©œ­¬û²ôwÈÀÛÈЬðvŹl=f®ÏУé#Ódñª("ˆþg‰ã’ÁÊñˆ1>ÚÛ|z¼òôÖc CÖò!¤¿Wd ~s3„z¶Áâ¦i@¢Wï å×g N­7¹êí§äðE,ä+€Cˆ#ð×`«M4Ðí²C¶ FÑ·”–¥aIÅ%Á•.©Ù‘‹Yßñ¼/FásÚwíLgü™à+Zà¢ÞöÔu”Újø½ƒü*©Ñ¤âS^žþdîª'ÿ¯Ã±h˜Ný°l3 ßVµVâF·›4¢€zÀ¢>°4ìáMb˜Ä“aû”·9.¹¦ Â󖽆æ¡IIâ BÆ®¼ ”½¶pt$Ã(íXÀZjÿ–G—úP…ûœ:&Fwnè{˜Q$ÑSÇI‰e~0Sì5¡š>q¨ÜÄQœ¥#€G¾Zç`ÃE'h¢JlàÊ!öåûCª_o>¡A«xÊ^â‚“#ºûîŅoé(sâÞ|×(?[á‹00A{A3c'ÒIˆ&:Ýî) ðËÛŸc×Ô†Zì1ž’”ˆ11Â'ø=a×[ÍA’œe¡NÉΛÐß–ÝL¹IÈÐa%ð‘¥Å÷3Eϥ¢_Óè(xÇp¡ìcøÆ†ûþ ±1ù”@žTöŸöw80SÇãj­T r–L#$à Ä=ÍA÷b™ËèØ$úÌ/¯k&µ0vœO[£žö[)‰‚ŽMkø} ©; ÂFë0`xõŸ¼˜jß;FÕ2†ŒÑô–t9}{®vA[·9%DUÞ7[ÇÏÒ)éÝC7Õ¬›EÛ+%ÿÿQΤÿo¡”øÅÍ[BMÛ€px¥Ý*ïJÐdeƦHAïù;'»¢\$¬Ìqc• 5¨4›Wñ·ïÏ)"zy±m‰Éàçåx*±´¼y7ØQ‡¾h9þ:§ ^á]˜b›°±,­u{ãÄ?íw3½¾ÊJ0≠RˆÜî £ÛËÀ9±=Šã%þ5=ûRÜïÁf=Û±_õ¤Ø³®íI,‡ÿ- À ™¸!sF%Cë<ŠgìÛ^âÔb·•zõò@.Pªie%êlü_7*iPՋͼé!!Bãn^!w¬ÑÍ‘ ftUÎÍ·ÍEv6'ÕA¾}ôSôìkb;õTÐOÆy'N ìÇ#&xáâ³k2ÿâpgf‹ö­GíS™o·-^š&k§`0¢º™~ó¡‘“L2 6ëÇ* G%›ê€°w­2é¹5‰ñjö4Ÿ¾Ñš¸m”Ƶ¢Í7¦A¿=s ÅJ”ô´=v8ã†xEiaÜÃQ,Ï9 *œÛ°•˜RåšTÙãK?¾¶‰’BLÿ ·¡ÜŸËVðÄc ™ÛFµæ7UÜCg |šŠ—¡f2¸âžOò‚ óÉEÄ‘nÞÒõcTŽß¶r»Å¼¹¨¶Êï@ã%×n?„øp:z³Ð{SwÂ`'E«J¼Rdq[a³ô ·´§ŽcE¦B9q"ûo7¤`Ž‚fþ$}) 1yKoÿªr}Œ"¼6w¢U¤ãîÁñ.A kläâ§ V›(ÀÖkÓ•Žr÷-=Õ~OÖðè"cw[eõ‚÷–¶ôǃô÷jçE_‘°õÿ¡é"þÙ«ecv+æF»/:`)¬hšù³:´KéaÿiÚ hFœYþjø`ŠO’±Àg¢a‰ÕvëcçMÎZz©gËdGq¼ˆj a:¢û¤VDØ:£\Ô$&0¿¸Ø‹-_씹˜.€Ѳû !R-d ößáê‚q¯VH­ñ?^DßÓ…”HØÈ#Skg¿L§jçæpë´v nð"B§OæedJ%©]^QDG`¬ŽûŠKdk¼!bÐ?Z!£sãWuªpE5<#¬Te+·)ËݾmÞBaÚ'GÐa‡”€¡Ö8t΀[Šâ Ì~5:ï=\oì9²n  ŠDTåšQ4ûhŸŸs¿Êkåh"{ݺ— '‡uæ»pš¦jmb5Ç†Èæç'ˆ¼~ ‡ps«ž×[Á0ÎÞ§ ”3’’ÒT]ÿv¢ñ aà t@ ½¿·ÕM¼|ÄLSDp¸°NL^˜0§ Hq’h‹¦a/ËÅ@ú}÷±÷õv„èÁÝj’bp.9.xÈî‡\·û¸Lãêv^—DÂÆ¹©Ã{ï D0„óX,ÞÝ´ç÷7™w;6‰ÏP6¢º„~u·¾NpJôiÏ€‚všmèƒ+z·™,ø°mYĨ¶ðÓ1IìÐ;¹¯;´Ÿ¼}a'À¹®”¥©Ús#‘‰â|P™1÷{Ðà-N16ʧ¥Î‰O-U2]Í|ç¼o,û“O„¾f’"r£ËslR÷v!X2gÓ é?d¤šÉ¥ØNYr>e%˜å­YT:t¨—Ý ë"T9&iÄœ¿à♞-­OXΦ[á¾2^7ÅÊ\-Ê9lÏCß —üyí3 ²4PêO¨î‡7<-0 ´,Populus Romanus (test key) ‰8"RåšT  € *Áàuõí%)Cĺ|œìKW†]^iÅëÖ¯¯#â4ÿXg·ꪈ‰¿£úݬ˜ÌR¾Ðôå©<⢊¯Ò.ðÞàln¶n¤x §*Z:X¦·©*ÏGæ=ùf:·ŸC­ÝÉÈ‘û ë â­]Ðê˜ UÂÑ!l'ÄÙ1‹ð›EMÅ„‘zR¯±‚›)±ìº‘ÊÝ öjÀ¨úÖÅ\8Ò¼d#H>%4èÎÏÿ¨ æø/¬EøË÷¦ÕÉèŒ_—9¤Zx¸¶»»å==§R/ ¸ûªy’i°˜RåšTÌQݩꤷÓA3È|ð]c‘“¯ÛׯísÌ[D Ñ$:dû¹÷'/.6œ«-—R4«j#h‰G®A^4[<ñŒØ$ÅÓÕ+ŒÑÄ”b¥d|‹'u{B®ÀŒ]V·Lœ36ŠOsFÞ¹l×ñÿz%]Ö “i¤N̵±q×S™5el}0¡^ î¸º³9Ìî;¤æýÃw;ŠnEÈo:Óô¿˜Œ+<’Ûeßn‹âY¯8…tø$GB,ø·O•Æ{>ά:ƒt´Wl»om”ƒå2%Àذyä‰*µíÝ‘GÔ¯Ú7”Ìiƒ˜ÓçÊ:×`‹‰ùžEæÊR},×1cà1"R²o#ê†{ÓpT ÚÁN’Ò„CcÌ]v€›9 3]˜¶Ôï2ë¸U½Œì&]΢g]2³÷œwH.0ãl€ó¹QÁ26¼FÈ>Ùâ}ÓÚÍb3=£úA}¥GêIÈbN½]ë¥bÊ©„bS†sñv š”kj™Ë<õ¬Îˆ R ê€yR,) Yz˜ÖÛ\°Ì3„ü•.¯3Þ‹ìö+ô uæ‚þJf'#ª`©mµ0´ï-*B…*øó…¡NļùË‹#-Œ&^³ÇÄÙà³£A‡Äádà¨äe$«Wì°ðMÑâ`€#ÐÿžO—¹¼‡ÅÁ¨Zèe) àm(¸"Â(Ázæ´¹%J"·hV”Qo„csÖÖNîàt>¯aÎÎoÖ)Ö)—À°®‰S¥/$^¤HŒÁƒŽòb÷Éä¢ðh;¸`%=x1]ó½ =µÚ”ݽ¡¶ÐÉ—¨Íù™9çvwþ£Âþ€"m0™_Ú놨‡t÷&õp'iÓ,QD‘~I=©QɱÆq¤†Áà&f™:›­n§¦ÿ×Ä6«oA ù… }\‡#3Õ‡ôÚÇžKåT\§¦½Ÿg’®’™53Æ{[ü ä–ä§F#BQ¬V þ,Ï:õÅåFz¬T§mÞÀ”(+ט“ê(SÆ]j£lhí¨ 0Ô­I{ñx„’lÅ`K¬þ® Ž“s®¿ ÉcS_¨Áò›~jPê§­ïÏéÞèëSS÷ØÒ?ÕžãcgÜ´›×'‘A}§ñ?;® / *C5Þ‰ RåšT *Áàuõí% Rÿw4n¹SÐã‰6:Mv ¤c\drtÝð—OÅÖ.¼NÝIÍæŽ- [‡9pfÔßZèƒ6òݸŽÜžâÇE¸ÍéJn,Z$]jÕÛ ©/Åe·¡þÔ¨í`#RðИ˜ê d:p”m 4ä"oxêÍ!C,3¾µÆnr Mëƒs¡Èœ«†ðßd˜´ø¨Š¯‰ÞušB¥¦K†Å8.8ø5°ÈõŠ_~k3fûÑú"Ûß  û/؆u8CxÆÂ¼ÜsòAD†ÛªÍšX­Ê–½HÐõô3”ˆu7yx†XðBD´ÆÛÔyÇTÊE…N„õl ù°•˜Råš‘¯É!ÄVƒtcY—„²Ô³ï÷ÇDç˜ ´iâ­ýD`´®߸½ð)_eŽ;Šbéå¡–ôLáÖÈ"HFo:òE—éÇUÜÝ+ÉV-ð…eÊÑÔ3'…Ûð–z~Mã#T/Šo÷i™*Ô(9§¶ ò‚kÏÜßéJV“Õ°½ýƒKaä¿pçüÖ?M5ž_0cÞ'î…]q9p|%»¢Ü"7Pô#g°o¤RéüXü‘2n8ûzùŠ|ã–Êá‰úå‚H£Þ±n©ðFä‹LšyÏæÇšƒ“SýâIu˜Í8ÏRÞŽ  2³ÐuËPÓi´xIýÑz9‡ýä™Ù å 5“Ð:êd|)!J4ßʶù´5è\¸ fï7÷$²„Èg ¡éí¼lãÚ]ä}H]¹Ã½ r¿<‰"3‡ätoº»¯™ÛÛ—"ú ,£kùÙ¢öšK ÕӻЩAƒ5 òÓ¾µ?èøöjL˜p 2m.16ž¬? ¢ä„OO”ó´òJA‘¶ó6¯¿ûÅ8þç„v¨ &|]KªBfú[µnVSÓÀ¨|L†tHÎûbÕ Ôõ•|ö’¹°ÌŒƒA85Øp¼—}0œñq´Vý­/ÊnåÑÿóïŒRfÆa/¢sS•í$p¿R‰ÇÝšIwÐÑÃxRGm”ï€'çH³jÀìD+Á+‚I ‚“çϬWåx$1Òœ{ É®éCh68ÚIKœÜ"èÅ…Ž„ÐÉÙØÐÍÊžºIÆøß+…äÐl—¶ä‰f1´¡ Æô•Õ:ÛnÀÏXÙ¤•‰®²¼¢`û`¦} à°¢¼+æ8[ =xŒíŠ™¸m_†Í8Åáx) 8z#'»­RaÐ{³´€=ïYÞ Ü‘<Dݸ‘-CÏ™‰eÝÈ ³´)‰Õ<Yã^ÞŠ¤m‚=—… þbÿ =˜N'kGï,ðº[â}°hVÇ­*/™lÓ^óÒ¤hH+Hea}?o›^ày QGH|à²9€ÆøÂ¯pQÊç†Wìx+™}_II´D¦:9 O £dýÕnNMà)I˜Ý1*A“!È¡&NÙfâN«WÅø+¶3Þeþë¦ó[6aHG¬aVÆlá$¤΋w*·`RC ‡jÈî9Ê99´*Hannibal (test key) ‰8"Råš‘  € ¨h¿¬;Ð9Õþ'é©Ã`ÍNš¡>ƒ­çqz÷8OÄ”]HvÇ·ývAœi³G¬Ïý¶GÛ²Õq ¤„¸ëJ@Ë)SÐQ¶ÜšFî×%‰Çó¶ t¾Nü§[Äp{]_ɧ(삸 ÆŸÔÕ½Ó?ÿ2N~ð QfªHÿÛÈtª`PÛkF7Ê>ëŒÉ¸®ÛòNnµ õ G‡·-¬§2ê„Lê1¶ o´ˆ3`™µ;öOÉsÏ’,PùiV­éô”(nÞa˜`©¢qnZ)I\œŽN¥|[§RˆÍ?âä ¿¡¶{Œ(ºÃ“ß™¯»¼Ňñ‰§Æ05^\¶aS…°˜Råš‘ÍËk•°§Ç°çŸ]Aªb±;W¸<»~×–\¨5«m-Oø›?Æïj¾Þ%–‹ À ¯×“£,¾&;VÔ¸öÉ9`9q‹ÆìNØñÔiŒþç¨ÏX„ÅÆ–!2b}*Ê,uézPNÓa,$lŒK9ާˆ‡¬ÿ‰A¹ˆv̶ù–Àð‘rLqðñÄ'ÀÄè§l$í€fõüDqX¼×ûDèbðSè=À<åP§Y AÚ)tìO4–驪+8bŒ±°a®þø´þÈÆÜß 8˜Ò@Þ‚<8s#…TÑž:®ø“kÝ~»š,ÜÄ$³ÍäÐòÔ'âÞ‹%þ%@Ewùæ>°\´´Òþ µ8š§9¥Ÿoæ¦5Ž©|ª-(¨(s¼•:ŒB5Üæä¥^Z™;ÉnC¨Æ¥?DT A¶³ ÁÔ<ëÅf™_õ·é$«$׫ђ\ð ŠÏ.Aük™æ·HÓÒ?BD³ºLW¼c‚†×Þ MrA€Ä}›=úy«énî"@øLdÉÏ1[$„ƒH-ÏÖó¢Ôvv#_IF_ºÄÀèXú–t?8¿®§rLÒA9eêY#úì{W½y‚ˆ4aýËz¬eþ® ´Î½…Ms!Q\£tü i)°ePLlÚ¿Lx…«ÿî?\˜ê…××H“ãÀ ÊÏ1Ây ï[ER"¯ë;ê;pܪ W-FA¯þ=»‚v@y§5CÇê>ê ÞU¡šcÁ¬v¦b9 P ‹ïÓýÜÌYžN :Ù f)ž¦WÞSõFq’ô ÿ†Kn4E˜ÅËÓxþl{Œ§/ôž¢aÁ‘$ ;]$ëÛÛϲ¢'©±}CÕtt´ñºIñ›âá‚âgJ@džý/äÀx«¸E󔦨•¼&"L¯Kâÿâ}x´§„ûãίß+¬æ·ÈhMd9ð©1ÕÒÀã²”¤5§:\Oju±Š>¶…yÅý†´FaŸ ]ëÿo55õ¤â­çWº}¤üâ=Ý>‡Åk½Âˆ,&Ú¦ ¤FQ@áqIT*·!“í V=‘TŽ'yc=⢪éãl-š;ßÄ£'#œXt¼Ûtˆ?¹Å®a±Q­Šå½#ü0A¯òÍ´aPÖÇ,M^nî­AéHT\âjµŽv·-9‰ Råš‘ ¨h¿¬;Ð9úzýÀ£zWjóN)—þ…”N«.‡*æßΛX–3”‘°æý<÷§÷ÆL>%5õgSÖ°~‰¯5ÿ?}¨K!WïxÄôî #­˜KRñâg ”‘LÖfë£ È}í¦S•FBãi®m©o¶Y›"]÷Ä =·_Ù˺}¬8øÓùWbµéq‘ó“±+_ù~¯ 4w§zeaE·@EE&4¢<9åËõMÔ¢»/؆“ø€n/nZP,$Ñò褹7QÞÛ rѳYzÖ:ºµ–iצۘÖàGýºqºs¯ÀÓNåYÙ[¸Šëe±¦– ,2‚3{ˆs9Í¥—;/SR+°dgit/tests/gnupg/dm.gpg0000664000000000000000000000226312521374563012271 0ustar ™ RåšTÙãK?¾¶‰’BLÿ ·¡ÜŸËVðÄc ™ÛFµæ7UÜCg |šŠ—¡f2¸âžOò‚ óÉEÄ‘nÞÒõcTŽß¶r»Å¼¹¨¶Êï@ã%×n?„øp:z³Ð{SwÂ`'E«J¼Rdq[a³ô ·´§ŽcE¦B9q"ûo7¤`Ž‚fþ$}) 1yKoÿªr}Œ"¼6w¢U¤ãîÁñ.A kläâ§ V›(ÀÖkÓ•Žr÷-=Õ~OÖðè"cw[eõ‚÷–¶ôǃô÷jçE_‘°õÿ¡é"þÙ«ecv+æF»/:`)¬hšù³:´Kéa´,Populus Romanus (test key) ‰8"RåšT  € *Áàuõí%)Cĺ|œìKW†]^iÅëÖ¯¯#â4ÿXg·ꪈ‰¿£úݬ˜ÌR¾Ðôå©<⢊¯Ò.ðÞàln¶n¤x §*Z:X¦·©*ÏGæ=ùf:·ŸC­ÝÉÈ‘û ë â­]Ðê˜ UÂÑ!l'ÄÙ1‹ð›EMÅ„‘zR¯±‚›)±ìº‘ÊÝ öjÀ¨úÖÅ\8Ò¼d#H>%4èÎÏÿ¨ æø/¬EøË÷¦ÕÉèŒ_—9¤Zx¸¶»»å==§R/ ¸ûªy’i°¹ RåšTÌQݩꤷÓA3È|ð]c‘“¯ÛׯísÌ[D Ñ$:dû¹÷'/.6œ«-—R4«j#h‰G®A^4[<ñŒØ$ÅÓÕ+ŒÑÄ”b¥d|‹'u{B®ÀŒ]V·Lœ36ŠOsFÞ¹l×ñÿz%]Ö “i¤N̵±q×S™5el}0¡^ î¸º³9Ìî;¤æýÃw;ŠnEÈo:Óô¿˜Œ+<’Ûeßn‹âY¯8…tø$GB,ø·O•Æ{>ά:ƒt´Wl»om”ƒå2%Àذyä‰*µíÝ‘GÔ¯Ú7”Ìiƒ˜ÓçÊ:×`‹‰‰ RåšT *Áàuõí% Rÿw4n¹SÐã‰6:Mv ¤c\drtÝð—OÅÖ.¼NÝIÍæŽ- [‡9pfÔßZèƒ6òݸŽÜžâÇE¸ÍéJn,Z$]jÕÛ ©/Åe·¡þÔ¨í`#RðИ˜ê d:p”m 4ä"oxêÍ!C,3¾µÆnr Mëƒs¡Èœ«†ðßd˜´ø¨Š¯‰ÞušB¥¦K†Å8.8ø5°ÈõŠ_~k3fûÑú"Ûß  û/؆u8CxÆÂ¼ÜsòAD†ÛªÍšX­Ê–½HÐõô3”ˆu7yx†XðBD´ÆÛÔyÇTÊE…N„õl ù°dgit/tests/gnupg/dd.gpg0000664000000000000000000000226412521374563012261 0ustar ™ RˆÜ#Ëç 5.Z^Q}H”Œd’å¯ðÁšäÜ!ðü:‘ÁÝO”E· ñ‰áÀ v‘w}*‰aòÀˆ‘”!Ðòƒ~Ü\ Ô|Áó„f<ÿu† ›àÏnLJ¸À,Ã9;xÃ{Æ:+Õ¶­BD°—”•óŽÏ“0 !nØk»5+èéÔ™ †´ˆ67Õ˜iW„¤YÄ«eÜ(«l˃ùyï¯À‹+ïj»Lf׫ˆDwêp‰mAÝ4;uhôç}Ðããyä~™ôₚ–qšºYèñù0S[¶´û ,ž¬$Ù:øâÁpcõB‚ª¯- ^R6ÿ1´-Senatus Romanus (test key) ‰8"RˆÜî  € £ÛËÀ9±=Š6ý"$_±ºuùU–Þƒ)¡G“ßZo={ðS+É4É =÷ˆìÖÀÙ¹Övá¾XÌ&‘ØrRžl£>³|ŒŸPAE×Xi¾“æñ±¡öæß_3XŠß¥ª²Yg?l¯ÒõGØdˆx‘ŒyG†wÐ[Êig_0@,¶$ì2£4àJÁFú³Ö­¸yp#Œù$qŠjñèåì¡Q‚DLUQ/bŠÆPe$Þü’IP¨Ï3ÔÞÀIO ©ëNb¼*@AÜFÂça4àçg¾´¼%®œÊÒ¬lnP-GÔï‹.Q•PÕò¨}°‚Õ+iÎÍÔIáî*Ðl˃%G°¹ RˆÜîàyA-Äb½(Ùæ[=JÜgw©œ­¬û²ôwÈÀÛÈЬðvŹl=f®ÏУé#Ódñª("ˆþg‰ã’ÁÊñˆ1>ÚÛ|z¼òôÖc CÖò!¤¿Wd ~s3„z¶Áâ¦i@¢Wï å×g N­7¹êí§äðE,ä+€Cˆ#ð×`«M4Ðí²C¶ FÑ·”–¥aIÅ%Á•.©Ù‘‹Yßñ¼/FásÚwíLgü™à+Zà¢ÞöÔu”Újø½ƒü*©Ñ¤âS^žþdîª'ÿ¯Ã±h˜Ný°l3 ßVµVâF·›4¢€zÀ¢>°4ìáMb˜Ä“a‰ RˆÜî £ÛËÀ9±=Šã%þ5=ûRÜïÁf=Û±_õ¤Ø³®íI,‡ÿ- À ™¸!sF%Cë<ŠgìÛ^âÔb·•zõò@.Pªie%êlü_7*iPՋͼé!!Bãn^!w¬ÑÍ‘ ftUÎÍ·ÍEv6'ÕA¾}ôSôìkb;õTÐOÆy'N ìÇ#&xáâ³k2ÿâpgf‹ö­GíS™o·-^š&k§`0¢º™~ó¡‘“L2 6ëÇ* G%›ê€°w­2é¹5‰ñjö4Ÿ¾Ñš¸m”Ƶ¢Í7¦A¿=s ÅJ”ô´=v8ã†xEiaÜÃQ,Ï9 *œÛ°dgit/tests/gnupg/pubring.gpg0000664000000000000000000000703012521374563013334 0ustar ™ RˆÜ#Ëç 5.Z^Q}H”Œd’å¯ðÁšäÜ!ðü:‘ÁÝO”E· ñ‰áÀ v‘w}*‰aòÀˆ‘”!Ðòƒ~Ü\ Ô|Áó„f<ÿu† ›àÏnLJ¸À,Ã9;xÃ{Æ:+Õ¶­BD°—”•óŽÏ“0 !nØk»5+èéÔ™ †´ˆ67Õ˜iW„¤YÄ«eÜ(«l˃ùyï¯À‹+ïj»Lf׫ˆDwêp‰mAÝ4;uhôç}Ðããyä~™ôₚ–qšºYèñù0S[¶´û ,ž¬$Ù:øâÁpcõB‚ª¯- ^R6ÿ1´-Senatus Romanus (test key) ‰8"RˆÜî  € £ÛËÀ9±=Š6ý"$_±ºuùU–Þƒ)¡G“ßZo={ðS+É4É =÷ˆìÖÀÙ¹Övá¾XÌ&‘ØrRžl£>³|ŒŸPAE×Xi¾“æñ±¡öæß_3XŠß¥ª²Yg?l¯ÒõGØdˆx‘ŒyG†wÐ[Êig_0@,¶$ì2£4àJÁFú³Ö­¸yp#Œù$qŠjñèåì¡Q‚DLUQ/bŠÆPe$Þü’IP¨Ï3ÔÞÀIO ©ëNb¼*@AÜFÂça4àçg¾´¼%®œÊÒ¬lnP-GÔï‹.Q•PÕò¨}°‚Õ+iÎÍÔIáî*Ðl˃%G°¹ RˆÜîàyA-Äb½(Ùæ[=JÜgw©œ­¬û²ôwÈÀÛÈЬðvŹl=f®ÏУé#Ódñª("ˆþg‰ã’ÁÊñˆ1>ÚÛ|z¼òôÖc CÖò!¤¿Wd ~s3„z¶Áâ¦i@¢Wï å×g N­7¹êí§äðE,ä+€Cˆ#ð×`«M4Ðí²C¶ FÑ·”–¥aIÅ%Á•.©Ù‘‹Yßñ¼/FásÚwíLgü™à+Zà¢ÞöÔu”Újø½ƒü*©Ñ¤âS^žþdîª'ÿ¯Ã±h˜Ný°l3 ßVµVâF·›4¢€zÀ¢>°4ìáMb˜Ä“a‰ RˆÜî £ÛËÀ9±=Šã%þ5=ûRÜïÁf=Û±_õ¤Ø³®íI,‡ÿ- À ™¸!sF%Cë<ŠgìÛ^âÔb·•zõò@.Pªie%êlü_7*iPՋͼé!!Bãn^!w¬ÑÍ‘ ftUÎÍ·ÍEv6'ÕA¾}ôSôìkb;õTÐOÆy'N ìÇ#&xáâ³k2ÿâpgf‹ö­GíS™o·-^š&k§`0¢º™~ó¡‘“L2 6ëÇ* G%›ê€°w­2é¹5‰ñjö4Ÿ¾Ñš¸m”Ƶ¢Í7¦A¿=s ÅJ”ô´=v8ã†xEiaÜÃQ,Ï9 *œÛ°™ RåšTÙãK?¾¶‰’BLÿ ·¡ÜŸËVðÄc ™ÛFµæ7UÜCg |šŠ—¡f2¸âžOò‚ óÉEÄ‘nÞÒõcTŽß¶r»Å¼¹¨¶Êï@ã%×n?„øp:z³Ð{SwÂ`'E«J¼Rdq[a³ô ·´§ŽcE¦B9q"ûo7¤`Ž‚fþ$}) 1yKoÿªr}Œ"¼6w¢U¤ãîÁñ.A kläâ§ V›(ÀÖkÓ•Žr÷-=Õ~OÖðè"cw[eõ‚÷–¶ôǃô÷jçE_‘°õÿ¡é"þÙ«ecv+æF»/:`)¬hšù³:´Kéa´,Populus Romanus (test key) ‰8"RåšT  € *Áàuõí%)Cĺ|œìKW†]^iÅëÖ¯¯#â4ÿXg·ꪈ‰¿£úݬ˜ÌR¾Ðôå©<⢊¯Ò.ðÞàln¶n¤x §*Z:X¦·©*ÏGæ=ùf:·ŸC­ÝÉÈ‘û ë â­]Ðê˜ UÂÑ!l'ÄÙ1‹ð›EMÅ„‘zR¯±‚›)±ìº‘ÊÝ öjÀ¨úÖÅ\8Ò¼d#H>%4èÎÏÿ¨ æø/¬EøË÷¦ÕÉèŒ_—9¤Zx¸¶»»å==§R/ ¸ûªy’i°¹ RåšTÌQݩꤷÓA3È|ð]c‘“¯ÛׯísÌ[D Ñ$:dû¹÷'/.6œ«-—R4«j#h‰G®A^4[<ñŒØ$ÅÓÕ+ŒÑÄ”b¥d|‹'u{B®ÀŒ]V·Lœ36ŠOsFÞ¹l×ñÿz%]Ö “i¤N̵±q×S™5el}0¡^ î¸º³9Ìî;¤æýÃw;ŠnEÈo:Óô¿˜Œ+<’Ûeßn‹âY¯8…tø$GB,ø·O•Æ{>ά:ƒt´Wl»om”ƒå2%Àذyä‰*µíÝ‘GÔ¯Ú7”Ìiƒ˜ÓçÊ:×`‹‰‰ RåšT *Áàuõí% Rÿw4n¹SÐã‰6:Mv ¤c\drtÝð—OÅÖ.¼NÝIÍæŽ- [‡9pfÔßZèƒ6òݸŽÜžâÇE¸ÍéJn,Z$]jÕÛ ©/Åe·¡þÔ¨í`#RðИ˜ê d:p”m 4ä"oxêÍ!C,3¾µÆnr Mëƒs¡Èœ«†ðßd˜´ø¨Š¯‰ÞušB¥¦K†Å8.8ø5°ÈõŠ_~k3fûÑú"Ûß  û/؆u8CxÆÂ¼ÜsòAD†ÛªÍšX­Ê–½HÐõô3”ˆu7yx†XðBD´ÆÛÔyÇTÊE…N„õl ù°™ Råš‘¯É!ÄVƒtcY—„²Ô³ï÷ÇDç˜ ´iâ­ýD`´®߸½ð)_eŽ;Šbéå¡–ôLáÖÈ"HFo:òE—éÇUÜÝ+ÉV-ð…eÊÑÔ3'…Ûð–z~Mã#T/Šo÷i™*Ô(9§¶ ò‚kÏÜßéJV“Õ°½ýƒKaä¿pçüÖ?M5ž_0cÞ'î…]q9p|%»¢Ü"7Pô#g°o¤RéüXü‘2n8ûzùŠ|ã–Êá‰úå‚H£Þ±n©ðFä‹LšyÏæÇšƒ“SýâIu˜Í8ÏRÞŽ  2³ÐuËPÓi´xIýÑz9‡´*Hannibal (test key) ‰8"Råš‘  € ¨h¿¬;Ð9Õþ'é©Ã`ÍNš¡>ƒ­çqz÷8OÄ”]HvÇ·ývAœi³G¬Ïý¶GÛ²Õq ¤„¸ëJ@Ë)SÐQ¶ÜšFî×%‰Çó¶ t¾Nü§[Äp{]_ɧ(삸 ÆŸÔÕ½Ó?ÿ2N~ð QfªHÿÛÈtª`PÛkF7Ê>ëŒÉ¸®ÛòNnµ õ G‡·-¬§2ê„Lê1¶ o´ˆ3`™µ;öOÉsÏ’,PùiV­éô”(nÞa˜`©¢qnZ)I\œŽN¥|[§RˆÍ?âä ¿¡¶{Œ(ºÃ“ß™¯»¼Ňñ‰§Æ05^\¶aS…°¹ Råš‘ÍËk•°§Ç°çŸ]Aªb±;W¸<»~×–\¨5«m-Oø›?Æïj¾Þ%–‹ À ¯×“£,¾&;VÔ¸öÉ9`9q‹ÆìNØñÔiŒþç¨ÏX„ÅÆ–!2b}*Ê,uézPNÓa,$lŒK9ާˆ‡¬ÿ‰A¹ˆv̶ù–Àð‘rLqðñÄ'ÀÄè§l$í€fõüDqX¼×ûDèbðSè=À<åP§Y AÚ)tìO4–驪+8bŒ±°a®þø´þÈÆÜß 8˜Ò@Þ‚<8s#…TÑž:®ø“kÝ~»š,ÜÄ$³ÍäÐòÔ'âÞ‹%‰ Råš‘ ¨h¿¬;Ð9úzýÀ£zWjóN)—þ…”N«.‡*æßΛX–3”‘°æý<÷§÷ÆL>%5õgSÖ°~‰¯5ÿ?}¨K!WïxÄôî #­˜KRñâg ”‘LÖfë£ È}í¦S•FBãi®m©o¶Y›"]÷Ä =·_Ù˺}¬8øÓùWbµéq‘ó“±+_ù~¯ 4w§zeaE·@EE&4¢<9åËõMÔ¢»/؆“ø€n/nZP,$Ñò褹7QÞÛ rѳYzÖ:ºµ–iצۘÖàGýºqºs¯ÀÓNåYÙ[¸Šëe±¦– ,2‚3{ˆs9Í¥—;/SR+°dgit/tests/adhoc0000775000000000000000000000174512547254261011062 0ustar #!/bin/bash # # usage: # after tests/tests/some-test has been run (and maybe failed) # cd tests/tmp/some-test/blah # ../../adhoc ../../../dgit some options # or # after tests/tests/some-test has been run (and maybe failed) # cd tests/tmp/some-test/blah # ../../adhoc some rune run by some piece of infrastructure # # effects: # directly sets the env variables which arrange to use # programs etc. from the working tree ourname=adhoc case $0 in */$ourname) : ${DGIT_TEST_INTREE:=$(realpath "${0%/$ourname}/..")} ;; *) echo >&2 "$ourname must be invoked as .../$ourname not $0" exit 127 ;; esac export DGIT_TEST_INTREE . $DGIT_TEST_INTREE/tests/lib-core t-set-intree pwd=$(realpath "$(pwd)") basis=$DGIT_TEST_INTREE/tests/tmp case "$pwd" in "$basis" | "$basis"/*) testname=${pwd/"$basis/"/} testname=${testname%%/*} tmp="$basis/$testname" ;; *) fail "$ourname pwd must be inside some test (in $basis), not $pwd" ;; esac export ADTTMP=$tmp t-set-using-tmp exec "$@" dgit/tests/enumerate-tests0000775000000000000000000000311712564122637013124 0ustar #!/bin/bash set -e . tests/lib-core . tests/lib-restricts mode=$1 test-begin- () { whynots='' } restriction- () { set +e whynot=$(t-restriction-$r) rc=$? whynot="${whynot// / / }" set -e case "$rc.$whynot" in 0.) ;; 1.?*) whynots="$whynots${whynots:+; }$whynot" ;; *) fail "restriction $r for $t gave $rc $whynot !" esac } dependencies- () { : } test-done- () { case "$whynots" in '') echo $t ;; ?*) echo >&2 "SKIP $t $whynots" ;; esac } finish- () { : } test-begin-gencontrol () { restrictions='' dependencies='' } restriction-gencontrol () { restrictions+=" $r" } dependencies-gencontrol () { dependencies+=", $deps" } test-done-gencontrol () { stanza=$( add_Depends="$dependencies" \ perl $drs_dispatch/mirror-settings t-mirror-set remoterepos="$reposmirror" t-mirror-hook setup } t-mirror-set () { echo >>$drs_dispatch/mirror-settings "$1" } t-mirror-hook () { "$mirror_hook" "$drs_dispatch" "$@" } t-check-mirrored () { t-reporefs master t-reporefs mirror $pmirror diff $tmp/show-refs.{master,mirror} cat $queuedir/$p.log ||: t-files-notexist $queuedir/$p.{n,a,lock,err} } t-check-not-mirrored () { # uses previous t-reporefs-master t-reporefs mirror $pmirror diff $tmp/show-refs.{master,mirror} } dgit/tests/git-srcs/0000775000000000000000000000000012546012334011572 5ustar dgit/tests/git-srcs/pari-extra_3-1.git.tar0000664000000000000000000014400012546012334015517 0ustar pari-extra.git/0000775000175000017500000000000012242157267012026 5ustar ianianpari-extra.git/info/0000775000175000017500000000000012242157267012761 5ustar ianianpari-extra.git/info/exclude0000664000175000017500000000036012242157267014334 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ pari-extra.git/objects/0000775000175000017500000000000012242170376013453 5ustar ianianpari-extra.git/objects/3b/0000775000175000017500000000000012242170376013757 5ustar ianianpari-extra.git/objects/3b/61dfd360f5b264280b59681f4bc300b24f65690000444000175000017500000000145112242170376020670 0ustar ianianx­•ÛnÛF†{­§ 7N"R<ɪØj'Mâ n Ðë%wB-¼Ü%ö EÔçÈ‹uv)9 :PÑ;r@ÎrþùþŸÔ ä˲øn`F$øÙge’¿¯¬cÄÀ›U»ýIêÍdð îWÂÂÀÚGÖ!Ð¥Ò`À}ßo÷e;ƒƒd-rhB•ºwLræ0Å© ŒE”±˜ÆÆÁÔ¬ÕÊ-ëøToq@Å-huÐgzÐ t Y8&tHàÎwZgk ó-ãA—¾€æSœk4VPw§¡L—i¹Ök ú¦Ê ¬çpvͶðQãöpƒ¬ý ìFi_¦¤M’À¥.¤Ô}ƒÆÁ ¯gKµé~xgIJ9\øŠ,Ï!¯êlQg¼ÎŠ,›Lþ¹Ž"Í¿±ßq~°.~Rã»Oâ3É/‘YÜ©°“6ÌB/¬ª«{„Ö›5Úù7̵«šô$‡³–)¥l´y*÷ŠH‹S¾»¿+h\¡‚I‚q#9щON¶Ft+·ìI˜nQ1ðA‰è?÷å¯`·§Ûm¸ck-8Pøý"#ÏŠÌ*i»*É¡]1cÑÙ”b‰©GKq¡‡Kf&…7R[$÷¿(ªù|YdÓ{S(p1˜ mEQYgäÔ£çIù_¥SêÄÐ¹ÅÆ ÉGd¹úkú£#Á­fÞš™¥ÑqÆuK 1E»!ÖjŽc³7жµßŽñ28ý„˜ºóŠÐ:ßÏ_çYeÇ œ'ųó_õƒ‰r`¾&ÆI¾ØÇ …æ².ç5¥ç‘ÐüVd^)’‹I¢0ÆäWN.Þ¿X.óEyŠP1Ïa ×,‚ó¼ZÖ„Îë,yþ›né°5ýÃ?ÕÖ“žÖTï6“êC©»É¯Š×“¿cªpari-extra.git/objects/info/0000775000175000017500000000000012242157267014412 5ustar ianianpari-extra.git/objects/1d/0000775000175000017500000000000012242170376013757 5ustar ianianpari-extra.git/objects/1d/7060a0b5714db1132e98611963e65edc7667620000444000175000017500000000052112242170376020527 0ustar ianianxÍNã0…Yû)Ž4`hHÒ„i ˆBb5¼À}›Xø'²vúö8©X°ewõéú;>WzkuB[·g)0£é¶¹Qõ¦ieµmÚvëR6²)[Y²j~©nWsU šÒàµ1x0ÆÛŽCÂ}G§ù¯âN“+|èÿ ZWuÛÜ”uŸeU–B.©‰¿û^ˆ‘‚^ñÿçëUuÉÅDá;L¡g'¿?\âmÐ#Éwêytþ‚š¬=~âx…À£!É ÝL³½'£(È©¬Á ²Y`±ˆO¯¥w)xs»l­ðÄ#;áÝÏÕÁl=È4ÇÌF`…SßsLñ9ôf zœìˆÜÏ) {Qg{òXÛ¢^V^ýžg’ÿ4°ói÷-Î_éˆÏÇg¨ÀdáwˆL¼(„ømGRî¼ Þ" rÐ{æ«pari-extra.git/objects/7e/0000775000175000017500000000000012242170376013766 5ustar ianianpari-extra.git/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da690000444000175000017500000000002112242170376021501 0ustar ianianxKÊÉOR0b0å 1pari-extra.git/objects/86/0000775000175000017500000000000012242170376013710 5ustar ianianpari-extra.git/objects/86/1812a8d6f44424b3abd2b11e6c1e1e4ea810540000444000175000017500000000047312242170376021011 0ustar ianianxmËNÃ0EÙÖ_qw,h“”G!YQ@T•ªR!Øc'“ı#?hË×ã¤bÄÆÙwΜ±PFàú*?{k¥CÏËOÞöÜ¡"!¹–ßTAñ •ÂR)Ó ²ž ~*ïO©ÄØFãÙÊ)æ·Øš/\fYëâ&/®¸ÈæY–0¶ö'¸Ùkexáµ5jßiÚs+“Žû6 3alE<’Ú¦}ã[ón“Ð&[’ æWÅ Öû’ âxh‰ÈF5Iö€!Ÿz-)°ÁÎLÖ šç2­Ñí=çËéóOeÅVej.3â¼Ú 9¨<…g)U³åý΢p‹Ú`c(@¸£y_lSÏ‘Ü}f ³–ÙGâÏW¯;ÍÙæ­)Ú’q#o¦™à#Y¯9=Ù«çyÒ-vÎßs’áì‡ÕÛé8ÁÊyE˜~ÁKýÀ´%±ë9I™¤e‰U”uÂíúsM*Ã>qEXë`ÅhÞ‡€ÜÎìÅ€v‚­3ÉF**,ûÌku>Ì*¾gzÙPi&zéìzÍ›QsáÁY°/Á\¤:g nÑ8~ì)8³EC±,Ÿð¹%ùðà?Ï{P¾á¿Ü•‚°:ñî'·û1о·3ÐàTâlžæçÇÓ÷w$Zh¶¹wž·åýa›«›¤±ó¨ˆY‹o7Íbpari-extra.git/objects/a4/0000775000175000017500000000000012242170376013757 5ustar ianianpari-extra.git/objects/a4/e028bc92700ce80ce3068d4f21ec45ed66d81c0000444000175000017500000000032512242170376021163 0ustar ianianx+)JMU024g040031QrutñuÕsIMÊLÌcèñsÙ?3îZívMþö¯>)ùú$TarFb^zjN~:ƒuâýË _7¥hpGfÈ{fØäŸš S”Ÿ[XÂPwíÓ½ì3Z*ö'úÚ}]#r ¡"¯¤(?‡K'9wû)Î×R’¼ ЦÇß?Þ7¤ ²(3=£„¡MBhŵ/.*›W_Ú(—#'ç·B ¨ÈÜÔT¡¨4'µ˜Áà÷kO,ödÜ8í“/šq­ôe='hYÛpari-extra.git/objects/30/0000775000175000017500000000000012242170376013675 5ustar ianianpari-extra.git/objects/30/fbc0d6e439c3718c68d8cb4c6f1568d675e97f0000444000175000017500000000066012242170376021147 0ustar ianianx]RQoÔ0 æõò+ŒöÜ» ÁM€àÄÄ ‰ 1 ‰§)iÝ6ZWNŠîþ=NÚ¢õ^Z;ù>ÛßçGÞ—å««×»1ðÎX¿ëõ3BѨ+xÐýàj4VûÄNGƒDrÜ¡·ýv÷ g¶m¡ÜïßA¤ô߃9ÃwÂ31„ýAµm,ÖÐàÙxЬî`ƒ/ÎQo#|0zŠ?O#l‰ÛOðæúº”2¾¢¾Ge$+sÄ‘=‡¿È†BO5JC< $žŸ~ßþ:Ü?Ü~,•2£uõ ä_¢ަøFmêî)bˆµeµ‰4VÝ «*‡Ú_Àf Eµá^<\qRÉLSÊziéÜÜÝlUE’qȈ™$%úIh®:±íXX_ã€òS›¶Õ!‹²UÍç"aç–0#¦»L½¼\™p9×2UáåxxÊfuVuÚ·è¨ ¡Îúç„Èv'»¡a¢5ö$Ϫ_Õ)-ÊÞ}dr9íë·aœ‘y™ 7‹9/Ä-IrAmïïþ,zóV–ûìÄ’$ðÿ·ìÎápari-extra.git/objects/8c/0000775000175000017500000000000012242170376013765 5ustar ianianpari-extra.git/objects/8c/4c1644bf995ed67db748b2fcfd8fabc919ebc90000444000175000017500000000100512242170376021524 0ustar ianianxmSËnÛ0ìY_±Çµ))N׌¸q’ºŠÀM?`%®-Ö)”Uý}–ô=”'Ü™!+m+˜ÏÊ:5¥¿Á!쬃5U M6ýïʲ·Fyè°>àž ÷$!X¨­ ¨ŒÛe jNiò ¯«í&y° ÀíÆ€ û¶³  *Ý:ê4Ö \0»PùEÆ¥,t:b/àµe¬-y«h•ÍAh:«¹4VìzSGUi:I{Gä3à5ŸÀ— ”Dî²<>DÑp$çc¯Ý%Ô'­XCÝ»#¦d™ß< xtÔòð“~ß„Ð-ò|Ñbh¼06µèyǨѦüÕù.tyi9I ÙÓ0¨Ð‹ñ„®n&q«$™ Â˜óyO†ë¼8‹çâ“;­•½FmmêŸáîŠâJìD¢}kÈ'÷®m9‚ô>êÀ©ìœmO^<~Û¬®’ ú³©xD¥±ÒàbÕ’ÏFô~”‚d/°Ï¶!ËÊçËD£¨mÛõ‘Š]ãQIØ ø ácª8úÎ'ømTÊŠÝá¬~ÒИeÏÄM;N<¾Ò‡¦»Ó)|UZÃJkÛVäXl…§ýƒL_@X·_<;5âVýnв„òvQη3ø\ÜEö«»pari-extra.git/objects/pack/0000775000175000017500000000000012242157267014375 5ustar ianianpari-extra.git/objects/ab/0000775000175000017500000000000012242170376014035 5ustar ianianpari-extra.git/objects/ab/476e770c8d752e759bc92885c18fdd5e465cd60000444000175000017500000000104112242170376021147 0ustar ianianxm‘Ks›0„{æWèØŽ'a¸Ót ð ƒmìtz cÅ Èøñë›4×îiwgç»,Ç@šô¥ÍßHÁ,5 IXÊU *eáL&sA8G3‚TRB’~;P´uM¹Àß%É)nÄÙüˆéIcm“žƒ9þô¿>§Ó¶¯~8ƒ²ª I–ÁD‚’$'ÜÓrå==a¼CÁ¾íÁ¹8οˊò?ÂÇLÛñ";1H='2VëÄþ× Ò´m¾§9ÇáT™B|u¢µøB›óõ› Ð¥]˜†a•á˜K?¥±57ŒÖ·ƒ8¿é†:¬ä`o†®H7mºð£x²iϹ\¼œ÷óèéˆWùswßËÄnæo55Ïm¨Š{LyÍÎGé)”3&’kä·1ÎÜѼª;7‰j¹‚„–¯óàè{WE-†™òª':K·Q_pxßj;vZ¬Óõ¦<:·,e˜jª…ÊÃÌîN²È­PóÕ"Y­Z×ÛÔS輆ƒ¸v+_·SÝ ²…obŸ ó‰ëÇË„¯Kç¸ÐÜ „\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" pari-extra.git/hooks/post-update.sample0000775000175000017500000000027512242157267016630 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info pari-extra.git/hooks/pre-rebase.sample0000775000175000017500000001144212242157267016406 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END pari-extra.git/hooks/update.sample0000775000175000017500000000703312242157267015644 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 pari-extra.git/hooks/commit-msg.sample0000775000175000017500000000160012242157267016430 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } pari-extra.git/hooks/pre-commit.sample0000775000175000017500000000325012242157267016433 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- pari-extra.git/hooks/pre-applypatch.sample0000775000175000017500000000061612242157267017313 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : pari-extra.git/HEAD0000664000175000017500000000002712242157267012451 0ustar ianianref: refs/heads/master pari-extra.git/config0000664000175000017500000000010212242157267013207 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = true pari-extra.git/refs/0000775000175000017500000000000012242170376012761 5ustar ianianpari-extra.git/refs/dgit/0000775000175000017500000000000012242170376013710 5ustar ianianpari-extra.git/refs/dgit/sid0000664000175000017500000000005112242170376014406 0ustar ianian1d7060a0b5714db1132e98611963e65edc766762 pari-extra.git/refs/tags/0000775000175000017500000000000012242170376013717 5ustar ianianpari-extra.git/refs/tags/debian/0000775000175000017500000000000012242170376015141 5ustar ianianpari-extra.git/refs/tags/debian/3-10000664000175000017500000000005112242170376015360 0ustar ianianab476e770c8d752e759bc92885c18fdd5e465cd6 pari-extra.git/refs/heads/0000775000175000017500000000000012242157267014051 5ustar ianiandgit/tests/lib-restricts0000664000000000000000000000056112564130462012555 0ustar #!/bin/sh t-restriction-x-dgit-intree-only () { if [ "x$DGIT_TEST_INTREE" != x ]; then return 0; fi echo 'running installed package version' return 1 } t-restriction-x-dgit-git-only () { if test -d .git; then return 0; fi echo 'not running out of git clone' return 1 } t-restriction-x-dgit-schroot-build () { schroot -l -c build 2>&1 >/dev/null || return 1 } dgit/tests/git-template.tar0000664000000000000000000007400012521374563013154 0ustar _template/0000775000175000017500000000000012242157267011142 5ustar ianian_template/info/0000775000175000017500000000000012242157267012075 5ustar ianian_template/info/exclude0000664000175000017500000000036012242157267013450 0ustar ianian# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ _template/objects/0000775000175000017500000000000012242157267012573 5ustar ianian_template/objects/info/0000775000175000017500000000000012242157267013526 5ustar ianian_template/objects/pack/0000775000175000017500000000000012242157267013511 5ustar ianian_template/branches/0000775000175000017500000000000012242157267012727 5ustar ianian_template/description0000664000175000017500000000011112242157267013401 0ustar ianianUnnamed repository; edit this file 'description' to name the repository. _template/hooks/0000775000175000017500000000000012242157267012265 5ustar ianian_template/hooks/applypatch-msg.sample0000775000175000017500000000070412242157267016425 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : _template/hooks/prepare-commit-msg.sample0000775000175000017500000000232712242157267017207 0ustar ianian#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" _template/hooks/post-update.sample0000775000175000017500000000027512242157267015744 0ustar ianian#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info _template/hooks/pre-rebase.sample0000775000175000017500000001144212242157267015522 0ustar ianian#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi <<\DOC_END This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". DOC_END _template/hooks/update.sample0000775000175000017500000000703312242157267014760 0ustar ianian#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "Usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 _template/hooks/commit-msg.sample0000775000175000017500000000160012242157267015544 0ustar ianian#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } _template/hooks/pre-commit.sample0000775000175000017500000000325012242157267015547 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ascii filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then echo "Error: Attempt to add a non-ascii file name." echo echo "This can cause problems if you want to work" echo "with people on other platforms." echo echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" echo echo " git config hooks.allownonascii true" echo exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- _template/hooks/pre-applypatch.sample0000775000175000017500000000061612242157267016427 0ustar ianian#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : _template/HEAD0000664000175000017500000000002712242157267011565 0ustar ianianref: refs/heads/master _template/config0000664000175000017500000000010212242157267012323 0ustar ianian[core] repositoryformatversion = 0 filemode = true bare = true _template/refs/0000775000175000017500000000000012242157267012101 5ustar ianian_template/refs/tags/0000775000175000017500000000000012242157267013037 5ustar ianian_template/refs/heads/0000775000175000017500000000000012242157267013165 5ustar ianiandgit/tests/using-intree0000775000000000000000000000052112547254261012404 0ustar #!/bin/bash # # usage: # cd .../dgit.git # tests/using-intree tests/test/some-test # or # cd .../dgit.git # tests/using-intree tests/run-all # # effects: # sets DGIT_TEST_INTREE which causes tests/lib to have test scripts # using programs etc. from the working tree set -e pwd=`pwd` export DGIT_TEST_INTREE="$pwd" exec "$@" dgit/tests/lib-build-modes0000664000000000000000000000676012564114317012747 0ustar bm-prep () { t-tstunt-parsechangelog t-prep-newpackage example 1.0 cd $p git checkout -b bad-build-deps indep-arch perl -pe 's/Build-Depends.*/$&, x-dgit-no-such-package/' \ -i debian/control git commit -a -m bad-build-deps cat <<'END' >$tmp/stunt-git #!/bin/sh -e case "$*" in *clean*) echo >&2 "BUILD-MODES PROGRAM git $*" ;; esac exec git "$@" END chmod +x $tmp/stunt-git if zgrep 'dpkg-buildpackage: Make dependency checks fatal for -S' \ /usr/share/doc/dpkg-dev/changelog.gz; then dpkgbuildpackage_deps_for_clean=true else dpkgbuildpackage_deps_for_clean=false fi cleanmodes_default="git none dpkg-source dpkg-source-d" cleanmodes_all="$cleanmodes_default git-ff check" cleanmodes="$cleanmodes_default" } bm-guess-e-source-e-targets () { local some_act=$1 case "$some_act" in *" -b") e_source=false; e_targets='build binary' ;; *" -B") e_source=false; e_targets='build-arch binary-arch' ;; *" -A") e_source=false; e_targets='build-indep binary-indep' ;; *" -S") e_source=true; e_targets=' ' ;; *" -F") e_source=true; e_targets='build binary' ;; *) e_source=true; e_targets='build binary' ;; esac } bm-report-source () { if "$@"; then echo >&4 "SOURCE EXISTS" else echo >&4 "SOURCE MISSING" fi } bm-build-deps-ok () { case "$branch" in indep-arch) return 0 ;; bad-build-deps) return 1 ;; esac } bm-compute-expected () { require_fail=unexpect # or required tolerate_fail=unexpect # or tolerate exec 4>$bmexp echo >&4 "$heading" case $cleanmode in git) echo >&4 'BUILD-MODES PROGRAM git clean -xdf' ;; git-ff) echo >&4 'BUILD-MODES PROGRAM git clean -xdff' ;; check) echo >&4 'BUILD-MODES PROGRAM git clean -xdn' ;; dpkg-source-d) echo >&4 "EXAMPLE RULES TARGET clean" ;; dpkg-source) bm-build-deps-ok || tolerate_fail=tolerate echo >&4 "EXAMPLE RULES TARGET clean" ;; none) ;; *) fail "t-compute-expected-run $cleanmode ??" ;; esac if [ "x$e_targets" != x ]; then # e_targets can be " " to mean `/may/ fail due to b-d' bm-build-deps-ok || tolerate_fail=tolerate fi for t in $e_targets; do bm-build-deps-ok || require_fail=required echo >&4 "EXAMPLE RULES TARGET $t" done bm-report-source $e_source exec 4>&- } bm-run-one () { local args="--clean=$cleanmode $real_act" bmid="$act,$cleanmode,$branch" bmid=${bmid// /_} heading="===== [$bmid] dgit $args =====" bmlog=$tmp/run.$bmid.output bmexp=$tmp/run.$bmid.expected bmgot=$tmp/run.$bmid.results bm-compute-expected git checkout $branch git clean -xdf # since we might not do any actual cleaning dsc='../example_1.0.dsc' rm -f $dsc set +o pipefail t-dgit --git=$tmp/stunt-git $args 2>&1 | tee $bmlog local ps="${PIPESTATUS[*]}" set -o pipefail $bm_quirk_after_act exec 4>$bmgot echo >&4 "$heading" case $ps in "0 0") actual_status=success ;; *" 0") actual_status=failure; echo >&4 "OPERATION FAILED"; ;; *) fail "tee failed" ;; esac case "$require_fail-$tolerate_fail-$actual_status" in required-********-failure) echo >>$bmexp "REQUIRED FAILURE" ;; ********-tolerate-failure) echo >>$bmexp "TOLERATED FAILURE" ;; unexpect-********-success) ;; *) fail "RF=$require_fail TF=$tolerate_fail AS=$actual_status" ;; esac egrep >&4 '^EXAMPLE RULES TARGET|^BUILD-MODES' $bmlog || [ $? = 1 ] bm-report-source [ -e $dsc ] exec 4>&- $bm_quirk_before_diff [ $actual_status = failure ] || diff -U10 $bmexp $bmgot } bm-act-iterate () { for cleanmode in $cleanmodes; do for branch in indep-arch bad-build-deps; do bm-run-one done done : bm-act-iterate done. } dgit/infra/0000775000000000000000000000000012564127011007773 5ustar dgit/infra/drs-cron-wrap0000775000000000000000000000043612547254261012433 0ustar #!/bin/sh set -e umask 002 distro=$1; shift srvdir=/srv/dgit.debian.org dispatchdir=$srvdir/dispatch-dir dgitlive=$srvdir/dgit-live distrodir=$dispatchdir/distro=$distro PERLLIB="$dgitlive${PERLLIB+:}${PERLLIB}" \ exec $dgitlive/infra/dgit-repos-server $distro $distrodir '' --cron dgit/infra/dgit-ssh-dispatch0000775000000000000000000000761612564114317013257 0ustar #!/usr/bin/perl -w use strict; use Debian::Dgit; setup_sigwarn(); use POSIX; open DEBUG, '>/dev/null' or die $!; if (@ARGV && $ARGV[0] eq '-D') { shift @ARGV; open DEBUG, '>&STDERR' or die $!; } die unless @ARGV>=1 && @ARGV<=2 && $ARGV[0] !~ m/^-/; our ($dispatchdir,$authrune) = @ARGV; $authrune //= join ':', '@/keyrings/debian-keyring.gpg,a', '@/keyrings/debian-maintainers.gpg,m@/dm.txt'; our $lre = $package_re; our $qre = '["'."']?"; # $dispatchdir/distro=DISTRO should contain # dgit-live a clone of dgit (only if not using installed vsns) # diverts # repos/ } by virtue of # suites } dgit-repos-server's defaults relating to # policy-hook } dispatch-dir # plus files required by the authrune (by default, keyrings/ and dm.txt) # # diverts should be list of # [] # where is a package name pattern which may contain * or literals. # is for `git config dgit-distro.DISTRO.diverts.' our ($distro,$pkg, $d); our ($dgitlive,$repos,$suites,$diverts,$policyhook,$repo); sub checkdivert ($) { my ($df) = @_; if (!open DIV, '<', $df) { $!==ENOENT or die $!; return undef; } else { while (

) { s/^\s+//; s/\s+$//; next unless m/\S/; next if m/^\#/; my $divert; if (s/\s+(\S+)$//) { $divert=$1; } s/[^-+._0-9a-zA-Z*]/\\$&/g; s/\*/.*/g; printf DEBUG 'DISPATCH DIVERT ^%s$ %s'."\n", $_, ($divert // '(undef)'); if ($pkg =~ m/^$_$/) { return $divert; } } DIV->error and die $!; close DIV; return undef; } } sub finish () { close STDOUT or die $!; exit 0; } sub prl ($) { print @_, "\n" or die $!; } sub selectpackage ($$;$) { my $divertfn; ($distro,$pkg, $divertfn) = @_; # $distro,$pkg must have sane syntax $d = "$dispatchdir/distro=$distro"; if (!stat $d) { die $! unless $!==ENOENT; die "unknown distro ($distro)\n"; } $dgitlive= "$d/dgit-live"; $repos= "$d/repos"; $suites= "$d/suites"; $policyhook= "$d/policy-hook"; $authrune =~ s/\@/$d/g; my $divert = checkdivert("$d/diverts"); if (defined $divert) { $divertfn //= sub { die "diverted to $divert incompletely or too late!\n"; }; $divertfn->($divert); die; } $repo = "$repos/$pkg.git"; print DEBUG "DISPATCH DISTRO $distro PKG $pkg\n"; } sub hasrepo () { if (stat $repo) { -d _ or die; return 1; } else { $!==ENOENT or die $!; return 0; } } sub serve_up ($) { my ($repo) = @_; exec qw(git upload-pack --strict --timeout=1000), $repo; die "exec git: $!"; } sub dispatch () { local ($_) = $ENV{'SSH_ORIGINAL_COMMAND'} // ''; if (m#^: dgit ($lre) git-check ($lre) ;#) { selectpackage $1,$2, sub { prl "divert @_"; finish; }; prl hasrepo; finish; } elsif ( m#^${qre}git-([-a-z]+) ${qre}/dgit/($lre)/repos/($lre)\.git${qre}$# ) { my $cmd=$1; selectpackage $2,$3; if ($cmd eq 'receive-pack') { $ENV{'PERLLIB'} //= ''; $ENV{'PERLLIB'} =~ s#^(?=.)#:#; $ENV{'PERLLIB'} =~ s#^# $ENV{DGIT_TEST_INTREE} // $dgitlive #e; my $s = "$dgitlive/infra/dgit-repos-server"; $s = "dgit-repos-server" if !stat_exists $s; exec $s, $distro, $d, $authrune, qw(--ssh); die "exec $s: $!"; } elsif ($cmd eq 'upload-pack') { $repo='$repos/_empty' unless hasrepo; serve_up $repo; } else { die "unsupported git operation $cmd ($_)"; } } elsif ( m#^${qre}git-upload-pack ${qre}/dgit/($lre)/(?:repos/)?_dgit-repos-server\.git${qre}$# ) { my $distro= $1; # if running installed packages, source code should come # some other way serve_up("$dispatchdir/distro=$1/dgit-live/.git"); } elsif (m#^${qre}git-upload-pack\s#) { die "unknown repo to serve ($_). use dgit, or for server source ". "git clone here:/dgit/DISTRO/repos/_dgit-repos-server.git"; } else { die "unsupported operation ($_)"; } } dispatch; dgit/infra/dgit-repos-server0000775000000000000000000007700712564115252013321 0ustar #!/usr/bin/perl -w # dgit-repos-server # # usages: # dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [] --ssh # dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [] --cron # settings # --repos=GIT-REPOS-DIR default DISTRO-DIR/repos/ # --suites=SUITES-FILE default DISTRO-DIR/suites # --suites-master=SUITES-FILE default DISTRO-DIR/suites-master # --policy-hook=POLICY-HOOK default DISTRO-DIR/policy-hook # --mirror-hook=MIRROR-HOOK default DISTRO-DIR/mirror-hook # --dgit-live=DGIT-LIVE-DIR default DISTRO-DIR/dgit-live # (DISTRO-DIR is not used other than as default and to pass to policy # and mirror hooks) # internal usage: # .../dgit-repos-server --pre-receive-hook PACKAGE # # Invoked as the ssh restricted command # # Works like git-receive-pack # # SUITES-FILE is the name of a file which lists the permissible suites # one per line (#-comments and blank lines ignored). For --suites-master # it is a list of the suite(s) which should, when pushed to, update # `master' on the server (if fast forward). # # AUTH-SPEC is a :-separated list of # KEYRING.GPG,AUTH-SPEC # where AUTH-SPEC is one of # a # mDM.TXT # (With --cron AUTH-SPEC is not used and may be the empty string.) use strict; use Debian::Dgit qw(:DEFAULT :policyflags); setup_sigwarn(); # DGIT-REPOS-DIR contains: # git tree (or other object) lock (in acquisition order, outer first) # # _tmp/PACKAGE_prospective ! } SAME.lock, held during receive-pack # # _tmp/PACKAGE_incoming$$ ! } SAME.lock, held during receive-pack # _tmp/PACKAGE_incoming$$_fresh ! } # # PACKAGE.git } PACKAGE.git.lock # PACKAGE_garbage } (also covers executions of # PACKAGE_garbage-old } policy hook script for PACKAGE) # PACKAGE_garbage-tmp } # policy* } (for policy hook script, covered by # } lock only when invoked for a package) # # leaf locks, held during brief operaton only: # # _empty } SAME.lock # _empty.new } # # _template } SAME.lock # # locks marked ! may be held during client data transfer # What we do on push is this: # - extract the destination repo name # - make a hardlink clone of the destination repo # - provide the destination with a stunt pre-receive hook # - run actual git-receive-pack with that new destination # as a result of this the stunt pre-receive hook runs; it does this: # + understand what refs we are allegedly updating and # check some correspondences: # * we are updating only refs/tags/DISTRO/* and refs/dgit/* # * and only one of each # * and the tag does not already exist # and # * recover the suite name from the destination refs/dgit/ ref # + disassemble the signed tag into its various fields and signature # including: # * parsing the first line of the tag message to recover # the package name, version and suite # * checking that the package name corresponds to the dest repo name # * checking that the suite name is as recovered above # + verify the signature on the signed tag # and if necessary check that the keyid and package are listed in dm.txt # + check various correspondences: # * the signed tag must refer to a commit # * the signed tag commit must be the refs/dgit value # * the name in the signed tag must correspond to its ref name # * the tag name must be debian/ (massaged as needed) # * the suite is one of those permitted # * the signed tag has a suitable name # * run the "push" policy hook # * replay prevention for --deliberately-not-fast-forward # * check the commit is a fast forward # * handle a request from the policy hook for a fresh repo # + push the signed tag and new dgit branch to the actual repo # # If the destination repo does not already exist, we need to make # sure that we create it reasonably atomically, and also that # we don't every have a destination repo containing no refs at all # (because such a thing causes git-fetch-pack to barf). So then we # do as above, except: # - before starting, we take out our own lock for the destination repo # - we create a prospective new destination repo by making a copy # of _template # - we use the prospective new destination repo instead of the # actual new destination repo (since the latter doesn't exist) # - after git-receive-pack exits, we # + check that the prospective repo contains a tag and head # + rename the prospective destination repo into place # # Cleanup strategy: # - We are crash-only # - Temporary working trees and their locks are cleaned up # opportunistically by a program which tries to take each lock and # if successful deletes both the tree and the lockfile # - Prospective working trees and their locks are cleaned up by # a program which tries to take each lock and if successful # deletes any prospective working tree and the lock (but not # of course any actual tree) # - It is forbidden to _remove_ the lockfile without removing # the corresponding temporary tree, as the lockfile is also # a stampfile whose presence indicates that there may be # cleanup to do # # Policy hook scripts are invoked like this: # POLICY-HOOK-SCRIPT DISTRO DGIT-REPOS-DIR DGIT-LIVE-DIR DISTRO-DIR ACTION... # ie. # POLICY-HOOK-SCRIPT ... check-list [...] # POLICY-HOOK-SCRIPT ... check-package PACKAGE [...] # POLICY-HOOK-SCRIPT ... push PACKAGE \ # VERSION SUITE TAGNAME DELIBERATELIES [...] # POLICY-HOOK-SCRIPT ... push-confirm PACKAGE \ # VERSION SUITE TAGNAME DELIBERATELIES FRESH-REPO|'' [...] # # DELIBERATELIES is like this: --deliberately-foo,--deliberately-bar,... # # Exit status of policy hook is a bitmask. # Bit weight constants are defined in Dgit.pm. # NOFFCHECK (2) # suppress dgit-repos-server's fast-forward check ("push" only) # FRESHREPO (4) # blow away repo right away (ie, as if before push or fetch) # ("check-package" and "push" only) # any unexpected bits mean failure, and then known set bits are ignored # if no unexpected bits set, operation continues (subject to meaning # of any expected bits set). So, eg, exit 0 means "continue normally" # and would be appropriate for an unknown action. # # cwd for push and push-confirm is a temporary repo where the incoming # objects have been received; TAGNAME is the version-based tag. # # FRESH-REPO is '' iff the repo for this package already existed, or # the pathname of the newly-created repo which will be renamed into # place if everything goes well. (NB that this is generally not the # same repo as the cwd, because the objects are first received into a # temporary repo so they can be examined.) In this case FRESH-REPO # contains exactly the objects and refs that will appear in the # destination if push-confirm approves. # # if push requested FRESHREPO, push-confirm happens in the old working # repo and FRESH-REPO is guaranteed not to be ''. # # policy hook for a particular package will be invoked only once at # a time - (see comments about DGIT-REPOS-DIR, above) # # check-list and check-package are invoked via the --cron option. # First, without any locking, check-list is called. It should produce # a list of package names (one per line). Then check-package will be # invoked for each named package, in each case after taking an # appropriate lock. # # If policy hook wants to run dgit (or something else in the dgit # package), it should use DGIT-LIVE-DIR/dgit (etc.), or if that is # ENOENT, use the installed version. # # Mirror hook scripts are invoked like this: # MIRROR-HOOK-SCRIPT DISTRO-DIR ACTION... # and currently there is only one action invoked by dgit-repos-server: # MIRROR-HOOK-SCRIPT DISTRO-DIR updated-hook PACKAGE [...] # # Exit status of the mirror hook is advisory only. The mirror hook # runs too late to do anything useful about a problem, so the only # effect of a mirror hook exiting nonzero is a warning message to # stderr (which the pushing user should end up seeing). # # If the mirror hook does not exist, it is silently skipped. use POSIX; use Fcntl qw(:flock); use File::Path qw(rmtree); use File::Temp qw(tempfile); initdebug(''); our $func; our $dgitrepos; our $package; our $distro; our $suitesfile; our $suitesformasterfile; our $policyhook; our $mirrorhook; our $dgitlive; our $distrodir; our $destrepo; our $workrepo; our $keyrings; our @lockfhs; our @deliberatelies; our %previously; our $policy; our @policy_args; #----- utilities ----- sub realdestrepo () { "$dgitrepos/$package.git"; } sub acquirelock ($$) { my ($lock, $must) = @_; my $fh; printdebug sprintf "locking %s %d\n", $lock, $must; for (;;) { close $fh if $fh; $fh = new IO::File $lock, ">" or die "open $lock: $!"; my $ok = flock $fh, $must ? LOCK_EX : (LOCK_EX|LOCK_NB); if (!$ok) { die "flock $lock: $!" if $must; printdebug " locking $lock failed\n"; return undef; } next unless stat_exists $lock; my $want = (stat _)[1]; stat $fh or die $!; my $got = (stat _)[1]; last if $got == $want; } return $fh; } sub acquirermtree ($$) { my ($tree, $must) = @_; my $fh = acquirelock("$tree.lock", $must); if ($fh) { push @lockfhs, $fh; rmtree $tree; } return $fh; } sub locksometree ($) { my ($tree) = @_; acquirelock("$tree.lock", 1); } sub lockrealtree () { locksometree(realdestrepo); } sub mkrepotmp () { ensuredir "$dgitrepos/_tmp" }; sub removedtagsfile () { "$dgitrepos/_removed-tags/$package"; } sub recorderror ($) { my ($why) = @_; my $w = $ENV{'DGIT_DRS_WORK'}; # we are in stunthook if (defined $w) { chomp $why; open ERR, ">", "$w/drs-error" or die $!; print ERR $why, "\n" or die $!; close ERR or die $!; return 1; } return 0; } sub reject ($) { my ($why) = @_; recorderror "reject: $why"; die "\ndgit-repos-server: reject: $why\n\n"; } sub runcmd { debugcmd '+',@_; $!=0; $?=0; my $r = system @_; die (shellquote @_)." $? $!" if $r; } sub policyhook { my ($policyallowbits, @polargs) = @_; # => ($exitstatuspolicybitmap); die if $policyallowbits & ~0x3e; my @cmd = ($policyhook,$distro,$dgitrepos,$dgitlive,$distrodir,@polargs); debugcmd '+M',@cmd; my $r = system @cmd; die "system: $!" if $r < 0; die "dgit-repos-server: policy hook failed (or rejected) ($?)\n" if $r & ~($policyallowbits << 8); printdebug sprintf "hook => %#x\n", $r; return $r >> 8; } sub mkemptyrepo ($$) { my ($dir,$sharedperm) = @_; runcmd qw(git init --bare --quiet), "--shared=$sharedperm", $dir; } sub mkrepo_fromtemplate ($) { my ($dir) = @_; my $template = "$dgitrepos/_template"; my $templatelock = locksometree($template); printdebug "copy template $template -> $dir\n"; my $r = system qw(cp -a --), $template, $dir; !$r or die "create new repo $dir failed: $r $!"; close $templatelock; } sub movetogarbage () { # realdestrepo must have been locked my $real = realdestrepo; return unless stat_exists $real; my $garbagerepo = "$dgitrepos/${package}_garbage"; # We arrange to always keep at least one old tree, for recovery # from mistakes. This is either $garbage or $garbage-old. if (stat_exists "$garbagerepo") { printdebug "movetogarbage: rmtree $garbagerepo-tmp\n"; rmtree "$garbagerepo-tmp"; if (rename "$garbagerepo-old", "$garbagerepo-tmp") { printdebug "movetogarbage: $garbagerepo-old -> -tmp, rmtree\n"; rmtree "$garbagerepo-tmp"; } else { die "$garbagerepo $!" unless $!==ENOENT; printdebug "movetogarbage: $garbagerepo-old -> -tmp\n"; } printdebug "movetogarbage: $garbagerepo -> -old\n"; rename "$garbagerepo", "$garbagerepo-old" or die "$garbagerepo $!"; } ensuredir "$dgitrepos/_removed-tags"; open PREVIOUS, ">>", removedtagsfile or die removedtagsfile." $!"; git_for_each_ref('refs/tags/'.debiantag('*',$distro), sub { my ($objid,$objtype,$fullrefname,$reftail) = @_; print PREVIOUS "\n$objid $reftail .\n" or die $!; }, $real); close PREVIOUS or die $!; printdebug "movetogarbage: $real -> $garbagerepo\n"; rename $real, $garbagerepo or $! == ENOENT or die "$garbagerepo $!"; } sub policy_checkpackage () { my $lfh = lockrealtree(); $policy = policyhook(FRESHREPO,'check-package',$package); if ($policy & FRESHREPO) { movetogarbage(); } close $lfh; } #----- git-receive-pack ----- sub fixmissing__git_receive_pack () { mkrepotmp(); $destrepo = "$dgitrepos/_tmp/${package}_prospective"; acquirermtree($destrepo, 1); mkrepo_fromtemplate($destrepo); } sub makeworkingclone () { mkrepotmp(); $workrepo = "$dgitrepos/_tmp/${package}_incoming$$"; acquirermtree($workrepo, 1); my $lfh = lockrealtree(); runcmd qw(git clone -l -q --mirror), $destrepo, $workrepo; close $lfh; rmtree "${workrepo}_fresh"; } sub setupstunthook () { my $prerecv = "$workrepo/hooks/pre-receive"; my $fh = new IO::File $prerecv, O_WRONLY|O_CREAT|O_TRUNC, 0777 or die "$prerecv: $!"; print $fh <> 8) : "wait status $?"); } } sub maybeinstallprospective () { return if $destrepo eq realdestrepo; if (open REJ, "<", "$workrepo/drs-error") { local $/ = undef; my $msg = ; REJ->error and die $!; print STDERR $msg; exit 1; } else { $!==&ENOENT or die $!; } printdebug " show-ref ($destrepo) ...\n"; my $child = open SR, "-|"; defined $child or die $!; if (!$child) { chdir $destrepo or die $!; exec qw(git show-ref); die $!; } my %got = qw(tag 0 head 0); while () { chomp or die; printdebug " show-refs| $_\n"; s/^\S*[1-9a-f]\S* (\S+)$/$1/ or die; next if m{^refs/heads/master$}; my $wh = m{^refs/tags/} ? 'tag' : m{^refs/dgit/} ? 'head' : die; die if $got{$wh}++; } $!=0; $?=0; close SR or $?==256 or die "$? $!"; printdebug "installprospective ?\n"; die Dumper(\%got)." -- missing refs in new repo" if grep { !$_ } values %got; lockrealtree(); if ($destrepo eq "${workrepo}_fresh") { movetogarbage; } printdebug "install $destrepo => ".realdestrepo."\n"; rename $destrepo, realdestrepo or die $!; remove realdestrepo.".lock" or die $!; } sub main__git_receive_pack () { makeworkingclone(); setupstunthook(); runcmd qw(git receive-pack), $workrepo; dealwithfreshrepo(); maybeinstallprospective(); mirrorhook('updated-hook', $package); } #----- stunt post-receive hook ----- our ($tagname, $tagval, $suite, $oldcommit, $commit); our ($version, %tagh); our ($tagexists_error); sub readupdates () { printdebug " updates ...\n"; while () { chomp or die; printdebug " upd.| $_\n"; m/^(\S+) (\S+) (\S+)$/ or die "$_ ?"; my ($old, $sha1, $refname) = ($1, $2, $3); if ($refname =~ m{^refs/tags/(?=$distro/)}) { reject "pushing multiple tags!" if defined $tagname; $tagname = $'; #'; $tagval = $sha1; $tagexists_error= "tag $tagname already exists -". " not replacing previously-pushed version" if $old =~ m/[^0]/; } elsif ($refname =~ m{^refs/dgit/}) { reject "pushing multiple heads!" if defined $suite; $suite = $'; #'; $oldcommit = $old; $commit = $sha1; } else { reject "pushing unexpected ref!"; } } STDIN->error and die $!; reject "push is missing tag ref update" unless defined $tagname; reject "push is missing head ref update" unless defined $suite; printdebug " updates ok.\n"; } sub parsetag () { printdebug " parsetag...\n"; open PT, ">dgit-tmp/plaintext" or die $!; open DS, ">dgit-tmp/plaintext.asc" or die $!; open T, "-|", qw(git cat-file tag), $tagval or die $!; for (;;) { $!=0; $_=; defined or die $!; print PT or die $!; if (m/^(\S+) (.*)/) { push @{ $tagh{$1} }, $2; } elsif (!m/\S/) { last; } else { die; } } $!=0; $_=; defined or die $!; m/^($package_re) release (\S+) for \S+ \((\S+)\) \[dgit\]$/ or reject "tag message not in expected format"; die unless $1 eq $package; $version = $2; die "$3 != $suite " unless $3 eq $suite; my $copyl = $_; for (;;) { print PT $copyl or die $!; $!=0; $_=; defined or die "missing signature? $!"; $copyl = $_; if (m/^\[dgit ([^"].*)\]$/) { # [dgit "something"] is for future $_ = $1." "; while (length) { if (s/^distro\=(\S+) //) { die "$1 != $distro" unless $1 eq $distro; } elsif (s/^(--deliberately-$deliberately_re) //) { push @deliberatelies, $1; } elsif (s/^previously:(\S+)=(\w+) //) { die "previously $1 twice" if defined $previously{$1}; $previously{$1} = $2; } elsif (s/^[-+.=0-9a-z]\S* //) { } else { die "unknown dgit info in tag ($_)"; } } next; } last if m/^-----BEGIN PGP/; } $_ = $copyl; for (;;) { print DS or die $!; $!=0; $_=; last if !defined; } T->error and die $!; close PT or die $!; close DS or die $!; printdebug " parsetag ok.\n"; } sub checksig_keyring ($) { my ($keyringfile) = @_; # returns primary-keyid if signed by a key in this keyring # or undef if not # or dies on other errors my $ok = undef; printdebug " checksig keyring $keyringfile...\n"; our @cmd = (qw(gpgv --status-fd=1 --keyring), $keyringfile, qw(dgit-tmp/plaintext.asc dgit-tmp/plaintext)); debugcmd '|',@cmd; open P, "-|", @cmd or die $!; while (

) { next unless s/^\[GNUPG:\] //; chomp or die; printdebug " checksig| $_\n"; my @l = split / /, $_; if ($l[0] eq 'NO_PUBKEY') { last; } elsif ($l[0] eq 'VALIDSIG') { my $sigtype = $l[9]; $sigtype eq '00' or reject "signature is not of type 00!"; $ok = $l[10]; die unless defined $ok; last; } } close P; printdebug sprintf " checksig ok=%d\n", !!$ok; return $ok; } sub dm_txt_check ($$) { my ($keyid, $dmtxtfn) = @_; printdebug " dm_txt_check $keyid $dmtxtfn\n"; open DT, '<', $dmtxtfn or die "$dmtxtfn $!"; while (

) { m/^fingerprint:\s+\Q$keyid\E$/oi ..0 or next; if (s/^allow:/ /i..0) { } else { m/^./ or reject "key $keyid missing Allow section in permissions!"; next; } # in right stanza... s/^[ \t]+// or reject "package $package not allowed for key $keyid"; # in allow field... s/\([^()]+\)//; s/\,//; chomp or die; printdebug " dm_txt_check allow| $_\n"; foreach my $p (split /\s+/) { if ($p eq $package) { # yay! printdebug " dm_txt_check ok\n"; return; } } } DT->error and die $!; close DT or die $!; reject "key $keyid not in permissions list although in keyring!"; } sub verifytag () { foreach my $kas (split /:/, $keyrings) { printdebug "verifytag $kas...\n"; $kas =~ s/^([^,]+),// or die; my $keyid = checksig_keyring $1; if (defined $keyid) { if ($kas =~ m/^a$/) { printdebug "verifytag a ok\n"; return; # yay } elsif ($kas =~ m/^m([^,]+)$/) { dm_txt_check($keyid, $1); printdebug "verifytag m ok\n"; return; } else { die; } } } reject "key not found in keyrings"; } sub suite_is_in ($) { my ($sf) = @_; printdebug "suite_is_in ($sf)\n"; if (!open SUITES, "<", $sf) { $!==ENOENT or die $!; return 0; } while () { chomp; next unless m/\S/; next if m/^\#/; s/\s+$//; return 1 if $_ eq $suite; } die $! if SUITES->error; return 0; } sub checksuite () { printdebug "checksuite ($suitesfile)\n"; return if suite_is_in $suitesfile; reject "unknown suite"; } sub checktagnoreplay () { # We need to prevent a replay attack using an earlier signed tag. # We also want to archive in the history the object ids of # anything we remove, even if we get rid of the actual objects. # # So, we check that the signed tag mentions the name and tag # object id of: # # (a) In the case of FRESHREPO: all tags and refs/heads/* in # the repo. That is, effectively, all the things we are # deleting. # # This prevents any tag implying a FRESHREPO push # being replayed into a different state of the repo. # # There is still the folowing risk: If a non-ff push is of a # head which is an ancestor of a previous ff-only push, the # previous push can be replayed. # # So we keep a separate list, as a file in the repo, of all # the tag object ids we have ever seen and removed. Any such # tag object id will be rejected even for ff-only pushes. # # (b) In the case of just NOFFCHECK: all tags referring to the # current head for the suite (there must be at least one). # # This prevents any tag implying a NOFFCHECK push being # replayed to rewind from a different head. # # The possibility of an earlier ff-only push being replayed is # eliminated as follows: the tag from such a push would still # be in our repo, and therefore the replayed push would be # rejected because the set of refs being updated would be # wrong. if (!open PREVIOUS, "<", removedtagsfile) { die removedtagsfile." $!" unless $!==ENOENT; } else { # Protocol for updating this file is to append to it, not # write-new-and-rename. So all updates are prefixed with \n # and suffixed with " .\n" so that partial writes can be # ignored. while () { next unless m/^(\w+) (.*) \.\n/; next unless $1 eq $tagval; reject "Replay of previously-rewound upload ($tagval $2)"; } die removedtagsfile." $!" if PREVIOUS->error; close PREVIOUS; } return unless $policy & (FRESHREPO|NOFFCHECK); my $garbagerepo = "$dgitrepos/${package}_garbage"; lockrealtree(); my $nchecked = 0; my @problems; my $check_ref_previously= sub { my ($objid,$objtype,$fullrefname,$reftail) = @_; my $supkey = $fullrefname; $supkey =~ s{^refs/}{} or die "$supkey $objid ?"; my $supobjid = $previously{$supkey}; if (!defined $supobjid) { printdebug "checktagnoreply - missing\n"; push @problems, "does not declare previously $supkey"; } elsif ($supobjid ne $objid) { push @problems, "declared previously $supkey=$supobjid". " but actually previously $supkey=$objid"; } else { $nchecked++; } }; if ($policy & FRESHREPO) { foreach my $kind (qw(tags heads)) { git_for_each_ref("refs/$kind", $check_ref_previously); } } else { my $branch= server_branch($suite); my $branchhead= git_get_ref(server_ref($suite)); if (!length $branchhead) { # No such branch - NOFFCHECK was unnecessary. Oh well. printdebug "checktagnoreplay - not FRESHREPO, new branch, ok\n"; } else { printdebug "checktagnoreplay - not FRESHREPO,". " checking for overwriting refs/$branch=$branchhead\n"; git_for_each_tag_referring($branchhead, sub { my ($tagobjid,$refobjid,$fullrefname,$tagname) = @_; $check_ref_previously->($tagobjid,undef,$fullrefname,undef); }); printdebug "checktagnoreplay - not FRESHREPO, nchecked=$nchecked"; push @problems, "does not declare previously any tag". " referring to branch head $branch=$branchhead" unless $nchecked; } } if (@problems) { reject "replay attack prevention check failed:". " signed tag for $version: ". join("; ", @problems). "\n"; } printdebug "checktagnoreplay - all ok ($tagval)\n" } sub tagh1 ($) { my ($tag) = @_; my $vals = $tagh{$tag}; reject "missing header $tag in signed tag object" unless $vals; reject "multiple headers $tag in signed tag object" unless @$vals == 1; return $vals->[0]; } sub checks () { printdebug "checks\n"; tagh1('type') eq 'commit' or reject "tag refers to wrong kind of object"; tagh1('object') eq $commit or reject "tag refers to wrong commit"; tagh1('tag') eq $tagname or reject "tag name in tag is wrong"; my $expecttagname = debiantag $version, $distro; printdebug "expected tag $expecttagname\n"; $tagname eq $expecttagname or die; lockrealtree(); @policy_args = ($package,$version,$suite,$tagname, join(",",@deliberatelies)); $policy = policyhook(NOFFCHECK|FRESHREPO, 'push', @policy_args); if (defined $tagexists_error) { if ($policy & FRESHREPO) { printdebug "ignoring tagexists_error: $tagexists_error\n"; } else { reject $tagexists_error; } } checktagnoreplay(); checksuite(); # check that our ref is being fast-forwarded printdebug "oldcommit $oldcommit\n"; if (!($policy & NOFFCHECK) && $oldcommit =~ m/[^0]/) { $?=0; $!=0; my $mb = `git merge-base $commit $oldcommit`; chomp $mb; $mb eq $oldcommit or reject "not fast forward on dgit branch"; } if ($policy & FRESHREPO) { # It's a bit late to be discovering this here, isn't it ? # # What we do is: Generate a fresh destination repo right now, # and arrange to treat it from now on as if it were a # prospective repo. # # The presence of this fresh destination repo is detected by # the parent, which responds by making a fresh master repo # from the template. (If the repo didn't already exist then # $destrepo was _prospective, and we change it here. This is # OK because the parent's check for _fresh persuades it not to # use _prospective.) # $destrepo = "${workrepo}_fresh"; # workrepo lock covers mkrepo_fromtemplate $destrepo; } } sub onwardpush () { my @cmdbase = (qw(git send-pack), $destrepo); push @cmdbase, qw(--force) if $policy & NOFFCHECK; my @cmd = @cmdbase; push @cmd, "$commit:refs/dgit/$suite", "$tagval:refs/tags/$tagname"; debugcmd '+',@cmd; $!=0; my $r = system @cmd; !$r or die "onward push to $destrepo failed: $r $!"; if (suite_is_in $suitesformasterfile) { @cmd = @cmdbase; push @cmd, "$commit:refs/heads/master"; debugcmd '+', @cmd; $!=0; my $r = system @cmd; # tolerate errors (might be not ff) !($r & ~0xff00) or die "onward push to $destrepo#master failed: $r $!"; } } sub finalisepush () { if ($destrepo eq realdestrepo) { policyhook(0, 'push-confirm', @policy_args, ''); onwardpush(); } else { # We are to receive the push into a new repo (perhaps # because the policy push hook asked us to with FRESHREPO, or # perhaps because the repo didn't exist before). # # We want to provide the policy push-confirm hook with a repo # which looks like the one which is going to be installed. # The working repo is no good because it might contain # previous history. # # So we push the objects into the prospective new repo right # away. If the hook declines, we decline, and the prospective # repo is never installed. onwardpush(); policyhook(0, 'push-confirm', @policy_args, $destrepo); } } sub stunthook () { printdebug "stunthook in $workrepo\n"; chdir $workrepo or die "chdir $workrepo: $!"; mkdir "dgit-tmp" or $!==EEXIST or die $!; readupdates(); parsetag(); verifytag(); checks(); finalisepush(); printdebug "stunthook done.\n"; } #----- git-upload-pack ----- sub fixmissing__git_upload_pack () { $destrepo = "$dgitrepos/_empty"; my $lfh = locksometree($destrepo); return if stat_exists $destrepo; rmtree "$destrepo.new"; mkemptyrepo "$destrepo.new", "0644"; rename "$destrepo.new", $destrepo or die $!; unlink "$destrepo.lock" or die $!; close $lfh; } sub main__git_upload_pack () { my $lfh = locksometree($destrepo); printdebug "git-upload-pack in $destrepo\n"; chdir $destrepo or die "$destrepo: $!"; close $lfh; runcmd qw(git upload-pack), "."; } #----- arg parsing and main program ----- sub argval () { die unless @ARGV; my $v = shift @ARGV; die if $v =~ m/^-/; return $v; } our %indistrodir = ( # keys are used for DGIT_DRS_XXX too 'repos' => \$dgitrepos, 'suites' => \$suitesfile, 'suites-master' => \$suitesformasterfile, 'policy-hook' => \$policyhook, 'mirror-hook' => \$mirrorhook, 'dgit-live' => \$dgitlive, ); our @hookenvs = qw(distro suitesfile suitesformasterfile policyhook mirrorhook dgitlive keyrings dgitrepos distrodir); # workrepo and destrepo handled ad-hoc sub mode_ssh () { die if @ARGV; my $cmd = $ENV{'SSH_ORIGINAL_COMMAND'}; $cmd =~ m{ ^ (?: \S* / )? ( [-0-9a-z]+ ) \s+ '? (?: \S* / )? ($package_re) \.git '?$ }ox or reject "command string not understood"; my $method = $1; $package = $2; my $funcn = $method; $funcn =~ y/-/_/; my $mainfunc = $main::{"main__$funcn"}; reject "unknown method" unless $mainfunc; policy_checkpackage(); if (stat_exists realdestrepo) { $destrepo = realdestrepo; } else { printdebug " fixmissing $funcn\n"; my $fixfunc = $main::{"fixmissing__$funcn"}; &$fixfunc; } printdebug " running main $funcn\n"; &$mainfunc; } sub mode_cron () { die if @ARGV; my $listfh = tempfile(); open STDOUT, ">&", $listfh or die $!; policyhook(0,'check-list'); open STDOUT, ">&STDERR" or die $!; seek $listfh, 0, 0 or die $!; while (<$listfh>) { chomp or die; next if m/^\s*\#/; next unless m/\S/; die unless m/^($package_re)$/; $package = $1; policy_checkpackage(); } die $! if $listfh->error; } sub parseargsdispatch () { die unless @ARGV; delete $ENV{'GIT_DIR'}; # if not run via ssh, our parent git process delete $ENV{'GIT_PREFIX'}; # sets these and they mess things up if ($ENV{'DGIT_DRS_DEBUG'}) { enabledebug(); } if ($ARGV[0] eq '--pre-receive-hook') { if ($debuglevel) { $debugprefix.="="; printdebug "in stunthook ".(shellquote @ARGV)."\n"; foreach my $k (sort keys %ENV) { printdebug "$k=$ENV{$k}\n" if $k =~ m/^DGIT/; } } shift @ARGV; @ARGV == 1 or die; $package = shift @ARGV; ${ $main::{$_} } = $ENV{"DGIT_DRS_\U$_"} foreach @hookenvs; defined($workrepo = $ENV{'DGIT_DRS_WORK'}) or die; defined($destrepo = $ENV{'DGIT_DRS_DEST'}) or die; open STDOUT, ">&STDERR" or die $!; eval { stunthook(); }; if ($@) { recorderror "$@" or die; die $@; } exit 0; } $distro = argval(); $distrodir = argval(); $keyrings = argval(); foreach my $dk (keys %indistrodir) { ${ $indistrodir{$dk} } = "$distrodir/$dk"; } while (@ARGV && $ARGV[0] =~ m/^--([-0-9a-z]+)=/ && $indistrodir{$1}) { ${ $indistrodir{$1} } = $'; #'; shift @ARGV; } $ENV{"DGIT_DRS_\U$_"} = ${ $main::{$_} } foreach @hookenvs; die unless @ARGV==1; my $mode = shift @ARGV; die unless $mode =~ m/^--(\w+)$/; my $fn = ${*::}{"mode_$1"}; die unless $fn; $fn->(); } sub unlockall () { while (my $fh = pop @lockfhs) { close $fh; } } sub cleanup () { unlockall(); if (!chdir "$dgitrepos/_tmp") { $!==ENOENT or die $!; return; } foreach my $lf (<*.lock>) { my $tree = $lf; $tree =~ s/\.lock$//; next unless acquirermtree($tree, 0); remove $lf or warn $!; unlockall(); } } parseargsdispatch(); cleanup(); dgit/infra/dgit-mirror-rsync0000775000000000000000000000672612552762515013342 0ustar #!/bin/bash # # Mirror script for use as a dgit-repos-server mirror hook # # In addition to updated-hook (invoked by dgit-repos-server), # this script also supports the following ACTIONs: # MIRROR-HOOK-SCRIPT ... setup [...] create queue dir etc. # MIRROR-HOOK-SCRIPT ... backlog [...] do all packages which need it # MIRROR-HOOK-SCRIPT ... all [...] do all packages # MIRROR-HOOK-SCRIPT ... mirror PACKAGE [...] do just that, longer timeout # # DISTRO-DIR must contain a file `mirror-settings' which is a bash # script fragment assigning the following variables: # remoterepos for rsync, in form user@host:/dir # and optionally # hooktimeout default 30 [sec] # rsynctimeout default 900 [sec] # rsyncssh default 'ssh -o batchmode=yes' # rsync array, default (rsync -rltH --safe-links --delete) # repos default DISTRO-DIR/repos # (optional settings are all set before mirror-settings is included, # so you can modify them with += or some such) set -e set -o pipefail shopt -s nullglob case "$DGIT_DRS_DEBUG" in ''|0|1) ;; *) set -x ;; esac fail () { echo >&2 "dgit-mirror-rsync: $*"; exit 127 } if [ $# -lt 2 ]; then fail "too few arguments"; fi self=$0 case "$self" in /*) ;; */*) self="$PWD/$self" ;; *) ;; esac distrodir=$1; shift action=$1; shift package=$1 repos=$distrodir/repos rsync=(rsync -rltH --safe-links --delete) hooktimeout=30 rsynctimeout=900 rsyncssh='ssh -o batchmode=yes' . $distrodir/mirror-settings # contents of $queue # $queue/$package.n - mirror needed # $queue/$package.a - being attempted, or attempt failed # $queue/$package.lock - lock (with-lock-ex) # $queue/$package.err - stderr from failed (or current) run # $queue/$package.log - stderr from last successful run cd $repos queue=_mirror-queue case "$remoterepos" in *:/*|/*) ;; '') fail "remoterepos config not set" ;; *) fail "remoterepos config does not match *:/* or /*" ;; esac actually () { "${rsync[@]}" \ --timeout=$rsynctimeout \ -e "$rsyncssh" \ "$repos/$package.git"/. \ "$remoterepos/$package.git" } reinvoke () { newaction="$1"; shift exec \ "$@" \ "$self" "$distrodir" "reinvoke$newaction" "$package" } check-package-mirrorable () { local repo=$repos/$package.git local mode=$(stat -c%a "$repo") case $mode in *5) return 0 ;; *0) return 1 ;; *) echo >&2 "unexpected mode $mode for $repo"; return 1 ;; esac } lock-and-process () { check-package-mirrorable || return 0 reinvoke -locked with-lock-ex -w "$queue/$package.lock" } attempt () { exec 3>&2 >"$queue/$package.err" 2>&1 if actually; then rm -f "$queue/$package.a" exec 2>&3 2>&1 mv -f "$queue/$package.err" "$queue/$package.log" if ! [ -s "$queue/$package.log" ]; then rm "$queue/$package.log" fi rm "$queue/$package.lock" else cat >&3 "$queue/$package.err" exit 127 fi } lock-and-process-baseof-f () { package=${f##*/} package=${package%.*} lock-and-process } case "$action" in updated-hook) check-package-mirrorable || exit 0 touch "$queue/$package.n" reinvoke -timed timeout --foreground $hooktimeout ;; reinvoke-timed) (lock-and-process) >/dev/null 2>&1 ;; mirror) lock-and-process ;; reinvoke-locked) touch "$queue/$package.a" rm -f "$queue/$package.n" attempt ;; backlog) for f in $queue/*.[na]; do (lock-and-process-baseof-f ||:) done ;; all) for f in [a-z0-9]*.git; do (lock-and-process-baseof-f) done ;; setup) test -d "$queue" || mkdir "$queue" ;; *) fail "bad action $action" ;; esac dgit/infra/dgit-repos-policy-trusting0000775000000000000000000000204512547254260015161 0ustar #!/bin/bash # # This is a genuine policy, not just one for testing. # # It allows anyone authorised to push to also, on demand: # - wipe the repo and replace it with a new one # (with --deliberately-fresh-repo) # - do non-fast-forward pushes # (with --deliberately-not-fast-forward) set -e case "$DGIT_DRS_DEBUG" in ''|0) exec 3>/dev/null ;; 1) exec 3>&2 ;; *) exec 3>&2; set -x ;; esac distro=$1 ; shift reposdir=$1 ; shift livedir=$1 ; shift distrodir=$1 ; shift action=$1 ; shift echo >&3 "dgit-repos-policy-trusting: action=$action" case "$action" in push|push-confirm) ;; *) exit 0 ;; esac package=$1 ; shift version=$1 ; shift suite=$1 ; shift tagname=$1 ; shift delibs=$1 ; shift bitmask=0 policyflags () { perl -e 'use Debian::Dgit qw(:policyflags); print '$1',"\n"' } set -e case "$action//,$delibs," in push//*,--deliberately-fresh-repo,*) bitmask=$(( bitmask | `policyflags 'NOFFCHECK|FRESHREPO'` )) ;; push//*,--deliberately-not-fast-forward,*) bitmask=$(( bitmask | `policyflags 'NOFFCHECK'` )) ;; esac exit $bitmask dgit/infra/cgit-regen-config0000775000000000000000000000067712552732200013221 0ustar #!/bin/sh set -e root=/srv/dgit.debian.org repos=$root/unpriv/repos outfile=$root/etc/projects.cgit lockfile=$outfile.lock template=$root/config/cgit-template flock $lockfile -c ' outfile='"$outfile"' repos='"$repos"' exec >"$outfile.tmp" for ff in "$repos"/[0-9a-z]*.git; do f=${ff##*/} p=${f%.git} cat <; die $! if STDIN->error; my $items = decode_json $json; foreach my $item (@$items) { next unless ($item->{archive}//"") eq "ftp-master"; next unless ($item->{codename}); print $item->{codename}, "\n" or die $!; } flush STDOUT or die $!; ' >$output.new mv -f $output.new $output dgit/infra/ssh-wrap0000775000000000000000000000032512547254261011476 0ustar #!/bin/sh set -e umask 002 srvdir=/srv/dgit.debian.org dispatchdir=$srvdir/dispatch-dir dgitlive=$srvdir/dgit-live PERLLIB="$dgitlive${PERLLIB+:}${PERLLIB}" \ exec $dgitlive/infra/dgit-ssh-dispatch $dispatchdir dgit/infra/dgit-repos-policy-debian0000775000000000000000000003304112564127011014514 0ustar #!/usr/bin/perl -w # dgit repos policy hook script for Debian use strict; use Debian::Dgit qw(:DEFAULT :policyflags); setup_sigwarn(); use POSIX; use JSON; use File::Temp qw(tempfile); use DBI; use IPC::Open2; use Data::Dumper; use Debian::Dgit::Policy::Debian; initdebug('%'); enabledebuglevel $ENV{'DGIT_DRS_DEBUG'}; END { $? = 127; } # deliberate exit uses _exit our $distro = shift @ARGV // die "need DISTRO"; our $repos = shift @ARGV // die "need DGIT-REPOS-DIR"; our $dgitlive = shift @ARGV // die "need DGIT-LIVE-DIR"; our $distrodir = shift @ARGV // die "need DISTRO-DIR"; our $action = shift @ARGV // die "need ACTION"; our $publicmode = 02775; our $new_upload_propagation_slop = 3600*4 + 100;# fixme config; our $poldbh; our $pkg; our $pkgdir; our ($pkg_exists,$pkg_secret); our $stderr; our ($version,$suite,$tagname); our %deliberately; # We assume that it is not possible for NEW to have a version older # than sid. # Whenever pushing, we check for # source-package-local tainted history # global tainted history # can be overridden by --deliberately except for an admin prohib taint # # ALL of the following apply only if history is secret: # # if NEW has no version, or a version which is not in our history[1] # (always) # check all suites # if any suite's version is in our history[1], publish our history # otherwise discard our history, # tainting --deliberately-include-questionable-history # # if NEW has a version which is in our history[1] # (on push only) # require explicit specification of one of # --deliberately-include-questionable-history # --deliberately-not-fast-forward # (latter will taint old NEW version --d-i-q-h) # (otherwise) # leave it be # # [1] looking for the relevant git tag for the version number and not # caring what that tag refers to. # # When we are doing a push to a fresh repo, any version will do: in # this case, this is the first dgit upload of an existing package, # and we trust that the uploader hasn't included in their git # history any previous non-dgit uploads. # # A wrinkle: if we approved a push recently, we treat NEW as having # a version which is in our history. This is because the package may # still be being uploaded. (We record this using the timestamp of the # package's git repo directory.) # We aim for the following invariants and properties: # # - .dsc of published dgit package will have corresponding publicly # visible dgit-repo (soon) # # - when a new package is rejected we help maintainer avoid # accidentally including bad objects in published dgit history # # - .dsc of NEW dgit package has corresponding dgit-repo but not # publicly readable sub apiquery ($) { my ($subpath) = @_; local $/=undef; my $dgit = "$dgitlive/dgit"; $dgit = "dgit" if !stat_exists $dgit; my $cmd = "$dgit -d$distro \$DGIT_TEST_OPTS"; $cmd .= " -".("D" x $debuglevel) if $debuglevel; $cmd .= " archive-api-query $subpath"; printdebug "apiquery $cmd\n"; $!=0; $?=0; my $json = `$cmd`; defined $json && !$? or die "$subpath $! $?"; my $r = decode_json $json; my $d = new Data::Dumper([$r], [qw(r)]); printdebug "apiquery $subpath | ", $d->Dump() if $debuglevel>=2; return $r; } sub vsn_in_our_history ($) { my ($vsn) = @_; my $tagref = "refs/tags/".debiantag $vsn, $distro; printdebug " checking history vsn=$vsn tagref=$tagref\n"; $?=0; my $r = system qw(git show-ref --verify --quiet), $tagref; return 1 if !$r; return 0 if $r==256; die "$pkg tagref $tagref $? $!"; } sub specific_suite_has_suitable_vsn ($$) { my ($suite, $vsn_check) = @_; # tests $vsn_check->($version) my $in_suite = apiquery "dsc_in_suite/$suite/$pkg"; foreach my $entry (@$in_suite) { my $vsn = $entry->{version}; die "$pkg ?" unless defined $vsn; printdebug " checking history found suite=$suite vsn=$vsn\n"; return 1 if $vsn_check->($vsn); } return 0; } sub new_has_vsn_in_our_history () { return specific_suite_has_suitable_vsn('new', \&vsn_in_our_history); } sub good_suite_has_suitable_vsn ($) { my ($vsn_check) = @_; # as for specific_suite_has_specific_vsn my $suites = apiquery "suites"; foreach my $suitei (@$suites) { my $suite = $suitei->{name}; die unless defined $suite; next if $suite =~ m/\bnew$/; return 1 if specific_suite_has_suitable_vsn($suite, $vsn_check); } return 0; } sub statpackage () { $pkgdir = "$repos/$pkg.git"; if (!stat_exists $pkgdir) { printdebug "statpackage $pkg => ENOENT\n"; $pkg_exists = 0; } else { $pkg_exists = 1; $pkg_secret = !!(~(stat _)[2] & 05); printdebug "statpackage $pkg => exists, secret=$pkg_secret.\n"; } } sub getpackage () { die unless @ARGV >= 1; $pkg = shift @ARGV; die unless $pkg =~ m/^$package_re$/; statpackage(); } sub add_taint ($$) { my ($refobj, $reason) = @_; printdebug "TAINTING $refobj\n", (map { "\%| $_" } split "\n", $reason), "\n"; my $tf = new File::Temp or die $!; print $tf "$refobj^0\n" or die $!; flush $tf or die $!; seek $tf,0,0 or die $!; my $gcfpid = open GCF, "-|"; defined $gcfpid or die $!; if (!$gcfpid) { open STDIN, "<&", $tf or die $!; exec 'git', 'cat-file', '--batch'; die $!; } close $tf or die $!; $_ = ; defined $_ or die; m/^(\w+) (\w+) (\d+)\n/ or die "$_ ?"; my $gitobjid = $1; my $gitobjtype = $2; my $bytes = $3; my $gitobjdata; if ($gitobjtype eq 'commit' or $gitobjtype eq 'tag') { $!=0; read GCF, $gitobjdata, $bytes == $bytes or die "$gitobjid $bytes $!"; } close GCF; $poldbh->do("INSERT INTO taints". " (package, gitobjid, gitobjtype, gitobjdata, time, comment)". " VALUES (?,?,?,?,?,?)", {}, $pkg, $gitobjid, $gitobjtype, $gitobjdata, time, $reason); my $taint_id = $poldbh->last_insert_id(undef,undef,"taints","taint_id"); die unless defined $taint_id; $poldbh->do("INSERT INTO taintoverrides". " (taint_id, deliberately)". " VALUES (?, '--deliberately-include-questionable-history')", {}, $taint_id); } sub add_taint_by_tag ($$) { my ($tagname,$refobjid) = @_; add_taint($refobjid, "tag $tagname referred to this object in git tree but all". " previously pushed versions were found to have been". " removed from NEW (ie, rejected) (or never arrived)"); } sub check_package () { return 0 unless $pkg_exists; return 0 unless $pkg_secret; printdebug "check_package\n"; chdir $pkgdir or die "$pkgdir $!"; stat '.' or die "$pkgdir $!"; my $mtime = ((stat _)[9]); my $age = time - $mtime; printdebug "check_package age=$age\n"; if (good_suite_has_suitable_vsn(\&vsn_in_our_history)) { chmod $publicmode, "." or die $!; $pkg_secret = 0; return 0; } return 0 if $age < $new_upload_propagation_slop; return 0 if new_has_vsn_in_our_history(); printdebug "check_package secret, deleted, tainting\n"; git_for_each_ref('refs/tags', sub { my ($objid,$objtype,$fullrefname,$tagname) = @_; add_taint_by_tag($tagname,$objid); }); return FRESHREPO; } sub action_check_package () { getpackage(); return check_package(); } sub getpushinfo () { die unless @ARGV >= 4; $version = shift @ARGV; $suite = shift @ARGV; $tagname = shift @ARGV; my $delibs = shift @ARGV; foreach my $delib (split /\,/, $delibs) { $deliberately{$delib} = 1; } } sub deliberately ($) { return $deliberately{"--deliberately-$_[0]"}; } sub action_push () { getpackage(); getpushinfo(); check_package(); # might make package public, or might add taints return 0 unless $pkg_exists; return 0 unless $pkg_secret; # we suppose that NEW has a version which is already in our # history, as otherwise the repo would have been blown away if (deliberately('not-fast-forward')) { add_taint(server_ref($suite), "rewound suite $suite; --deliberately-not-fast-forward". " specified in signed tag $tagname for upload of". " version $version"); return NOFFCHECK|FRESHREPO; } if (deliberately('include-questionable-history')) { return 0; } die "\nPackage is in NEW and has not been accepted or rejected yet;". " use a --deliberately option to specify whether you are". " keeping or discarding the previously pushed history. ". " Please RTFM dgit(1).\n\n"; } sub action_push_confirm () { getpackage(); getpushinfo(); die unless @ARGV >= 1; my $freshrepo = shift @ARGV; my $initq = $poldbh->prepare(<execute($pkg); my @objscatcmd = qw(git); push @objscatcmd, qw(--git-dir), $freshrepo if length $freshrepo; push @objscatcmd, qw(cat-file --batch); debugcmd '|',@objscatcmd if $debuglevel>=2; my @taintids; my $chkinput = tempfile(); while (my $taint = $initq->fetchrow_hashref()) { push @taintids, $taint->{taint_id}; print $chkinput $taint->{gitobjid}, "\n" or die $!; printdebug '|> ', $taint->{gitobjid}, "\n" if $debuglevel>=2; } flush $chkinput or die $!; seek $chkinput,0,0 or die $!; my $checkpid = open CHKOUT, "-|" // die $!; if (!$checkpid) { open STDIN, "<&", $chkinput or die $!; exec @objscatcmd or die $!; } my ($taintinfoq,$overridesanyq,$untaintq,$overridesq); my $overridesstmt = <; die "$? $!" unless defined $_; printdebug "|< ", $_ if $debuglevel>=2; next if m/^\w+ missing$/; die "($taintid) $_ ?" unless m/^(\w+) (\w+) (\d+)\s/; my ($objid,$objtype,$nbytes) = ($1,$2,$3); my $drop; (read CHKOUT, $drop, $nbytes) == $nbytes or die; $taintinfoq ||= $poldbh->prepare(<execute($taintid); my $ti = $taintinfoq->fetchrow_hashref(); die unless $ti; my $timeshow = defined $ti->{time} ? " at time ".strftime("%Y-%m-%d %H:%M:%S Z", gmtime $ti->{time}) : ""; my $pkgshow = length $ti->{package} ? "package $ti->{package}" : "any package"; $stderr .= <{comment} END printdebug "SQL overrides: @overridesv $taintid /\n$overridesstmt\n"; $overridesq ||= $poldbh->prepare($overridesstmt); $overridesq->execute(@overridesv, $taintid); my ($ovwhy) = $overridesq->fetchrow_array(); if (!defined $ovwhy) { $overridesanyq ||= $poldbh->prepare(<execute($taintid); my ($ovany) = $overridesanyq->fetchrow_array(); $stderr .= $ovany ? <prepare(<execute($taintid); } } close CHKOUT; if ($mustreject) { $stderr .= <> 1)); printdebug sprintf "chmod %#o (was %#o) %s\n", $newmode, $oldmode, $freshrepo; chmod $newmode, $freshrepo or die $!; utime undef, undef, $freshrepo or die $!; } } return 0; } sub action_check_list () { opendir L, "$repos" or die "$repos $!"; while (defined (my $dent = readdir L)) { next unless $dent =~ m/^($package_re)\.git$/; $pkg = $1; statpackage(); next unless $pkg_exists; next unless $pkg_secret; print "$pkg\n" or die $!; } closedir L or die $!; close STDOUT or die $!; return 0; } $action =~ y/-/_/; my $fn = ${*::}{"action_$action"}; if (!$fn) { printdebug "dgit-repos-policy-debian: unknown action $action\n"; exit 0; } my $sleepy=0; my $rcode; my $db_busy_exception= 'Debian::Dgit::Policy::Debian::DB_BUSY'; my @orgargv = @ARGV; for (;;) { @ARGV = @orgargv; eval { poldb_setup(poldb_path($repos), sub { $poldbh->{HandleError} = sub { return 0 unless $poldbh->err == 5; # SQLITE_BUSY, not in .pm :-( die bless { }, $db_busy_exception; }; eval ($ENV{'DGIT_RPD_TEST_DBLOOP_HOOK'}//''); die $@ if length $@; # used by tests/tests/debpolicy-dbretry }); $stderr = ''; $rcode = $fn->(); die unless defined $rcode; $poldbh->commit; }; last unless length $@; die $@ unless ref $@ eq $db_busy_exception; die if $sleepy >= 20; $sleepy++; print STDERR "[policy database busy, retrying (${sleepy}s)]\n"; eval { $poldbh->rollback; }; } print STDERR $stderr or die $!; flush STDERR or die $!; _exit $rcode; dgit/infra/dgit-repos-admin-debian0000775000000000000000000001224112564114317014311 0ustar #!/usr/bin/perl -w # dgit repos policy admin script for Debian use strict; use Debian::Dgit; setup_sigwarn(); our $usage = <<'END'; usage: dgit-repos-admin-debian [] operation... options: --git-dir /path/to/git/repo/or/working/tree --repos /path/to/dgit/repos/directory } alternatives --db /path/to/dgit/repos/policy.sqlite3 } (at least one of above required; if only one, cwd is used for other) operations: create-db list-taints taint [--global|] '' untaint [--global|] END use POSIX; use DBI; use Debian::Dgit::Policy::Debian; sub badusage ($) { die "bad usage: $_[0]\n$usage"; } use Getopt::Long qw(:config posix_default gnu_compat bundling); our ($git_dir,$repos_dir,$db_path); GetOptions("git-dir=s" => \$git_dir, "repos=s" => \$repos_dir, "db=s" => \$db_path) or die $usage; $db_path //= poldb_path($repos_dir) if defined $repos_dir; $db_path // $repos_dir || die <<'END'.$usage; Must supply --git-dir and/or --repos (or --db instead of --repos). If only one of --git-dir and --repos is supplied, other is taken to be current working directory. END # / $git_dir //= '.'; $repos_dir //= '.'; our $p; our $gitobjid; sub get_package_objid () { $p = shift @ARGV; $p // badusage "operation needs package or --global"; if ($p eq '--global') { $p = ''; } else { $p =~ m/^$package_re$/ or badusage 'package name or --global needed'; } $gitobjid = shift @ARGV; $gitobjid // badusage "operation needs git object id"; $gitobjid =~ m/\W/ && badusage "invalid git object id"; } sub sort_out_git_dir () { foreach my $sfx ('/.git', '') { my $path = "$git_dir/$sfx"; if (stat_exists "$path/objects") { $ENV{GIT_DIR} = $git_dir = $path; return; } } die "git directory $git_dir doesn't seem valid\n"; } sub show_taints ($$@) { my ($m, $cond, @condargs) = @_; my $q = $poldbh->prepare ("SELECT package,gitobjid,gitobjtype,time,comment, ". " (gitobjdata IS NOT NULL) hasdata". " FROM taints WHERE $cond". " ORDER BY package, gitobjid, time"); $q->execute(@condargs); print "$m:\n" or die $!; my $count = 0; while (my $row = $q->fetchrow_hashref) { my $t = strftime "%Y-%m-%dT%H:%M:%S", gmtime $row->{time}; my $objinfo = $row->{gitobjtype}. ($row->{hasdata} ? '+' : ' '); my $comment = $row->{comment}; $comment =~ s/\\/\\\\/g; $comment =~ s/\n/\\n/g; printf(" %s %-30s %s %7s %s\n", $t, $row->{package}, $row->{gitobjid}, $objinfo, $row->{comment}) or die $!; $count++; } return $count; } sub cmd_list_taints ($) { badusage "no args/options" if @ARGV; my $count = show_taints("all taints","1"); printf "%d taints listed\n", $count or die $!; } sub cmd_create_db ($) { badusage "no args/options" if @ARGV; $poldbh->do(<do(<do(<commit; } sub show_taints_bypackage ($) { my ($m) = @_; show_taints($m, "package = ?", $p); } sub show_taints_bygitobjid ($) { my ($m) = @_; show_taints($m, "gitobjid = ?", $gitobjid); } sub show_relevant_taints ($) { my ($what) = @_; show_taints_bypackage($p ? "$what taints for package $p" : "$what global taints"); show_taints_bygitobjid("$what taints for object $gitobjid"); } sub cmd_taint () { get_package_objid(); my $comment = shift @ARGV; $comment // badusage "operation needs comment"; @ARGV && badusage "too many arguments to taint"; sort_out_git_dir(); $!=0; $?=0; my $objtype = `git cat-file -t $gitobjid`; chomp $objtype or die "$? $!"; $poldbh->do("INSERT INTO taints". " (package, gitobjid, gitobjtype, time, comment)". " VALUES (?,?,?,?,?)", {}, $p, $gitobjid, $objtype, time, $comment); $poldbh->commit; print "taint added\n" or die $!; show_relevant_taints("resulting"); } sub cmd_untaint () { get_package_objid(); @ARGV && badusage "too many arguments to untaint"; show_relevant_taints("existing"); my $affected = $poldbh->do("DELETE FROM taints". " WHERE package = ? AND gitobjid = ?", {}, $p, $gitobjid); $poldbh->commit; printf "%d taints removed\n", $affected or die $!; exit $affected ? 0 : 1; } my $cmd = shift @ARGV; $cmd // badusage "need operation"; $cmd =~ y/-/_/; my $fn = ${*::}{"cmd_$cmd"}; $fn or badusage "unknown operation $cmd"; poldb_setup($db_path); $fn->(); dgit/infra/get-dm-txt0000775000000000000000000000072312547254261011726 0ustar #!/bin/sh set -e cd ${DGIT_INFRA_GETDMTXT_DATADIR-/srv/dgit.debian.org/data} ${DGIT_INFRA_GETDMTXT_UMASK-umask 002} file=dm.txt server=ftp-master.debian.org path=$file certargs=$(git config dgit-distro.debian.archive-query-tls-curl-ca-args \ || (echo >&2 "git config failed"; exit 1)) with-lock-ex -f $file.lock sh -c " if ! curl $certargs \ >$file.new https://$server/$path 2>$file.stderr; then cat $file.stderr >&2 exit 127 fi mv -f $file.new $file " dgit/debian/0000775000000000000000000000000012566103760010125 5ustar dgit/debian/copyright0000664000000000000000000000161512547254260012064 0ustar dgit Integration between git and Debian-style archives Copyright (C)2013-2015 Ian Jackson This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GNU General Public License v3 can be found in /usr/share/common-licenses/GPL-3. The tests/ directory contains a complete copy of the source code for the pari-extra 3-1 package. This is a dummy package containing only Debian metadata, by Bill Alombert, with a licence statement saying it's GPL (implicitly GPLv3 compatible). dgit/debian/changelog0000664000000000000000000007261312566103646012013 0ustar dgit (1.4) unstable; urgency=high Bugfixes: * Unbreak --dry-run (`exiting subroutine via next', broken in ac221d67, bug released in 0.22). * When running git-add in commit-quilty-patch, properly escape filenames (which git-add treats as glob patterns). * When running git-add in commit-quilty-patch, use -f and sometimes -A, so as to avoid being broken by any .gitignore, etc. * When quilt linearisation fails, print the right information in the error message. (This has been broken forever.) * Cope properly with `3.0 (quilt)' with single-debian-patch. Closes:#796016. (Still does not work with wheezy's dpkg-source, so no test case yet.) * With dgit sbuild, pass our -d before the user's arguments, so that the user can override it. Closes:#796019. New checks and improved behaviours: * Detect and reject git trees containing debian/source/local-options or debian/source/local-patch-header. * In --dry-run mode, _do_ actually run dpkg-source --commit so that we actually do construct the quilt fixup commit; instead, honour --dry-run by avoiding pulling it back to your HEAD. * quilt-fixup checks that the git tree is clean, as for build-prep. Documentation: * In dgit(7), discuss binaries and documentation present in upstream but removed by rules clean. Test suite: * Run quilt-fixup with -wgf in distropatches-reject, so that we don't need build-depends. -- Ian Jackson Sat, 22 Aug 2015 15:31:02 +0100 dgit (1.3) unstable; urgency=high Important bugfixes: * In option parser test `@ARGV' not `length @ARGV'. Closes:#795710. * Properly quote package name when constructing regexp in complete_file_from_dsc. Closes:#795736. Also, grep the code for likely similar problems elsewhere and improve a (harmless) instance in dgit-repos-server. Other improvements: * If a .orig in .. is a symlink, hardlink the link target into our private unpack directory, rather than the link itself (since latter won't work if the symlink is relative). Closes:#795665. * Test suite: Fix t-restriction-x-dgit-schroot-build in non-adt mode. * Infrastructure: Improve an error message in dgit-repos-policy-debian. -- Ian Jackson Sun, 16 Aug 2015 17:51:02 +0100 dgit (1.2) unstable; urgency=high Improvements: * Honour *.clean-mode configuration setting for --clean= mode. * No longer require option values to be cuddled: support `--opt val' and `-o val'. Closes:#763332. Manpages: * Fix typos. * Document that tags are in DEP-14 format, and that they are used for authenticating pushes. * Correct cross-reference to point to browse.d.d.o. * Move dgit.default.* to main CONFIGURATION section. Administrivia: * Add missing close of #793060 to changelog for version 1.1. -- Ian Jackson Fri, 14 Aug 2015 18:27:20 +0100 dgit (1.1) unstable; urgency=medium Bugfixes: * When source package contains things called .git (even files, and even in subdirectories), remove them. Closes:#793671. * Work around curl -sS -I printing `HTTP/1.0 200 Connection established' before the actual header, so dgit works with https_proxy set (!) * --new is needed for read access to packages in NEW, too. Document this, and make it work properly. * Work around #793471 (madness with $SIG{__WARN__} and Perl's system builtin): move $SIG{} setting into setup_sigwarn in Dgit.pm, and check getppid. * When invoking git-buildpackage via dgit gbp-build, consider our command line arguments when massaging the dpkg-buildpackage arguments, so that we don't end up giving dpkg-buildpackage contradictory instructions. * Cope with new git-buildpackage which provides gbp, rather than the eponymous command, on PATH. Configurability: * Honour dgit-distros.DISTRO.cmd-CMD and .opts-CMD. Closes:#793427. * Make configuration able to prevent dpkg-mergechangelogs setup. * Provide dgit setup-new-tree (like dpkg-setup-mergechangelogs but only does it if not disabled in config). * Set up git user.email and user.name from distro access config or DEBEMAIL/DEBFULLNAME. Closes:#793410. * When key to use not specified any other way, use the debian/changelog trailer line. Closes:#793423. * Honour --git= (mostly). Documentation: * Fix some manpage typos. [ Richard Hartmann ] * Manpage said that --clean=check was -wn but that is --clean=none; correctly document that --clean=check is actually -wc. * Document that up to -DDDD (not just -DD) is meaningfully different. * Document that -cname=value applies only for this run. * Improve manpage comment about defining a new distro. * Document that --quilt=linear is the default for Debian. * Fix a formatting problem in --build-products-dir= doc. * In manpage, do not seem to imply that NMU should be of only one new commit. * Qualify to Debian the manpage comment about how to do NMU. * In discussion on how to start using dgit when already using git, do not imply/assume that existing git history will have identical trees to dgit history. * Remove stray sentence in config section of manpage. * Manpage: Clarify wording of readonly config. * Manpage: Better cross-references for -k and keyid. * dgit(7): No longer say that dgit-repos lives on Alioth. Improvements: * Introduce more sophisticated protocol negotiation for rpush. * Do not quote `:' in shellquote. * Print a supplementary message when push fails, giving advice to the user about how to retry. Closes:#793144. * Slurp in entire git config, for better performance. * Rename `git-build' operation to `gbp-build' to make it clearer what it's for. Keep the old name as an alias. * Show `dgit sbuild' in usage message. * When we are using dpkg-buildpackage to clean before using it to also do the build, let it do its cleaning thing as part of its run, rather than running it twice. When we are _not_ supposed to be using dpkg-buildpackage to clean, but we are running it to do the build, pass -nc. Closes:#793060. * Also suppress spurious runs of the clean target when building using git-buildpackage. * When exec fails, always print the program name in the error message. Infrastructure: * Infrastructure: Get mirroring right for fresh repos of existing packages (!) Packaging, cleanups, debugging and test suite: * Fix Vcs-Git and Vcs-Browse to refer to chiark. (The dgit-repos on alioth aren't suitable right now because the master there can currently only be updated with an actual upload, ie dgit push.) * Make warnings fatal in dpkg-repos-admin-debian, dgit-ssh-dispatch (using setup_sigwarn). * Make warnings fatal in tstunt/dpkg-parsechangelog (directly). * Test suite: Honour DGIT_TEST_DEBUG=''. * With -DDDD, print out all gitcfg references (copious!) * Fix a debug message in the obsolete sshpsql archive access driver. * Test suite: More automatic enumeration of tests. * Test suite: Provide tests which check that all our various build operations run the right targets as expected (ie, that we are massaging the arguments to dpkg-buildpackage, and suppressing our clean target, etc., correctly). -- Ian Jackson Mon, 27 Jul 2015 16:34:31 +0100 dgit (1.0) unstable; urgency=medium Improvements: * Switch to new production git repositories for reading. (this can no longer divert to alioth). Public readonly access now works. Closes:#791447. * Memoise git config lookups (big speedup!) * Provide -wdd aka --clean=dpkg-source-d. Closes:#792433. * Provide -wc aka --clean=check. Manpage updates: * Remove some obsolete caveats from BUGS. * Reorganise and complete the configuration section. * Remove obselete comment about DMs not being able to push. We have, for now, a way to add keys manually. Closes:#720173. Access machinery: * Remove configuration relating to alioth. * Provide for different access mechanisms when pushing. * Provide for configurable git url suffix. * Allow git-url to be '' to force fallback to git-proto etc. * Provide for checking git presence via http[s]. * Do some quoting on debug output (needed if the server might not be trustworthy and might send us bad stuff). * Talk to push.dgit.debian.org, rather than the .debian.net alias. Infrastructure: * Provide for mirroring git updates to a different server. * Provide cgit-regen-config command for cgi-grnet-01. * Make dgit-ssh-dispatch not spew (harmless) warnings if caller tries for a shell session (ie SSH_ORIGINAL_COMMAND not set). Cleanups: * Remove an obsolete comment from the code. * Improve an error message from dgit-repos-policy-debian. * Test suite: Break out t-make-hook-link. * Fix a manpage typo. -- Ian Jackson Sun, 19 Jul 2015 22:15:53 +0100 dgit (0.30) unstable; urgency=high INCOMPATIBLE CHANGES: * Client uses new infrastructure: - Check for new dgit git service on dgit-git.debian.net (ie gideon.debian.org), with transition plan based on diversion feature. Closes:#720172. - Old versions of dgit will stop working when the server-side handle is pulled. * dgit git trees no longer contain .pc for format `3.0 (quilt)' source packages. Closes:#764606. - It is deleted whenever we find it. - Older versions of dgit will choke on trees without .pc. - (When doing quilt fixup, we recreate a suitable .pc in a temporary directory so that we can do dpkg-source --comit.) * All users are urged to upgrade ASAP. Other significant improvements: * When generating quilt patches, try to linearise the git history into a series of individual new patches for debian/patches. Closes:#770710. * When receiving a push with dgit-repos-server, update the server's refs/heads/master if we are pushing to what the distro regards as a relevant branch, and the push would ff master. Closes:#728209. * For non-Debian distros, distro version release tags contain distro name a la DEP-14 (rather than hardcoding `debian/'). * Set up a merge driver for debian/changelog. Closes:#769291. * --clean=git and --clean=none cause dgit to pass -nc to dpkg-buildpackage, suppressing calls to the package's clean target. Also, expand the documentation in this area slightly. Closes:#768590. * Provide --clean=git-ff (aka -wgf), which is useful for dgit itself (!) Minor improvements: * Reduce some noise output and improve the clarity of some messages. * Be more careful about tag updates during fetch: only update tags referring to uploads to distro we are trying to fetch from. * Change realpath dependency to `coreutils (>= 8.23-1~) | realpath' (Closes:#786955.) Bugfixes: * Fix handling of rmadison-based and gitless distros (e.g., Ubuntu). * Add missing `gpgv' to test dependencies in debian/tests/control. * Strip `-b ' from contents of Vcs-Git header, when setting up the vcs-git remote. Closes:#759374. * Do not offer wget as an alternative dependency to curl. We always unconditionally invoke curl and have no code to use wget. Closes:#760805. * Complain about lack of cuddled values for value-taking single-letter options, rather than thinking the user meat an empty value. Closes:#763332. * Reject (rather than ignoring) further options merged witth -wn, -wg, -wd. * Fix inaccurate error message when archive's git hash is not an ancestor of git repo's git hash. * Detect and bomb out on vendor-specific `3.0 (quilt)' patch series. * Fix the rules clean target to remove test results and output. Documentation improvements: * Break out dgit(7) from dgit(1). * Provide example workflow for dgit rpush. Closes:#763334. (Also part of the fix for #768470.) * Document that dgit repos are cloneable with git, in dgit(1) section MODEL. [Andreas Barth.] Closes:#768470. * Better documentation for quilt series handling. * Document under `dgit push' that it is best to build with dgit too. Closes:#763333. * Other minor clarifications and improvements. Behind-the-scenes work: * Use ftpmasterapi archive query method. (Closes:#727702. Also partly obsoletes #768470.) * New dgit-infrastructure binary package containing dgit-repos-server et al. Client users probably don't want this stuff. Also, it provides a convenient way to publish the dependencies. * Many many bugfixes to the server side (dpkg-repos-server et al.). * Add :..; prefix to ssh remote commands, for the benefit of future forced command wrappers. Implicitly, this defines a new ssh-based command protocol. Closes:#720174, #720175. * Distro access configuration handling changes (should not be noticeable to most users). * In places, significant restructuring or tidying up. * Turn all perl warnings into errors using $SIG{__WARN__}. -- Ian Jackson Sun, 05 Jul 2015 01:34:55 +0100 dgit (0.22.1) unstable; urgency=high * Use Dpkg::Version::version_compare everywhere, not Dpkg::Version::version_compare_string. The latter is entirely wrong, meaning that dgit would get many version comparisons wrong. Closes:#768038. -- Ian Jackson Tue, 04 Nov 2014 12:46:40 +0000 dgit (0.22) unstable; urgency=medium Bugfixes: * Clone removes destination directory on error. Closes:#736153. * Work with wheezy-backports (and keep squeeze-backports working too). Closes:#736524. * Work in read-only no-git-history mode with Ubuntu. You still have to pass -dubuntu. Closes:#751781. * Use mirror.ftp-master.debian.org DNS alias rather than coccia. Closes:#752602. * Check hashes of files ourselves rather than running dget to re-retreive the .dsc. * Check SHA-256 of .dsc against hash from archive_query (ie projectb) rather than letting dpkg-source do a signature verification. Closes:#737619. Closes:#737625. * Treat .dsc as bytes, just like everything else, rather than letting HTTP::Message convert it to a Perl unicode string which the rest of the program mishandles. Closes:#738536. Minor improvements: * Include canonicalised suite name in signed tag message. * Mention cross-version dgit rpush incompatibility in manpage. * Check for rpush protocol version incompatibility and crash early if incompatible. * New script tests/using-intree for running tests on the source tree. * Do not spew diff output to terminal (by default). Print sensible message instead. Closes:#736526. * Print better message for lack of configuration settings. * Document that dgit rpush needs gnupg and your public key on the build host. Closes:#736529. * Fix a manpage reference to `--dget=' where `--dgit=' was intended. * Provide t-archive-process-incoming and t-archive-query subroutines for regression test scripts to use. * Print better message for unknown operations. * Provide `dgit clean'. Closes:#736527. * When cloning, set up a remote `vcs-git' from the package's Vcs-Git (and put an appropriate caveat in the manpage). Closes:#740687. Closes:#740721. * Improve error message for .dsc having already been signed (iff using libdpkg-perl 1.17.x). Closes:#731635. * Improve error message for .dsc parsing failures more generally. * Better reporting of child exit statuses (esp. deaths due to signals). * In rpush, on protocol error talking to build host, check if the subprocess died and report differently if so. Closes:#736528. * Fixed a manpage typo. * When tests invoke dgit, use --dgit= so that subprocesses use our dgit rather than system one. * Add a test for dgit rpush. Major new feature, currently stalled awaiting server infrastructure: * dgit-repos-server: New program for receiving signed-tag-based pushes. Corresponding support in dgit itself, but not currently used by default for any distro. * Bring forward push of the version tag ref so it happens alongside the push of the suite branch ref. * New git-check and git-create methods "true" which are no-ops. * test-dummy-drs `distro': for testing dgit and dgit-repos-server. -- Ian Jackson Tue, 19 Aug 2014 11:24:02 +0100 dgit (0.21) unstable; urgency=medium Bugfixes relating to unclean trees: * Run a clean (of the specified type) before any build operation; do this with `dpkg-buildpackage -T' clean if necessary, so -wd now works with all the building methods. * Refuse to do quilt fixup (explicitly requested, or as a result of build) if the tree contains ignored files. Closes:#731632. Error message improvements: * Use failedcmd to report errors when ssh psql fails. Closes:#734281. * failedcmd prints $us, not $_[0] - ie, dgit doesn't pretend, in the error message, to be its child. * Do not report the (irrelevant) $? when madison parsing fails. Better workflow flexibility: * Provide --build-products-dir option (and corresponding semantics for -C) to specify where to find the files to upload. Closes:#731633. Support for Debian backports suites: * New quirks infrastructure in configuration and internals, for suites (or perhaps distros) which are a bit like others. * Use correct default archive location. * Compute "-v" option default value correctly. * Closes:#733954. Packaging improvement: * Add `Testsuite: autopkgtest' to debian/control. (This will only have the right effect with recent enought dpkg; it will generate a harmless warning with earlier versions of dpkg.) -- Ian Jackson Sun, 19 Jan 2014 02:14:25 +0000 dgit (0.20) unstable; urgency=high * Use newest (not oldest) version currently in suite when calculating what value to use for -v by default. Closes:#732781. -- Ian Jackson Sat, 21 Dec 2013 19:13:56 +0000 dgit (0.19) unstable; urgency=low Testing facilities: * Provide "test-dummy" distro with "dummycat" access method. * Provide a selection of autopkgtest (DEP-8) tests. -- Ian Jackson Wed, 27 Nov 2013 18:27:17 +0000 dgit (0.18.2) unstable; urgency=high Bump archive upload urgency to high. -- Ian Jackson Sun, 24 Nov 2013 17:42:57 +0000 dgit (0.18.1) unstable; urgency=low Bugfixes: * sshpsql archive query method passes LANG=C. Closes:#729788. * Subcommand program or argument options containing hyphens work. (Eg, --dpkg-buildpackage:blah was previously incorrectly rejected.) Packaging fixes: * Depend on dput. * Depend on curl | wget, as dget needs one of those. (The dput package, which contains dget, doesn't require them because dput itself works without.) -- Ian Jackson Sun, 24 Nov 2013 17:36:03 +0000 dgit (0.18) unstable; urgency=low Major new feature: * Remote push (dgit rpush), a la debsign -r. Closes:#721185. Improved behaviours: * dgit build, by default, uses the archive to find out what the correct -v option is to pass to dpkg-genchanges. Closes:#727200. * Abolish the sshdakls method and replace it with sshpsql: that is, ssh (to coccia, by default) and run sql commands on the ftpmaster database. This is faster and has fewer bugs but is vulnerable to db schema changes. Closes:#726955. Closes:#720170. Closes:#720176. * When generating git tags, quote the (uncanonicalised) changelog's Distribution field as the suite. * Command execution reports from --dry-run go to stderr. Other new features: * Support --gpg=... to provide a replacement command for gpg. * Support --ssh=... and --ssh:... to affect how we run ssh. Bugfixes: * When using sbuild, pass the arguments to mergechanges in the right order so that we use the correct Description (the _source one, not the one from sbuild which didn't get e.g. -v). * push actually takes an optional suite, like it says in the synopsis. Closes:#727125. * Fix dgit --damp-run sbuild to actually work. * Fix the "shellquote" internal subroutine. The bugs in it ought not to have caused any real trouble in previous versions of dgit. Documentation and message fixes: * manpage: Clarify comments about orig tarballs. Closes: #723605. * manpage: Remove comment in BUGS about lack of policy docs for Dgit field, which is specified now. Closes:#720201. * manpage: Make discussion of --existing-package less scary. The default archive access method no longer needs it. Closes:#720171. * Mention "git merge", not "git-merge", in helpful message. Closes:#725632. Internal and debugging improvements: * Report chdir actions in debugging output. * Improvements to implementation of --dry-run and --damp-run. * Some code motion and cleanups. Note: changelog entries for the following versions, which were uploaded to Debian experimental, have been collapsed into this single entry: 0.18~experimental2 0.18~experimental1 0.17~experimental7 0.17~experimental6 0.17~experimental5 0.17~experimental4 0.17~experimental3 0.17~experimental2 0.17~experimental1 0.16~experimental3 0.16~experimental2 0.16~experimental1 We do describe here all the changes since 0.17. -- Ian Jackson Sat, 09 Nov 2013 10:12:13 +0000 dgit (0.17) unstable; urgency=high * Do not grobble around in .git/refs/; instead, use git-show-ref. This avoids breaking when git makes packed refs. Closes:728893. * Clarify error message for missing refs/remotes/dgit/dgit/. -- Ian Jackson Thu, 07 Nov 2013 00:02:47 +0000 dgit (0.16) unstable; urgency=high * Format `(3.0) quilt' fixup does not mind extraneous other files in the build tree (e.g., build products and logs). Closes: #727053. * Set autoflush on stdout, to get better ordering of debugging etc. output when stdout is redirected. * New --damp-run mode, for more convenient and fuller testing etc. -- Ian Jackson Tue, 22 Oct 2013 13:06:54 +0100 dgit (0.15) unstable; urgency=low * Better handling of packages pushed using dgit and stuck in NEW. (And, use of `--new' is not needed with fetch.) Closes: #722199. * More comprehensive warnings in many cases of archive skew. * Implement `dgit help' as well as `--help'. Closes: #721661. * Provide `dgit version' and `--version'. Closes: #721654. -- Ian Jackson Thu, 12 Sep 2013 00:14:05 +0100 dgit (0.14) unstable; urgency=low * Include package name in tag message. * Create directory .git/dgit when needed during build. Closes: #721428. * Add Vcs-Git and Vcs-Browser [Richard Hartmann]. Closes: #721404. These fields refer to the development branch, "master", on alioth, not to the dgit suite refs (which are not accessible to git clone). -- Ian Jackson Sun, 01 Sep 2013 18:30:44 +0100 dgit (0.13) unstable; urgency=low * Reuse already-downloaded .orig files after checking their hashes. Closes: #720526. (This introduces a dependency on Digest::SHA.) * Do not always pointlessly fetch the .dsc twice. (That code was erroneously duplicated during editing, apparently.) * Remove DGET_UNPACK from the environment in case the user has set it. * Remove scary warning from Description. * When uploading to Debian, tell dput to upload to "ftp-master". This avoids problems with derivatives whose dput has a different default. Closes: #720958. * Fix some bugs in dgit fetch --dry-run which made dgit push --dry-run often not work at all. * Update the local tracking branch for the dgit remote, when pushing. Closes: #720956. * Fix references in manpage to old Vcs-Dgit-Master field name. * Reorganise manpage sections to be in a more conventional order. * New manpage section on FILES IN THE SOURCE PACKAGE BUT NOT IN GIT. Closes: #721186. -- Ian Jackson Thu, 29 Aug 2013 00:27:23 +0100 dgit (0.12) unstable; urgency=low * Cope with packages with epoch. Closes: #720897. * Improve error message for non-fast-forward push. Closes: #720896. * New --ignore-dirty option to skip noncritical check. Closes: #720895. * New --no-quilt-fixup option to suppress quilt fixup. RTFM. * Add Closes line for #720595 to changelog entry for 0.11. -- Ian Jackson Mon, 26 Aug 2013 16:50:39 +0100 dgit (0.11) unstable; urgency=low * Location of dgit-repos is now git.debian.org:/git/dgit-repos/repos. Closes: #720525. The rename on the server side will break older versions of dgit. * Fix bug which would make quilt patch fixup fail if git status produced "M" lines. * Autogenerated quilt patch fixup patch Description contains several recent git commits, rather than implying that the patch corresponds exactly to the top git commit. * Use "ftp.debian.org" not "http.debian.net" as the default Debian archive. (http.debian.net tends to defeat certain kinds of cacheing, and can also have more skew.) * dgit build uses dpkg-buildpackage; there is a dgit git-build for using git-buildpackage. Closes: #720595. * Better error message for use of UNRELEASED suite. Closes: #720523. * Do not canonicalise suite more than once. Related to: #720526. * Fix a badly open-coded copy of check_not_dirty. Closes: #720524. * Fix some bugs in building (eg build-source would fail to do the quilt fixup; the --clean check in build was wrong). * Add missing dependency on realpath. * git-build (git-buildpackage wrapper) does not bother canonicalising the suite if --git-ignore-branch is used. -- Ian Jackson Sun, 25 Aug 2013 17:00:43 +0100 dgit (0.10) unstable; urgency=low * Create .pc/applied-patches - do not empty it (!) -- Ian Jackson Sun, 25 Aug 2013 00:51:50 +0100 dgit (0.9) unstable; urgency=low * New cleaning arrangements. * More comprehensive workaround for `3.0 (quilt)'. * In push, double-check the .changes against the changelog. * Better error when source package contains .git. Closes: #720555. * Change our .dsc field name to `Dgit'. Relevant to #720201. * Fix bug handling our synthetic merges when we see them in the remote suite branch. * `3.0 (quilt)' fixup creates .pc/applied-patches since modern dpkg-source creates it even though old ones didn't always. -- Ian Jackson Sat, 24 Aug 2013 18:49:02 +0100 dgit (0.8) unstable; urgency=low * Fix comparison of archive's .dsc's hash and git branch head to DTRT. * When creating repos in dgit-repos (using the ssh-cmd method), copy _template rather than using mkdir and git init. Closes: #720522. * In push, do git fetch as well as archive fetch, or archive fetch can fail. -- Ian Jackson Fri, 23 Aug 2013 12:24:09 +0100 dgit (0.7) unstable; urgency=low * If dak ls, or rmadison, reports multiple versions, look for them all, and pick the newest .dsc that doesn't give 404. * Manpage formatting fix. * Name the local remote tracking branch remotes/dgit/dgit/ so that we avoid a warning from git about ambiguous branch names. -- Ian Jackson Thu, 22 Aug 2013 18:29:10 +0100 dgit (0.6) unstable; urgency=low * Allow fetching when archive has out-of-date git hash in .dsc. Closes: #720490. -- Ian Jackson Thu, 22 Aug 2013 16:02:10 +0100 dgit (0.5) unstable; urgency=low * Upload to unstable, as this version mostly works. (All the RC bugs of which I'm aware are now properly represented in the BTS.) -- Ian Jackson Thu, 22 Aug 2013 15:38:00 +0100 dgit (0.4~pre2) experimental; urgency=low * Mangle debian/ tags the way git-buildpackage does (as of git-buildpackage 0.5.5, 3c6bbd0f4992f8da). * Support dgit-distro..keyid config option. * Revert change to ssh to alioth CNAME, as the recommended CNAME is to something with no write access to the fs and the new CNAME has not yet been set up. This reintroduces #720172 :-/. -- Ian Jackson Thu, 22 Aug 2013 15:31:17 +0100 dgit (0.4~pre1) experimental; urgency=low * Use dgit.debian.net vhost on alioth. Closes:#720172. * Usage message. Closes:#720085. * Provide "dgit sbuild". * Assorted manpage fixes and improvements. * Fail if a required config item is missing. * Much better error messages. * Better error checking when parsing RFC822-style control data. * Better checking that the supplied .dsc and debian/changes correspond. * Ordering improvement in push: don't add dsc field until git push done. * New --distro option (helps with unknown suites). * Bugfixes. -- Ian Jackson Thu, 22 Aug 2013 13:36:44 +0100 dgit (0.3) experimental; urgency=low * New version which appears to be able to sort of work at least some of the time. -- Ian Jackson Sat, 17 Aug 2013 09:18:04 +0100 dgit (0.2) experimental; urgency=low * New version which might actually work but probably won't. -- Ian Jackson Fri, 16 Aug 2013 16:52:17 +0100 dgit (0.1) experimental; urgency=low * Initial experimental (partial) version. -- Ian Jackson Thu, 15 Aug 2013 12:09:01 +0100 dgit/debian/tests/0000775000000000000000000000000012564123000011252 5ustar dgit/debian/tests/control.in0000664000000000000000000000011412564114317013271 0ustar Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts dgit/debian/tests/control0000664000000000000000000000170512564123000012660 0ustar Tests: build-modes-gbp Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts, git-buildpackage Tests: build-modes-sbuild Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts, sbuild Restrictions: x-dgit-schroot-build Tests: dsd-clone-drs Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts Restrictions: x-dgit-intree-only x-dgit-git-only Tests: mirror mirror-debnewgit mirror-private Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts, rsync Tests: build-modes clone-gitnosuite clone-nogit debpolicy-dbretry debpolicy-newreject distropatches-reject drs-clone-nogit drs-push-masterupdate drs-push-rejects dsd-clone-nogit dsd-divert fetch-localgitonly fetch-somegit-notlast push-buildproductsdir push-newpackage push-nextdgit quilt rpush tag-updates test-list-uptodate trustingpolicy-replay Tests-Directory: tests/tests Depends: dgit, dgit-infrastructure, devscripts dgit/debian/control0000664000000000000000000000242312564114317011527 0ustar Source: dgit Section: devel Priority: optional Maintainer: Ian Jackson Standards-Version: 3.9.4.0 Build-Depends: debhelper (>= 9) Testsuite: autopkgtest Vcs-Git: git://git.chiark.greenend.org.uk/~ianmdlvl/dgit.git Vcs-Browser: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git/dgit.git/ Package: dgit Depends: perl, libwww-perl, libdpkg-perl, git-core, devscripts, dpkg-dev, ${misc:Depends}, coreutils (>= 8.23-1~) | realpath, libdigest-sha-perl, dput, curl, libjson-perl, ca-certificates Recommends: ssh-client Suggests: sbuild Architecture: all Description: git interoperability with the Debian archive dgit (with the associated infrastructure) makes it possible to treat the Debian archive as a git repository. . dgit push constructs uploads from git commits . dgit clone and dgit fetch construct git commits from uploads. Package: dgit-infrastructure Depends: ${misc:Depends}, perl, git-core, dgit, gpgv, chiark-utils-bin, libjson-perl, libdigest-sha-perl, libdbd-sqlite3-perl, sqlite3 Architecture: all Priority: extra Description: dgit server backend infrastructure This package contains tools which are useful for setting up a dgit git repository server. You probably want dgit, the client package. dgit/debian/rules0000775000000000000000000000252612564114317011210 0ustar #!/usr/bin/make -f # dgit # Integration between git and Debian-style archives # # Copyright (C)2013-2015 Ian Jackson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . export prefix=/usr %: dh $@ override_dh_gencontrol: dh_gencontrol set -e; \ cd debian/dgit; \ v=$$(perl -ne 'print if s/^version:\s+//i' DEBIAN/control); \ perl -i -pe "s/UNRELEASED/$$v/g if m/###substituted###/" usr/bin/dgit override_dh_auto_install: make install prefix=/usr DESTDIR=debian/dgit make install-infra prefix=/usr DESTDIR=debian/dgit-infrastructure debian/tests/control: tests/enumerate-tests debian/tests/control.in $< gencontrol >$@.new && mv -f $@.new $@ debian/tests/control: tests/lib-core tests/lib-restricts debian/tests/control: tests/tests $(wildcard tests/tests/*[^~#]) dgit/debian/compat0000664000000000000000000000000212521374563011325 0ustar 9 dgit/Makefile0000664000000000000000000000452012550214313010332 0ustar # dgit # Integration between git and Debian-style archives # # Copyright (C)2013-2015 Ian Jackson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . INSTALL=install INSTALL_DIR=$(INSTALL) -d INSTALL_PROGRAM=$(INSTALL) -m 755 INSTALL_DATA=$(INSTALL) -m 644 prefix?=/usr/local bindir=$(prefix)/bin mandir=$(prefix)/share/man perldir=$(prefix)/share/perl5 man1dir=$(mandir)/man1 man7dir=$(mandir)/man7 infraexamplesdir=$(prefix)/share/doc/dgit-infrastructure/examples PROGRAMS=dgit MAN1PAGES=dgit.1 MAN7PAGES=dgit.7 PERLMODULES=Debian/Dgit.pm INFRA_PROGRAMS=dgit-repos-server dgit-ssh-dispatch \ dgit-repos-policy-debian dgit-repos-admin-debian \ dgit-repos-policy-trusting dgit-mirror-rsync INFRA_EXAMPLES=get-dm-txt ssh-wrap drs-cron-wrap get-suites INFRA_PERLMODULES=Debian/Dgit/Policy/Debian.pm all: install: installdirs $(INSTALL_PROGRAM) $(PROGRAMS) $(DESTDIR)$(bindir) $(INSTALL_DATA) $(MAN1PAGES) $(DESTDIR)$(man1dir) $(INSTALL_DATA) $(MAN7PAGES) $(DESTDIR)$(man7dir) set -e; for m in $(PERLMODULES); do \ $(INSTALL_DATA) $$m $(DESTDIR)$(perldir)/$${m%/*}; \ done installdirs: $(INSTALL_DIR) $(DESTDIR)$(bindir) \ $(DESTDIR)$(man1dir) $(DESTDIR)$(man7dir) \ $(addprefix $(DESTDIR)$(perldir)/, $(dir $(PERLMODULES))) install-infra: installdirs-infra $(INSTALL_PROGRAM) $(addprefix infra/, $(INFRA_PROGRAMS)) \ $(DESTDIR)$(bindir) $(INSTALL_PROGRAM) $(addprefix infra/, $(INFRA_EXAMPLES)) \ $(DESTDIR)$(infraexamplesdir) set -e; for m in $(INFRA_PERLMODULES); do \ $(INSTALL_DATA) $$m $(DESTDIR)$(perldir)/$${m%/*}; \ done installdirs-infra: $(INSTALL_DIR) $(DESTDIR)$(bindir) $(DESTDIR)$(infraexamplesdir) \ $(addprefix $(DESTDIR)$(perldir)/, $(dir $(INFRA_PERLMODULES))) check installcheck: clean distclean mostlyclean maintainer-clean: rm -rf tests/tmp dgit/dgit.70000664000000000000000000002213012564646077007733 0ustar .TH dgit 7 "" "Debian Project" "dgit" .SH NAME dgit \- principles of operation .SH SUMMARY .B dgit treats the Debian archive as a version control system, and bidirectionally gateways between the archive and git. The git view of the package can contain the usual upstream git history, and will be augmented by commits representing uploads done by other developers not using dgit. This git history is stored in a canonical location known as .B dgit-repos which lives on a dedicated git server. .SH MODEL You may use any suitable git workflow with dgit, provided you satisfy dgit's requirements: dgit maintains a pseudo-remote called .BR dgit , with one branch per suite. This remote cannot be used with plain git. The .B dgit-repos repository for each package contains one ref per suite named \fBrefs/dgit/\fR\fIsuite\fR. These should be pushed to only by dgit. They are fast forwarding. Each push on this branch corresponds to an upload (or attempted upload). However, it is perfectly fine to have other branches in dgit-repos; normally the dgit-repos repo for the package will be accessible via the remote name `origin'. dgit push will also make signed tags called .BI debian/ version (a la DEP-14) and push them to dgit-repos. These are used at the server to authenticate pushes. dgit push can operate on any commit which is a descendant of the current dgit/suite tip in dgit-repos. Uploads made by dgit contain an additional field .B Dgit in the source package .dsc. (This is added by dgit push.) This specifies a commit (an ancestor of the dgit/suite branch) whose tree is identical to the unpacked source upload. Uploads not made by dgit are represented in git by commits which are synthesised by dgit. The tree of each such commit corresponds to the unpacked source; there is an origin commit with the contents, and a psuedo-merge from last known upload - that is, from the contents of the dgit/suite branch. dgit expects repos that it works with to have a .B dgit remote. This refers to the well-known dgit-repos location (on a dedicated Debian VM). dgit fetch updates the remote tracking branch for dgit/suite. dgit does not (currently) represent the orig tarball(s) in git. The orig tarballs are downloaded (by dgit clone) into the parent directory, as with a traditional (non-gitish) dpkg-source workflow. You need to retain these tarballs in the parent directory for dgit build and dgit push. dgit repositories could be cloned with standard (git) methods. The only exception is that for sourceful builds / uploads the orig tarball(s) need to be present in the parent directory. To a user looking at the archive, changes pushed using dgit look like changes made in an NMU: in a `3.0 (quilt)' package the delta from the previous upload is recorded in a new patch constructed by dpkg-source. .SH READ-ONLY DISTROS Distros which do not maintain a set of dgit history git repositories can still be used in a read-only mode with dgit. Currently Ubuntu is configured this way. .SH PACKAGE SOURCE FORMATS If you are not the maintainer, you do not need to worry about the source format of the package. You can just make changes as you like in git. If the package is a `3.0 (quilt)' package, the patch stack will usually not be represented in the git history. .SH FORMAT 3.0 (QUILT) For a format `3.0 (quilt)' source package, dgit may have to make a commit on your current branch to contain metadata used by quilt and dpkg-source. This is because `3.0 (quilt)' source format represents the patch stack as files in debian/patches/ actually inside the source tree. This means that, taking the whole tree (as seen by git or ls) (i) dpkg-source cannot represent certain trees, and (ii) packing up a tree in `3.0 (quilt)' and then unpacking it does not always yield the same tree. dgit will automatically work around this for you when building and pushing. The only thing you need to know is that dgit build, sbuild, etc., may make new commits on your HEAD. If you're not a quilt user this commit won't contain any changes to files you care about. You can explicitly request that dgit do just this fixup, by running dgit quilt-fixup. If you are a quilt user you need to know that dgit's git trees are `patches applied packaging branches' and do not contain the .pc directory (which is used by quilt to record which patches are applied). If you want to manipulate the patch stack you probably want to be looking at tools like git-dpm. .SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - AUTOTOOLS ETC. This section is mainly of interest to maintainers who want to use dgit with their existing git history for the Debian package. Some developers like to have an extra-clean git tree which lacks files which are normally found in source tarballs and therefore in Debian source packages. For example, it is conventional to ship ./configure in the source tarball, but some people prefer not to have it present in the git view of their project. dgit requires that the source package unpacks to exactly the same files as are in the git commit on which dgit push operates. So if you just try to dgit push directly from one of these extra-clean git branches, it will fail. As the maintainer you therefore have the following options: .TP \(bu Persuade upstream that the source code in their git history and the source they ship as tarballs should be identical. Of course simply removing the files from the tarball may make the tarball hard for people to use. .IP One answer is to commit the (maybe autogenerated) files, perhaps with some simple automation to deal with conflicts and spurious changes. This has the advantage that someone who clones the git repository finds the program just as easy to build as someone who uses the tarball. .TP \(bu Have separate git branches which do contain the extra files, and after regenerating the extra files (whenever you would have to anyway), commit the result onto those branches. .TP \(bu Provide source packages which lack the files you don't want in git, and arrange for your package build to create them as needed. This may mean not using upstream source tarballs and makes the Debian source package less useful for people without Debian build infrastructure. .LP Of course it may also be that the differences are due to build system bugs, which cause unintended files to end up in the source package. dgit will notice this and complain. You may have to fix these bugs before you can unify your existing git history with dgit's. .LP .SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - DOCS, BINARIES ETC. Some upstream tarballs contain build artifacts which upstream expects some users not to want to rebuild (or indeed to find hard to rebuild), but which in Debian we always rebuild. .LP Examples sometimes include crossbuild firmware binaries and documentation. To avoid problems when building updated source packages (in particular, to avoid trying to represent as changes in the source package uninteresting or perhaps unrepresentable changes to such files) many maintainers arrange for the package clean target to delete these files. .LP dpkg-source does not (with any of the commonly used source formats) represent deletion of files (outside debian/) present in upstream. Thus deleting such files in a dpkg-source working tree does not actually result in them being deleted from the source package. Thus deleting the files in rules clean sweeps this problem under the rug. .LP However, git does always properly record file deletion. Since dgit's principle is that the dgit git tree is the same of dpkg-source -x, that means that a dgit-compatible git tree always contains these files. .LP For the non-maintainer, this can be observed in the following suboptimal occurrences: .TP \(bu The package clean target often deletes these files, making the git tree dirty trying to build the source package, etc. This can be fixed by using .BR "dgit -wg" " aka " "--clean=git" , so that the package clean target is never run. .TP \(bu The package build modifies these files, so that builds make the git tree dirty. This can be worked around by using `git reset --hard' after each build (or at least before each commit or push). .LP From the maintainer's point of view, the main consequence is that to make a dgit-compatible git branch it is necessary to commit these files to git. The maintainer has a few additional options for mitigation: for example, it may be possible for the rules file to arrange to do the build in a temporary area, which avoids updating the troublesome files; they can then be left in the git tree without seeing trouble. .SH PROBLEMS WITH PACKAGE CLEAN TARGETS ETC. A related problem is other unexpected behaviour by a package's .B clean target. If a package's rules modify files which are distributed in the package, or simply forget to remove certain files, dgit will complain that the tree is dirty. .LP Again, the solution is to use .BR "dgit -wg" " aka " "--clean=git" , which instructs dgit to use git clean instead of the package's build target, along with perhaps .B git reset --hard before each build. .LP This is 100% reliable, but has the downside that if you forget to git add or to commit, and then use .BR "dgit -wg" " or " "git reset --hard" , your changes may be lost. .SH SEE ALSO \fBdgit\fP(1). dgit/dgit.10000664000000000000000000007031612564114317007721 0ustar .TH dgit 1 "" "Debian Project" "dgit" .SH NAME dgit \- git integration with the Debian archive . .SH SYNOPSIS .B dgit [\fIdgit\-opts\fP] \fBclone\fP [\fIdgit\-opts\fP] \fIpackage\fP [\fIsuite\fP] [\fB./\fP\fIdir|\fB/\fP\fIdir\fR] .br .B dgit [\fIdgit\-opts\fP] \fBfetch\fP|\fBpull\fP [\fIdgit\-opts\fP] [\fIsuite\fP] .br .B dgit [\fIdgit\-opts\fP] \fBbuild\fP|\fBsbuild\fP|\fBbuild-source\fP [\fIbuild\-opts\fp] .br .B dgit [\fIdgit\-opts\fP] \fBpush\fP [\fIdgit\-opts\fP] [\fIsuite\fP] .br .B dgit [\fIdgit\-opts\fP] \fBrpush\fR \fIbuild-host\fR\fB:\fR\fIbuild-dir\fR [\fIpush args...\fR] .br .B dgit [\fIdgit\-opts\fP] \fIaction\fR ... .SH DESCRIPTION .B dgit allows you to treat the Debian archive as if it were a git repository. See \fBdgit\fP(7) for detailed information about the data model, common problems likely to arise with certain kinds of package, etc. The usual workflow is: .br 1. \fBdgit clone\fR or \fBfetch\fR; .br 2. make, do dev tests, and commit changes in git as desired; .br 3. build packages for upload, using e.g. \fBdgit sbuild\fR .br 4. do pre-upload tests of the proposed upload; .br 5. \fBdgit push\fR. .SH OPERATIONS .TP \fBdgit clone\fR \fIpackage\fP [\fIsuite\fP] [\fB./\fP\fIdir|\fB/\fP\fIdir\fR] Consults the archive and dgit-repos to construct the git view of history for .I package in .I suite .RB ( sid by default) in a new directory (named .BI ./ package by default); also, downloads any necessary orig tarballs. The suite's git tip is left on the local branch .BI dgit/ suite ready for work, and on the corresponding dgit remote tracking branch. The .B origin remote will be set up to point to the package's dgit-repos tree for the distro to which .I suite belongs. For your convenience, the .B vcs-git remote will be set up from the package's Vcs-Git field, if there is one - but note that in the general case the history found there may be different to or even disjoint from dgit's view. .TP \fBdgit fetch\fR [\fIsuite\fP] Consults the archive and git-repos to update the git view of history for a specific suite (and downloads any necessary orig tarballs), and updates the remote tracking branch .BR remotes/dgit/dgit/ \fIsuite\fR. If the current branch is .BI dgit/ suite then dgit fetch defaults to .IR suite ; otherwise it parses debian/changelog and uses the suite specified there. .TP \fBdgit pull\fR [\fIsuite\fP] Does dgit fetch, and then merges the new head of the remote tracking branch .BI remotes/dgit/dgit/ suite into the current branch. .TP \fBdgit build\fR ... Runs .B dpkg-buildpackage with some suitable options. Options and arguments after build will be passed on to dpkg-buildpackage. It is not necessary to use dgit build when using dgit; it is OK to use any approach which ensures that the generated source package corresponds to the relevant git commit. Tagging, signing and actually uploading should be left to dgit push. .TP \fBdgit build-source\fR ... Builds the source package, and a changes file for a prospective source-only upload, using .BR dpkg-source . The output is left in .IR package \fB_\fR version \fB.dsc\fR and .IR package \fB_\fR version \fB_source.changes\fR. Tagging, signing and actually uploading should be left to dgit push. .TP .B dgit clean Cleans the current working tree (according to the --clean= option in force). .TP .B dgit help Print a usage summary. .TP \fBdgit sbuild\fR ... Constructs the source package, uses .B sbuild to do a binary build, and uses mergechanges to merge the source and binary changes files. Options and arguments after sbuild will be passed on to sbuild. Changes files matching .IB package _ version _*.changes in the parent directory will be removed; the output is left in .IR package \fB_\fR version \fB_multi.changes\fR. Tagging, signing and actually uploading should be left to dgit push. .TP \fBdgit gbp-build\fR ... Runs .B git-buildpackage with some suitable options. Options and arguments after gbp-build will be passed on to git-buildpackage. Tagging, signing and actually uploading should be left to dgit push. .TP \fBdgit push\fR [\fIsuite\fP] Does an `upload', pushing the current HEAD to the archive (as a source package) and to dgit-repos (as git commits). The package must already have been built ready for upload, with the .dsc and .changes left in the parent directory. It is normally best to do the build with dgit too (eg with dgit sbuild): some existing build tools pass unhelpful options to dpkg-source et al by default, which can result in the built source package not being identical to the git tree. In more detail: dgit push checks that the current HEAD corresponds to the .dsc. It then pushes the HEAD to the suite's dgit-repos branch, makes a signed git tag, edits the .dsc to contain the dgit metadata field, runs debsign to sign the upload (.dsc and .changes), pushes the signed tag, and finally uses dput to upload the .changes to the archive. dgit push always uses the package, suite and version specified in the debian/changelog and the .dsc, which must agree. If the command line specifies a suite then that must match too. If dgit push fails while uploading, it is fine to simply retry the dput on the .changes file at your leisure. .TP \fBdgit rpush\fR \fIbuild-host\fR\fB:\fR\fIbuild-dir\fR [\fIpush args...\fR] Pushes the contents of the specified directory on a remote machine. This is like running dgit push on build-host with build-dir as the current directory; however, signing operations are done on the invoking host. This allows you to do a push when the system which has the source code and the build outputs has no access to the key: 1. Clone on build host (dgit clone) .br 2. Edit code on build host (edit, git commit) .br 3. Build package on build host (dgit build) .br 4. Test package on build host or elsewhere (dpkg -i, test) .br 5. Upload by invoking dgit rpush on host with your GPG key. However, the build-host must be able to ssh to the dgit repos. If this is not already the case, you must organise it separately, for example by the use of ssh agent forwarding. The remaining arguments are treated just as dgit push would handle them. build-host and build\-dir can be passed as separate arguments; this is assumed to be the case if the first argument contains no : (except perhaps one in [ ], to support IPv6 address literals). You will need similar enough versions of dgit on the build-host and the invocation host. The build-host needs gnupg installed, with your public key in its keyring (but not your private key, obviously). .TP .B dgit setup-new-tree Configure the current working tree the way that dgit clone would have set it up. Like running .B dgit setup-useremail and .B setup-mergechangelogs (but only does each thing if dgit is configured to do it automatically). You can use these in any git repository, not just ones used with the other dgit operations. .TP .B dgit setup-useremail Set the working tree's user.name and user.email from the distro-specific dgit configuration .RB ( dgit-distro. \fIdistro\fR .user-name " and " .user-email ), or DEBFULLNAME or DEBEMAIL. .TP .B dgit setup-mergechangelogs Configures a git merge helper for the file .B debian/changelog which uses .BR dpkg-mergechangelogs . .TP .B dgit quilt-fixup `3.0 (quilt)' format source packages need changes representing not only in-tree but also as patches in debian/patches. dgit quilt-fixup checks whether this has been done; if not, dgit will make appropriate patches in debian/patches and also commit the resulting changes to git. This is normally done automatically by dgit build and dgit push. dgit will try to turn each relevant commit in your git history into a new quilt patch. dgit cannot convert nontrivial merges, or certain other kinds of more exotic history. If dgit can't find a suitable linearisation of your history, by default it will fail, but you can ask it to generate a single squashed patch instead. .TP .B dgit version Prints version information and exits. .TP .BI "dgit clone-dgit-repos-server" " destdir" Tries to fetch a copy of the source code for the dgit-repos-server, as actually being used on the dgit git server, as a git tree. .SH OPTIONS .TP .BR --dry-run " | " -n Go through the motions, fetching all information needed, but do not actually update the output(s). For push, dgit does the required checks and leaves the new .dsc in a temporary file, but does not sign, tag, push or upload. .TP .BR --damp-run " | " -L Go through many more of the motions: do everything that doesn't involve either signing things, or making changes on the public servers. .TP .BI -k keyid Use .I keyid for signing the tag and the upload. The default comes from the distro's .B keyid config setting (see CONFIGURATION, below), or failing that, the uploader trailer line in debian/changelog. .TP .BR --no-sign does not sign tags or uploads (meaningful only with push). .TP .TP .BI -p package Specifies that we should process source package .I package rather than looking in debian/control or debian/changelog. Valid with dgit fetch and dgit pull, only. .TP .BR --clean=git " | " -wg The source tree should be cleaned, before building a source package with one of the build options, using .BR "git clean -xdf" . This will delete all files which are not tracked by git. Also, -wg causes dgit to pass .B -nc to dpkg-buildpackage, which prevents the package's own clean target from being run. --clean=git is useful when the package's clean target is troublesome; the downside is simply that git clean may delete files you forgot to git add. --clean=git can also avoid needing the build-dependencies. .TP .BR --clean=git-ff " | " -wgf The source tree should be cleaned, before building a source package with one of the build options, using .BR "git clean -xdff" . This is like "git clean -xdf" but it also removes any subdirectories containing different git trees (which only unusual packages are likely to create). .TP .BR --clean=check " | " -wc Merely check that the tree is clean (does not contain uncommitted files), before building a source package. .TP .BR --clean=none " | " -wn Do not clean the tree before building a source package. If there are files which are not in git, or if the build creates such files, a subsequent dgit push will fail. .TP .BR --clean=dpkg-source " | " -wd Use dpkg-buildpackage to do the clean, so that the source package is cleaned by dpkg-source running the package's clean target. This is the default. It requires the package's build dependencies. .TP .BR --clean=dpkg-source-d " | " -wdd Use .B dpkg-buildpackage -d to do the clean, so that the source package is cleaned by dpkg-source running the package's clean target. The build-dependencies are not checked (due to .BR -d ), which violates policy, but may work in practice. .TP .BR -N " | " --new The package is or may be new in this suite. Without this, dgit will refuse to push. It may (for Debian, will) be unable to access the git history for any packages which have been newly pushed and have not yet been published. .TP .BR --ignore-dirty Do not complain if the working tree does not match your git HEAD. This can be useful with build, if you plan to commit later. (dgit push will still ensure that the .dsc you upload and the git tree you push are identical, so this option won't make broken pushes.) .TP .BI --deliberately- something Declare that you are deliberately doing .IR something . This can be used to override safety catches, including safety catches which relate to distro-specific policies. The meanings of .IR something s understood in the context of Debian are discussed below: .TP .BR --deliberately-not-fast-forward Declare that you are deliberately rewinding history. When pushing to Debian, use this when you are making a renewed upload of an entirely new source package whose previous version was not accepted for release from NEW because of problems with copyright or redistributibility. .TP .BR --deliberately-include-questionable-history Declare that you are deliberately including, in the git history of your current push, history which contains a previously-submitted version of this package which was not approved (or has not yet been approved) by the ftpmasters. When pushing to Debian, only use this option after verifying that: none of the rejected-from-NEW (or never-accepted) versions in the git history of your current push, were rejected by ftpmaster for copyright or redistributability reasons. .TP .BR --deliberately-fresh-repo Declare that you are deliberately rewinding history and want to throw away the existing repo. Not relevant when pushing to Debian, as the Debian server will do this automatically when necessary. .TP .BR --quilt=linear When fixing up source format `3.0 (quilt)' metadata, insist on generating a linear patch stack. If such a stack cannot be generated, fail. This is the default for Debian. .TP .BR --quilt=auto When fixing up source format `3.0 (quilt)' metadata, prefer to generate a linear patch stack, but if that doesn't seem possible, generate a single squashed patch for all the changes made in git. This is not a good idea for an NMU in Debian. .TP .BR --quilt=smash When fixing up source format `3.0 (quilt)' metadata, generate a single squashed patch for all the changes made in git. This is not a good idea for an NMU in Debian. .TP .BR --quilt=nofix Check whether source format `3.0 (quilt)' metadata would need fixing up, but, if it does, fail. You must then fix the metadata yourself somehow before pushing. (NB that dpkg-source --commit will not work because the dgit git tree does not have a .B .pc directory.) .TP .BR --quilt=nocheck " | " --no-quilt-fixup Do not check whether up source format `3.0 (quilt)' metadata needs fixing up. If you use this option and the metadata did in fact need fixing up, dgit push will fail. .TP .BI -D Prints debugging information to stderr. Repeating the option produces more output (currently, up to -DDDD is meaningfully different). .TP .BI -c name = value Specifies a git configuration option, to be used for this run. dgit itself is also controlled by git configuration options. .TP .RI \fB-v\fR version "|\fB_\fR | " \fB--since-version=\fR version |\fB_\fR Specifies the .BI -v version option to pass to dpkg-genchanges, during builds. Changes (from debian/changelog) since this version will be included in the built changes file, and hence in the upload. If this option is not specified, dgit will query the archive and use the latest version uploaded to the intended suite. Specifying .B _ inhibits this, so that no -v option will be passed to dpkg-genchanges (and as a result, only the last stanza from debian/changelog will be used for the build and upload). .TP .RI \fB-m\fR maintaineraddress Passed to dpkg-genchanges (eventually). .TP .RI \fB--ch:\fR option Specifies a single additional option to pass, eventually, to dpkg-genchanges. .TP .RI \fB--curl=\fR program " | \fB--dput=\fR" program " |..." Specifies alternative programs to use instead of .BR curl , .BR dput , .BR debsign , .BR dpkg-source , .BR dpkg-buildpackage , .BR dpkg-genchanges , .BR sbuild , .BR gpg , .BR ssh , .BR dgit , .BR git , or .BR mergechanges . For dpkg-buildpackage, dpkg-genchanges, mergechanges and sbuild, this applies only when the program is invoked directly by dgit. For dgit, specifies the command to run on the remote host when dgit rpush needs to invoke a remote copy of itself. (dgit also reinvokes itself as the EDITOR for dpkg-source --commit; this is done using argv[0], and is not affected by --dgit=). For ssh, the default value is taken from the .B DGIT_SSH or .B GIT_SSH environment variables, if set (see below). And, for ssh, when accessing the archive and dgit-repos, this command line setting is overridden by the git config variables .BI dgit-distro. distro .ssh and .B .dgit.default.ssh (which can in turn be overridden with -c). Also, when dgit is using git to access dgit-repos, only git's idea of what ssh to use (eg, .BR GIT_SSH ) is relevant. .TP .RI \fB--curl:\fR option " | \fB--dput:\fR" option " |..." Specifies a single additional option to pass to .BR curl , .BR dput , .BR debsign , .BR dpkg-source , .BR dpkg-buildpackage , .BR dpkg-genchanges , .BR sbuild , .BR ssh , .BR dgit , or .BR mergechanges . Can be repeated as necessary. For dpkg-buildpackage, dpkg-genchanges, mergechanges and sbuild, this applies only when the program is invoked directly by dgit. Usually, for passing options to dpkg-genchanges, you should use .BR --ch: \fIoption\fR. Specifying --git not effective for some lower-level read-only git operations performed by dgit, and also not when git is invoked by another program run by dgit. See notes above regarding ssh and dgit. NB that --gpg:option is not supported (because debsign does not have that facility). But see .B -k and the .B keyid distro config setting. .TP .BR -d "\fIdistro\fR | " --distro= \fIdistro\fR Specifies that the suite to be operated on is part of distro .IR distro . This overrides the default value found from the git config option .BR dgit-suite. \fIsuite\fR .distro . The only effect is that other configuration variables (used for accessing the archive and dgit-repos) used are .BR dgit-distro. \fIdistro\fR .* . If your suite is part of a distro that dgit already knows about, you can use this option to make dgit work even if your dgit doesn't know about the suite. For example, specifying .B -ddebian will work when the suite is an unknown suite in the Debian archive. To define a new distro it is necessary to define methods and URLs for fetching (and, for dgit push, altering) a variety of information both in the archive and in dgit-repos. How to set this up is not yet documented. .TP .BI -C changesfile Specifies the .changes file which is to be uploaded. By default dgit push looks for single .changes file in the parent directory whose filename suggests it is for the right package and version - or, if there is a _multi.changes file, dgit uses that. If the specified .I changesfile pathname contains slashes, the directory part is also used as the value for .BR --build-products-dir ; otherwise, the changes file is expected in that directory (by default, in .BR .. ). .TP .BI --build-products-dir= directory Specifies where to find the built files to be uploaded. By default, dgit looks in the parent directory .RB ( .. ). .TP .BI --existing-package= package dgit push needs to canonicalise the suite name. Sometimes, dgit lacks a way to ask the archive to do this without knowing the name of an existing package. Without --new we can just use the package we are trying to push. But with --new that will not work, so we guess .B dpkg or use the value of this option. This option is not needed with the default mechanisms for accessing the archive. .TP .BR -h | --help Print a usage summary. .TP .BI --initiator-tempdir= directory dgit rpush uses a temporary directory on the invoking (signing) host. This option causes dgit to use .I directory instead. Furthermore, the specified directory will be emptied, removed and recreated before dgit starts, rather than removed after dgit finishes. The directory specified must be an absolute pathname. .TP .BI --no-rm-on-error Do not delete the destination directory if clone fails. .SH WORKFLOW - SIMPLE It is always possible with dgit to clone or fetch a package, make changes in git (using git-commit) on the suite branch .RB ( "git checkout dgit/" \fIsuite\fR) and then dgit push. You can use whatever gitish techniques you like to construct the commits to push; the only requirement is that what you push is a descendant of the state of the archive, as provided by dgit in the remote tracking branch .BR remotes/dgit/dgit/ \fIsuite\fR. If you are using dgit to do an NMU (in Debian), and don't know about the maintainers' preferred packaging workflows, you should make your changes as a linear series of (logicially separated) commits on top of what's already in the archive. If you are lucky the other uploaders have also used dgit and integrated the other relevant git history; if not you can fetch it into your tree and cherry-pick etc. as you wish. .SH WORKFLOW - INTEGRATING BETWEEN DGIT AND OTHER GIT HISTORY If you are the maintainer of a package dealing with uploads made without dgit, you will probably want to merge the synthetic commits (made by dgit to represent the uploads) into your git history. Normally you can just merge the dgit branch into your own master, or indeed if you do your work on the dgit local suite branch .BI dgit/ suite you can just use dgit pull. However the first time dgit is used it will generate a new origin commit from the archive which won't be linked into the rest of your git history. You will need to merge this. If last upload was in fact made with git, you should usually proceed as follows: identify the commit which was actually used to build the package. (Hopefully you have a tag for this.) Check out the dgit branch .RB ( "git checkout dgit/" \fIsuite\fR) and merge that other commit .RB ( "git merge debian/" \fIversion\fR). Hopefully this merge will be trivial because the two trees should be very similar. The resulting branch head can be merged into your working branches .RB ( "git checkout master && git merge dgit/" \fIsuite\fR). If last upload was not made with git, a different approach is required to start using dgit. First, do .B dgit fetch (or clone) to obtain a git history representation of what's in the archive and record it in the .BI remotes/dgit/dgit/ suite tracking branch. Then somehow, using your other git history plus appropriate diffs and cherry picks from the dgit remote tracking branch, construct a git commit whose tree corresponds to the tree to use for the next upload. If that commit-to-be-uploaded is not a descendant of the dgit remote tracking branch, check it out and say .BR "git merge -s ours remotes/dgit/dgit/" \fIsuite\fR; that tells git that we are deliberately throwing away any differences between what's in the archive and what you intend to upload. Then run .BR "dgit push" to actually upload the result. .SH CONFIGURATION dgit can be configured via the git config system. You may set keys with git-config (either in system-global or per-tree configuration), or provide .BI -c key = value on the dgit command line. .LP Settings likely to be useful for an end user include: .TP .BR dgit-suite. \fIsuite\fR .distro " \fIdistro\fR" Specifies the distro for a suite. dgit keys off the suite name (which appears in changelogs etc.), and uses that to determine the distro which is involved. The config used is thereafter that for the distro. .TP .BI dgit.default.distro " distro" The default distro for an unknown suite. .TP .BR dgit.default. * for each .BR dgit-distro. \fIdistro\fR . *, the default value used if there is no distro-specific setting. .TP .BR dgit-distro. \fIdistro\fR .clean-mode One of the values for the command line --clean= option; used if --clean is not specified. .TP .BR dgit-distro. \fIdistro\fR .readonly " " auto | a " | " true | t | y | 1 " | " false | f | n | 0 Whether you have push access to the distro. For Debian, it is OK to use auto, which uses readonly mode if you are not pushing right now; but, setting this to false will avoid relying on the mirror of the dgit git repository server. .TP .BI dgit-distro. distro .keyid See also .BR -k . .TP .BI dgit-distro. distro .mirror " url" .TP .BI dgit-distro. distro .username Not relevant for Debian. .TP .BI dgit-distro. distro .upload-host Might be useful if you have an intermediate queue server. .TP .BI dgit-distro. distro .user-name " " dgit-distro. distro .user-email Values to configure for user.name and user.email in new git trees. If not specified, the DEBFULLNAME and DEBEMAIL environment variables are used, respectively. Only used if .setup-usermail is not disabled. .TP .BI dgit-distro. distro .setup-useremail Whether to set user.name and user.email in new git trees. True by default. Ignored for dgit setup-setup-useremail, which does it anyway. .TP .BI dgit-distro. distro .setup-mergechangelogs Whether to setup a merge driver which uses dpkg-mergechangelogs for debian/changelog. True by default. Ignored for dgit setup-mergechangelogs, which does it anyway. .TP .BI dgit-distro. distro .cmd- cmd Program to use instead of .IR cmd . Works like .BR -- \fIcmd\fR = "... ." .TP .BI dgit-distro. distro .opts- cmd Extra options to pass to .IR cmd . Works like .BR -- \fIcmd\fR : "... ." To pass several options, configure multiple values in git config (with git config --add). The options for .BI dgit.default.opts- cmd .BI dgit-distro. distro /push.opts- cmd and are all used, followed by options from dgit's command line. .SH ACCESS CONFIGURATION There are many other settings which specify how a particular distro's services (archive and git) are provided. These should not normally be adjusted, but are documented for the benefit of distros who wish to adopt dgit. .TP .BR dgit-distro. \fIdistro\fR /push. * If set, overrides corresponding non \fB/push\fR config when .BR readonly=false , or when pushing and .BR readonly=auto . .TP .BI dgit-distro. distro .git-url .TP .BR dgit-distro. \fIdistro\fR .git-url [ -suffix ] .TP .BI dgit-distro. distro .git-proto .TP .BI dgit-distro. distro .git-path .TP .BR dgit-distro. \fIdistro\fR .git-check " " true | false | url | ssh-cmd .TP .BI dgit-distro. distro .git-check-suffix .TP .BR dgit-distro. \fIdistro\fR .diverts.divert " " new-distro | / \fIdistro-suffix\fR .TP .BI dgit-distro. distro .git-create " " ssh-cmd | true .TP .BR dgit-distro. \fIdistro\fR .archive-query " " ftpmasterapi: " | " madison: "\fIdistro\fR | " dummycat: "\fI/path\fR | " sshpsql: \fIuser\fR @ \fIhost\fR : \fIdbname\fR .TP .BR dgit-distro. \fIdistro\fR .archive-query- ( url | tls-key | curl-ca-args ) .TP .BI dgit-distro. distro .madison-distro .TP .BI dgit-distro. distro .archive-query-default-component .TP .BI dgit-distro. distro .ssh .TP .BI dgit-distro. distro .sshpsql-dbname .TP .BR dgit-distro. \fIdistro\fR . ( git | sshpsql ) - ( user | host | user-force ) .TP .BI dgit-distro. distro .backports-quirk .SH ENVIRONMENT VARIABLES .TP .BR DGIT_SSH ", " GIT_SSH specify an alternative default program (and perhaps arguments) to use instead of ssh. DGIT_SSH is consulted first and may contain arguments; if it contains any whitespace will be passed to the shell. GIT_SSH specifies just the program; no arguments can be specified, so dgit interprets it the same way as git does. See also the --ssh= and --ssh: options. .TP .BR DEBEMAIL ", " DEBFULLNAME Default git user.email and user.name for new trees. See .BR "dgit setup-new-tree" . .TP .BR gpg ", " dpkg- "..., " debsign ", " git ", " curl ", " dput ", " LWP::UserAgent and other subprograms and modules used by dgit are affected by various environment variables. Consult the documentaton for those programs for details. .SH BUGS dgit's git representation of format `3.0 (quilt)' source packages does not represent the patch stack as git commits. Currently the patch series representation cannot round trip between git and the archive. Ideally dgit would represent a quilty package with an origin commit of some kind followed by the patch stack as a series of commits followed by a pseudo-merge (to make the branch fast-forwarding). This would also mean a new `dgit rebase-prep' command or some such to turn such a fast-forwarding branch back into a rebasing patch stack, and a `force' option to dgit push (perhaps enabled automatically by a note left by rebase-prep) which will make the required pseudo-merge. If the dgit push fails halfway through, it should be restartable and idempotent. However this is not true for the git tag operation. Also, it would be good to check that the proposed signing key is available before starting work. dgit's handling of .orig.tar.gz is not very sophisticated. Ideally the .orig.tar.gz could be transported via the git repo as git tags. Doing this is made more complicated by the possibility of a `3.0 (quilt)' package with multiple .orig tarballs. dgit's build functions, and dgit push, should not make any changes to your current HEAD. Sadly this is necessary for packages in the `3.0 (quilt)' source format. This is ultimately due to what I consider design problems in quilt and dpkg-source. There should be an option which arranges for the `3.0 (quilt)' autocommit(s) to not appear on your HEAD, but instead only in the remote tracking suite branch. --dry-run does not always work properly, as not doing some of the git fetches may result in subsequent actions being different. Doing a non-dry-run dgit fetch first will help. .SH SEE ALSO \fBdgit\fP(7), \fBcurl\fP(1), \fBdput\fP(1), \fBdebsign\fP(1), \fBgit-config\fP(1), \fBgit-buildpackage\fP(1), \fBdpkg-buildpackage\fP(1), .br https://browse.dgit.debian.org/ dgit/Debian/0000775000000000000000000000000012564640726010073 5ustar dgit/Debian/Dgit.pm0000664000000000000000000001631712564114317011320 0ustar # -*- perl -*- package Debian::Dgit; use strict; use warnings; use POSIX; use IO::Handle; use Config; BEGIN { use Exporter (); our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(setup_sigwarn debiantag server_branch server_ref stat_exists link_ltarget fail ensuredir executable_on_path waitstatusmsg failedcmd cmdoutput cmdoutput_errok git_rev_parse git_get_ref git_for_each_ref git_for_each_tag_referring is_fast_fwd $package_re $component_re $deliberately_re $branchprefix initdebug enabledebug enabledebuglevel printdebug debugcmd $debugprefix *debuglevel *DEBUG shellquote printcmd messagequote); # implicitly uses $main::us %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO)] ); @EXPORT_OK = @{ $EXPORT_TAGS{policyflags} }; } our @EXPORT_OK; our $package_re = '[0-9a-z][-+.0-9a-z]*'; our $component_re = '[0-9a-zA-Z][-+.0-9a-zA-Z]*'; our $deliberately_re = "(?:TEST-)?$package_re"; our $branchprefix = 'dgit'; # policy hook exit status bits # see dgit-repos-server head comment for documentation # 1 is reserved in case something fails with `exit 1' and to spot # dynamic loader, runtime, etc., failures, which report 127 or 255 sub NOFFCHECK () { return 0x2; } sub FRESHREPO () { return 0x4; } our $debugprefix; our $debuglevel = 0; sub setup_sigwarn () { our $sigwarn_mainprocess = $$; $SIG{__WARN__} = sub { die $_[0] unless getppid == $sigwarn_mainprocess; }; } sub initdebug ($) { ($debugprefix) = @_; open DEBUG, ">/dev/null" or die $!; } sub enabledebug () { open DEBUG, ">&STDERR" or die $!; DEBUG->autoflush(1); $debuglevel ||= 1; } sub enabledebuglevel ($) { my ($newlevel) = @_; # may be undef (eg from env var) die if $debuglevel; $newlevel //= 0; $newlevel += 0; return unless $newlevel; $debuglevel = $newlevel; enabledebug(); } sub printdebug { print DEBUG $debugprefix, @_ or die $! if $debuglevel>0; } sub messagequote ($) { local ($_) = @_; s{\\}{\\\\}g; s{\n}{\\n}g; s{\x08}{\\b}g; s{\t}{\\t}g; s{[\000-\037\177]}{ sprintf "\\x%02x", ord $& }ge; $_; } sub shellquote { my @out; local $_; foreach my $a (@_) { $_ = $a; if (!length || m{[^-=_./:0-9a-z]}i) { s{['\\]}{'\\$&'}g; push @out, "'$_'"; } else { push @out, $_; } } return join ' ', @out; } sub printcmd { my $fh = shift @_; my $intro = shift @_; print $fh $intro," " or die $!; print $fh shellquote @_ or die $!; print $fh "\n" or die $!; } sub debugcmd { my $extraprefix = shift @_; printcmd(\*DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0; } sub debiantag ($$) { my ($v,$distro) = @_; $v =~ y/~:/_%/; return "$distro/$v"; } sub server_branch ($) { return "$branchprefix/$_[0]"; } sub server_ref ($) { return "refs/".server_branch($_[0]); } sub stat_exists ($) { my ($f) = @_; return 1 if stat $f; return 0 if $!==&ENOENT; die "stat $f: $!"; } sub _us () { $::us // ($0 =~ m#[^/]*$#, $&); } sub fail { my $s = "@_\n"; my $prefix = _us().": "; $s =~ s/^/$prefix/gm; die $s; } sub ensuredir ($) { my ($dir) = @_; # does not create parents return if mkdir $dir; return if $! == EEXIST; die "mkdir $dir: $!"; } sub executable_on_path ($) { my ($program) = @_; return 1 if $program =~ m{/}; my @path = split /:/, ($ENV{PATH} // "/usr/local/bin:/bin:/usr/bin"); foreach my $pe (@path) { my $here = "$pe/$program"; return $here if stat_exists $here && -x _; } return undef; } our @signames = split / /, $Config{sig_name}; sub waitstatusmsg () { if (!$?) { return "terminated, reporting successful completion"; } elsif (!($? & 255)) { return "failed with error exit status ".WEXITSTATUS($?); } elsif (WIFSIGNALED($?)) { my $signum=WTERMSIG($?); return "died due to fatal signal ". ($signames[$signum] // "number $signum"). ($? & 128 ? " (core dumped)" : ""); # POSIX(3pm) has no WCOREDUMP } else { return "failed with unknown wait status ".$?; } } sub failedcmd { { local ($!); printcmd \*STDERR, _us().": failed command:", @_ or die $!; }; if ($!) { fail "failed to fork/exec: $!"; } elsif ($?) { fail "subprocess ".waitstatusmsg(); } else { fail "subprocess produced invalid output"; } } sub cmdoutput_errok { die Dumper(\@_)." ?" if grep { !defined } @_; debugcmd "|",@_; open P, "-|", @_ or die "$_[0] $!"; my $d; $!=0; $?=0; { local $/ = undef; $d =

; } die $! if P->error; if (!close P) { printdebug "=>!$?\n"; return undef; } chomp $d; if ($debuglevel > 0) { $d =~ m/^.*/; my $dd = $&; my $more = (length $' ? '...' : ''); #'); $dd =~ s{[^\n -~]|\\}{ sprintf "\\x%02x", ord $& }ge; printdebug "=> \`$dd'",$more,"\n"; } return $d; } sub cmdoutput { my $d = cmdoutput_errok @_; defined $d or failedcmd @_; return $d; } sub link_ltarget ($$) { my ($old,$new) = @_; lstat $old or return undef; if (-l _) { $old = cmdoutput qw(realpath --), $old; } link $old, $new or die "link $old $new: $!"; } sub git_rev_parse ($) { return cmdoutput qw(git rev-parse), "$_[0]~0"; } sub git_for_each_ref ($$;$) { my ($pattern,$func,$gitdir) = @_; # calls $func->($objid,$objtype,$fullrefname,$reftail); # $reftail is RHS of ref after refs/[^/]+/ # breaks if $pattern matches any ref `refs/blah' where blah has no `/' my @cmd = (qw(git for-each-ref), $pattern); if (defined $gitdir) { @cmd = ('sh','-ec','cd "$1"; shift; exec "$@"','x', $gitdir, @cmd); } open GFER, "-|", @cmd or die $!; debugcmd "|", @cmd; while () { chomp or die "$_ ?"; printdebug "|> ", $_, "\n"; m#^(\w+)\s+(\w+)\s+(refs/[^/]+/(\S+))$# or die "$_ ?"; $func->($1,$2,$3,$4); } $!=0; $?=0; close GFER or die "$pattern $? $!"; } sub git_get_ref ($) { # => '' if no such ref my ($refname) = @_; local $_ = $refname; s{^refs/}{[r]efs/} or die "$refname $_ ?"; return cmdoutput qw(git for-each-ref --format=%(objectname)), $_; } sub git_for_each_tag_referring ($$) { my ($objreferring, $func) = @_; # calls $func->($tagobjid,$refobjid,$fullrefname,$tagname); printdebug "git_for_each_tag_referring ", ($objreferring // 'UNDEF'),"\n"; git_for_each_ref('refs/tags', sub { my ($tagobjid,$objtype,$fullrefname,$tagname) = @_; return unless $objtype eq 'tag'; my $refobjid = git_rev_parse $tagobjid; return unless !defined $objreferring # caller wants them all or $tagobjid eq $objreferring or $refobjid eq $objreferring; $func->($tagobjid,$refobjid,$fullrefname,$tagname); }); } sub is_fast_fwd ($$) { my ($ancestor,$child) = @_; my @cmd = (qw(git merge-base), $ancestor, $child); my $mb = cmdoutput_errok @cmd; if (defined $mb) { return git_rev_parse($mb) eq git_rev_parse($ancestor); } else { $?==256 or failedcmd @cmd; return 0; } } 1; dgit/Debian/Dgit/0000775000000000000000000000000012547254260010755 5ustar dgit/Debian/Dgit/Policy/0000775000000000000000000000000012547254260012214 5ustar dgit/Debian/Dgit/Policy/Debian.pm0000664000000000000000000000131312547254260013732 0ustar # -*- perl -*- package Debian::Dgit::Policy::Debian; use strict; use warnings; use POSIX; BEGIN { use Exporter (); our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(poldb_path poldb_setup $poldbh); %EXPORT_TAGS = ( ); @EXPORT_OK = qw(); } our @EXPORT_OK; our $poldbh; sub poldb_path ($) { my ($repos) = @_; return "$repos/policy.sqlite3"; } sub poldb_setup ($;$) { my ($policydb, $hook) = @_; $poldbh ||= DBI->connect("dbi:SQLite:$policydb",'','', { RaiseError=>1, PrintError=>1, AutoCommit=>0 }); $hook->() if $hook; $poldbh->do("PRAGMA foreign_keys = ON"); } 1;