Re: Q: does index-pack work in place on windows?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2 Feb 2011, Erik Faye-Lund wrote:

> On Wed, Feb 2, 2011 at 9:21 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> > ... or any other (operating / file) system where you cannot unlink a file
> > that is open?
> >
> > When you run
> >
> >    $ git clone git://some.where/repo/sitory.git local
> >    $ cd local
> >    $ git index-pack .git/objects/pack/pack-*.pack
> >
> > there is a call to write_idx_file() in builtin/index-pack.c, that feeds
> > the correct (and existing) name of the corresponding pack idx file.
> >
> > The callee in pack-write.c, after sorting the list of objects contained in
> > the pack, does this:
> >
> >        if (!index_name) {
> >                static char tmpfile[PATH_MAX];
> >                fd = odb_mkstemp(tmpfile, sizeof(tmpfile), "pack/tmp_idx_XXXXXX");
> >                index_name = xstrdup(tmpfile);
> >        } else {
> >                unlink(index_name);
> >                fd = open(index_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
> >        }
> >
> > and then writes out the pack index to the file descriptor.  But index-pack
> > uses the usual has_sha1_file() and read_sha1_file() interface to validate
> > the "existing" objects, and is likely to have mmapped the .idx file when
> > it called use_pack_window().  Which makes me suspect that this unlink (or
> > the open that immediately follows) may fail on systems that do not allow
> > unlink on inode that has still users.
> 
> ...and you're right:
> 
> $ git index-pack
> .git/objects/pack/pack-d634271f4d7ca70c00148e967a343c3c46cd7705.pack
> Unlink of file '.git/objects/pack/pack-d634271f4d7ca70c00148e967a343c3c46cd7705.idx'
> failed. Should I try again? (y/n)? n
> fatal: unable to create
> '.git/objects/pack/pack-d634271f4d7ca70c00148e967a343c3c46cd7705.idx':
> File exists

Why would you do such thing in the first place?

If the pack exists along with its index on disk, there is no point 
recreating it.  Maybe index-pack should just bail out early in that 
case.


Nicolas

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]