Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Dec 2002 17:25:41 +0100
From:      "Peter Klausner" <peter.klausner@systor.com>
To:        freebsd-cvsweb@FreeBSD.org
Subject:   Patch for rlog: Argument list too long
Message-ID:  <OFF3281668.06B887E5-ON41256C8A.00574DF7@systor.com>

next in thread | raw e-mail | index | archive | help
> Thanks for the patch, Tomas.  Do you have an environment where the bug
> is reproducible?  I tried it out (also with RH8 and Apache 2.0.40) by
>
Cannot reproduce this any more,
but I *did* have an environment where this happened:

   * HP-UX 10.20
   * Perl 5.004 built by HP-UX Software Archive & Porting Centre
   * 1000+ (generated) files

Back then, I patched Zeller's cvsweb.cgi 1.112.
The idea is to emulate xarg's behaviour within Perl,
i.e. the arg list is split into manageable pieces
and the external command re-run as often as needed.
It does need a config variable $file_list_len,
which depends on your current OS + Perl combo
- I used 200 for above mention environment.

The context diff for Zeller's 1.112:
_______________________________________
*************** use vars qw (
*** 72,80 ****
      $navigationHeaderColor $tableBorderColor $markupLogColor
      $tabstop $state $annTable $sel $curbranch @HideModules @DissallowRead
      $module $use_descriptions %descriptions @mytz $dwhere $moddate
!     $use_moddate $has_zlib $gzip_open
  );

  ##### prototype declarations ########
  sub printDiffSelect($);
  sub findLastModifiedSubdirs(@);
--- 75,83 ----
      $navigationHeaderColor $tableBorderColor $markupLogColor
      $tabstop $state $annTable $sel $curbranch @HideModules @DissallowRead
      $module $use_descriptions %descriptions @mytz $dwhere $moddate
!     $use_moddate $has_zlib $gzip_open $file_list_len
  );

  ##### prototype declarations ########
  sub printDiffSelect($);
  sub findLastModifiedSubdirs(@);
*************** sub getDirLogs($$@) {
*** 1536,1541 ****
--- 1541,1551 ----
          my $kidpid = open($fh, "-|");
     if (! $kidpid) {
          open(STDERR, "> /dev/null"); # rlog may complain; ignore.
+         while ($#files > $file_list_len) { # pkl: split files into chunks
+              my @files_chunk = ();
+              @files_chunk = splice(@files, 0, $file_list_len);
+              system("rlog","-r",@files_chunk);
+         }
          exec("rlog","-r",@files);
     }
  }
_______________________________________

HTH + Bye,
Peter Klausner


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-cvsweb" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?OFF3281668.06B887E5-ON41256C8A.00574DF7>