2dgit/0000775000000000000000000000000012266635071006767 5ustar 2dgit/NOTES0000664000000000000000000000045712207473313007602 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?? 2dgit/dgit0000775000000000000000000015703512266635071007657 0ustar #!/usr/bin/perl -w # dgit # Integration between git and Debian-style archives # # Copyright (C)2013 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 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; our $our_version = 'UNRELEASED'; ###substituted### 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 $noquilt = 0; our $existing_package = 'dpkg'; our $cleanmode = 'dpkg-source'; our $changes_since_version; our $we_are_responder; our $initiator_tempdir; our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)"); our (@git) = qw(git); our (@dget) = qw(dget); 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, 'dput' => \@dput, 'debsign' => \@debsign, 'gpg' => \@gpg, 'sbuild' => \@sbuild, 'ssh' => \@ssh, 'dgit' => \@dgit, 'dpkg-source' => \@dpkgsource, 'dpkg-buildpackage' => \@dpkgbuildpackage, 'dpkg-genchanges' => \@dpkggenchanges, 'ch' => \@changesopts, 'mergechanges' => \@mergechanges); our %opts_opt_cmdonly = ('gpg' => 1); our $keyid; our $debug = 0; open DEBUG, ">/dev/null" or die $!; autoflush STDOUT 1; our $remotename = 'dgit'; our @ourdscfield = qw(Dgit Vcs-Dgit-Master); our $branchprefix = 'dgit'; our $csuite; sub lbranch () { return "$branchprefix/$csuite"; } my $lbranch_re = '^refs/heads/'.$branchprefix.'/([^/.]+)$'; sub lref () { return "refs/heads/".lbranch(); } sub lrref () { return "refs/remotes/$remotename/$branchprefix/$csuite"; } sub rrref () { return "refs/$branchprefix/$csuite"; } sub debiantag ($) { my ($v) = @_; $v =~ y/~:/_%/; return "debian/$v"; } sub stripepoch ($) { my ($vsn) = @_; $vsn =~ s/^\d+\://; return $vsn; } sub dscfn ($) { my ($vsn) = @_; return "${package}_".(stripepoch $vsn).".dsc"; } our $us = 'dgit'; our $debugprefix = ''; sub printdebug { print DEBUG $debugprefix, @_ or die $!; } sub fail { die $us.($we_are_responder ? " (build host)" : "").": @_\n"; } 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: $!"; } #---------- remote protocol support, common ---------- # remote push initiator/responder protocol: # < dgit-remote-push-ready [optional extra info ignored by old initiators] # # > 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 sub badproto ($$) { my ($fh, $m) = @_; fail "connection lost: $!" if $fh->error; fail "protocol violation; $m not expected"; } sub protocol_expect (&$) { my ($match, $fh) = @_; local $_; $_ = <$fh>; defined && chomp or badproto $fh, "eof"; 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}$/ or badproto \*RO, "bad byte count"; my $d; my $got = read $fh, $d, $nbytes; $got==$nbytes or badproto $fh, "eof during 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(); } our ($dscdata,$dscurl,$dsc,$skew_warning_vsn); sub shellquote { my @out; local $_; foreach my $a (@_) { $_ = $a; if (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 failedcmd { { local ($!); printcmd \*STDERR, "$us: failed command:", @_ or die $!; }; if ($!) { fail "failed to fork/exec: $!"; } elsif (!($? & 0xff)) { fail "subprocess failed with error exit status ".($?>>8); } elsif ($?) { fail "subprocess crashed (wait status $?)"; } else { fail "subprocess produced invalid output"; } } sub runcmd { printcmd(\*DEBUG,$debugprefix."+",@_) if $debug>0; $!=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 cmdoutput_errok { die Dumper(\@_)." ?" if grep { !defined } @_; printcmd(\*DEBUG,$debugprefix."|",@_) if $debug>0; open P, "-|", @_ or die $!; my $d; $!=0; $?=0; { local $/ = undef; $d =

; } die $! if P->error; if (!close P) { printdebug "=>!$?\n" if $debug>0; return undef; } chomp $d; $d =~ m/^.*/; printdebug "=> \`$&'",(length $' ? '...' : ''),"\n" if $debug>0; #'; return $d; } sub cmdoutput { my $d = cmdoutput_errok @_; defined $d or failedcmd @_; return $d; } 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-distro.debian.git-host' => 'git.debian.org', 'dgit-distro.debian.git-proto' => 'git+ssh://', 'dgit-distro.debian.git-path' => '/git/dgit-repos/repos', 'dgit-distro.debian.git-check' => 'ssh-cmd', 'dgit-distro.debian.git-create' => 'ssh-cmd', 'dgit-distro.debian.sshpsql-host' => 'coccia.debian.org', 'dgit-distro.debian.sshpsql-dbname' => 'service=projectb', 'dgit-distro.debian.upload-host' => 'ftp-master', # for dput 'dgit-distro.debian.mirror' => 'http://ftp.debian.org/debian/', 'dgit-distro.debian.backports-quirk' => '%-backports*', 'dgit-distro.debian-backports.mirror' => 'http://backports.debian.org/debian-backports/', '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' => "dummycat:$td/aq", 'dgit-distro.test-dummy.mirror' => "file://$td/mirror/", 'dgit-distro.test-dummy.upload-host' => 'test-dummy', ); sub cfg { foreach my $c (@_) { return undef if $c =~ /RETURN-UNDEF/; my @cmd = (@git, qw(config --), $c); my $v; { local ($debug) = $debug-1; $v = cmdoutput_errok @cmd; }; if ($?==0) { return $v; } elsif ($?!=256) { failedcmd @cmd; } my $dv = $defcfg{$c}; return $dv if defined $dv; } badcfg "need value for one of: @_"; } sub access_basedistro () { return cfg("dgit-suite.$isuite.distro", "dgit.default.distro"); } sub access_quirk () { # returns (quirk name, distro to use instead, 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 badcfg "backports-quirk needs \%"; if ($isuite =~ m/^$re$/) { return ('backports',"$basedistro-backports",$1); } } return ('none',$basedistro); } sub access_distro () { return (access_quirk())[1]; } sub access_cfg (@) { my (@keys) = @_; my $basedistro = access_basedistro(); my $distro = $idistro || access_distro(); my $value = cfg(map { ("dgit-distro.$distro.$_", "dgit-distro.$basedistro.$_", "dgit.default.$_") } @keys); return $value; } 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_someuserhost ($) { my ($some) = @_; my $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 $url = access_cfg('git-url','RETURN-UNDEF'); if (!defined $url) { $url = access_cfg('git-proto'). access_gituserhost(). access_cfg('git-path'); } return "$url/$package.git"; } sub parsecontrolfh ($$@) { my ($fh, $desc, @opts) = @_; my %opts = ('name' => $desc, @opts); my $c = Dpkg::Control::Hash->new(%opts); $c->parse($fh) or die "parsing of $desc failed"; 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 git_get_ref ($) { my ($refname) = @_; my $got = cmdoutput_errok @git, qw(show-ref --), $refname; if (!defined $got) { $?==256 or fail "git show-ref failed (status $?)"; printdebug "ref $refname= [show-ref exited 1]\n"; return ''; } if ($got =~ m/^(\w+) \Q$refname\E$/m) { printdebug "ref $refname=$1\n"; return $1; } else { printdebug "ref $refname= [no match]\n"; return ''; } } our %rmad; sub archive_query ($) { my ($method) = @_; my $query = access_cfg('archive-query','RETURN-UNDEF'); if (!defined $query) { my $distro = access_basedistro(); if ($distro eq 'debian') { $query = "sshpsql:". access_someuserhost('sshpsql').':'. access_cfg('sshpsql-dbname'); } else { $query = "madison:$distro"; } } $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); } sub archive_query_madison ($$) { my ($proto,$data) = @_; die unless $proto eq 'madison'; $rmad{$package} ||= cmdoutput qw(rmadison -asource),"-s$isuite","-u$data",$package; my $rmad = $rmad{$package}; return madison_parse($rmad); } sub madison_parse ($) { my ($rmad) = @_; 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_string($a->[0],$b->[0]); } @out; } sub canonicalise_suite_madison ($$) { # madison canonicalises for us my @r = archive_query_madison($_[0],$_[1]); @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]; } sub sshpsql ($$) { my ($data,$sql) = @_; $data =~ m/:/ or badcfg "invalid sshpsql method string \`$data'"; my ($userhost,$dbname) = ($`,$'); #'; my @rows; my @cmd = (access_cfg_ssh, $userhost, "export LANG=C; ".shellquote qw(psql -A), $dbname, qw(-c), $sql); printcmd(\*DEBUG,$debugprefix."|",@cmd) if $debug>0; open P, "-|", @cmd or die $!; while (

) { chomp or die; printdebug("$debugprefix>|$_|\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/[']/; } } sub archive_query_sshpsql ($$) { my ($proto,$data) = @_; sql_injection_check $isuite, $package; my @rows = sshpsql($data, <[0],$b->[0]) } @rows; @rows = map { my ($vsn,$component,$filename) = @$_; [ $vsn, "/pool/$component/$filename" ]; } @rows; return @rows; } sub canonicalise_suite_sshpsql ($$) { my ($proto,$data) = @_; sql_injection_check $isuite; my @rows = sshpsql($data, <[0] } @rows; fail "unknown suite $isuite" unless @rows; die "ambiguous $isuite: @rows ?" if @rows>1; return $rows[0]; } 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_string($a->[0],$b->[0]); } @rows; } 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) = @$vinfo; $dscurl = access_cfg('mirror').$subpath; $dscdata = url_get($dscurl); if (!$dscdata) { $skew_warning_vsn = $vsn if !defined $skew_warning_vsn; next; } my $dscfh = new IO::File \$dscdata, '<' or die $!; printdebug Dumper($dscdata) if $debug>1; $dsc = parsecontrolfh($dscfh,$dscurl, allow_pgp=>1); printdebug Dumper($dsc) if $debug>1; my $fmt = getfield $dsc, 'Format'; fail "unsupported source format $fmt, sorry" unless $format_ok{$fmt}; return; } $dsc = undef; } 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(), " set -e; cd ".access_cfg('git-path').";". " if test -d $package.git; then echo 1; else echo 0; fi"); my $r= cmdoutput @cmd; failedcmd @cmd unless $r =~ m/^[01]$/; return $r+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(), "set -e; cd ".access_cfg('git-path').";". " cp -a _template $package.git"); } 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_from_only_subdir () { # changes into the subdir my (@dirs) = <*/.>; die unless @dirs==1; $dirs[0] =~ m#^([^/]+)/\.$# or die; my $dir = $1; changedir $dir; fail "source package contains .git directory" if stat '.git'; die $! unless $!==&ENOENT; runcmd qw(git init -q); rmtree('.git/objects'); symlink '../../../../objects','.git/objects' or die $!; runcmd @git, qw(add -Af); my $tree = cmdoutput @git, qw(write-tree); $tree =~ m/^\w+$/ or die "$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 ($_) = @_; m/\.orig(?:-\w+)?\.tar\.\w+$/; } 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 generate_commit_from_dsc () { prep_ud(); changedir $ud; my @files; foreach my $f (dsc_files()) { die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#; push @files, $f; link "../../../$f", $f or $!==&ENOENT or die "$f $!"; } runcmd @dget, qw(--), $dscurl; foreach my $f (grep { is_orig_file($_) } @files) { link $f, "../../../../$f" or $!==&EEXIST or die "$f $!"; } my ($tree,$dir) = mktree_in_ud_from_only_subdir(); 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_string($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}; next unless is_orig_file($f); if (open F, "<", "../$f") { $fi->{Digester}->reset(); $fi->{Digester}->addfile(*F); F->error and die $!; my $got = $fi->{Digester}->hexdigest(); $got eq $fi->{Hash} or fail "existing file $f has hash $got but .dsc". " demands hash $fi->{Hash}". " (perhaps you should delete this file?)"; progress "using existing $f"; next; } else { die "$f $!" unless $!==&ENOENT; } my $origurl = $dscurl; $origurl =~ s{/[^/]+$}{}; $origurl .= "/$f"; die "$f ?" unless $f =~ m/^${package}_/; die "$f ?" if $f =~ m#/#; runcmd_ordryrun_local shell_cmd 'cd ..', @dget,'--',$origurl; } } sub rev_parse ($) { return cmdoutput @git, qw(rev-parse), "$_[0]~0"; } sub is_fast_fwd ($$) { my ($ancestor,$child) = @_; my @cmd = (@git, qw(merge-base), $ancestor, $child); my $mb = cmdoutput_errok @cmd; if (defined $mb) { return rev_parse($mb) eq rev_parse($ancestor); } else { $?==256 or failedcmd @cmd; return 0; } } sub git_fetch_us () { runcmd_ordryrun_local @git, qw(fetch),access_giturl(),fetchspec(); } 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_string($got_vsn, $skew_warning_vsn) < 0) { print STDERR < .git/HEAD" or die $!; print H "ref: ".lref()."\n" or die $!; close H or die $!; runcmd @git, qw(remote add), 'origin', access_giturl(); if (check_for_git()) { 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; 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 () { return if $ignoredirty; my @cmd = (@git, qw(diff --quiet HEAD)); printcmd(\*DEBUG,$debugprefix."+",@cmd) if $debug>0; $!=0; $?=0; system @cmd; return if !$! && !$?; if (!$! && $?==256) { fail "working tree is dirty (does not match HEAD)"; } else { failedcmd @cmd; } } 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}++; } } if (!%adds) { progress "nothing quilty to commit, ok."; return; } runcmd_ordryrun_local @git, qw(add), sort keys %adds; my $m = "Commit Debian 3.0 (quilt) metadata"; progress "$m"; runcmd_ordryrun_local @git, qw(commit -m), $m; } sub madformat ($) { my ($format) = @_; return 0 unless $format eq '3.0 (quilt)'; progress "Format \`$format', urgh"; if ($noquilt) { progress "Not doing any fixup of \`$format' due to --no-quilt-fixup"; return 0; } 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); 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; open TO, '>', $tfn->('.tmp') or die $!; print TO <('.tmp'); if ($sign) { if (!defined $keyid) { $keyid = access_cfg('keyid','RETURN-UNDEF'); } 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 () { printdebug "actually entering push\n"; prep_ud(); 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 $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(); changedir '../../../..'; my @diffcmd = (@git, qw(diff --exit-code), $tree); printcmd \*DEBUG,$debugprefix."+",@diffcmd; $!=0; $?=0; if (system @diffcmd) { if ($! && $?==256) { fail "$dscfn specifies a different tree to your HEAD commit;". " perhaps you forgot to build"; } else { failedcmd @diffcmd; } } #fetch from alioth #do fast forward check and maybe fake merge # if (!is_fast_fwd(mainbranch # runcmd @git, qw(fetch -p ), "$alioth_git/$package.git", # map { lref($_).":".rref($_) } # (uploadbranch()); my $head = rev_parse('HEAD'); if (!$changesfile) { my $multi = "$buildproductsdir/". "${package}_".(stripepoch $cversion)."_multi.changes"; if (stat "$multi") { $changesfile = $multi; } else { $!==&ENOENT or die "$multi: $!"; 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"); my $tfn = sub { ".git/dgit/tag$_[0]"; }; my $tagobjfn; 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); } 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; runcmd_ordryrun @git, qw(tag -v --), $tag; if (!check_for_git()) { create_remote_git_repo(); } runcmd_ordryrun @git, qw(push),access_giturl(),"HEAD:".rrref(); runcmd_ordryrun @git, qw(update-ref -m), 'dgit push', lrref(), 'HEAD'; if (!$we_are_responder) { if (act_local()) { rename "$dscpath.tmp",$dscpath or die "$dscfn $!"; } else { progress "[new .dsc left in $dscpath.tmp]"; } } if ($we_are_responder) { my $dryrunsuffix = act_local() ? "" : ".tmp"; responder_receive_files('signed-dsc-changes', "$dscpath$dryrunsuffix", "$changesfile$dryrunsuffix"); } else { sign_changes $changesfile; } runcmd_ordryrun @git, qw(push),access_giturl(),"refs/tags/$tag"; my $host = access_cfg('upload-host','RETURN-UNDEF'); my @hostarg = defined($host) ? ($host,) : (); runcmd_ordryrun @dput, @hostarg, $changesfile; printdone "pushed and uploaded $cversion"; responder_send_command("complete"); } sub cmd_clone { parseopts(); 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"; clone($dstdir); } sub branchsuite () { my $branch = cmdoutput_errok @git, qw(symbolic-ref HEAD); if ($branch =~ m#$lbranch_re#o) { return $1; } else { return undef; } } sub fetchpullargs () { 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(); 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(); } if (defined $specsuite && $specsuite ne $isuite) { canonicalise_suite(); $csuite eq $specsuite or fail "dgit push: changelog specifies $isuite ($csuite)". " but command line specifies $specsuite"; } if (check_for_git()) { git_fetch_us(); } if (fetch_from_archive()) { is_fast_fwd(lrref(), 'HEAD') or fail "dgit push: HEAD is not a descendant". " of the archive's version.\n". "$us: To overwrite it, use git merge -s ours ".lrref()."."; } else { $new_package or fail "package appears to be new in this suite;". " if this is intentional, use --new"; } dopush(); } #---------- remote commands' implementation ---------- sub cmd_remote_push_responder { my ($nrargs) = shift @ARGV; my (@rargs) = @ARGV[0..$nrargs-1]; @ARGV = @ARGV[$nrargs..$#ARGV]; die unless @rargs; my ($dir) = @rargs; $debugprefix = ' '; $we_are_responder = 1; 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; responder_send_command("dgit-remote-push-ready"); changedir $dir; &cmd_push; } our $i_tmp; our $i_child_pid; sub i_cleanup { local ($@); if ($i_child_pid) { printdebug "(killing remote 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 { my $host = nextarg; my $dir; if ($host =~ m/^((?:[^][]|\[[^][]*\])*)\:/) { $host = $1; $dir = $'; #'; } else { $dir = nextarg; } $dir =~ s{^-}{./-}; my @rargs = ($dir); my @rdgit; push @rdgit, @dgit; push @rdgit, @ropts; push @rdgit, qw(remote-push-responder), (scalar @rargs), @rargs; push @rdgit, @ARGV; my @cmd = (@ssh, $host, shellquote @rdgit); printcmd \*DEBUG,$debugprefix."+",@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; initiator_expect { m/^dgit-remote-push-ready/ }; 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_complete { my $pid = $i_child_pid; $i_child_pid = undef; # prevents killing some other process with same pid printdebug "waiting for remote child $pid...\n"; my $got = waitpid $pid, 0; die $! unless $got == $pid; die "remote 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 $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; } 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 or badproto \*RO, "premature desire for signed-tag"; my $head = $i_param{'head'}; die if $head =~ m/[^0-9a-f]/ || $head !~ m/^../; 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; our $fakeeditorenv = 'DGIT_FAKE_EDITOR_QUILT'; sub build_maybe_quilt_fixup () { if (!open F, "debian/source/format") { die $! unless $!==&ENOENT; return; } $_ = ; F->error and die $!; chomp; return unless madformat($_); # sigh my @cmd = (@git, qw(ls-files --exclude-standard -iodm)); my $problems = cmdoutput @cmd; if (length $problems) { print STDERR "problematic files:\n"; print STDERR " $_\n" foreach split /\n/, $problems; fail "Cannot do quilt fixup in tree containing ignored files. ". "Perhaps your package's clean target is broken, in which". " case -wg (which says to use git-clean -xdf) may help."; } my $clogp = parsechangelog(); my $version = getfield $clogp, 'Version'; my $author = getfield $clogp, 'Maintainer'; my $headref = rev_parse('HEAD'); my $time = time; my $ncommits = 3; my $patchname = "auto-$version-$headref-$time"; my $msg = cmdoutput @git, qw(log), "-n$ncommits"; mkpath '.git/dgit'; my $descfn = ".git/dgit/quilt-description.tmp"; open O, '>', $descfn or die "$descfn: $!"; $msg =~ s/\n/\n /g; $msg =~ s/^\s+$/ ./mg; print O <{Version}) Last (up to) $ncommits git changes, FYI: . $msg Author: $author --- END close O or die $!; { local $ENV{'EDITOR'} = cmdoutput qw(realpath --), $0; local $ENV{'VISUAL'} = $ENV{'EDITOR'}; local $ENV{$fakeeditorenv} = cmdoutput qw(realpath --), $descfn; runcmd_ordryrun_local @dpkgsource, qw(--commit .), $patchname; } if (!open P, '>>', ".pc/applied-patches") { $!==&ENOENT or die $!; } else { close P; } commit_quilty_patch(); } 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; } sub clean_tree () { if ($cleanmode eq 'dpkg-source') { runcmd_ordryrun_local @dpkgbuildpackage, qw(-T clean); } elsif ($cleanmode eq 'git') { runcmd_ordryrun_local @git, qw(clean -xdf); } elsif ($cleanmode eq 'none') { } else { die "$cleanmode ?"; } } sub build_prep () { 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 () { my @opts =@changesopts[1..$#changesopts]; 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_string($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 '_') { unshift @opts, "-v$changes_since_version"; } return @opts; } sub cmd_build { build_prep(); runcmd_ordryrun_local @dpkgbuildpackage, qw(-us -uc), changesopts(), @ARGV; printdone "build successful\n"; } sub cmd_git_build { build_prep(); my @cmd = (qw(git-buildpackage -us -uc --git-no-sign-tags), "--git-builder=@dpkgbuildpackage"); 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 build_source { 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(); } else { my $pwd = cmdoutput qw(env - pwd); 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 $dscfn or fail "$dscfn (in parent directory): $!"; stat $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, @ARGV, qw(-d), $isuite, $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 $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'; build_maybe_quilt_fixup(); } #---------- argument parsing and main program ---------- sub cmd_version { print "dgit version $our_version\n" or die $!; exit 0; } 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'}); } 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/^--since-version=([^_]+|_)$/) { push @ropts, $_; $changes_since_version = $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/^--existing-package=(.*)/s) { push @ropts, $_; $existing_package = $1; } elsif (m/^--initiator-tempdir=(.*)/s) { $initiator_tempdir = $1; $initiator_tempdir =~ m#^/# or badusage "--initiator-tempdir must be used specify an". " absolute, not relative, directory." } elsif (m/^--distro=(.*)/s) { push @ropts, $_; $idistro = $1; } elsif (m/^--build-products-dir=(.*)/s) { push @ropts, $_; $buildproductsdir = $1; } elsif (m/^--clean=(dpkg-source|git|none)$/s) { push @ropts, $_; $cleanmode = $1; } elsif (m/^--clean=(.*)$/s) { badusage "unknown cleaning mode \`$1'"; } elsif (m/^--ignore-dirty$/s) { push @ropts, $_; $ignoredirty = 1; } elsif (m/^--no-quilt-fixup$/s) { push @ropts, $_; $noquilt = 1; } 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, $&; open DEBUG, ">&STDERR" or die $!; autoflush DEBUG 1; $debug++; } elsif (s/^-N/-/) { push @ropts, $&; $new_package=1; } elsif (s/^-v([^_]+|_)$//s) { push @ropts, $&; $changes_since_version = $1; } elsif (m/^-m/) { push @ropts, $&; push @changesopts, $_; $_ = ''; } elsif (s/^-c(.*=.*)//s) { push @ropts, $&; push @git, '-c', $1; } elsif (s/^-d(.*)//s) { push @ropts, $&; $idistro = $1; } elsif (s/^-C(.*)//s) { push @ropts, $&; $changesfile = $1; if ($changesfile =~ s#^(.*)/##) { $buildproductsdir = $1; } } elsif (s/^-k(.*)//s) { $keyid=$1; } elsif (s/^-wn//s) { push @ropts, $&; $cleanmode = 'none'; } elsif (s/^-wg//s) { push @ropts, $&; $cleanmode = 'git'; } elsif (s/^-wd//s) { push @ropts, $&; $cleanmode = 'dpkg-source'; } else { badusage "unknown short option \`$_'"; } } } } } if ($ENV{$fakeeditorenv}) { quilt_fixup_editor(); } delete $ENV{'DGET_UNPACK'}; parseopts(); 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/-/_/; { no strict qw(refs); &{"cmd_$cmd"}(); } 2dgit/.gitignore0000664000000000000000000000010612245435056010752 0ustar *~ tests/tmp debian/dgit debian/files debian/*.substvars debian/*.log 2dgit/tests/0000775000000000000000000000000012245435056010127 5ustar 2dgit/tests/run-all0000775000000000000000000000041612245435056011430 0ustar #!/bin/sh set -e # convenience script for running the tests outside adt-run for f in `run-parts --list tests/tests`; do echo ================================================== echo $f $f echo ================================================== done echo "ALL PASSED" 2dgit/tests/lib0000664000000000000000000000742712245435056010632 0ustar # exec 2>&1 set -x root=`pwd` troot=$root/tests 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` export DGIT_TEST_DUMMY_DIR=$tmp ln $troot/ssh ssh mkdir $tmp/gnupg cp $troot/gnupg/* $tmp/gnupg chmod go-rw $tmp/gnupg/* export GNUPGHOME=$tmp/gnupg mkdir $tmp/incoming cat <$tmp/dput.cf [test-dummy] method = local incoming = $tmp/incoming run_dinstall = 0 END fail () { echo >&2 "failed: $*" exit 1 } t-worktree () { rm -rf $p tar xf $troot/worktrees/${p}_$1.tar } t-git () { p=$1 v=$2 mkdir -p $tmp/git (set -e; cd $tmp/git; tar xf $troot/git-srcs/${p}_$v.git.tar) } t-git-none () { mkdir -p $tmp/git (set -e; cd $tmp/git; tar xf $troot/git-template.tar) } t-has-ancestor () { local now=`git rev-parse HEAD` local ancestor=`git rev-parse $1^{}` local mbase=`git merge-base $ancestor $now` if [ x$mbase != x$ancestor ]; then fail "not ff $ancestor..$now, $mbase != $ancestor" fi } t-archive-none () { p=$1 mkdir -p $tmp/aq $tmp/mirror echo sid >$tmp/aq/suite.unstable } t-archive () { t-archive-none $1 v=$2 local dscf=${p}_$2.dsc rm -f $tmp/mirror/${p}_* ln $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/ echo "$2 $dscf" >>$tmp/aq/package.sid.${p} rm -rf $tmp/extract mkdir $tmp/extract (set -e; cd $tmp/extract; dpkg-source -x ../mirror/$dscf) } t-dgit () { : '{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{' ${DGIT_TEST-dgit} --dget:-u --dput:--config=$tmp/dput.cf \ -dtest-dummy -D -k39B13D8A "$@" : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}' } t-diff-nogit () { diff --exclude=.git -ruN $* } 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 dgit/unstable 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 () { local ref=$1 git show-ref -d $1 | perl -ne ' $x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#; END { print "$x\n" if length $x; } ' } 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 >$tmp/t.refx` if [ "x$val" != x ]; then fail "ref $g unexpectedly exists ($val)" fi done } t-v-tag () { echo refs/tags/debian/${v//\~/_} } 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 $tmp/git/$p.git t-refs-same \ refs/dgit/sid \ `t-v-tag` t-refs-notexist \ refs/dgit/unstable ) git verify-tag `t-v-tag` } 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-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) \ | patch -p1 -u } 2dgit/tests/ssh0000775000000000000000000000007312245435056010652 0ustar #!/bin/sh set -e cd / userhost="$1"; shift exec sh -c "$*" 2dgit/tests/tests/0000775000000000000000000000000012266635071011273 5ustar 2dgit/tests/tests/push-buildproductsdir0000775000000000000000000000053612266635071015564 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. 2dgit/tests/tests/push-newpackage0000775000000000000000000000053412245435056014303 0ustar #!/bin/bash set -e . tests/lib t-archive-none pari-extra t-git-none t-worktree 3-1 v=3-1 cd $p git branch -m dgit/sid master git remote rm dgit t-refs-same-start t-ref-head LANG=C t-dgit push 2>&1 \ | tee /dev/stderr \ | grep 'package appears to be new in this suite' >/dev/null t-dgit build t-dgit push --new t-pushed-good master echo ok. 2dgit/tests/tests/clone-nogit0000775000000000000000000000042212245435056013433 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. 2dgit/tests/tests/fetch-localgitonly0000775000000000000000000000027312245435056015010 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. 2dgit/tests/tests/fetch-somegit-notlast0000775000000000000000000000025012245435056015434 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. 2dgit/tests/tests/quilt0000775000000000000000000000107212245435056012355 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 for cherry in incoming~1 incoming~0; do git cherry-pick -x $cherry 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 done t-822-field ../${p}_${v}_*.changes Changes | grep -Fx 'ruby-rails-3.2 (3.2.6-2~dummy1) unstable; urgency=low' echo ok. 2dgit/tests/tests/push-nextdgit0000775000000000000000000000043412245435056014023 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. 2dgit/tests/worktrees/0000775000000000000000000000000012245435056012154 5ustar 2dgit/tests/worktrees/ruby-rails-3.2_test.tar0000664000000000000000000040400012245435056016312 0ustar ruby-rails-3.2/0000775000175000017500000000000012244426115011552 5ustar ianianruby-rails-3.2/debian/0000775000175000017500000000000012244426071012775 5ustar ianianruby-rails-3.2/debian/control.in0000664000175000017500000000435312244425624015015 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/copyright0000664000175000017500000000260012244425624014731 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/changelog0000664000175000017500000000104412244425731014650 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/control0000664000175000017500000000423312244426071014402 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/rules0000775000175000017500000000003612244426003014047 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/watch0000664000175000017500000000013712244425624014032 0ustar ianianversion=3 http://pkg-ruby-extras.alioth.debian.org/cgi-bin/gemwatch/rails .*/rails-(.*).tar.gz ruby-rails-3.2/debian/compat0000664000175000017500000000000212244425624014176 0ustar ianian7 ruby-rails-3.2/debian/source/0000775000175000017500000000000012244425624014300 5ustar ianianruby-rails-3.2/debian/source/format0000664000175000017500000000001412244425624015506 0ustar ianian3.0 (quilt) ruby-rails-3.2/.git/0000775000175000017500000000000012244426125012414 5ustar ianianruby-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/0000775000175000017500000000000012244426125014045 5ustar ianianruby-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/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/info/0000775000175000017500000000000012244425622015001 5ustar ianianruby-rails-3.2/.git/objects/16/0000775000175000017500000000000012244425623014275 5ustar ianianruby-rails-3.2/.git/objects/16/3aaf8d82b6c54f23c45f32895dbdfdcc27b0470000444000175000017500000000003412244425623021645 0ustar ianianxKÊÉOR04b0Ö3PÐ(,ÍÌ)Ñä9“^ruby-rails-3.2/.git/objects/35/0000775000175000017500000000000012244426123014272 5ustar ianianruby-rails-3.2/.git/objects/35/960d6a20bea1c661a93c8574a57b58aacb09c60000444000175000017500000000157612244426123021503 0ustar ianianxåWKÛ8 îY¿‚CìIœIRh±‡bÛ^§@»X²ÍØÚ±%¯$'Mýí%ýÈ8“é" ô#ˆõ Eò#%J+“Âb½¼{¼´mº¿5鿘ùøÖqü¹ÁLmT&½2„–5Æ`¥ªœØ¢u4?£õ¥ŸPJWư VcÑb…ÒÑ ÔuXÔ¨½ë:A'@D¬èÿ°ú"ŒÂ•h*é7ÆÖdœ\²õ¥±¬À{¹U9|D¥±F…>JíœÑ,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^ÕÉ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/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/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 Ç­—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/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/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ì }ÙÑšÖò˜»ä¾Þ×—Û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/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/0000775000175000017500000000000012244425623014361 5ustar ianianruby-rails-3.2/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c53910000444000175000017500000000001712244425623021602 0ustar ianianxKÊÉOR0` °ð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/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/pack/0000775000175000017500000000000012244425622014764 5ustar ianianruby-rails-3.2/.git/objects/f7/0000775000175000017500000000000012244425623014363 5ustar ianianruby-rails-3.2/.git/objects/f7/7500effcbe1acab2861c64bde5ec99476227a10000444000175000017500000000016512244425623021730 0ustar ianianx+)JMU040f01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†‘rKMßúÈ|%Ÿ»T0H0JÐÐÀÀÌÄD!7µ$1%±$Q¯27‡a_Ñ}.Õó§o9?mº¸Ó\þÁ3½¢f*Fruby-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å‰%É É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/f8/0000775000175000017500000000000012244426125014362 5ustar ianianruby-rails-3.2/.git/objects/f8/00005d8a4ee87ad29d2b38a15cc8b63da1a4d20000444000175000017500000000016512244426125021625 0ustar ianianx+)JMU040f01½‚d†»If®]–Ù!=ûšó©I")J¥®úÙ”Ô¤ÌÄ<†ê)mK"8¹™ømߥ¿Ý¡­k'2ÉÐÀÀÌÄD!7µ$1%±$Q¯27‡Áto–¾…ÇWÚ´–,­ŽXušós$(–ruby-rails-3.2/.git/branches/0000775000175000017500000000000012244425622014202 5ustar ianianruby-rails-3.2/.git/description0000664000175000017500000000011112244425622014654 0ustar ianianUnnamed repository; edit this file 'description' to name the repository. ruby-rails-3.2/.git/hooks/0000775000175000017500000000000012244425622013540 5ustar ianianruby-rails-3.2/.git/hooks/applypatch-msg.sample0000775000175000017500000000070412244425622017700 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+"$@"} : ruby-rails-3.2/.git/hooks/prepare-commit-msg.sample0000775000175000017500000000232712244425622020462 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" 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/DGIT_ARCHIVE0000664000175000017500000000005112244425624014226 0ustar ianian58498d68ce13425be9fa5ad841a7df38a9b0060b ruby-rails-3.2/.git/logs/0000775000175000017500000000000012244425624013363 5ustar ianianruby-rails-3.2/.git/logs/HEAD0000664000175000017500000000116312244426125014005 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. 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/0000775000175000017500000000000012244425624015406 5ustar ianianruby-rails-3.2/.git/logs/refs/heads/dgit/0000775000175000017500000000000012244425624016335 5ustar ianianruby-rails-3.2/.git/logs/refs/heads/dgit/sid0000664000175000017500000000116312244426125017035 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. ruby-rails-3.2/.git/HEAD0000664000175000017500000000003112244425622013033 0ustar ianianref: refs/heads/dgit/sid ruby-rails-3.2/.git/config0000664000175000017500000000044312244425622013606 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_EDITMSG0000664000175000017500000000004612244426125014503 0ustar ianianChange something in the upstream yml. ruby-rails-3.2/.git/index0000664000175000017500000000223512244426123013446 0ustar ianianDIRC R’+”R’+”þ#ϤèèhW¨ÔH¼ÁåOeóiÆô_¶ŸÙS.pc/.quilt_patchesR’+”R’+”þ#ФèèÂpf«î @ö+„C#”­¶e.pc/.quilt_seriesR’+”R’+”þ#Ѥèè ûðˆ†ü©©·Sì‡4ÈOËå,Ÿ .pc/.versionR’+”R’+”þ#Ò¤èèæâ›²ÑÖCK‹)®wZØÂäŒS‘.pc/applied-patchesR’+ÙR’+Ùþ#ç¤èè$x8†¼´=0˜®öGÍгõÄdebian/changelogR’+”R’+”þ#Ö¤èè·=`CÒæÛ,•®(ò debian/compatR’,9R’,9þ#è¤èè›Ü’k€z {ÈqEÿNÏULJ9debian/controlR’+”R’+”þ#ؤèèëÂâ,—ÀÛÄ!ÁÆROŽ\debian/control.inR’+”R’+”þ#Ù¤èè€Ë¨_œ'Ìß’™1þþEv ‘ÕYõAdebian/copyrightR’,R’,þ#Úíèè-3ö¬‰’·Ú„³š[ÊBÄ–-3I debian/rulesR’+”R’+”þ#ܤèè :¯‚¶ÅO#Ä_2‰]½ýÌ'°Gdebian/source/formatR’+”R’+”þ#ݤèè_ >Ä`Í%Cg–‰Ü 2|\&’B! debian/watchR’+õR’+õþ#Þ¤èèª5– j ¾¡Æa©<…t¥{XªË Æ metadata.ymlTREEM-1 2 .pc4 0 ÝbÀ™­¦iˆ›ÖCÊ’d"uE/debian-1 1 source1 0 ‘³n¶,Ö¥k¶‰ÙÍéàò‰Uã4MĽ]éõdMYÚ3Ùï´˜ëŽ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/0000775000175000017500000000000012244425624014442 5ustar ianianruby-rails-3.2/.git/refs/heads/dgit/0000775000175000017500000000000012244426125015366 5ustar ianianruby-rails-3.2/.git/refs/heads/dgit/sid0000664000175000017500000000005112244426125016064 0ustar ianian632997c752de3c99b21462b3dac47487e091241b ruby-rails-3.2/.git/FETCH_HEAD0000664000175000017500000000000012244425624013742 0ustar ianianruby-rails-3.2/metadata.yml0000664000175000017500000000725212244425765014075 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/0000775000175000017500000000000012244425624012236 5ustar ianianruby-rails-3.2/.pc/.quilt_series0000664000175000017500000000000712244425624014744 0ustar ianianseries ruby-rails-3.2/.pc/.version0000664000175000017500000000000212244425624013714 0ustar ianian2 ruby-rails-3.2/.pc/.quilt_patches0000664000175000017500000000001712244425624015102 0ustar ianiandebian/patches ruby-rails-3.2/.pc/applied-patches0000664000175000017500000000000012244425624015212 0ustar ianian2dgit/tests/worktrees/pari-extra_3-1.tar0000664000000000000000000021400012245435056015315 0ustar pari-extra/0000775000175000017500000000000012242154445011237 5ustar ianianpari-extra/debian/0000775000175000017500000000000012242154445012461 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/control0000664000175000017500000000242012242154445014062 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/0000775000175000017500000000000012242154445012100 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/0000775000175000017500000000000012242154445013531 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/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/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/HEAD0000664000175000017500000000027512242154445013474 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1384700197 +0000 reset: moving to refs/remotes/dgit/dgit/sid 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/0000775000175000017500000000000012242154445015067 5ustar ianianpari-extra/.git/logs/refs/heads/dgit/0000775000175000017500000000000012242154445016016 5ustar ianianpari-extra/.git/logs/refs/heads/dgit/sid0000664000175000017500000000027512242154445016524 0ustar ianian0000000000000000000000000000000000000000 1d7060a0b5714db1132e98611963e65edc766762 Ian Jackson 1384700197 +0000 reset: moving to refs/remotes/dgit/dgit/sid pari-extra/.git/HEAD0000664000175000017500000000003112242154443012514 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/index0000664000175000017500000000111012242154445013123 0ustar ianianDIRCRˆÙ%RˆÙ%þ§K¤èè?ŒLD¿™^Ö}·H²üý«ÉëÉdebian/README.DebianRˆÙ%RˆÙ%þ§L¤èèŒ;aßÓ`õ²d( YhKòOeidebian/changelogRˆÙ%RˆÙ%þ§M¤èè~Öÿ‚ÞkÌ*x$?ÉÅM>õ¬Úi debian/compatRˆÙ%RˆÙ%þ§N¤èè ,cm·Ê ë `!5Çï÷LJZdebian/controlRˆÙ%RˆÙ%þ§O¤èè·†¨ÖôD$³«Ò±lN¨Tdebian/copyrightRˆÙ%RˆÙ%þ§Píèè+0ûÀÖä9ÃqŒhØËLohÖué debian/rulesTREE86 1 K˜ÈÒ„\T©³ L@\Ô}¿.debian6 0 ¤à(¼’p è ãO!ìEífØwBÊ÷Æ¿aΔª€5*ýæ­¸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/0000775000175000017500000000000012242154445014123 5ustar ianianpari-extra/.git/refs/heads/dgit/0000775000175000017500000000000012242154445015052 5ustar ianianpari-extra/.git/refs/heads/dgit/sid0000664000175000017500000000005112242154445015550 0ustar ianian1d7060a0b5714db1132e98611963e65edc766762 2dgit/tests/pkg-srcs/0000775000000000000000000000000012245435056011660 5ustar 2dgit/tests/pkg-srcs/pari-extra_3-1.diff.gz0000664000000000000000000000446612245435056015577 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©™Ÿ§½ÿïï€ûy2dgit/tests/pkg-srcs/pari-extra_3.orig.tar.gz0000664000000000000000000000017112245435056016243 0ustar ‹¿Ü;NíÎ1 Â@Ð=Ê^ ˜MØÝóD°¤5‚Ç7‚6Z%Õ{ÍÀŸ)þujswy¬mêÆSØG¿©9¿2ÕÜæ[H©¤RsÊvO©ŽCˆy§¾ÜoëÔb çyY~íþõp 'ƒžÜ{(2dgit/tests/pkg-srcs/ruby-rails-3.2_3.2.6.orig.tar.gz0000664000000000000000000000167112245435056017072 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(2dgit/tests/pkg-srcs/ruby-rails-3.2_3.2.6-1.debian.tar.gz0000664000000000000000000000437112245435056017512 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 2dgit/tests/pkg-srcs/pari-extra_3-1.dsc0000664000000000000000000000172312245435056015012 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----- 2dgit/tests/pkg-srcs/pari-extra_3-2~dummy1.diff.gz0000664000000000000000000000466412245435056017133 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{2dgit/tests/pkg-srcs/ruby-rails-3.2_3.2.6-1.dsc0000664000000000000000000000265112245435056015634 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----- 2dgit/tests/gnupg/0000775000000000000000000000000012245435056011247 5ustar 2dgit/tests/gnupg/trustdb.gpg0000664000000000000000000000240012245435056013431 0ustar gpgRˆÝ  ¼Ò,Ø2C·=úÃ>£ÛËÀ9±=Š §Qç¨úF{éÄbÕçœØ3­ûê2dgit/tests/gnupg/random_seed0000664000000000000000000000113012245435056013445 0ustar '±¯vž5Ìu›tž?÷…Uzlj@ר2ÕƒñÀá¶xª¹ïóÒ›A!Ç\ ñ6(aFYÞìê±ËðÕúaûÐtše‹nšŠ~ÝráÎЖ@Ýëµê^æÁOd †Ê1[˜Ü×Ê_®ï=j@ÊQ/À\,˜d[#n–Ð=¥<.ž8† *.œƒ¼0qêø¿êDXg¹>€£/<þÄ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Žù2dgit/tests/gnupg/secring.gpg0000664000000000000000000000471212245435056013404 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 *œÛ°2dgit/tests/gnupg/pubring.gpg0000664000000000000000000000226412245435056013420 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 *œÛ°2dgit/tests/git-srcs/0000775000000000000000000000000012245435056011662 5ustar 2dgit/tests/git-srcs/pari-extra_3-1.git.tar0000664000000000000000000014400012245435056015607 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 ianian2dgit/tests/git-template.tar0000664000000000000000000007400012245435056013234 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 ianian2dgit/debian/0000775000000000000000000000000012266635071010211 5ustar 2dgit/debian/copyright0000664000000000000000000000161012245435056012140 0ustar dgit Integration between git and Debian-style archives Copyright (C)2013 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). 2dgit/debian/changelog0000664000000000000000000003231612266635071012070 0ustar 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 2dgit/debian/tests/0000775000000000000000000000000012266635071011353 5ustar 2dgit/debian/tests/control0000664000000000000000000000025212266635071012755 0ustar Tests: clone-nogit fetch-localgitonly fetch-somegit-notlast push-newpackage push-nextdgit quilt push-buildproductsdir Tests-Directory: tests/tests Depends: @, devscripts 2dgit/debian/control0000664000000000000000000000147412266635071011622 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://anonscm.debian.org/dgit-repos/repos/dgit.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=dgit-repos/repos/dgit.git Package: dgit Depends: perl, libwww-perl, libdpkg-perl, git-core, devscripts, dpkg-dev, ${misc:Depends}, realpath, libdigest-sha-perl, dput, curl | wget 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. 2dgit/debian/rules0000775000000000000000000000173312214174444011270 0ustar #!/usr/bin/make -f # dgit # Integration between git and Debian-style archives # # Copyright (C)2013 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 2dgit/debian/compat0000664000000000000000000000000212207473313011401 0ustar 9 2dgit/Makefile0000664000000000000000000000231712207473313010424 0ustar # dgit # Integration between git and Debian-style archives # # Copyright (C)2013 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 man1dir=$(mandir)/man1 PROGRAMS=dgit MAN1PAGES=dgit.1 all: install: installdirs $(INSTALL_PROGRAM) $(PROGRAMS) $(DESTDIR)$(bindir) $(INSTALL_DATA) $(MAN1PAGES) $(DESTDIR)$(man1dir) installdirs: $(INSTALL_DIR) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) check installcheck: clean distclean mostlyclean maintainer-clean: 2dgit/dgit.10000664000000000000000000006414312266635071010010 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 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 outside the Debian archive (currently, on Alioth). The usual workflow is: 1. clone or fetch; 2. make and commit changes in git as desired; 3. run dgit build, dgit sbuild or dgit build-source, or generate the source and binary packages for upload some other way; 4. do pre-upload tests of the proposed upload; 5. run dgit push. .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. Also, 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. .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 argumments 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 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 argumments 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 git-build\fR ... Runs .B git-buildpackage with some suitable options. Options and argumments after git-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. 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. 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 on in [ ], to support IPv6 address literals). .TP .B dgit quilt-fixup Looks to see if the tree is one which dpkg-source cannot properly represent. If it isn't, dgit will fix it up for you (in quilt terms, by making a new debian/ patch containing your unquilty changes) and make a commit of the changes it has made. This is normally done automatically by dgit build and dgit push. .TP .B dgit version Prints version information and exits. .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. .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. .TP .BR --clean=none | -wn Do not clean the tree before building a source package. If there are files which are not in git, 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 -N | --new The package may be new in this suite. Without this, dgit will refuse to push. .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.) This option may not work properly on `3.0 (quilt)' packages, as in that case dgit needs to use and perhaps commit parts of your working tree. .TP .BR --no-quilt-fixup Do not fix up source format `3.0 (quilt)' metadata. If you use this option and the package 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 -DD is meaningfully different). .TP .BI -c name = value Specifies a git configuration option. 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--dget=\fR program |\fB--dput=\fR program |... Specifies alternative programs to use instead of .BR dget , .BR dput , .BR debsign , .BR dpkg-source , .BR dpkg-buildpackage , .BR dpkg-genchanges , .BR sbuild , .BR gpg , .BR ssh , .BR dgit , 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 --dget=). 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--dget:\fR option |\fB--dput:\fR option |... Specifies a single additional option to pass to .BR dget , .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. See notes above regarding ssh and dgit. NB that --gpg:option is not supported (because debsign does not have that facility). But see -k. .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 do this is not yet documented, and currently the arrangements are unpleasant. See BUGS. .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 .BR .. ). .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. .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 commit to push; the only requirement is that it 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 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 the same. 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 dig 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 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 (by default) make signed tags called .BI debian/ version and push them to dgit-repos, but nothing depends on these tags existing. 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 (currently, the dgit-repos project on Alioth). 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. 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 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. If you are the maintainer of a non-native package, you currently have two sensible options: Firstly, you can regard your git history as primary, and the archive as an export format. For example, you could maintain topic branches in git and a fast-forwarding release branch; or you could do your work directly in a merging way on the .BI dgit/ suite branches. If you do this you should probably use a `1.0' format source package if you can. In the archive, the delta between upstream will be represented in the single Debian patch. Secondly, you can use `3.0 (quilt)', and regard your quiltish patch stack in the archive as primary. You will have to use other tools besides dgit to import and export this patch stack. But see below: .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 (i) the `3.0 (quilt)' source format 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. Instead, dpkg-source insists on the trees having extra quilty metadata and patch files in the debian/ and .pc/ directories, which dpkg-source sometimes modifies. dgit will automatically work around this braindamage for you when building and pushing. The only thing you need to know is that dgit build, sbuild, etc., may make a new commit 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. We recommend against the use of `3.0 (quilt)'. .SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT 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. .SH CONFIGURATION dgit looks at the following git config keys to control its behaviour. You may set them with git-config (either in system-global or per-tree configuration), or provide .BI -c key = value on the dgit command line. .TP .BI dgit-suite. suite .distro .TP .BI dgit.default.distro .TP .BI dgit-distro. distro .username .TP .BI dgit-distro. distro .git-url .TP .BI dgit-distro. distro .git-user .TP .BI dgit-distro. distro .git-host .TP .BI dgit-distro. distro .git-proto .TP .BI dgit-distro. distro .git-path .TP .BI dgit-distro. distro .git-check .TP .BI dgit-distro. distro .git-create .TP .BI dgit-distro. distro .upload-host .TP .BI dgit-distro. distro .mirror .TP .BI dgit-distro. distro .archive-query .TP .BI dgit-distro. distro .archive-query-default-component .TP .BI dgit-distro. distro .sshpsql-user .TP .BI dgit-distro. distro .sshpsql-host .TP .BI dgit-distro. distro .sshpsql-dbname .TP .BI dgit-distro. distro .ssh .TP .BI dgit-distro. distro .keyid .TP .BR dgit.default. * for each .BR dgit-distro. \fIdistro\fR . * .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 gpg ", " dpkg- "..., " debsign ", " git ", " dget ", " 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 We should be using some kind of vhost/vpath setup for the git repos on alioth, so that they can be moved later if and when this turns out to be a good idea. dgit push should perhaps do `git push origin', or something similar, by default. Debian does not have a working rmadison server, so to find out what version of a package is in the archive, or to canonicalise suite names, we ssh directly into the ftpmaster server and run psql there to access the database. The mechanism for checking for and creating per-package repos on alioth is a hideous bodge. One consequence is that dgit currently only works for people with push access. Debian Maintainers are currently not able to push, as there is not currently any mechanism for determining and honouring the archive's ideas about access control. Currently only DDs can push. dgit's representation of format `3.0 (quilt)' source packages does not represent the patch stack. Currently the patch series representation cannot round trip through 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 design problems in quilt and dpkg-source. There should be an option which arranges for the `3.0 (quilt)' autocommit to not appear on your HEAD, but instead only in the remote tracking suite branch. The option parser requires values to be cuddled to the option name. dgit assumes knowledge of the archive database. (The information dgit needs is not currently available via any public online service with a well-defined interface, let alone a secure one.) --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 \fBdget\fP(1), \fBdput\fP(1), \fBdebsign\fP(1), \fBgit-config\fP(1), \fBgit-buildpackage\fP(1), \fBdpkg-buildpackage\fP(1), .br https://wiki.debian.org/Alioth