mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Make archive prefixing configurable with a global setting (#9943)
* Allow archive prefix setting * Update copyright * Update copyright
This commit is contained in:
		| @@ -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 | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user