threads / patch / 50326

patch, 2 partsSetup working tree in describe

Subject: [PATCH 2/2] Setup working tree in describe

## tl;dr

4 messages between Jan 26, 2019 and Jan 26, 2019. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Sebastian Staudt· Jan 26, 2019, 10:40 UTC · lore
This ensures the given working tree is used for --dirty and --broken.
Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
---
 builtin/describe.c | 2 ++
 1 file changed, 2 insertions(+)
Show changes to builtin/describe.c +2 −0
diff --git a/builtin/describe.c b/builtin/describe.c
index cc118448ee..ba1a0b199b 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -601,6 +601,8 @@ int cmd_describe(int argc, const char **argv,
const char *prefix)
     if (!hashmap_get_size(&names) && !always)
         die(_("No names found, cannot describe anything."));

+    setup_work_tree();
+
     if (argc == 0) {
         if (broken) {
             struct child_process cp = CHILD_PROCESS_INIT;
-- 
2.20.1
Duy Nguyen· Jan 26, 2019, 11:01 UTC · re: Sebastian Staudt · lore

Re: [PATCH 2/2] Setup working tree in describe

On Sat, Jan 26, 2019 at 5:44 PM Sebastian Staudt <koraktor@gmail.com> wrote:
Show 18 quoted lines
>
> This ensures the given working tree is used for --dirty and --broken.
>
> Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
> ---
>  builtin/describe.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/builtin/describe.c b/builtin/describe.c
> index cc118448ee..ba1a0b199b 100644
> --- a/builtin/describe.c
> +++ b/builtin/describe.c
> @@ -601,6 +601,8 @@ int cmd_describe(int argc, const char **argv,
> const char *prefix)
>      if (!hashmap_get_size(&names) && !always)
>          die(_("No names found, cannot describe anything."));
>
> +    setup_work_tree();

This forces worktree's presence in all cases and will die() if worktree is not available. You need to check if broken or dirty is set and only call this function in that case.

Though in my opinion it's better to call before we need it in the "if (broke)" and "else if (dirty)" code blocks. That way you don't even need to check if it's "dirty" or "broken". Does "broken" really need this though? If it runs "git diff-index" separately, that command should handle this setup_work_tree() already, or we may need to fix it there, not here.

Show 6 quoted lines
> +
>      if (argc == 0) {
>          if (broken) {
>              struct child_process cp = CHILD_PROCESS_INIT;
> --
> 2.20.1
-- 
Duy
Sebastian Staudt· Jan 26, 2019, 14:07 UTC · re: Duy Nguyen · lore

Re: [PATCH 2/2] Setup working tree in describe

Am Sa., 26. Jan. 2019 um 12:01 Uhr schrieb Duy Nguyen <pclouds@gmail.com>:
Show 32 quoted lines
>
> On Sat, Jan 26, 2019 at 5:44 PM Sebastian Staudt <koraktor@gmail.com> wrote:
> >
> > This ensures the given working tree is used for --dirty and --broken.
> >
> > Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
> > ---
> >  builtin/describe.c | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/builtin/describe.c b/builtin/describe.c
> > index cc118448ee..ba1a0b199b 100644
> > --- a/builtin/describe.c
> > +++ b/builtin/describe.c
> > @@ -601,6 +601,8 @@ int cmd_describe(int argc, const char **argv,
> > const char *prefix)
> >      if (!hashmap_get_size(&names) && !always)
> >          die(_("No names found, cannot describe anything."));
> >
> > +    setup_work_tree();
>
> This forces worktree's presence in all cases and will die() if
> worktree is not available. You need to check if broken or dirty is set
> and only call this function in that case.
>
> Though in my opinion it's better to call before we need it in the "if
> (broke)" and "else if (dirty)" code blocks. That way you don't even
> need to check if it's "dirty" or "broken". Does "broken" really need
> this though? If it runs "git diff-index" separately, that command
> should handle this setup_work_tree() already, or we may need to fix it
> there, not here.
>

Thanks for your feedback. Are you sure that it will fail without a working tree? Is it even possible to have *no* working tree?

I already tested this with some real life examples, e.g.
    git --git-dir /some/path/.git describe

From inside and outside of other repositories. I didn‘t hit any errors so far.

Show 11 quoted lines
> > +
> >      if (argc == 0) {
> >          if (broken) {
> >              struct child_process cp = CHILD_PROCESS_INIT;
> > --
> > 2.20.1
>
>
>
> --
> Duy
Best regards,
    Sebastian
Am Sa., 26. Jan. 2019 um 12:01 Uhr schrieb Duy Nguyen <pclouds@gmail.com>:
Show 43 quoted lines
>
> On Sat, Jan 26, 2019 at 5:44 PM Sebastian Staudt <koraktor@gmail.com> wrote:
> >
> > This ensures the given working tree is used for --dirty and --broken.
> >
> > Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
> > ---
> >  builtin/describe.c | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/builtin/describe.c b/builtin/describe.c
> > index cc118448ee..ba1a0b199b 100644
> > --- a/builtin/describe.c
> > +++ b/builtin/describe.c
> > @@ -601,6 +601,8 @@ int cmd_describe(int argc, const char **argv,
> > const char *prefix)
> >      if (!hashmap_get_size(&names) && !always)
> >          die(_("No names found, cannot describe anything."));
> >
> > +    setup_work_tree();
>
> This forces worktree's presence in all cases and will die() if
> worktree is not available. You need to check if broken or dirty is set
> and only call this function in that case.
>
> Though in my opinion it's better to call before we need it in the "if
> (broke)" and "else if (dirty)" code blocks. That way you don't even
> need to check if it's "dirty" or "broken". Does "broken" really need
> this though? If it runs "git diff-index" separately, that command
> should handle this setup_work_tree() already, or we may need to fix it
> there, not here.
>
> > +
> >      if (argc == 0) {
> >          if (broken) {
> >              struct child_process cp = CHILD_PROCESS_INIT;
> > --
> > 2.20.1
>
>
>
> --
> Duy
Jeff King· Jan 26, 2019, 14:28 UTC · re: Sebastian Staudt · lore

Re: [PATCH 2/2] Setup working tree in describe

On Sat, Jan 26, 2019 at 03:07:54PM +0100, Sebastian Staudt wrote:
Show 9 quoted lines
> Are you sure that it will fail without a working tree?
> Is it even possible to have *no* working tree?
> 
> I already tested this with some real life examples, e.g.
> 
>     git --git-dir /some/path/.git describe
> 
> From inside and outside of other repositories.
> I didn‘t hit any errors so far.
Try:
  git clone --bare . bare.git
  cd bare.git
  git describe

That works with current versions of Git, but yields "fatal: this operation must be run in a work tree" with your patch.

-Peff
PS Your patches seem whitespace-damaged. You might want to look into
   using git-send-email.

← back to recent threads