threads / patch / 13969

patchMake git reflog expire honour core.sharedRepository.

Subject: [PATCH] Make git reflog expire honour core.sharedRepository.

## tl;dr

5 messages between Jun 15, 2008 and Jun 16, 2008. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Pierre Habouzit· Jun 15, 2008, 21:37 UTC · lore
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
---
 builtin-reflog.c       |    1 +
 t/t1301-shared-repo.sh |   15 +++++++++++++++
 2 files changed, 16 insertions(+), 0 deletions(-)
 Some people like to have logAllRefUpdates even for bare repositories, and if
 shared, git-gc breaks them.
Show changes to 2 files +16 −0

builtin-reflog.c, t/t1301-shared-repo.sh

diff --git a/builtin-reflog.c b/builtin-reflog.c
index 897d1dc..430929f 100644
--- a/builtin-reflog.c
+++ b/builtin-reflog.c
@@ -308,6 +308,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
 		} else if (cmd->updateref && commit_ref(lock)) {
 			status |= error("Couldn't set %s", lock->ref_name);
 		}
+		adjust_shared_perm(log_file);
 	}
 	free(newlog_path);
 	free(log_file);
diff --git a/t/t1301-shared-repo.sh b/t/t1301-shared-repo.sh
index 5e4252a..6c78c8b 100755
--- a/t/t1301-shared-repo.sh
+++ b/t/t1301-shared-repo.sh
@@ -83,4 +83,19 @@ do
 
 done
 
+test_expect_success 'git reflog expire honors core.sharedRepository' '
+	git config core.sharedRepository group &&
+	git reflog expire --all &&
+	actual="$(ls -l .git/logs/refs/heads/master)" &&
+	case "$actual" in
+	-rw-rw-*)
+		: happy
+		;;
+	*)
+		echo Ooops, .git/logs/refs/heads/master is not 0662 [$actual]
+		false
+		;;
+	esac
+'
+
 test_done
-- 
1.5.6.rc3.149.gaacb0.dirty
Junio C Hamano· Jun 15, 2008, 22:47 UTC · re: Pierre Habouzit · lore

Re: [PATCH] Make git reflog expire honour core.sharedRepository.

Pierre Habouzit <madcoder@debian.org> writes:
Show 18 quoted lines
> Signed-off-by: Pierre Habouzit <madcoder@debian.org>
> ---
>  builtin-reflog.c       |    1 +
>  t/t1301-shared-repo.sh |   15 +++++++++++++++
>  2 files changed, 16 insertions(+), 0 deletions(-)
>
>  Some people like to have logAllRefUpdates even for bare repositories, and if
>  shared, git-gc breaks them.
>
> diff --git a/builtin-reflog.c b/builtin-reflog.c
> index 897d1dc..430929f 100644
> --- a/builtin-reflog.c
> +++ b/builtin-reflog.c
> @@ -308,6 +308,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
>  		} else if (cmd->updateref && commit_ref(lock)) {
>  			status |= error("Couldn't set %s", lock->ref_name);
>  		}
> +		adjust_shared_perm(log_file);

Why is it sane to do this unconditionally, instead of putting in another else or something?

Pierre Habouzit· Jun 15, 2008, 22:55 UTC · re: Junio C Hamano · lore

Re: [PATCH] Make git reflog expire honour core.sharedRepository.

On Sun, Jun 15, 2008 at 10:47:51PM +0000, Junio C Hamano wrote:
Show 23 quoted lines
> Pierre Habouzit <madcoder@debian.org> writes:
> 
> > Signed-off-by: Pierre Habouzit <madcoder@debian.org>
> > ---
> >  builtin-reflog.c       |    1 +
> >  t/t1301-shared-repo.sh |   15 +++++++++++++++
> >  2 files changed, 16 insertions(+), 0 deletions(-)
> >
> >  Some people like to have logAllRefUpdates even for bare repositories, and if
> >  shared, git-gc breaks them.
> >
> > diff --git a/builtin-reflog.c b/builtin-reflog.c
> > index 897d1dc..430929f 100644
> > --- a/builtin-reflog.c
> > +++ b/builtin-reflog.c
> > @@ -308,6 +308,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
> >  		} else if (cmd->updateref && commit_ref(lock)) {
> >  			status |= error("Couldn't set %s", lock->ref_name);
> >  		}
> > +		adjust_shared_perm(log_file);
> 
> Why is it sane to do this unconditionally, instead of putting in another
> else or something?
  Huh indeed, the proper patch should have been:

- } + } else { + adjust_shared_perm(log_file); + }

  It was inattention on my end, I focused more on writing a test case
than on the one liner fix. Sorry.
-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org
Johannes Schindelin· Jun 16, 2008, 15:15 UTC · re: Junio C Hamano · lore

Re: [PATCH] Make git reflog expire honour core.sharedRepository.

Hi,
On Sun, 15 Jun 2008, Junio C Hamano wrote:
Show 23 quoted lines
> Pierre Habouzit <madcoder@debian.org> writes:
> 
> > Signed-off-by: Pierre Habouzit <madcoder@debian.org>
> > ---
> >  builtin-reflog.c       |    1 +
> >  t/t1301-shared-repo.sh |   15 +++++++++++++++
> >  2 files changed, 16 insertions(+), 0 deletions(-)
> >
> >  Some people like to have logAllRefUpdates even for bare repositories, and if
> >  shared, git-gc breaks them.
> >
> > diff --git a/builtin-reflog.c b/builtin-reflog.c
> > index 897d1dc..430929f 100644
> > --- a/builtin-reflog.c
> > +++ b/builtin-reflog.c
> > @@ -308,6 +308,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
> >  		} else if (cmd->updateref && commit_ref(lock)) {
> >  			status |= error("Couldn't set %s", lock->ref_name);
> >  		}
> > +		adjust_shared_perm(log_file);
> 
> Why is it sane to do this unconditionally, instead of putting in another
> else or something?

Because adjust_shared_perm() checks for shared_repository, and returns when there is nothing to do.

IMO this is a sane convention, since you _never_ want to do this unconditionally anyway, and you avoid a lot of identical "if () adjust()" constructs.

Ciao, Dscho

Johannes Schindelin· Jun 16, 2008, 15:19 UTC · re: Johannes Schindelin · lore

Re: [PATCH] Make git reflog expire honour core.sharedRepository.

Hi,
On Mon, 16 Jun 2008, Johannes Schindelin wrote:
Show 28 quoted lines
> On Sun, 15 Jun 2008, Junio C Hamano wrote:
> 
> > Pierre Habouzit <madcoder@debian.org> writes:
> > 
> > > Signed-off-by: Pierre Habouzit <madcoder@debian.org>
> > > ---
> > >  builtin-reflog.c       |    1 +
> > >  t/t1301-shared-repo.sh |   15 +++++++++++++++
> > >  2 files changed, 16 insertions(+), 0 deletions(-)
> > >
> > >  Some people like to have logAllRefUpdates even for bare repositories, and if
> > >  shared, git-gc breaks them.
> > >
> > > diff --git a/builtin-reflog.c b/builtin-reflog.c
> > > index 897d1dc..430929f 100644
> > > --- a/builtin-reflog.c
> > > +++ b/builtin-reflog.c
> > > @@ -308,6 +308,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
> > >  		} else if (cmd->updateref && commit_ref(lock)) {
> > >  			status |= error("Couldn't set %s", lock->ref_name);
> > >  		}
> > > +		adjust_shared_perm(log_file);
> > 
> > Why is it sane to do this unconditionally, instead of putting in another
> > else or something?
> 
> Because adjust_shared_perm() checks for shared_repository, and returns 
> when there is nothing to do.

Ooops. I think I missed your point, namely that this should only be done when no error occurred. I just blame it on the short snippet.

Sorry, Dscho

← back to recent threads