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
|
@ -49,6 +49,8 @@ DISABLED_REPO_UNITS =
|
|||
; 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.
|
||||
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]
|
||||
; 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.
|
||||
- `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.
|
||||
- `PREFIX_ARCHIVE_FILES`: **true**: Prefix archive files by placing them in a directory named after the repository.
|
||||
|
||||
### Repository - Pull Request (`repository.pull-request`)
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// 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
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -20,18 +21,43 @@ const (
|
|||
TARGZ
|
||||
)
|
||||
|
||||
// CreateArchive create archive content to the target path
|
||||
func (c *Commit) CreateArchive(target string, archiveType ArchiveType) error {
|
||||
var format string
|
||||
switch archiveType {
|
||||
// String converts an ArchiveType to string
|
||||
func (a ArchiveType) String() string {
|
||||
switch a {
|
||||
case ZIP:
|
||||
format = "zip"
|
||||
return "zip"
|
||||
case TARGZ:
|
||||
format = "tar.gz"
|
||||
default:
|
||||
return fmt.Errorf("unknown format: %v", archiveType)
|
||||
return "tar.gz"
|
||||
}
|
||||
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
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ var (
|
|||
EnablePushCreateOrg bool
|
||||
DisabledRepoUnits []string
|
||||
DefaultRepoUnits []string
|
||||
PrefixArchiveFiles bool
|
||||
|
||||
// Repository editor settings
|
||||
Editor struct {
|
||||
|
@ -102,6 +103,7 @@ var (
|
|||
EnablePushCreateOrg: false,
|
||||
DisabledRepoUnits: []string{},
|
||||
DefaultRepoUnits: []string{},
|
||||
PrefixArchiveFiles: true,
|
||||
|
||||
// Repository editor settings
|
||||
Editor: struct {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// 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
|
||||
// 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)
|
||||
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)
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue