Skip to content

Commit 362b24e

Browse files
committed
feat(provider): Repository provider infers the repository's name when omitted
1 parent 7507cb5 commit 362b24e

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

provider/generic_repository.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package provider
33
import (
44
"errors"
55
"srcfingerprint/cloner"
6+
"strings"
67
"time"
78
)
89

@@ -44,11 +45,29 @@ func NewGenericProvider(options Options) Provider {
4445

4546
func (p *GenericProvider) Gather(user string) ([]GitRepository, error) {
4647
if user == "" {
47-
return nil, errors.New("This provider requires a object. Example: src-fingerprint -p repository -u '[email protected]:GitGuardian/gg-shield.git'") // nolint
48+
return nil, errors.New(
49+
"this provider requires an object. " +
50+
"Example: src-fingerprint -p repository -u 'https://github.com/GitGuardian/src-fingerprint'",
51+
)
52+
}
53+
54+
var name string
55+
if p.options.RepositoryName != "" {
56+
name = p.options.RepositoryName
57+
} else {
58+
// Split the repository URL or patch and use the last part
59+
parts := strings.Split(user, "/")
60+
if parts[len(parts)-1] == ".git" && len(parts) > 2 {
61+
// As "path/to/project/.git" is valid, we use the second to last part when the last part is ".git"
62+
name = parts[len(parts)-2]
63+
} else {
64+
name = parts[len(parts)-1]
65+
name = strings.TrimSuffix(name, ".git")
66+
}
4867
}
4968

5069
return []GitRepository{&Repository{
51-
name: p.options.RepositoryName,
70+
name: name,
5271
httpURL: user,
5372
createdAt: time.Time{},
5473
storageSize: 0,

tests/integration_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ def get_output_repos(output_path) -> Set[str]:
3333

3434

3535
def test_local_repository():
36-
run_src_fingerprint(provider="repository", args=["--object", "."])
36+
run_src_fingerprint(provider="repository", args=["--object", "../src-fingerprint"])
3737
repos = get_output_repos("fingerprints.jsonl")
3838
os.remove("fingerprints.jsonl")
3939
assert len(repos) == 1
40+
assert repos == {"src-fingerprint"}
4041

4142

4243
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)