mirror of
https://codeberg.org/forgejo-aneksajo/forgejo-aneksajo.git
synced 2025-07-23 05:00:06 +02:00
Compare commits
2 commits
7bbc84ed5e
...
977627fe6e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
977627fe6e | ||
![]() |
85fb7bafd7 |
3 changed files with 23 additions and 17 deletions
|
@ -152,10 +152,7 @@ func IsAnnexRepo(repo *git.Repository) bool {
|
|||
return err == nil
|
||||
}
|
||||
|
||||
var (
|
||||
uuid2repoPathCache = make(map[string]string)
|
||||
repoPath2uuidCache = make(map[string]string)
|
||||
)
|
||||
var uuid2repoPathCache = make(map[string]string)
|
||||
|
||||
func Init() error {
|
||||
if !setting.Annex.Enabled {
|
||||
|
@ -179,10 +176,6 @@ func updateUUID2RepoPathCache() error {
|
|||
}
|
||||
for _, configFile := range configFiles {
|
||||
repoPath := strings.TrimSuffix(configFile, "/config")
|
||||
_, ok := repoPath2uuidCache[repoPath]
|
||||
if ok {
|
||||
continue
|
||||
}
|
||||
config, err := ini.Load(configFile)
|
||||
if err != nil {
|
||||
continue
|
||||
|
@ -190,7 +183,6 @@ func updateUUID2RepoPathCache() error {
|
|||
repoUUID := config.Section("annex").Key("uuid").Value()
|
||||
if repoUUID != "" {
|
||||
uuid2repoPathCache[repoUUID] = repoPath
|
||||
repoPath2uuidCache[repoPath] = repoUUID
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
@ -219,11 +211,6 @@ func checkValidity(uuid, repoPath string) (bool, error) {
|
|||
return uuid == repoUUID, nil
|
||||
}
|
||||
|
||||
func removeCachedEntries(uuid, repoPath string) {
|
||||
delete(uuid2repoPathCache, uuid)
|
||||
delete(repoPath2uuidCache, repoPath)
|
||||
}
|
||||
|
||||
func UUID2RepoPath(uuid string) (string, error) {
|
||||
// Get the current cache entry for the UUID
|
||||
repoPath, err := repoPathFromUUIDCache(uuid)
|
||||
|
@ -237,7 +224,7 @@ func UUID2RepoPath(uuid string) (string, error) {
|
|||
}
|
||||
if !valid {
|
||||
// If it isn't, remove the cache entry and try again
|
||||
removeCachedEntries(uuid, repoPath)
|
||||
delete(uuid2repoPathCache, uuid)
|
||||
return UUID2RepoPath(uuid)
|
||||
}
|
||||
// Otherwise just return the cached entry
|
||||
|
|
|
@ -36,6 +36,7 @@ func AnnexP2PHTTP(ctx *services_context.Context) {
|
|||
uuid := ctx.Params(":uuid")
|
||||
repoPath, err := annex.UUID2RepoPath(uuid)
|
||||
if err != nil {
|
||||
log.Error("%v", err)
|
||||
ctx.PlainText(http.StatusNotFound, "Repository not found")
|
||||
return
|
||||
}
|
||||
|
@ -45,12 +46,14 @@ func AnnexP2PHTTP(ctx *services_context.Context) {
|
|||
owner := parts[len(parts)-2]
|
||||
repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, owner, repoName)
|
||||
if err != nil {
|
||||
log.Error("%v", err)
|
||||
ctx.PlainText(http.StatusNotFound, "Repository not found")
|
||||
return
|
||||
}
|
||||
|
||||
p, err := access_model.GetUserRepoPermission(ctx, repo, ctx.Doer)
|
||||
if err != nil {
|
||||
log.Error("%v", err)
|
||||
ctx.ServerError("GetUserRepoPermission", err)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -243,8 +243,9 @@ func httpBase(ctx *context.Context) *serviceHandler {
|
|||
}
|
||||
}
|
||||
|
||||
isRequestToConfig := strings.HasSuffix(ctx.Req.URL.Path, "/config")
|
||||
if !repoExist {
|
||||
if !receivePack {
|
||||
if !receivePack && !isRequestToConfig {
|
||||
ctx.PlainText(http.StatusNotFound, "Repository not found")
|
||||
return nil
|
||||
}
|
||||
|
@ -264,7 +265,7 @@ func httpBase(ctx *context.Context) *serviceHandler {
|
|||
}
|
||||
|
||||
// Return dummy payload if GET receive-pack
|
||||
if ctx.Req.Method == http.MethodGet {
|
||||
if ctx.Req.Method == http.MethodGet && !isRequestToConfig {
|
||||
dummyInfoRefs(ctx)
|
||||
return nil
|
||||
}
|
||||
|
@ -551,6 +552,21 @@ func GetConfig(ctx *context.Context) {
|
|||
h := httpBase(ctx)
|
||||
if h != nil {
|
||||
setHeaderNoCache(ctx)
|
||||
if setting.Annex.Enabled && strings.HasPrefix(ctx.Req.UserAgent(), "git-annex/") {
|
||||
p, err := access_model.GetUserRepoPermission(ctx, h.repo, ctx.Doer)
|
||||
if err != nil {
|
||||
ctx.ServerError("GetUserRepoPermission", err)
|
||||
return
|
||||
}
|
||||
|
||||
if p.CanAccess(perm.AccessModeWrite, unit.TypeCode) {
|
||||
_, _, err := git.NewCommand(ctx, "annex", "init").RunStdString(&git.RunOpts{Dir: h.getRepoDir()})
|
||||
if err != nil {
|
||||
ctx.Resp.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
config, err := os.ReadFile(filepath.Join(h.getRepoDir(), "config"))
|
||||
if err != nil {
|
||||
log.Error("Failed to read git config file: %v", err)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue