1

This is a weird one. The code below works as expected inside a batch file:

FOR /F "tokens=1,2,3,* delims=-" %%G IN (
    'git describe --long --always --dirty --broken'
) do (
    set tag_name=%%G
    set versions_from_tag=%%H
    set hash=%%I
    set dirty_broken=%%J
)

When I try to add the --abbrev option I get a fatal error:

FOR /F "tokens=1,2,3,* delims=-" %%G IN (
    'git describe --long --always --dirty --broken --abbrev=8'
) do (
    set tag_name=%%G
    set versions_from_tag=%%H
    set hash=%%I
    set dirty_broken=%%J
)

outputs:fatal: --dirty is incompatible with commit-ishes

but if I run the command outside of the FOR /F it works as expected:

git describe --long --always --dirty --broken --abbrev=8

outputs 2.11-13-ga03306e6-dirty

I'm assuming this probably has something to do with the environment of the FOR /F command?

Rick
  • 1,240
  • 14
  • 21

1 Answers1

0

Thanks to elzooilogico.

As detailed here, the = needs to be escaped like ^= when used in the subject of the FOR /F command.

Without the escape I think the 8 was being treated as the commit-ish string.

FOR /F "tokens=1,2,3,* delims=-" %%G IN (
    'git describe --long --always --dirty --broken --abbrev^=8'
) do (
    set tag_name=%%G
    set versions_from_tag=%%H
    set hash=%%I00
    set dirty_broken=%%J
)

Worked as expected.

Rick
  • 1,240
  • 14
  • 21