diff --git a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php --- a/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php +++ b/src/applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php @@ -174,12 +174,13 @@ continue; } - // In Git, it's possible to tag a tag. We just skip these, we'll discover - // them when we process the target tag. See T11180. + // In Git, it's possible to tag anything. We just skip tags that don't + // point to a commit. See T11301. $fields = $ref->getRawFields(); + $ref_type = idx($fields, 'objecttype'); $tag_type = idx($fields, '*objecttype'); - if ($tag_type == 'tag') { - $this->log(pht('Skipping, this is a tag of a tag.')); + if ($ref_type != 'commit' && $tag_type != 'commit') { + $this->log(pht('Skipping, this is not a commit.')); continue; } diff --git a/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php b/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php --- a/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php +++ b/src/applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php @@ -30,6 +30,7 @@ $this->assertEqual( array( '763d4ab372445551c95fb5cccd1a7a223f5b2ac8', + '41fa35914aa19c1aa6e57004d9745c05929c3563', ), mpull($refs, 'getIdentifier')); } diff --git a/src/applications/repository/engine/__tests__/data/GT.git.tgz b/src/applications/repository/engine/__tests__/data/GT.git.tgz index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@