# why does builtin/init-db.c mention "/etc/core-git/templates/hooks/update"?

3 messages from 2018-05-28 to 2018-05-28. Participants: Robert P. J. Day, Sitaram Chamarty.
Thread: https://gitlist.dev/t/48586

## Robert P. J. Day, 2018-05-28 13:27

Subject: why does builtin/init-db.c mention "/etc/core-git/templates/hooks/update"?
Message-ID: <alpine.LFD.2.21.1805280920100.12022@localhost.localdomain>
URL: https://gitlist.dev/e/alpine.LFD.2.21.1805280920100.12022%40localhost.localdomain

```

  just noticed this in builtin/init-db.c:

... snip ...
#ifndef DEFAULT_GIT_TEMPLATE_DIR
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
#endif
... snip ...
static void copy_templates_1(struct strbuf *path, struct strbuf *template_path,
                             DIR *dir)
{
        size_t path_baselen = path->len;
        size_t template_baselen = template_path->len;
        struct dirent *de;

        /* Note: if ".git/hooks" file exists in the repository being
         * re-initialized, /etc/core-git/templates/hooks/update would
         * cause "git init" to fail here.  I think this is sane but
         * it means that the set of templates we ship by default, along
         * with the way the namespace under .git/ is organized, should
         * be really carefully chosen.
         */
... snip ...

  should the reference to /etc/core-git/templates/hooks/update instead
refer to the directory /usr/share/git-core/templates/..., given the
default directory defined just a few lines above it? (there is no such
directory, /etc/core-git/, on my system.)

  more to the point, is that actually what the "update" hook does? i
just looked at the shipped sample, "update.sample", and it seems to be
related to tags:

  #!/bin/sh
  #
  # An example hook script to block unannotated tags from entering.
  # Called by "git receive-pack" with arguments: refname sha1-old sha1-new
  #
  # To enable this hook, rename this file to "update".

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                  http://crashcourse.ca/dokuwiki

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

```

## Sitaram Chamarty, 2018-05-28 13:59

Subject: Re: why does builtin/init-db.c mention "/etc/core-git/templates/hooks/update"?
Message-ID: <20180528135902.GA362@sita-lt.atc.tcs.com>
URL: https://gitlist.dev/e/20180528135902.GA362%40sita-lt.atc.tcs.com
In-Reply-To: <alpine.LFD.2.21.1805280920100.12022@localhost.localdomain>

```
On Mon, May 28, 2018 at 09:27:18AM -0400, Robert P. J. Day wrote:

[snipped the rest because I really don't know]

>   more to the point, is that actually what the "update" hook does? i
> just looked at the shipped sample, "update.sample", and it seems to be
> related to tags:
> 
>   #!/bin/sh
>   #
>   # An example hook script to block unannotated tags from entering.

no that's just a sample.  An update hook can do pretty much
anything, and if it exits with 0 status code, the actual update
succeeds.  If it exists with any non-zero exit code, the update
will fail.

This is (usually) the basis for a lot of checks that people may
want, from commit message format to access control at the ref
(branch/tag) level for write operations.

```

## Robert P. J. Day, 2018-05-28 14:09

Subject: Re: why does builtin/init-db.c mention "/etc/core-git/templates/hooks/update"?
Message-ID: <alpine.LFD.2.21.1805281006250.13672@localhost.localdomain>
URL: https://gitlist.dev/e/alpine.LFD.2.21.1805281006250.13672%40localhost.localdomain
In-Reply-To: <20180528135902.GA362@sita-lt.atc.tcs.com>

```
On Mon, 28 May 2018, Sitaram Chamarty wrote:

> On Mon, May 28, 2018 at 09:27:18AM -0400, Robert P. J. Day wrote:
>
> [snipped the rest because I really don't know]
>
> >   more to the point, is that actually what the "update" hook does? i
> > just looked at the shipped sample, "update.sample", and it seems to be
> > related to tags:
> >
> >   #!/bin/sh
> >   #
> >   # An example hook script to block unannotated tags from entering.
>
> no that's just a sample.  An update hook can do pretty much
> anything, and if it exits with 0 status code, the actual update
> succeeds.  If it exists with any non-zero exit code, the update will
> fail.
>
> This is (usually) the basis for a lot of checks that people may
> want, from commit message format to access control at the ref
> (branch/tag) level for write operations.

  i'm not convinced that that reference is "just a sample." the
comment in builtin/init-db.c reads:

  /* Note: if ".git/hooks" file exists in the repository being
   * re-initialized, /etc/core-git/templates/hooks/update would
   * cause "git init" to fail here...

the reference to "/etc/core-git/templates/hooks/update" might lead
some people to believe that that somehow refers to the "update.sample"
hook that comes with a new repo, but that hook is specifically related
to git-receive-pack, and has nothing to do with re-initalizing a repo,
AFAICT.

  i'm just suggesting that that comment in buildin/init-db.c seems
more than a little inaccurate.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                  http://crashcourse.ca/dokuwiki

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

```
