From: Matthias Kestenholz <lists@irregular•ch>
To: Junio C Hamano <junkio@cox•net>
Cc: git@vger•kernel.org
Subject: Re: Bug encountered while comitting
Date: Sat, 25 Mar 2006 02:15:27 +0100 [thread overview]
Message-ID: <20060325011527.GA23600@spinlock.ch> (raw)
In-Reply-To: <7vacbfzc3u.fsf@assigned-by-dhcp.cox.net>
* Junio C Hamano (junkio@cox•net) wrote:
> Matthias Kestenholz <lists@irregular•ch> writes:
>
> > The PHP script created directories under .git/objects which were
> > only writable by www-data. There were other directories which were
> > owned by user mk and group www-data, and they were group writable.
> >
> > So, I had write access to only a part of the .git directory.
>
> core.sharedrepository perhaps?
>
> While it probably is not a good idea to have you in www-data, it
> appears that is essentially you will end up doing, because PHP
> scripts that may _create_ new directories better not to have
> privilege to give newly created directories away to you (busting
> your quota), so they will be owned by www-data.www-data and for
> you to be able to write into it you either need to be www-data
> user or in www-data group, with core.sharedrepostiory set.
>
Thanks for your answer; I did not know about this option (I should
probably re-read all the docs).
Anyway, I think git should never corrupt a repository, even if it
does not have the write permissions it needs.
The following commands were sufficient to create a corrupt
repository with git (v1.2.4-1, debian package):
$ git-init-db
$ echo test > file
$ git-update-index --add file ; git commit -m 'message'
repeat (f.e. 10 times):
$ echo test >> file
$ git-update-index file ; git commit -m 'message'
$ sudo chown root .git/objects/*
repeat the modification and commit commands until you get a message
similar to the following:
unable to write sha1 filename .git/objects/90/b33..: Permission denied
fatal: 90b33... is not a valid 'tree' object
unable to write sha1 filename .git/objects/ba/fe4..: Permission denied
error: file: failed to insert into database
fatal: Unable to process file file
etc...
The result of this all is: refs/heads/master might now point to a
non-existant commit object. Every git command now errors out with:
fatal: bad tree object HEAD
and git-log shows no output (probably since it does not find a
commit to begin with)
git-commit should abort as soon as it encounters an error and not
update HEAD.
Thanks,
Matthias
(Note: To find the last valid commit object, I could just scan the
objects directory for the recently modified files and write the sha1
value to refs/heads/master, so I had no data loss.)
--
:wq
next prev parent reply other threads:[~2006-03-25 1:16 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-24 18:39 Bug encountered while comitting Matthias Kestenholz
2006-03-24 19:34 ` Andreas Ericsson
2006-03-25 1:15 ` Matthias Kestenholz
2006-03-24 22:55 ` Junio C Hamano
2006-03-25 1:15 ` Matthias Kestenholz [this message]
2006-03-25 6:17 ` Junio C Hamano
2006-03-25 10:23 ` Matthias Kestenholz
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=20060325011527.GA23600@spinlock.ch \
--to=lists@irregular$(echo .)ch \
--cc=git@vger$(echo .)kernel.org \
--cc=junkio@cox$(echo .)net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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