* Allow archive prefix setting * Update copyright * Update copyrighttags/v1.10.5
@@ -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) | |||
} | |||
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("archive", "--prefix="+filepath.Base(strings.TrimSuffix(c.repo.Path, ".git"))+"/", "--format="+format, "-o", target, c.ID.String()).RunInDir(c.repo.Path) | |||
_, 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 | |||
} |