| @@ -3,7 +3,7 @@ Gogs - Go Git Service [ |  | ||||
| ##### Current tip version: 0.9.64 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | |||||
| ##### Current tip version: 0.9.65 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | |||||
| | Web | UI | Preview | | | Web | UI | Preview | | ||||
| |:-------------:|:-------:|:-------:| | |:-------------:|:-------:|:-------:| | ||||
| @@ -17,7 +17,7 @@ import ( | |||||
| "github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
| ) | ) | ||||
| const APP_VER = "0.9.64.0805" | |||||
| const APP_VER = "0.9.65.0806" | |||||
| func init() { | func init() { | ||||
| runtime.GOMAXPROCS(runtime.NumCPU()) | runtime.GOMAXPROCS(runtime.NumCPU()) | ||||
| @@ -246,7 +246,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error | |||||
| Sender: &api.PayloadUser{ | Sender: &api.PayloadUser{ | ||||
| UserName: doer.Name, | UserName: doer.Name, | ||||
| ID: doer.ID, | ID: doer.ID, | ||||
| AvatarUrl: setting.AppUrl + doer.RelAvatarLink(), | |||||
| AvatarUrl: doer.AvatarLink(), | |||||
| }, | }, | ||||
| } | } | ||||
| if err = PrepareWebhooks(pr.BaseRepo, HOOK_EVENT_PUSH, p); err != nil { | if err = PrepareWebhooks(pr.BaseRepo, HOOK_EVENT_PUSH, p); err != nil { | ||||
| @@ -230,8 +230,11 @@ func (u *User) GenerateRandomAvatar() error { | |||||
| return nil | return nil | ||||
| } | } | ||||
| // RelAvatarLink returns relative avatar link to the site domain, | |||||
| // which includes app sub-url as prefix. However, it is possible | |||||
| // to return full URL if user enables Gravatar-like service. | |||||
| func (u *User) RelAvatarLink() string { | func (u *User) RelAvatarLink() string { | ||||
| defaultImgUrl := "/img/avatar_default.png" | |||||
| defaultImgUrl := setting.AppSubUrl + "/img/avatar_default.png" | |||||
| if u.ID == -1 { | if u.ID == -1 { | ||||
| return defaultImgUrl | return defaultImgUrl | ||||
| } | } | ||||
| @@ -241,7 +244,7 @@ func (u *User) RelAvatarLink() string { | |||||
| if !com.IsExist(u.CustomAvatarPath()) { | if !com.IsExist(u.CustomAvatarPath()) { | ||||
| return defaultImgUrl | return defaultImgUrl | ||||
| } | } | ||||
| return "/avatars/" + com.ToStr(u.ID) | |||||
| return setting.AppSubUrl + "/avatars/" + com.ToStr(u.ID) | |||||
| case setting.DisableGravatar, setting.OfflineMode: | case setting.DisableGravatar, setting.OfflineMode: | ||||
| if !com.IsExist(u.CustomAvatarPath()) { | if !com.IsExist(u.CustomAvatarPath()) { | ||||
| if err := u.GenerateRandomAvatar(); err != nil { | if err := u.GenerateRandomAvatar(); err != nil { | ||||
| @@ -249,7 +252,7 @@ func (u *User) RelAvatarLink() string { | |||||
| } | } | ||||
| } | } | ||||
| return "/avatars/" + com.ToStr(u.ID) | |||||
| return setting.AppSubUrl + "/avatars/" + com.ToStr(u.ID) | |||||
| } | } | ||||
| return setting.GravatarSource + u.Avatar | return setting.GravatarSource + u.Avatar | ||||
| } | } | ||||
| @@ -334,6 +334,7 @@ func NewContext() { | |||||
| log.Fatal(4, "Invalid ROOT_URL '%s': %s", AppUrl, err) | log.Fatal(4, "Invalid ROOT_URL '%s': %s", AppUrl, err) | ||||
| } | } | ||||
| // Suburl should start with '/' and end without '/', such as '/{subpath}'. | // Suburl should start with '/' and end without '/', such as '/{subpath}'. | ||||
| // This value is empty if site does not have sub-url. | |||||
| AppSubUrl = strings.TrimSuffix(url.Path, "/") | AppSubUrl = strings.TrimSuffix(url.Path, "/") | ||||
| AppSubUrlDepth = strings.Count(AppSubUrl, "/") | AppSubUrlDepth = strings.Count(AppSubUrl, "/") | ||||
| @@ -0,0 +1 @@ | |||||
| All files in subdirectories are templates, do modifications based on your environment first. | |||||
| @@ -1 +1 @@ | |||||
| 0.9.64.0805 | |||||
| 0.9.65.0806 | |||||