This is the mail archive of the cygwin-apps@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Setup: hardlinks & percentages. (+patches)


Op Thu, 27 Jan 2005 15:06:08 -0000 schreef Max Bowsher
in <00fa01c50481$bef337b0$e6ec6f83@robinson.cam.ac.uk>:
:  Bas van Gompel wrote:
: > 2005-01-07  Bas van Gompel  <patch-cygsup.buzz@bavag.tmfweb.nl>
: >
: > * archive.cc (archive::extract_file): Use prefixPath for linktarget
: > on hardlinks.
: >
: >
: > --- setup/archive.cc 25 Dec 2004 23:05:56 -0000 2.10
: > +++ setup/archive.cc 7 Jan 2005 20:39:42 -0000
: > @@ -161,7 +161,7 @@ archive::extract_file (archive * source,
: >  io_stream::remove (destfilename);
: >  int ok =
: >    io_stream::mklink (destfilename,
: > -       prefixURL + source->linktarget (),
: > +       prefixURL + prefixPath + source->linktarget (),
: >       IO_STREAM_HARDLINK);
: >  /* FIXME: check what tar's filelength is set to for hardlinks */
: >  source->skip_file ();
:
:  I agree something is wrong here, but there are the following issues to 
:  consider:

Well, lets consider them, then.

:  A copy/paste of virtually the same code above deals with symlinks. 
:  Presumably that needs fixing too.

That would be wrong. The target for symlinks is stored relative to
their position, or absolute, AIUI.

:  Also, might we need to handle relative and absolute linktarget paths 
:  differently here?

That appears not to be needed. All hardlinks are stored relative to
the top of the archive AFAICT. Links to outside the stored tree are
replaced with copies.

To see how this works, consider the following script and output:

===begin script
#!/bin/sh
cd /tmp
mkdir test
cd test
mkdir outside
echo testfile >outside/afile1
echo testfile >outside/afile2
mkdir inside
cd inside
echo another testfile >afile
ln afile link
ln -s afile slink
ln /tmp/test/inside/afile alink
ln -s /tmp/test/inside/afile salink
ln ../outside/afile1 xlink
ln -s ../outside/afile2 sxlink
ln /tmp/test/outside/afile1 axlink
ln -s /tmp/test/outside/afile2 saxlink
mkdir adir
cd adir
echo yet another testfile >afile
ln ../afile link
ln -s ../afile slink
cd ..
ln adir/afile dlink
ln -s adir/afile sdlink
cd ..
ls -Rl
tar -jcf test.tar.bz2 inside
tar -jtvf test.tar.bz2
cd ..
rm -rf test
#!/bin/sh
cd /tmp
mkdir test
cd test
mkdir outside
echo testfile >outside/afile
mkdir inside
cd inside
echo another testfile >afile
ln afile link
ln -s afile slink
ln /tmp/test/inside/afile alink
ln -s /tmp/test/inside/afile salink
ln ../outside/afile xlink
ln -s ../outside/afile sxlink
ln /tmp/test/outside/afile axlink
ln -s /tmp/test/outside/afile saxlink
mkdir adir
cd adir
echo yet another testfile >afile
ln ../afile link
ln -s ../afile slink
cd ..
ln adir/afile dlink
ln -s adir/afile sdlink
cd ..
ls -Rl
tar -jcf test.tar.bz2 inside
tar -jtvf test.tar.bz2
cd ..
rm -rf test

===end script

===atsrt output
.:
total 0
drwxr-xr-x+ 3 Buzz Geen 0 Jan 28 02:19 inside
drwxr-xr-x+ 2 Buzz Geen 0 Jan 28 02:19 outside

./inside:
total 11
drwxr-xr-x+ 2 Buzz Geen  0 Jan 28 02:19 adir
-rw-r--r--  4 Buzz Geen 17 Jan 28 02:19 afile
-rw-r--r--  4 Buzz Geen 17 Jan 28 02:19 alink
-rw-r--r--  3 Buzz Geen  9 Jan 28 02:19 axlink
-rw-r--r--  2 Buzz Geen 21 Jan 28 02:19 dlink
-rw-r--r--  4 Buzz Geen 17 Jan 28 02:19 link
lrwxrwxrwx  1 Buzz Geen 22 Jan 28 02:19 salink -> /tmp/test/inside/afile
lrwxrwxrwx  1 Buzz Geen 24 Jan 28 02:19 saxlink -> /tmp/test/outside/afile2
lrwxrwxrwx  1 Buzz Geen 10 Jan 28 02:19 sdlink -> adir/afile
lrwxrwxrwx  1 Buzz Geen  5 Jan 28 02:19 slink -> afile
lrwxrwxrwx  1 Buzz Geen 17 Jan 28 02:19 sxlink -> ../outside/afile2
-rw-r--r--  3 Buzz Geen  9 Jan 28 02:19 xlink

./inside/adir:
total 3
-rw-r--r--  2 Buzz Geen 21 Jan 28 02:19 afile
-rw-r--r--  4 Buzz Geen 17 Jan 28 02:19 link
lrwxrwxrwx  1 Buzz Geen  8 Jan 28 02:19 slink -> ../afile

./outside:
total 2
-rw-r--r--  3 Buzz Geen 9 Jan 28 02:19 afile1
-rw-r--r--  1 Buzz Geen 9 Jan 28 02:19 afile2
drwxr-xr-x Buzz/Geen         0 2005-01-28 02:19:05 inside/
drwxr-xr-x Buzz/Geen         0 2005-01-28 02:19:05 inside/adir/
-rw-r--r-- Buzz/Geen        21 2005-01-28 02:19:05 inside/adir/afile
-rw-r--r-- Buzz/Geen        17 2005-01-28 02:19:05 inside/adir/link
lrwxrwxrwx Buzz/Geen         0 2005-01-28 02:19:05 inside/adir/slink -> ../afile
-rw-r--r-- Buzz/Geen         0 2005-01-28 02:19:05 inside/afile link to inside/adir/link
-rw-r--r-- Buzz/Geen         0 2005-01-28 02:19:05 inside/alink link to inside/adir/link
-rw-r--r-- Buzz/Geen         9 2005-01-28 02:19:05 inside/axlink
-rw-r--r-- Buzz/Geen         0 2005-01-28 02:19:05 inside/dlink link to inside/adir/afile
-rw-r--r-- Buzz/Geen         0 2005-01-28 02:19:05 inside/link link to inside/adir/link
lrwxrwxrwx Buzz/Geen         0 2005-01-28 02:19:05 inside/salink -> /tmp/test/inside/afile
lrwxrwxrwx Buzz/Geen         0 2005-01-28 02:19:05 inside/saxlink -> /tmp/test/outside/afile2
lrwxrwxrwx Buzz/Geen         0 2005-01-28 02:19:05 inside/sdlink -> adir/afile
lrwxrwxrwx Buzz/Geen         0 2005-01-28 02:19:05 inside/slink -> afile
lrwxrwxrwx Buzz/Geen         0 2005-01-28 02:19:05 inside/sxlink -> ../outside/afile2
-rw-r--r-- Buzz/Geen         0 2005-01-28 02:19:05 inside/xlink link to inside/axlink

===end output

[...]


L8r,

Buzz.
-- 
  ) |  | ---/ ---/  Yes, this | This message consists of true | I do not
--  |  |   /    /   really is |   and false bits entirely.    | mail for
  ) |  |  /    /    a 72 by 4 +-------------------------------+ any1 but
--  \--| /--- /---  .sigfile. |   |perl -pe "s.u(z)\1.as."    | me. 4^re


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]