summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-11-21 10:32:19 +0800
committerGitHub <noreply@github.com>2024-11-21 10:32:19 +0800
commit81ec66c257fb45aba1c3b5c61719ac83bd52a811 (patch)
tree846914f32b12110cb0b249e14befc4a307876abf
parent3661b14d9703bba1fabf1444a374a7be9fd8926a (diff)
downloadgitea-81ec66c257fb45aba1c3b5c61719ac83bd52a811.tar.gz
gitea-81ec66c257fb45aba1c3b5c61719ac83bd52a811.zip
Fix submodule parsing (#32571) (#32577)
A quick fix for #32568 Partially backport from #32571
-rw-r--r--modules/git/commit.go36
-rw-r--r--modules/git/commit_test.go42
2 files changed, 64 insertions, 14 deletions
diff --git a/modules/git/commit.go b/modules/git/commit.go
index 86adaa79a6..5f52a9d1ab 100644
--- a/modules/git/commit.go
+++ b/modules/git/commit.go
@@ -377,31 +377,43 @@ func (c *Commit) GetSubModules() (*ObjectCache, error) {
}
defer rd.Close()
+ return configParseSubModules(rd)
+}
+
+func configParseSubModules(rd io.Reader) (*ObjectCache, error) {
scanner := bufio.NewScanner(rd)
- c.submoduleCache = newObjectCache()
- var ismodule bool
- var path string
+ submoduleCache := newObjectCache()
+ var subModule *SubModule
for scanner.Scan() {
- if strings.HasPrefix(scanner.Text(), "[submodule") {
- ismodule = true
+ line := strings.TrimSpace(scanner.Text())
+ if strings.HasPrefix(line, "[") {
+ if subModule != nil {
+ submoduleCache.Set(subModule.Name, subModule)
+ subModule = nil
+ }
+ if strings.HasPrefix(line, "[submodule") {
+ subModule = &SubModule{}
+ }
continue
}
- if ismodule {
- fields := strings.Split(scanner.Text(), "=")
+ if subModule != nil {
+ fields := strings.Split(line, "=")
k := strings.TrimSpace(fields[0])
if k == "path" {
- path = strings.TrimSpace(fields[1])
+ subModule.Name = strings.TrimSpace(fields[1])
} else if k == "url" {
- c.submoduleCache.Set(path, &SubModule{path, strings.TrimSpace(fields[1])})
- ismodule = false
+ subModule.URL = strings.TrimSpace(fields[1])
}
}
}
- if err = scanner.Err(); err != nil {
+ if subModule != nil {
+ submoduleCache.Set(subModule.Name, subModule)
+ }
+ if err := scanner.Err(); err != nil {
return nil, fmt.Errorf("GetSubModules scan: %w", err)
}
- return c.submoduleCache, nil
+ return submoduleCache, nil
}
// GetSubModule get the sub module according entryname
diff --git a/modules/git/commit_test.go b/modules/git/commit_test.go
index 0ddeb182ef..8ed30262f7 100644
--- a/modules/git/commit_test.go
+++ b/modules/git/commit_test.go
@@ -135,7 +135,7 @@ author KN4CK3R <admin@oldschoolhack.me> 1711702962 +0100
committer KN4CK3R <admin@oldschoolhack.me> 1711702962 +0100
encoding ISO-8859-1
gpgsig -----BEGIN PGP SIGNATURE-----
-
+<SPACE>
iQGzBAABCgAdFiEE9HRrbqvYxPT8PXbefPSEkrowAa8FAmYGg7IACgkQfPSEkrow
Aa9olwv+P0HhtCM6CRvlUmPaqswRsDPNR4i66xyXGiSxdI9V5oJL7HLiQIM7KrFR
gizKa2COiGtugv8fE+TKqXKaJx6uJUJEjaBd8E9Af9PrAzjWj+A84lU6/PgPS8hq
@@ -150,7 +150,7 @@ gpgsig -----BEGIN PGP SIGNATURE-----
-----END PGP SIGNATURE-----
ISO-8859-1`
-
+ commitString = strings.ReplaceAll(commitString, "<SPACE>", " ")
sha := &Sha1Hash{0xfe, 0xaf, 0x4b, 0xa6, 0xbc, 0x63, 0x5f, 0xec, 0x44, 0x2f, 0x46, 0xdd, 0xd4, 0x51, 0x24, 0x16, 0xec, 0x43, 0xc2, 0xc2}
gitRepo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare"))
assert.NoError(t, err)
@@ -362,3 +362,41 @@ func Test_GetCommitBranchStart(t *testing.T) {
assert.NotEmpty(t, startCommitID)
assert.EqualValues(t, "9c9aef8dd84e02bc7ec12641deb4c930a7c30185", startCommitID)
}
+
+func TestConfigSubModule(t *testing.T) {
+ input := `
+[core]
+path = test
+
+[submodule "submodule1"]
+ path = path1
+ url = https://gitea.io/foo/foo
+ #branch = b1
+
+[other1]
+branch = master
+
+[submodule "submodule2"]
+ path = path2
+ url = https://gitea.io/bar/bar
+ branch = b2
+
+[other2]
+branch = main
+
+[submodule "submodule3"]
+ path = path3
+ url = https://gitea.io/xxx/xxx
+`
+
+ subModules, err := configParseSubModules(strings.NewReader(input))
+ assert.NoError(t, err)
+ assert.Len(t, subModules.cache, 3)
+
+ sm1, _ := subModules.Get("path1")
+ assert.Equal(t, &SubModule{Name: "path1", URL: "https://gitea.io/foo/foo"}, sm1)
+ sm2, _ := subModules.Get("path2")
+ assert.Equal(t, &SubModule{Name: "path2", URL: "https://gitea.io/bar/bar"}, sm2)
+ sm3, _ := subModules.Get("path3")
+ assert.Equal(t, &SubModule{Name: "path3", URL: "https://gitea.io/xxx/xxx"}, sm3)
+}