Make archive prefixing configurable with a global setting (#9943)
* Allow archive prefix setting * Update copyright * Update copyright
This commit is contained in:
parent
608cd58db6
commit
c8d7ae1ee3
5 changed files with 45 additions and 10 deletions
|
@ -49,6 +49,8 @@ DISABLED_REPO_UNITS =
|
||||||
; External wiki and issue tracker can't be enabled by default as it requires additional settings.
|
; External wiki and issue tracker can't be enabled by default as it requires additional settings.
|
||||||
; Disabled repo units will not be added to new repositories regardless if it is in the default list.
|
; Disabled repo units will not be added to new repositories regardless if it is in the default list.
|
||||||
DEFAULT_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki
|
DEFAULT_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki
|
||||||
|
; Prefix archive files by placing them in a directory named after the repository
|
||||||
|
PREFIX_ARCHIVE_FILES = true
|
||||||
|
|
||||||
[repository.editor]
|
[repository.editor]
|
||||||
; List of file extensions for which lines should be wrapped in the CodeMirror editor
|
; List of file extensions for which lines should be wrapped in the CodeMirror editor
|
||||||
|
|
|
@ -68,6 +68,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
|
||||||
- `DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH`: **false**: Close an issue if a commit on a non default branch marks it as closed.
|
- `DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH`: **false**: Close an issue if a commit on a non default branch marks it as closed.
|
||||||
- `ENABLE_PUSH_CREATE_USER`: **false**: Allow users to push local repositories to Gitea and have them automatically created for a user.
|
- `ENABLE_PUSH_CREATE_USER`: **false**: Allow users to push local repositories to Gitea and have them automatically created for a user.
|
||||||
- `ENABLE_PUSH_CREATE_ORG`: **false**: Allow users to push local repositories to Gitea and have them automatically created for an org.
|
- `ENABLE_PUSH_CREATE_ORG`: **false**: Allow users to push local repositories to Gitea and have them automatically created for an org.
|
||||||
|
- `PREFIX_ARCHIVE_FILES`: **true**: Prefix archive files by placing them in a directory named after the repository.
|
||||||
|
|
||||||
### Repository - Pull Request (`repository.pull-request`)
|
### Repository - Pull Request (`repository.pull-request`)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// Copyright 2015 The Gogs Authors. All rights reserved.
|
// Copyright 2015 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a MIT-style
|
// Use of this source code is governed by a MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
@ -20,18 +21,43 @@ const (
|
||||||
TARGZ
|
TARGZ
|
||||||
)
|
)
|
||||||
|
|
||||||
// CreateArchive create archive content to the target path
|
// String converts an ArchiveType to string
|
||||||
func (c *Commit) CreateArchive(target string, archiveType ArchiveType) error {
|
func (a ArchiveType) String() string {
|
||||||
var format string
|
switch a {
|
||||||
switch archiveType {
|
|
||||||
case ZIP:
|
case ZIP:
|
||||||
format = "zip"
|
return "zip"
|
||||||
case TARGZ:
|
case TARGZ:
|
||||||
format = "tar.gz"
|
return "tar.gz"
|
||||||
default:
|
}
|
||||||
return fmt.Errorf("unknown format: %v", archiveType)
|
return "unknown"
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateArchiveOpts represents options for creating an archive
|
||||||
|
type CreateArchiveOpts struct {
|
||||||
|
Format ArchiveType
|
||||||
|
Prefix bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateArchive create archive content to the target path
|
||||||
|
func (c *Commit) CreateArchive(target string, opts CreateArchiveOpts) error {
|
||||||
|
if opts.Format.String() == "unknown" {
|
||||||
|
return fmt.Errorf("unknown format: %v", opts.Format)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := NewCommand("archive", "--prefix="+filepath.Base(strings.TrimSuffix(c.repo.Path, ".git"))+"/", "--format="+format, "-o", target, c.ID.String()).RunInDir(c.repo.Path)
|
args := []string{
|
||||||
|
"archive",
|
||||||
|
}
|
||||||
|
if opts.Prefix {
|
||||||
|
args = append(args, "--prefix="+filepath.Base(strings.TrimSuffix(c.repo.Path, ".git"))+"/")
|
||||||
|
}
|
||||||
|
|
||||||
|
args = append(args,
|
||||||
|
"--format="+opts.Format.String(),
|
||||||
|
"-o",
|
||||||
|
target,
|
||||||
|
c.ID.String(),
|
||||||
|
)
|
||||||
|
|
||||||
|
_, err := NewCommand(args...).RunInDir(c.repo.Path)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ var (
|
||||||
EnablePushCreateOrg bool
|
EnablePushCreateOrg bool
|
||||||
DisabledRepoUnits []string
|
DisabledRepoUnits []string
|
||||||
DefaultRepoUnits []string
|
DefaultRepoUnits []string
|
||||||
|
PrefixArchiveFiles bool
|
||||||
|
|
||||||
// Repository editor settings
|
// Repository editor settings
|
||||||
Editor struct {
|
Editor struct {
|
||||||
|
@ -102,6 +103,7 @@ var (
|
||||||
EnablePushCreateOrg: false,
|
EnablePushCreateOrg: false,
|
||||||
DisabledRepoUnits: []string{},
|
DisabledRepoUnits: []string{},
|
||||||
DefaultRepoUnits: []string{},
|
DefaultRepoUnits: []string{},
|
||||||
|
PrefixArchiveFiles: true,
|
||||||
|
|
||||||
// Repository editor settings
|
// Repository editor settings
|
||||||
Editor: struct {
|
Editor: struct {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// Copyright 2014 The Gogs Authors. All rights reserved.
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a MIT-style
|
// Use of this source code is governed by a MIT-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
@ -507,7 +508,10 @@ func Download(ctx *context.Context) {
|
||||||
|
|
||||||
archivePath = path.Join(archivePath, base.ShortSha(commit.ID.String())+ext)
|
archivePath = path.Join(archivePath, base.ShortSha(commit.ID.String())+ext)
|
||||||
if !com.IsFile(archivePath) {
|
if !com.IsFile(archivePath) {
|
||||||
if err := commit.CreateArchive(archivePath, archiveType); err != nil {
|
if err := commit.CreateArchive(archivePath, git.CreateArchiveOpts{
|
||||||
|
Format: archiveType,
|
||||||
|
Prefix: setting.Repository.PrefixArchiveFiles,
|
||||||
|
}); err != nil {
|
||||||
ctx.ServerError("Download -> CreateArchive "+archivePath, err)
|
ctx.ServerError("Download -> CreateArchive "+archivePath, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue