@@ -32,6 +32,10 @@ LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd, | |||
; Separate values by commas. Preview tab in edit mode won't show if the file extension doesn't match | |||
PREVIEWABLE_FILE_MODES = markdown | |||
[repository.local] | |||
; Path for uploads. Defaults to `tmp/local-repo` | |||
LOCAL_COPY_PATH = tmp/local-repo | |||
[repository.upload] | |||
; Whether repository file uploads are enabled. Defaults to `true` | |||
ENABLED = true |
@@ -676,7 +676,10 @@ func (repo *Repository) DescriptionHTML() template.HTML { | |||
// LocalCopyPath returns the local repository copy path | |||
func (repo *Repository) LocalCopyPath() string { | |||
return path.Join(setting.AppDataPath, "tmp/local-repo", com.ToStr(repo.ID)) | |||
if filepath.IsAbs(setting.Repository.Local.LocalCopyPath) { | |||
return path.Join(setting.Repository.Local.LocalCopyPath, com.ToStr(repo.ID)) | |||
} | |||
return path.Join(setting.AppDataPath, setting.Repository.Local.LocalCopyPath, com.ToStr(repo.ID)) | |||
} | |||
// UpdateLocalCopyBranch pulls latest changes of given branch from repoPath to localPath. |
@@ -5,11 +5,14 @@ | |||
package models | |||
import ( | |||
"path" | |||
"testing" | |||
"code.gitea.io/gitea/modules/markdown" | |||
"code.gitea.io/gitea/modules/setting" | |||
"github.com/stretchr/testify/assert" | |||
"github.com/Unknwon/com" | |||
) | |||
func TestRepo(t *testing.T) { | |||
@@ -132,3 +135,22 @@ func TestRepoAPIURL(t *testing.T) { | |||
assert.Equal(t, "https://try.gitea.io/api/v1/repos/user12/repo10", repo.APIURL()) | |||
} | |||
func TestRepoLocalCopyPath(t *testing.T) { | |||
assert.NoError(t, PrepareTestDatabase()) | |||
repo, err := GetRepositoryByID(10) | |||
assert.NoError(t, err) | |||
assert.NotNil(t, repo) | |||
// test default | |||
repoID := com.ToStr(repo.ID) | |||
expected := path.Join(setting.AppDataPath, setting.Repository.Local.LocalCopyPath, repoID) | |||
assert.Equal(t, expected, repo.LocalCopyPath()) | |||
// test absolute setting | |||
tempPath := "/tmp/gitea/local-copy-path" | |||
expected = path.Join(tempPath, repoID) | |||
setting.Repository.Local.LocalCopyPath = tempPath | |||
assert.Equal(t, expected, repo.LocalCopyPath()) | |||
} |
@@ -174,6 +174,11 @@ var ( | |||
FileMaxSize int64 | |||
MaxFiles int | |||
} `ini:"-"` | |||
// Repository local settings | |||
Local struct { | |||
LocalCopyPath string | |||
} `ini:"-"` | |||
}{ | |||
AnsiCharset: "", | |||
ForcePrivate: false, | |||
@@ -206,6 +211,13 @@ var ( | |||
FileMaxSize: 3, | |||
MaxFiles: 5, | |||
}, | |||
// Repository local settings | |||
Local: struct { | |||
LocalCopyPath string | |||
}{ | |||
LocalCopyPath: "tmp/local-repo", | |||
}, | |||
} | |||
RepoRootPath string | |||
ScriptType = "bash" | |||
@@ -887,6 +899,8 @@ please consider changing to GITEA_CUSTOM`) | |||
log.Fatal(4, "Failed to map Repository.Editor settings: %v", err) | |||
} else if err = Cfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil { | |||
log.Fatal(4, "Failed to map Repository.Upload settings: %v", err) | |||
} else if err = Cfg.Section("repository.local").MapTo(&Repository.Local); err != nil { | |||
log.Fatal(4, "Failed to map Repository.Local settings: %v", err) | |||
} | |||
if !filepath.IsAbs(Repository.Upload.TempPath) { |