mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Prevent hang in git cat-file if repository is not a valid repository and other fixes (#17991)
This PR contains multiple fixes. The most important of which is:
* Prevent hang in git cat-file if the repository is not a valid repository 
    
    Unfortunately it appears that if git cat-file is run in an invalid
    repository it will hang until stdin is closed. This will result in
    deadlocked /pulls pages and dangling git cat-file calls if a broken
    repository is tried to be reviewed or pulls exists for a broken
    repository.
    Fix #14734
    Fix #9271
    Fix #16113
Otherwise there are a few small other fixes included which this PR was initially intending to fix:
* Fix panic on partial compares due to missing PullRequestWorkInProgressPrefixes
* Fix links on pulls pages  due to regression from #17551 - by making most /issues routes match /pulls too - Fix #17983
* Fix links on feeds pages due to another regression from #17551 but also fix issue with syncing tags - Fix #17943
* Add missing locale entries for oauth group claims
* Prevent NPEs if ColorFormat is called on nil users, repos or teams.
			
			
This commit is contained in:
		@@ -255,6 +255,25 @@ func prepareTestEnv(t testing.TB, skip ...int) func() {
 | 
			
		||||
	assert.NoError(t, util.RemoveAll(setting.RepoRootPath))
 | 
			
		||||
 | 
			
		||||
	assert.NoError(t, util.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath))
 | 
			
		||||
	ownerDirs, err := os.ReadDir(setting.RepoRootPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		assert.NoError(t, err, "unable to read the new repo root: %v\n", err)
 | 
			
		||||
	}
 | 
			
		||||
	for _, ownerDir := range ownerDirs {
 | 
			
		||||
		if !ownerDir.Type().IsDir() {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name()))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			assert.NoError(t, err, "unable to read the new repo root: %v\n", err)
 | 
			
		||||
		}
 | 
			
		||||
		for _, repoDir := range repoDirs {
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0755)
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0755)
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0755)
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0755)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return deferFn
 | 
			
		||||
}
 | 
			
		||||
@@ -532,4 +551,23 @@ func resetFixtures(t *testing.T) {
 | 
			
		||||
	assert.NoError(t, unittest.LoadFixtures())
 | 
			
		||||
	assert.NoError(t, util.RemoveAll(setting.RepoRootPath))
 | 
			
		||||
	assert.NoError(t, util.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath))
 | 
			
		||||
	ownerDirs, err := os.ReadDir(setting.RepoRootPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		assert.NoError(t, err, "unable to read the new repo root: %v\n", err)
 | 
			
		||||
	}
 | 
			
		||||
	for _, ownerDir := range ownerDirs {
 | 
			
		||||
		if !ownerDir.Type().IsDir() {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name()))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			assert.NoError(t, err, "unable to read the new repo root: %v\n", err)
 | 
			
		||||
		}
 | 
			
		||||
		for _, repoDir := range repoDirs {
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0755)
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0755)
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0755)
 | 
			
		||||
			_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0755)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user