mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Repository level enable package or disable (#19323)
This commit is contained in:
		@@ -102,3 +102,6 @@ INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.h
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[lfs]
 | 
					[lfs]
 | 
				
			||||||
PATH = integrations/gitea-integration-mssql/data/lfs
 | 
					PATH = integrations/gitea-integration-mssql/data/lfs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[packages]
 | 
				
			||||||
 | 
					ENABLED = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,3 +118,6 @@ DISABLE_GIT_HOOKS = false
 | 
				
			|||||||
INSTALL_LOCK   = true
 | 
					INSTALL_LOCK   = true
 | 
				
			||||||
SECRET_KEY     = 9pCviYTWSb
 | 
					SECRET_KEY     = 9pCviYTWSb
 | 
				
			||||||
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ
 | 
					INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[packages]
 | 
				
			||||||
 | 
					ENABLED = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,3 +99,6 @@ INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.h
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[lfs]
 | 
					[lfs]
 | 
				
			||||||
PATH = integrations/gitea-integration-mysql8/data/lfs
 | 
					PATH = integrations/gitea-integration-mysql8/data/lfs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[packages]
 | 
				
			||||||
 | 
					ENABLED = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -103,3 +103,6 @@ INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.h
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[lfs]
 | 
					[lfs]
 | 
				
			||||||
PATH = integrations/gitea-integration-pgsql/data/lfs
 | 
					PATH = integrations/gitea-integration-pgsql/data/lfs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[packages]
 | 
				
			||||||
 | 
					ENABLED = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,3 +101,6 @@ JWT_SECRET = KZb_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[lfs]
 | 
					[lfs]
 | 
				
			||||||
PATH = integrations/gitea-integration-sqlite/data/lfs
 | 
					PATH = integrations/gitea-integration-sqlite/data/lfs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[packages]
 | 
				
			||||||
 | 
					ENABLED = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -181,7 +181,7 @@ func (r *RepoUnit) BeforeSet(colName string, val xorm.Cell) {
 | 
				
			|||||||
			r.Config = new(PullRequestsConfig)
 | 
								r.Config = new(PullRequestsConfig)
 | 
				
			||||||
		case unit.TypeIssues:
 | 
							case unit.TypeIssues:
 | 
				
			||||||
			r.Config = new(IssuesConfig)
 | 
								r.Config = new(IssuesConfig)
 | 
				
			||||||
		case unit.TypeCode, unit.TypeReleases, unit.TypeWiki, unit.TypeProjects:
 | 
							case unit.TypeCode, unit.TypeReleases, unit.TypeWiki, unit.TypeProjects, unit.TypePackages:
 | 
				
			||||||
			fallthrough
 | 
								fallthrough
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			r.Config = new(UnitConfig)
 | 
								r.Config = new(UnitConfig)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ const (
 | 
				
			|||||||
	TypeExternalWiki                // 6 ExternalWiki
 | 
						TypeExternalWiki                // 6 ExternalWiki
 | 
				
			||||||
	TypeExternalTracker             // 7 ExternalTracker
 | 
						TypeExternalTracker             // 7 ExternalTracker
 | 
				
			||||||
	TypeProjects                    // 8 Kanban board
 | 
						TypeProjects                    // 8 Kanban board
 | 
				
			||||||
 | 
						TypePackages                    // 9 Packages
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Value returns integer value for unit type
 | 
					// Value returns integer value for unit type
 | 
				
			||||||
@@ -52,6 +53,8 @@ func (u Type) String() string {
 | 
				
			|||||||
		return "TypeExternalTracker"
 | 
							return "TypeExternalTracker"
 | 
				
			||||||
	case TypeProjects:
 | 
						case TypeProjects:
 | 
				
			||||||
		return "TypeProjects"
 | 
							return "TypeProjects"
 | 
				
			||||||
 | 
						case TypePackages:
 | 
				
			||||||
 | 
							return "TypePackages"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return fmt.Sprintf("Unknown Type %d", u)
 | 
						return fmt.Sprintf("Unknown Type %d", u)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -74,6 +77,7 @@ var (
 | 
				
			|||||||
		TypeExternalWiki,
 | 
							TypeExternalWiki,
 | 
				
			||||||
		TypeExternalTracker,
 | 
							TypeExternalTracker,
 | 
				
			||||||
		TypeProjects,
 | 
							TypeProjects,
 | 
				
			||||||
 | 
							TypePackages,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// DefaultRepoUnits contains the default unit types
 | 
						// DefaultRepoUnits contains the default unit types
 | 
				
			||||||
@@ -84,6 +88,7 @@ var (
 | 
				
			|||||||
		TypeReleases,
 | 
							TypeReleases,
 | 
				
			||||||
		TypeWiki,
 | 
							TypeWiki,
 | 
				
			||||||
		TypeProjects,
 | 
							TypeProjects,
 | 
				
			||||||
 | 
							TypePackages,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// NotAllowedDefaultRepoUnits contains units that can't be default
 | 
						// NotAllowedDefaultRepoUnits contains units that can't be default
 | 
				
			||||||
@@ -275,6 +280,15 @@ var (
 | 
				
			|||||||
		perm.AccessModeOwner,
 | 
							perm.AccessModeOwner,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						UnitPackages = Unit{
 | 
				
			||||||
 | 
							TypePackages,
 | 
				
			||||||
 | 
							"repo.packages",
 | 
				
			||||||
 | 
							"/packages",
 | 
				
			||||||
 | 
							"repo.packages.desc",
 | 
				
			||||||
 | 
							6,
 | 
				
			||||||
 | 
							perm.AccessModeRead,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Units contains all the units
 | 
						// Units contains all the units
 | 
				
			||||||
	Units = map[Type]Unit{
 | 
						Units = map[Type]Unit{
 | 
				
			||||||
		TypeCode:            UnitCode,
 | 
							TypeCode:            UnitCode,
 | 
				
			||||||
@@ -285,6 +299,7 @@ var (
 | 
				
			|||||||
		TypeWiki:            UnitWiki,
 | 
							TypeWiki:            UnitWiki,
 | 
				
			||||||
		TypeExternalWiki:    UnitExternalWiki,
 | 
							TypeExternalWiki:    UnitExternalWiki,
 | 
				
			||||||
		TypeProjects:        UnitProjects,
 | 
							TypeProjects:        UnitProjects,
 | 
				
			||||||
 | 
							TypePackages:        UnitPackages,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1019,6 +1019,7 @@ func UnitTypes() func(ctx *Context) {
 | 
				
			|||||||
		ctx.Data["UnitTypeExternalWiki"] = unit_model.TypeExternalWiki
 | 
							ctx.Data["UnitTypeExternalWiki"] = unit_model.TypeExternalWiki
 | 
				
			||||||
		ctx.Data["UnitTypeExternalTracker"] = unit_model.TypeExternalTracker
 | 
							ctx.Data["UnitTypeExternalTracker"] = unit_model.TypeExternalTracker
 | 
				
			||||||
		ctx.Data["UnitTypeProjects"] = unit_model.TypeProjects
 | 
							ctx.Data["UnitTypeProjects"] = unit_model.TypeProjects
 | 
				
			||||||
 | 
							ctx.Data["UnitTypePackages"] = unit_model.TypePackages
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -295,6 +295,10 @@ func newRepository() {
 | 
				
			|||||||
		log.Fatal("Failed to map Repository.PullRequest settings: %v", err)
 | 
							log.Fatal("Failed to map Repository.PullRequest settings: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !Cfg.Section("packages").Key("ENABLED").MustBool(false) {
 | 
				
			||||||
 | 
							Repository.DisabledRepoUnits = append(Repository.DisabledRepoUnits, "repo.packages")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Handle default trustmodel settings
 | 
						// Handle default trustmodel settings
 | 
				
			||||||
	Repository.Signing.DefaultTrustModel = strings.ToLower(strings.TrimSpace(Repository.Signing.DefaultTrustModel))
 | 
						Repository.Signing.DefaultTrustModel = strings.ToLower(strings.TrimSpace(Repository.Signing.DefaultTrustModel))
 | 
				
			||||||
	if Repository.Signing.DefaultTrustModel == "default" {
 | 
						if Repository.Signing.DefaultTrustModel == "default" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1011,6 +1011,7 @@ tags = Tags
 | 
				
			|||||||
issues = Issues
 | 
					issues = Issues
 | 
				
			||||||
pulls = Pull Requests
 | 
					pulls = Pull Requests
 | 
				
			||||||
project_board = Projects
 | 
					project_board = Projects
 | 
				
			||||||
 | 
					packages = Packages
 | 
				
			||||||
labels = Labels
 | 
					labels = Labels
 | 
				
			||||||
org_labels_desc = Organization level labels that can be used with <strong>all repositories</strong> under this organization
 | 
					org_labels_desc = Organization level labels that can be used with <strong>all repositories</strong> under this organization
 | 
				
			||||||
org_labels_desc_manage = manage
 | 
					org_labels_desc_manage = manage
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -456,6 +456,15 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
			deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeProjects)
 | 
								deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeProjects)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if form.EnablePackages && !unit_model.TypeProjects.UnitGlobalDisabled() {
 | 
				
			||||||
 | 
								units = append(units, repo_model.RepoUnit{
 | 
				
			||||||
 | 
									RepoID: repo.ID,
 | 
				
			||||||
 | 
									Type:   unit_model.TypePackages,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							} else if !unit_model.TypePackages.UnitGlobalDisabled() {
 | 
				
			||||||
 | 
								deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePackages)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if form.EnablePulls && !unit_model.TypePullRequests.UnitGlobalDisabled() {
 | 
							if form.EnablePulls && !unit_model.TypePullRequests.UnitGlobalDisabled() {
 | 
				
			||||||
			units = append(units, repo_model.RepoUnit{
 | 
								units = append(units, repo_model.RepoUnit{
 | 
				
			||||||
				RepoID: repo.ID,
 | 
									RepoID: repo.ID,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,6 +143,7 @@ type RepoSettingForm struct {
 | 
				
			|||||||
	TrackerIssueStyle                     string
 | 
						TrackerIssueStyle                     string
 | 
				
			||||||
	EnableCloseIssuesViaCommitInAnyBranch bool
 | 
						EnableCloseIssuesViaCommitInAnyBranch bool
 | 
				
			||||||
	EnableProjects                        bool
 | 
						EnableProjects                        bool
 | 
				
			||||||
 | 
						EnablePackages                        bool
 | 
				
			||||||
	EnablePulls                           bool
 | 
						EnablePulls                           bool
 | 
				
			||||||
	PullsIgnoreWhitespace                 bool
 | 
						PullsIgnoreWhitespace                 bool
 | 
				
			||||||
	PullsAllowMerge                       bool
 | 
						PullsAllowMerge                       bool
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -178,9 +178,11 @@
 | 
				
			|||||||
					</a>
 | 
										</a>
 | 
				
			||||||
				{{end}}
 | 
									{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				<a href="{{.RepoLink}}/packages" class="{{ if .IsPackagesPage }}active{{end}} item">
 | 
									{{if .Permission.CanRead $.UnitTypePackages}}
 | 
				
			||||||
					{{svg "octicon-package"}} {{.i18n.Tr "packages.title"}}
 | 
										<a href="{{.RepoLink}}/packages" class="{{ if .IsPackagesPage }}active{{end}} item">
 | 
				
			||||||
				</a>
 | 
											{{svg "octicon-package"}} {{.i18n.Tr "packages.title"}}
 | 
				
			||||||
 | 
										</a>
 | 
				
			||||||
 | 
									{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				{{ if and (not .UnitProjectsGlobalDisabled) (.Permission.CanRead $.UnitTypeProjects)}}
 | 
									{{ if and (not .UnitProjectsGlobalDisabled) (.Permission.CanRead $.UnitTypeProjects)}}
 | 
				
			||||||
					<a href="{{.RepoLink}}/projects" class="{{ if .IsProjectsPage }}active{{end}} item">
 | 
										<a href="{{.RepoLink}}/projects" class="{{ if .IsProjectsPage }}active{{end}} item">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -390,6 +390,19 @@
 | 
				
			|||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									{{$isPackagesEnabled := .Repository.UnitEnabled $.UnitTypePackages}}
 | 
				
			||||||
 | 
									<div class="inline field">
 | 
				
			||||||
 | 
										<label>{{.i18n.Tr "repo.packages"}}</label>
 | 
				
			||||||
 | 
										{{if .UnitTypePackages.UnitGlobalDisabled}}
 | 
				
			||||||
 | 
										<div class="ui checkbox tooltip disabled" data-content="{{.i18n.Tr "repo.unit_disabled"}}">
 | 
				
			||||||
 | 
										{{else}}
 | 
				
			||||||
 | 
										<div class="ui checkbox">
 | 
				
			||||||
 | 
										{{end}}
 | 
				
			||||||
 | 
											<input class="enable-system" name="enable_packages" type="checkbox" {{if $isPackagesEnabled}}checked{{end}}>
 | 
				
			||||||
 | 
											<label>{{.i18n.Tr "repo.settings.packages_desc"}}</label>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				{{if not .IsMirror}}
 | 
									{{if not .IsMirror}}
 | 
				
			||||||
					<div class="ui divider"></div>
 | 
										<div class="ui divider"></div>
 | 
				
			||||||
					{{$pullRequestEnabled := .Repository.UnitEnabled $.UnitTypePullRequests}}
 | 
										{{$pullRequestEnabled := .Repository.UnitEnabled $.UnitTypePullRequests}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user