Skip to content

Commit 2e6f740

Browse files
authored
fix: only use Reference as the commit if it does not have a dot for Packagist packages (#342)
1 parent 34903ef commit 2e6f740

File tree

3 files changed

+400
-2
lines changed

3 files changed

+400
-2
lines changed

pkg/lockfile/parse-composer-lock.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66
"os"
7+
"strings"
78
)
89

910
type ComposerPackage struct {
@@ -21,6 +22,17 @@ type ComposerLock struct {
2122

2223
const ComposerEcosystem Ecosystem = "Packagist"
2324

25+
func extractCommit(pkg ComposerPackage) string {
26+
commit := pkg.Dist.Reference
27+
28+
// a dot means the reference is likely a tag, rather than a commit
29+
if strings.Contains(commit, ".") {
30+
commit = ""
31+
}
32+
33+
return commit
34+
}
35+
2436
func ParseComposerLock(pathToLockfile string) ([]PackageDetails, error) {
2537
var parsedLockfile *ComposerLock
2638

@@ -47,7 +59,7 @@ func ParseComposerLock(pathToLockfile string) ([]PackageDetails, error) {
4759
packages = append(packages, PackageDetails{
4860
Name: composerPackage.Name,
4961
Version: composerPackage.Version,
50-
Commit: composerPackage.Dist.Reference,
62+
Commit: extractCommit(composerPackage),
5163
Ecosystem: ComposerEcosystem,
5264
CompareAs: ComposerEcosystem,
5365
})
@@ -57,7 +69,7 @@ func ParseComposerLock(pathToLockfile string) ([]PackageDetails, error) {
5769
packages = append(packages, PackageDetails{
5870
Name: composerPackage.Name,
5971
Version: composerPackage.Version,
60-
Commit: composerPackage.Dist.Reference,
72+
Commit: extractCommit(composerPackage),
6173
Ecosystem: ComposerEcosystem,
6274
CompareAs: ComposerEcosystem,
6375
})

pkg/lockfile/parse-composer-lock_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,44 @@ func TestParseComposerLock_TwoPackagesAlt(t *testing.T) {
133133
},
134134
})
135135
}
136+
137+
func TestParseComposerLock_DrupalPackages(t *testing.T) {
138+
t.Parallel()
139+
140+
packages, err := lockfile.ParseComposerLock("testdata/composer/drupal-packages.json")
141+
142+
if err != nil {
143+
t.Errorf("Got unexpected error: %v", err)
144+
}
145+
146+
expectPackages(t, packages, []lockfile.PackageDetails{
147+
{
148+
Name: "drupal/core",
149+
Version: "10.4.5",
150+
Ecosystem: lockfile.ComposerEcosystem,
151+
CompareAs: lockfile.ComposerEcosystem,
152+
Commit: "5247dbaa65b42b601058555f4a8b2bd541f5611f",
153+
},
154+
{
155+
Name: "drupal/tfa",
156+
Version: "2.0.0-alpha4",
157+
Ecosystem: lockfile.ComposerEcosystem,
158+
CompareAs: lockfile.ComposerEcosystem,
159+
Commit: "",
160+
},
161+
{
162+
Name: "drupal/field_time",
163+
Version: "1.0.0-beta5",
164+
Ecosystem: lockfile.ComposerEcosystem,
165+
CompareAs: lockfile.ComposerEcosystem,
166+
Commit: "",
167+
},
168+
{
169+
Name: "theseer/tokenizer",
170+
Version: "1.1.3",
171+
Ecosystem: lockfile.ComposerEcosystem,
172+
CompareAs: lockfile.ComposerEcosystem,
173+
Commit: "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
174+
},
175+
})
176+
}

0 commit comments

Comments
 (0)