From: Robin Rosenberg <robin.rosenberg.lists@dewire.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Git ML <git@vger.kernel.org>,
"Shawn O. Pearce" <spearce@spearce.org>
Subject: Re: gc considered dangerous
Date: Sun, 8 Feb 2009 21:10:43 +0100 [thread overview]
Message-ID: <200902082110.44151.robin.rosenberg.lists@dewire.com> (raw)
In-Reply-To: <7vhc34y9za.fsf@gitster.siamese.dyndns.org>
söndag 08 februari 2009 21:00:57 skrev Junio C Hamano:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
> > My preliminary guess is that this code in pack-write.c needs to use the
> > lock file paradigm:
> >
> > if (!index_name) {
> > [...]
> > } else {
> > unlink(index_name);
> > fd = open(index_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
> > }
>
> Whoa. That particular code has been (and is still) correct.
>
> When repacking we should pack into a temporary pack and idx file and then
> replace the real ones after both new pack and its idx are successfully
> written, and I thought that is how we've been doing this all the time.
> Maybe the caller has been broken at some point? Sigh...
>
I intend to test something like this (as of yet completely untested)
-- robin
commit 25a77c80efeb221d165db0bef66b4498aacfac96
Author: Robin Rosenberg <robin.rosenberg@dewire.com>
Date: Sun Feb 8 20:59:30 2009 +0100
Make repack more fail-safe
If renaming an old pack fails try to restore halfway renames
befor failing. The basis is the assumption that this occurs
because a files is locked for reading on Windows.
diff --git a/git-repack.sh b/git-repack.sh
index 458a497..e816997 100755
--- a/git-repack.sh
+++ b/git-repack.sh
@@ -94,14 +94,25 @@ for name in $names ; do
chmod a-w "$PACKTMP-$name.idx"
mkdir -p "$PACKDIR" || exit
- for sfx in pack idx
- do
- if test -f "$PACKDIR/pack-$name.$sfx"
- then
- mv -f "$PACKDIR/pack-$name.$sfx" \
- "$PACKDIR/old-pack-$name.$sfx"
- fi
- done &&
+ if test -f "$PACKDIR/pack-$name.pack"
+ then
+ mv -f "$PACKDIR/pack-$name.pack" \
+ "$PACKDIR/old-pack-$name.pack"
+ fi &&
+ if test -f "$PACKDIR/pack-$name.idx"
+ then
+ mv -f "$PACKDIR/pack-$name.idx" \
+ "$PACKDIR/old-pack-$name.idx" ||
+ (
+ mv -f $PACKDIR/old-pack-$name.pack" \
+ "$PACKDIR/pack-$name.pack" || (
+ echo >&2 "Failed to restore after a failure to rename pack-$name to old-$pack"
+ echo >&2 "Please aquire advice on how to recover from this"
+ echo >&2 "situation before you proceed."
+ false
+ )
+ )
+ fi &&
mv -f "$PACKTMP-$name.pack" "$PACKDIR/pack-$name.pack" &&
mv -f "$PACKTMP-$name.idx" "$PACKDIR/pack-$name.idx" &&
test -f "$PACKDIR/pack-$name.pack" &&
@@ -109,6 +120,8 @@ for name in $names ; do
echo >&2 "Couldn't replace the existing pack with updated one."
echo >&2 "The original set of packs have been saved as"
echo >&2 "old-pack-$name.{pack,idx} in $PACKDIR."
+ echo >&2 "Please aquire advice on how to recover from this situation"
+ echo >&2 "before you proceed."
exit 1
}
rm -f "$PACKDIR/old-pack-$name.pack" "$PACKDIR/old-pack-$name.idx"
next prev parent reply other threads:[~2009-02-08 20:12 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-08 2:47 gc considered dangerous Robin Rosenberg
2009-02-08 14:34 ` Robin Rosenberg
2009-02-08 14:56 ` Johannes Schindelin
2009-02-08 16:04 ` Robin Rosenberg
2009-02-08 17:18 ` Johannes Schindelin
2009-02-08 18:24 ` Steffen Prohaska
2009-02-08 19:37 ` Robin Rosenberg
2009-02-08 20:00 ` Junio C Hamano
2009-02-08 20:08 ` Robin Rosenberg
2009-02-08 20:10 ` Robin Rosenberg [this message]
2009-02-09 6:59 ` Mike Hommey
2009-02-09 7:43 ` Junio C Hamano
2009-02-08 20:09 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200902082110.44151.robin.rosenberg.lists@dewire.com \
--to=robin.rosenberg.lists@dewire.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).