Update of /cvsroot/fink/fink
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1587

Modified Files:
        .cvsignore ChangeLog install.sh setup.sh 
Added Files:
        lockwait.in 
Log Message:
dpkg and apt-get wait for other instances to finish instead of bombing out

Index: .cvsignore
===================================================================
RCS file: /cvsroot/fink/fink/.cvsignore,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- .cvsignore  28 Sep 2004 05:59:41 -0000      1.3
+++ .cvsignore  27 Apr 2005 18:30:20 -0000      1.4
@@ -7,3 +7,6 @@
 pathsetup.sh
 postinstall.pl
 shlibs.default
+dpkg-lockwait
+apt-get-lockwait
+

Index: install.sh
===================================================================
RCS file: /cvsroot/fink/fink/install.sh,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- install.sh  25 Apr 2005 06:36:48 -0000      1.30
+++ install.sh  27 Apr 2005 18:30:22 -0000      1.31
@@ -57,6 +57,8 @@
 install -c -p -m 755 fink "$basepath/bin/"
 install -c -p -m 755 fink-virtual-pkgs "$basepath/bin/"
 install -c -p -m 755 pathsetup.sh "$basepath/bin/"
+install -c -p -m 755 dpkg-lockwait "$basepath/bin/"
+install -c -p -m 755 apt-get-lockwait "$basepath/bin/"
 install -c -p -m 644 fink.8 "$basepath/share/man/man8/"
 install -c -p -m 644 fink.conf.5 "$basepath/share/man/man5/"
 install -c -p -m 644 images/*.png "$basepath/share/fink/images/"

--- NEW FILE: lockwait.in ---
#!/usr/bin/perl
use warnings;
use strict;

use Fcntl qw(:DEFAULT :seek);
use POSIX qw(:errno_h);

my $basepath = "@PREFIX@";
my $exec = "$basepath/bin/@PROG@";
my $timeout = 10;
my $debug = 0;

print STDERR "exec = $exec, timeout = $timeout\n" if $debug;

if ($> == 0) {
        print STDERR "We're root, gonna pre-lock\n" if $debug;

        print STDERR "Opening the lockfile\n" if $debug;
        my $lockfile = "$basepath/var/lib/dpkg/lock";
        open LOCK, ">$lockfile" or die "lockwait: Can't open: $!";
        
        print STDERR "Locking it\n" if $debug;
        ### Note this pack() is specific  to OS X and Darwin!!!
        my $struct_flock = pack("lllliss", (0, 0), (0, 0), 0, F_WRLCK, 
SEEK_SET);
        unless (fcntl(LOCK, F_SETLK, $struct_flock)) {
                die "lockwait: Can't get lock: $!" unless $! == EAGAIN || $! == 
EACCES;
                
                my $msg = $timeout ? "$timeout seconds " : "";
                print STDERR "Waiting ${msg}for access to the dpkg database... 
";
                eval {
                        local $SIG{ALRM} = sub { die "alarm\n" };
                        alarm $timeout if $timeout;
                        print STDERR "Waiting for lock, timeout = $timeout\n" 
if $debug;
                        fcntl(LOCK, F_SETLKW, $struct_flock) or
                                die "lockwait: Can't get lock or wait: $!";
                        alarm 0;
                };
                if ($@) {
                        die unless $@ eq "alarm\n";
                        print STDERR "\nTimed out, cancelling operation!\n";
                        exit(1);
                }
                print STDERR "done.\n";
        }
        print STDERR "Got the lock\n" if $debug;
        
        print STDERR "Clear close-on-exec, so exec'ed process gets the lock\n"
                if $debug;
        fcntl(LOCK, F_SETFD, 0) or die "lockwait: Can't clear close-on-exec: 
$!";
} else {
        print STDERR "Non-root, can't pre-lock\n" if $debug;
}

print STDERR "Execing $exec with args: ", join(' ', @ARGV), "\n" if $debug;
exec($exec, @ARGV) or die "lockwait: Exec failed: $!";

Index: setup.sh
===================================================================
RCS file: /cvsroot/fink/fink/setup.sh,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- setup.sh    2 Jan 2005 15:50:15 -0000       1.17
+++ setup.sh    27 Apr 2005 18:30:22 -0000      1.18
@@ -52,4 +52,8 @@
 echo "Creating postinstall script..."
 sed "s|@PREFIX@|$basepath|g" <postinstall.pl.in >postinstall.pl
 
+echo "Creating lockwait wrappers..."
+sed -e "s|@PREFIX@|$basepath|g" -e "s|@PROG@|dpkg|g" <lockwait.in 
>dpkg-lockwait
+sed -e "s|@PREFIX@|$basepath|g" -e "s|@PROG@|apt-get|g" <lockwait.in 
>apt-get-lockwait
+
 exit 0

Index: ChangeLog
===================================================================
RCS file: /cvsroot/fink/fink/ChangeLog,v
retrieving revision 1.329
retrieving revision 1.330
diff -u -d -r1.329 -r1.330
--- ChangeLog   27 Apr 2005 13:23:39 -0000      1.329
+++ ChangeLog   27 Apr 2005 18:30:21 -0000      1.330
@@ -1,3 +1,8 @@
+2005-04-27  Dave Vasilevsky  <[EMAIL PROTECTED]>
+
+       * lockwait.in, .cvsignore, setup.sh, install.sh: Install -lockwait
+       versions of dpkg and apt-get.
+
 2005-04-27  Dave Morrison  <[EMAIL PROTECTED]>
 
        * VERSION: Bumped package manager version to 0.24.5, a release



-------------------------------------------------------
SF.Net email is sponsored by: Tell us your software development plans!
Take this survey and enter to win a one-year sub to SourceForge.net
Plus IDC's 2005 look-ahead and a copy of this survey
Click here to start!  http://www.idcswdc.com/cgi-bin/survey?id=105hix
_______________________________________________
Fink-commits mailing list
Fink-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to