chiark / gitweb /
Merge branch 'refs/remote/t.fa.dict.test' into stable-5.x
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 31 Oct 2009 13:59:58 +0000 (13:59 +0000)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 31 Oct 2009 13:59:58 +0000 (13:59 +0000)
1  2 
yarrg/Commods.pm

diff --combined yarrg/Commods.pm
index 24f2e81ae9eedb49353a925f4a2a06d2aeb1b200,6cad3e31e0b8e37fbcaccac2933f64f0e2013078..e63126ace25bb25fa65006d4e028bc4c0154969b
@@@ -22,7 -22,6 +22,7 @@@
  
  package Commods;
  use IO::File;
 +use IO::Pipe;
  use HTTP::Request::Common ();
  use POSIX;
  use LWP::UserAgent;
@@@ -46,40 -45,13 +46,40 @@@ BEGIN 
                      &pipethrough_run_gzip &http_useragent &version_core
                      &http_useragent_string_map
                      &cgipostform &yarrgpostform &cgi_get_caller
 -                    &set_ctype_utf8 $masterinfoversion);
 +                    &set_ctype_utf8 $masterinfoversion
 +                    &source_tarball);
      %EXPORT_TAGS = ( );
  
      @EXPORT_OK   = qw();
  }
  
 -our $masterinfoversion= 2; # version we understand
 +our $masterinfoversion= 2; # version we understand.
 +#
 +# To extend the source-info.txt format:
 +#
 +#    * Commods.pm:parse_info1
 +#       add code to parse new version
 +#
 +#    * source-info.txt
 +#       add new information
 +#
 +# If new data should NOT be in master-info.txt too:
 +#
 +#    * update-master-info:process_some_info
 +#       check that code for converting source-info to master-info
 +#       removes the extra info; add code to remove it if necessary
 +#
 +#    * db-idempotent-populate
 +#       if database schema is extended, add code to copy data
 +#
 +# If new data DOES need to be in master-info.txt too:
 +#
 +#    * Commods.pm:$masterinfoversion
 +#       increment
 +#
 +#    * update-master-info:process_some_info
 +#       add code to convert new version to old, by removing
 +#       extra info conditionally depending on version
  
  our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources;
  our %clients; # eg $clients{'ypp-sc-tools'}= [ qw(last-page) ];
@@@ -233,6 -205,7 +233,7 @@@ sub fetch_with_rsync ($) 
  
  sub parse_info_serverside () {
      parse_info1('source-info.txt','s',0);
+     parse_info1('tree-info.txt','t',1);
  }
  sub parse_info_serverside_ocean ($) {
      my ($oceanname) = @_;
@@@ -437,38 -410,4 +438,38 @@@ sub http_useragent ($) 
      return $ua;
  }
  
 +sub source_tarball ($$) {
 +    my ($sourcebasedir,$spitoutfn) = @_;
 +
 +    my $pipe= new IO::Pipe or die $!;
 +    my $pid= fork();  defined $pid or die $!;
 +    if (!$pid) {
 +      $ENV{'YPPSC_YARRG_SRCBASE'}= $sourcebasedir;
 +      $pipe->writer();
 +      exec '/bin/sh','-c','
 +              cd -P "$YPPSC_YARRG_SRCBASE"
 +              (
 +               git-ls-files -z;
 +               git-ls-files -z --others --exclude-from=.gitignore;
 +               if test -d .git; then find .git -print0; fi
 +              ) | (
 +               cpio -Hustar -o --quiet -0 -R 1000:1000 || \
 +               cpio -Hustar -o --quiet -0
 +              ) | gzip
 +      ';
 +      die $!;
 +    }
 +    $pipe->reader();
 +
 +    my ($d, $l);
 +    while ($l= read $pipe, $d, 65536) {
 +      $spitoutfn->($d);
 +    }
 +    waitpid $pid,0;
 +    defined $l or die "read pipe $!";
 +    $pipe->error and die "pipe error $!";
 +    close $pipe;
 +    # deliberately ignore errors
 +}
 +
  1;