Compare commits
13 commits
784c53032e
...
a4a39d3944
Author | SHA1 | Date | |
---|---|---|---|
a4a39d3944 | |||
97c4d8ce0f | |||
c8899324af | |||
d269cf2828 | |||
ce1454a3f4 | |||
|
3c531d3957 | ||
|
1ae2525922 | ||
|
fd7ebaaa9c | ||
|
fa33271157 | ||
|
4b3e456afa | ||
|
63e5db5d7a | ||
|
e6e2c2f4a4 | ||
|
e902b98cc2 |
10 changed files with 87 additions and 14 deletions
12
CHANGELOG.md
12
CHANGELOG.md
|
@ -4,6 +4,18 @@ This changelog goes through all the changes that have been made in each release
|
||||||
without substantial changes to our git log; to see the highlights of what has
|
without substantial changes to our git log; to see the highlights of what has
|
||||||
been added to each release, please refer to the [blog](https://blog.gitea.io).
|
been added to each release, please refer to the [blog](https://blog.gitea.io).
|
||||||
|
|
||||||
|
## [1.18.2](https://github.com/go-gitea/gitea/releases/tag/v1.18.2) - 2023-01-19
|
||||||
|
|
||||||
|
* BUGFIXES
|
||||||
|
* When updating by rebase we need to set the environment for head repo (#22535) (#22536)
|
||||||
|
* Fix issue not auto-closing when it includes a reference to a branch (#22514) (#22521)
|
||||||
|
* Fix invalid issue branch reference if not specified in template (#22513) (#22520)
|
||||||
|
* Fix 500 error viewing pull request when fork has pull requests disabled (#22512) (#22515)
|
||||||
|
* Reliable selection of admin user (#22509) (#22511)
|
||||||
|
* Set disable_gravatar/enable_federated_avatar when offline mode is true (#22479) (#22496)
|
||||||
|
* BUILD
|
||||||
|
* cgo cross-compile for freebsd (#22397) (#22519)
|
||||||
|
|
||||||
## [1.18.1](https://github.com/go-gitea/gitea/releases/tag/v1.18.1) - 2023-01-17
|
## [1.18.1](https://github.com/go-gitea/gitea/releases/tag/v1.18.1) - 2023-01-17
|
||||||
|
|
||||||
* API
|
* API
|
||||||
|
|
9
Makefile
9
Makefile
|
@ -733,7 +733,7 @@ $(EXECUTABLE): $(GO_SOURCES) $(TAGS_PREREQ)
|
||||||
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
|
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
|
||||||
|
|
||||||
.PHONY: release
|
.PHONY: release
|
||||||
release: frontend generate release-windows release-linux release-darwin release-copy release-compress vendor release-sources release-docs release-check
|
release: frontend generate release-windows release-linux release-darwin release-freebsd release-copy release-compress vendor release-sources release-docs release-check
|
||||||
|
|
||||||
$(DIST_DIRS):
|
$(DIST_DIRS):
|
||||||
mkdir -p $(DIST_DIRS)
|
mkdir -p $(DIST_DIRS)
|
||||||
|
@ -762,6 +762,13 @@ ifeq ($(CI),true)
|
||||||
cp /build/* $(DIST)/binaries
|
cp /build/* $(DIST)/binaries
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
.PHONY: release-freebsd
|
||||||
|
release-freebsd: | $(DIST_DIRS)
|
||||||
|
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -dest $(DIST)/binaries -tags 'netgo osusergo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'freebsd/amd64' -out gitea-$(VERSION) .
|
||||||
|
ifeq ($(CI),true)
|
||||||
|
cp /build/* $(DIST)/binaries
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY: release-copy
|
.PHONY: release-copy
|
||||||
release-copy: | $(DIST_DIRS)
|
release-copy: | $(DIST_DIRS)
|
||||||
cd $(DIST); for file in `find . -type f -name "*"`; do cp $${file} ./release/; done;
|
cd $(DIST); for file in `find . -type f -name "*"`; do cp $${file} ./release/; done;
|
||||||
|
|
|
@ -269,6 +269,16 @@ func Init() error {
|
||||||
if setting_module.OfflineMode {
|
if setting_module.OfflineMode {
|
||||||
disableGravatar = true
|
disableGravatar = true
|
||||||
enableFederatedAvatar = false
|
enableFederatedAvatar = false
|
||||||
|
if !GetSettingBool(KeyPictureDisableGravatar) {
|
||||||
|
if err := SetSettingNoVersion(KeyPictureDisableGravatar, "true"); err != nil {
|
||||||
|
return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if GetSettingBool(KeyPictureEnableFederatedAvatar) {
|
||||||
|
if err := SetSettingNoVersion(KeyPictureEnableFederatedAvatar, "false"); err != nil {
|
||||||
|
return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if enableFederatedAvatar || !disableGravatar {
|
if enableFederatedAvatar || !disableGravatar {
|
||||||
|
|
|
@ -1227,7 +1227,10 @@ func GetUserByOpenID(uri string) (*User, error) {
|
||||||
// GetAdminUser returns the first administrator
|
// GetAdminUser returns the first administrator
|
||||||
func GetAdminUser() (*User, error) {
|
func GetAdminUser() (*User, error) {
|
||||||
var admin User
|
var admin User
|
||||||
has, err := db.GetEngine(db.DefaultContext).Where("is_admin=?", true).Get(&admin)
|
has, err := db.GetEngine(db.DefaultContext).
|
||||||
|
Where("is_admin=?", true).
|
||||||
|
Asc("id"). // Reliably get the admin with the lowest ID.
|
||||||
|
Get(&admin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if !has {
|
} else if !has {
|
||||||
|
|
|
@ -6,9 +6,11 @@
|
||||||
package admin
|
package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
system_model "code.gitea.io/gitea/models/system"
|
system_model "code.gitea.io/gitea/models/system"
|
||||||
|
@ -202,6 +204,16 @@ func ChangeConfig(ctx *context.Context) {
|
||||||
value := ctx.FormString("value")
|
value := ctx.FormString("value")
|
||||||
version := ctx.FormInt("version")
|
version := ctx.FormInt("version")
|
||||||
|
|
||||||
|
if check, ok := changeConfigChecks[key]; ok {
|
||||||
|
if err := check(ctx, value); err != nil {
|
||||||
|
log.Warn("refused to set setting: %v", err)
|
||||||
|
ctx.JSON(http.StatusOK, map[string]string{
|
||||||
|
"err": ctx.Tr("admin.config.set_setting_failed", key),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := system_model.SetSetting(&system_model.Setting{
|
if err := system_model.SetSetting(&system_model.Setting{
|
||||||
SettingKey: key,
|
SettingKey: key,
|
||||||
SettingValue: value,
|
SettingValue: value,
|
||||||
|
@ -218,3 +230,18 @@ func ChangeConfig(ctx *context.Context) {
|
||||||
"version": version + 1,
|
"version": version + 1,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var changeConfigChecks = map[string]func(ctx *context.Context, newValue string) error{
|
||||||
|
system_model.KeyPictureDisableGravatar: func(_ *context.Context, newValue string) error {
|
||||||
|
if v, _ := strconv.ParseBool(newValue); setting.OfflineMode && !v {
|
||||||
|
return fmt.Errorf("%q should be true when OFFLINE_MODE is true", system_model.KeyPictureDisableGravatar)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
system_model.KeyPictureEnableFederatedAvatar: func(_ *context.Context, newValue string) error {
|
||||||
|
if v, _ := strconv.ParseBool(newValue); setting.OfflineMode && v {
|
||||||
|
return fmt.Errorf("%q cannot be false when OFFLINE_MODE is true", system_model.KeyPictureEnableFederatedAvatar)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
|
@ -786,7 +786,8 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if !strings.HasPrefix(template.Ref, "refs/") { // Assume that the ref intended is always a branch - for tags users should use refs/tags/<ref>
|
|
||||||
|
if template.Ref != "" && !strings.HasPrefix(template.Ref, "refs/") { // Assume that the ref intended is always a branch - for tags users should use refs/tags/<ref>
|
||||||
template.Ref = git.BranchPrefix + template.Ref
|
template.Ref = git.BranchPrefix + template.Ref
|
||||||
}
|
}
|
||||||
ctx.Data["HasSelectedLabel"] = len(labelIDs) > 0
|
ctx.Data["HasSelectedLabel"] = len(labelIDs) > 0
|
||||||
|
|
|
@ -19,6 +19,7 @@ import (
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
"code.gitea.io/gitea/modules/container"
|
"code.gitea.io/gitea/modules/container"
|
||||||
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/references"
|
"code.gitea.io/gitea/modules/references"
|
||||||
"code.gitea.io/gitea/modules/repository"
|
"code.gitea.io/gitea/modules/repository"
|
||||||
|
@ -176,7 +177,8 @@ func UpdateIssuesCommit(doer *user_model.User, repo *repo_model.Repository, comm
|
||||||
if !repo.CloseIssuesViaCommitInAnyBranch {
|
if !repo.CloseIssuesViaCommitInAnyBranch {
|
||||||
// If the issue was specified to be in a particular branch, don't allow commits in other branches to close it
|
// If the issue was specified to be in a particular branch, don't allow commits in other branches to close it
|
||||||
if refIssue.Ref != "" {
|
if refIssue.Ref != "" {
|
||||||
if branchName != refIssue.Ref {
|
issueBranchName := strings.TrimPrefix(refIssue.Ref, git.BranchPrefix)
|
||||||
|
if branchName != issueBranchName {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// Otherwise, only process commits to the default branch
|
// Otherwise, only process commits to the default branch
|
||||||
|
|
|
@ -584,19 +584,25 @@ func rawMerge(ctx context.Context, pr *issues_model.PullRequest, doer *user_mode
|
||||||
headUser = pr.HeadRepo.Owner
|
headUser = pr.HeadRepo.Owner
|
||||||
}
|
}
|
||||||
|
|
||||||
env = repo_module.FullPushingEnvironment(
|
|
||||||
headUser,
|
|
||||||
doer,
|
|
||||||
pr.BaseRepo,
|
|
||||||
pr.BaseRepo.Name,
|
|
||||||
pr.ID,
|
|
||||||
)
|
|
||||||
|
|
||||||
var pushCmd *git.Command
|
var pushCmd *git.Command
|
||||||
if mergeStyle == repo_model.MergeStyleRebaseUpdate {
|
if mergeStyle == repo_model.MergeStyleRebaseUpdate {
|
||||||
// force push the rebase result to head branch
|
// force push the rebase result to head branch
|
||||||
|
env = repo_module.FullPushingEnvironment(
|
||||||
|
headUser,
|
||||||
|
doer,
|
||||||
|
pr.HeadRepo,
|
||||||
|
pr.HeadRepo.Name,
|
||||||
|
pr.ID,
|
||||||
|
)
|
||||||
pushCmd = git.NewCommand(ctx, "push", "-f", "head_repo").AddDynamicArguments(stagingBranch + ":" + git.BranchPrefix + pr.HeadBranch)
|
pushCmd = git.NewCommand(ctx, "push", "-f", "head_repo").AddDynamicArguments(stagingBranch + ":" + git.BranchPrefix + pr.HeadBranch)
|
||||||
} else {
|
} else {
|
||||||
|
env = repo_module.FullPushingEnvironment(
|
||||||
|
headUser,
|
||||||
|
doer,
|
||||||
|
pr.BaseRepo,
|
||||||
|
pr.BaseRepo.Name,
|
||||||
|
pr.ID,
|
||||||
|
)
|
||||||
pushCmd = git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch)
|
pushCmd = git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,9 @@ func IsUserAllowedToUpdate(ctx context.Context, pull *issues_model.PullRequest,
|
||||||
if pr.ProtectedBranch == nil {
|
if pr.ProtectedBranch == nil {
|
||||||
prUnit, err := pr.BaseRepo.GetUnit(unit.TypePullRequests)
|
prUnit, err := pr.BaseRepo.GetUnit(unit.TypePullRequests)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if repo_model.IsErrUnitTypeNotExist(err) {
|
||||||
|
return false, false, nil
|
||||||
|
}
|
||||||
log.Error("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v", err)
|
log.Error("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v", err)
|
||||||
return false, false, err
|
return false, false, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,8 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
|
||||||
var pusher *user_model.User
|
var pusher *user_model.User
|
||||||
|
|
||||||
for _, opts := range optsList {
|
for _, opts := range optsList {
|
||||||
|
log.Trace("pushUpdates: %-v %s %s %s", repo, opts.OldCommitID, opts.NewCommitID, opts.RefFullName)
|
||||||
|
|
||||||
if opts.IsNewRef() && opts.IsDelRef() {
|
if opts.IsNewRef() && opts.IsDelRef() {
|
||||||
return fmt.Errorf("old and new revisions are both %s", git.EmptySHA)
|
return fmt.Errorf("old and new revisions are both %s", git.EmptySHA)
|
||||||
}
|
}
|
||||||
|
@ -129,7 +131,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
|
||||||
} else { // is new tag
|
} else { // is new tag
|
||||||
newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
|
newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("gitRepo.GetCommit: %w", err)
|
return fmt.Errorf("gitRepo.GetCommit(%s) in %s/%s[%d]: %w", opts.NewCommitID, repo.OwnerName, repo.Name, repo.ID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
commits := repo_module.NewPushCommits()
|
commits := repo_module.NewPushCommits()
|
||||||
|
@ -162,7 +164,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
|
||||||
|
|
||||||
newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
|
newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("gitRepo.GetCommit: %w", err)
|
return fmt.Errorf("gitRepo.GetCommit(%s) in %s/%s[%d]: %w", opts.NewCommitID, repo.OwnerName, repo.Name, repo.ID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
refName := opts.RefName()
|
refName := opts.RefName()
|
||||||
|
|
Reference in a new issue