Merge branch 'master' into theme

This commit is contained in:
techknowlogick 2018-06-17 16:14:35 -04:00 committed by GitHub
commit fc552b663f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 89 additions and 33 deletions

View File

@ -68,3 +68,25 @@ func TestSettingShowUserEmailProfile(t *testing.T) {
setting.UI.ShowUserEmail = showUserEmail setting.UI.ShowUserEmail = showUserEmail
} }
func TestSettingLandingPage(t *testing.T) {
prepareTestEnv(t)
landingPage := setting.LandingPageURL
setting.LandingPageURL = setting.LandingPageHome
req := NewRequest(t, "GET", "/")
MakeRequest(t, req, http.StatusOK)
setting.LandingPageURL = setting.LandingPageExplore
req = NewRequest(t, "GET", "/")
resp := MakeRequest(t, req, http.StatusFound)
assert.Equal(t, "/explore", resp.Header().Get("Location"))
setting.LandingPageURL = setting.LandingPageOrganizations
req = NewRequest(t, "GET", "/")
resp = MakeRequest(t, req, http.StatusFound)
assert.Equal(t, "/explore/organizations", resp.Header().Get("Location"))
setting.LandingPageURL = landingPage
}

View File

@ -448,6 +448,11 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error {
} }
} }
rel.Repo = repo
if err = rel.LoadAttributes(); err != nil {
return fmt.Errorf("LoadAttributes: %v", err)
}
mode, _ := accessLevel(x, u.ID, rel.Repo) mode, _ := accessLevel(x, u.ID, rel.Repo)
if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{ if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{
Action: api.HookReleaseDeleted, Action: api.HookReleaseDeleted,

View File

@ -1848,6 +1848,9 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
if _, err = sess.In("issue_id", issueIDs).Delete(&IssueUser{}); err != nil { if _, err = sess.In("issue_id", issueIDs).Delete(&IssueUser{}); err != nil {
return err return err
} }
if _, err = sess.In("issue_id", issueIDs).Delete(&Reaction{}); err != nil {
return err
}
attachments := make([]*Attachment, 0, 5) attachments := make([]*Attachment, 0, 5)
if err = sess. if err = sess.

View File

@ -37,12 +37,6 @@ func Toggle(options *ToggleOptions) macaron.Handler {
return return
} }
// Check non-logged users landing page.
if !ctx.IsSigned && ctx.Req.RequestURI == "/" && setting.LandingPageURL != setting.LandingPageHome {
ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL))
return
}
// Redirect to dashboard if user tries to visit any non-login page. // Redirect to dashboard if user tries to visit any non-login page.
if options.SignOutRequired && ctx.IsSigned && ctx.Req.RequestURI != "/" { if options.SignOutRequired && ctx.IsSigned && ctx.Req.RequestURI != "/" {
ctx.Redirect(setting.AppSubURL + "/") ctx.Redirect(setting.AppSubURL + "/")

View File

@ -469,6 +469,9 @@ func shortLinkProcessorFull(ctx *postProcessCtx, node *html.Node, noLink bool) {
} else { } else {
link = strings.Replace(link, " ", "-", -1) link = strings.Replace(link, " ", "-", -1)
} }
if !strings.Contains(link, "/") {
link = url.PathEscape(link)
}
} }
urlPrefix := ctx.urlPrefix urlPrefix := ctx.urlPrefix
if image { if image {

View File

@ -82,12 +82,18 @@ func TestRender_ShortLinks(t *testing.T) {
rawtree := util.URLJoin(AppSubURL, "raw", "master") rawtree := util.URLJoin(AppSubURL, "raw", "master")
url := util.URLJoin(tree, "Link") url := util.URLJoin(tree, "Link")
otherURL := util.URLJoin(tree, "Other-Link") otherURL := util.URLJoin(tree, "Other-Link")
encodedURL := util.URLJoin(tree, "Link%3F")
imgurl := util.URLJoin(rawtree, "Link.jpg") imgurl := util.URLJoin(rawtree, "Link.jpg")
otherImgurl := util.URLJoin(rawtree, "Link+Other.jpg") otherImgurl := util.URLJoin(rawtree, "Link+Other.jpg")
encodedImgurl := util.URLJoin(rawtree, "Link+%23.jpg")
notencodedImgurl := util.URLJoin(rawtree, "some", "path", "Link+#.jpg")
urlWiki := util.URLJoin(AppSubURL, "wiki", "Link") urlWiki := util.URLJoin(AppSubURL, "wiki", "Link")
otherURLWiki := util.URLJoin(AppSubURL, "wiki", "Other-Link") otherURLWiki := util.URLJoin(AppSubURL, "wiki", "Other-Link")
encodedURLWiki := util.URLJoin(AppSubURL, "wiki", "Link%3F")
imgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg") imgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg")
otherImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+Other.jpg") otherImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+Other.jpg")
encodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+%23.jpg")
notencodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "some", "path", "Link+#.jpg")
favicon := "http://google.com/favicon.ico" favicon := "http://google.com/favicon.ico"
test( test(
@ -134,4 +140,24 @@ func TestRender_ShortLinks(t *testing.T) {
"[[Link]] [[Other Link]]", "[[Link]] [[Other Link]]",
`<p><a href="`+url+`" rel="nofollow">Link</a> <a href="`+otherURL+`" rel="nofollow">Other Link</a></p>`, `<p><a href="`+url+`" rel="nofollow">Link</a> <a href="`+otherURL+`" rel="nofollow">Other Link</a></p>`,
`<p><a href="`+urlWiki+`" rel="nofollow">Link</a> <a href="`+otherURLWiki+`" rel="nofollow">Other Link</a></p>`) `<p><a href="`+urlWiki+`" rel="nofollow">Link</a> <a href="`+otherURLWiki+`" rel="nofollow">Other Link</a></p>`)
test(
"[[Link?]]",
`<p><a href="`+encodedURL+`" rel="nofollow">Link?</a></p>`,
`<p><a href="`+encodedURLWiki+`" rel="nofollow">Link?</a></p>`)
test(
"[[Link]] [[Other Link]] [[Link?]]",
`<p><a href="`+url+`" rel="nofollow">Link</a> <a href="`+otherURL+`" rel="nofollow">Other Link</a> <a href="`+encodedURL+`" rel="nofollow">Link?</a></p>`,
`<p><a href="`+urlWiki+`" rel="nofollow">Link</a> <a href="`+otherURLWiki+`" rel="nofollow">Other Link</a> <a href="`+encodedURLWiki+`" rel="nofollow">Link?</a></p>`)
test(
"[[Link #.jpg]]",
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`"/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`"/></a></p>`)
test(
"[[Name|Link #.jpg|alt=\"AltName\"|title='Title']]",
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`" title="Title" alt="AltName"/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`" title="Title" alt="AltName"/></a></p>`)
test(
"[[some/path/Link #.jpg]]",
`<p><a href="`+notencodedImgurl+`" rel="nofollow"><img src="`+notencodedImgurl+`"/></a></p>`,
`<p><a href="`+notencodedImgurlWiki+`" rel="nofollow"><img src="`+notencodedImgurlWiki+`"/></a></p>`)
} }

View File

@ -326,7 +326,7 @@ func RenderCommitBody(msg, urlPrefix string, metas map[string]string) template.H
// IsMultilineCommitMessage checks to see if a commit message contains multiple lines. // IsMultilineCommitMessage checks to see if a commit message contains multiple lines.
func IsMultilineCommitMessage(msg string) bool { func IsMultilineCommitMessage(msg string) bool {
return strings.Count(strings.TrimSpace(msg), "\n") > 1 return strings.Count(strings.TrimSpace(msg), "\n") >= 1
} }
// Actioner describes an action // Actioner describes an action

View File

@ -213,6 +213,7 @@ send_reset_mail=E-Mail zum Passwort-zurücksetzen erneut verschicken
reset_password=Passwort zurücksetzen reset_password=Passwort zurücksetzen
invalid_code=Dein Bestätigungs-Code ist ungültig oder abgelaufen. invalid_code=Dein Bestätigungs-Code ist ungültig oder abgelaufen.
reset_password_helper=Passwort zurückzusetzen reset_password_helper=Passwort zurückzusetzen
password_too_short=Das Passwort muss mindestens %d Zeichen lang sein.
non_local_account=Benutzer, die nicht von Gitea verwaltet werden können ihre Passwörter nicht über das Web Interface ändern. non_local_account=Benutzer, die nicht von Gitea verwaltet werden können ihre Passwörter nicht über das Web Interface ändern.
verify=Verifizieren verify=Verifizieren
scratch_code=Einmalpasswort scratch_code=Einmalpasswort

View File

@ -38,6 +38,7 @@ u2f_use_twofa=Використовуйте дво-факторний код з
u2f_error=Неможливо прочитати ваш ключ безпеки! u2f_error=Неможливо прочитати ваш ключ безпеки!
u2f_unsupported_browser=Ваш браузер не підтримує U2F ключі. Будь ласка, спробуйте інший браузер. u2f_unsupported_browser=Ваш браузер не підтримує U2F ключі. Будь ласка, спробуйте інший браузер.
u2f_error_1=Сталася невідома помилка. Спробуйте ще раз. u2f_error_1=Сталася невідома помилка. Спробуйте ще раз.
u2f_error_2=Переконайтеся, що ви використовуєте зашифроване з'єднання (https://) та відвідуєте правильну URL-адресу.
u2f_error_3=Сервер не може обробити, ваш запит. u2f_error_3=Сервер не може обробити, ваш запит.
u2f_reload=Оновити u2f_reload=Оновити
@ -67,7 +68,7 @@ activities=Дії
pull_requests=Запити на злиття pull_requests=Запити на злиття
issues=Проблеми issues=Проблеми
cancel=Відміна cancel=Відмінити
[install] [install]
install=Встановлення install=Встановлення
@ -317,7 +318,7 @@ update_profile=Оновити профіль
update_profile_success=Профіль успішно оновлено. update_profile_success=Профіль успішно оновлено.
change_username=Ваше Ім'я кристувача було змінено. change_username=Ваше Ім'я кристувача було змінено.
continue=Продовжити continue=Продовжити
cancel=Відміна cancel=Відмінити
language=Мова language=Мова
lookup_avatar_by_mail=Знайти Аватар за адресою електронної пошти lookup_avatar_by_mail=Знайти Аватар за адресою електронної пошти
@ -398,7 +399,12 @@ generate_token=Згенерувати токен
delete_token=Видалити delete_token=Видалити
access_token_deletion=Видалити токен доступу access_token_deletion=Видалити токен доступу
twofa_desc=Двофакторна аутентифікація підвищує безпеку вашого облікового запису.
twofa_is_enrolled=Ваш обліковий запис на даний час <strong>використовує</strong> двофакторну автентифікацію.
twofa_disable=Вимкнути двофакторну автентифікацію twofa_disable=Вимкнути двофакторну автентифікацію
twofa_enroll=Увімкнути двофакторну автентифікацію
twofa_disabled=Двофакторна автентифікація вимкнена.
scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної аутентифікації:
or_enter_secret=Або введіть секрет: %s or_enter_secret=Або введіть секрет: %s
passcode_invalid=Некоректний пароль. Спробуй ще раз. passcode_invalid=Некоректний пароль. Спробуй ще раз.
@ -526,7 +532,7 @@ editor.commit_message_desc=Додати необов'язковий розшир
editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку <strong class="branch-name">%s</strong>. editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку <strong class="branch-name">%s</strong>.
editor.create_new_branch=Створити <strong>нову гілку</strong> для цього коміту та відкрити запит на злиття. editor.create_new_branch=Створити <strong>нову гілку</strong> для цього коміту та відкрити запит на злиття.
editor.new_branch_name_desc=Ім'я нової гілки… editor.new_branch_name_desc=Ім'я нової гілки…
editor.cancel=Відміна editor.cancel=Відмінити
editor.filename_cannot_be_empty=Ім'я файлу не може бути порожнім. editor.filename_cannot_be_empty=Ім'я файлу не може бути порожнім.
editor.branch_already_exists=Гілка '%s' вже присутня в репозиторії. editor.branch_already_exists=Гілка '%s' вже присутня в репозиторії.
editor.directory_is_a_file=Ім'я каталогу "%s" уже використовується як ім'я файлу в цьому репозиторії. editor.directory_is_a_file=Ім'я каталогу "%s" уже використовується як ім'я файлу в цьому репозиторії.
@ -628,7 +634,7 @@ issues.collaborator=Співавтор
issues.owner=Власник issues.owner=Власник
issues.sign_in_require_desc=<a href="%s">Підпишіться</a> щоб приєднатися до обговорення. issues.sign_in_require_desc=<a href="%s">Підпишіться</a> щоб приєднатися до обговорення.
issues.edit=Редагувати issues.edit=Редагувати
issues.cancel=Відміна issues.cancel=Відмінити
issues.save=Зберегти issues.save=Зберегти
issues.label_title=Назва мітки issues.label_title=Назва мітки
issues.label_description=Опис мітки issues.label_description=Опис мітки
@ -657,11 +663,11 @@ issues.tracking_already_started=`Ви вже почали відстежуват
issues.stop_tracking=Стоп issues.stop_tracking=Стоп
issues.add_time=Вручну додати час issues.add_time=Вручну додати час
issues.add_time_short=Додати час issues.add_time_short=Додати час
issues.add_time_cancel=Відміна issues.add_time_cancel=Відмінити
issues.add_time_hours=Години issues.add_time_hours=Години
issues.add_time_minutes=Хвилини issues.add_time_minutes=Хвилини
issues.add_time_sum_to_small=Час не введено. issues.add_time_sum_to_small=Час не введено.
issues.cancel_tracking=Відміна issues.cancel_tracking=Відмінити
issues.cancel_tracking_history=`скасував відстеження часу %s` issues.cancel_tracking_history=`скасував відстеження часу %s`
issues.time_spent_total=Загальний витрачений час issues.time_spent_total=Загальний витрачений час
issues.time_spent_from_all_authors=`Загальний витрачений час: %s` issues.time_spent_from_all_authors=`Загальний витрачений час: %s`
@ -712,7 +718,7 @@ milestones.desc=Опис
milestones.due_date=Дата завершення (опціонально) milestones.due_date=Дата завершення (опціонально)
milestones.clear=Очистити milestones.clear=Очистити
milestones.edit=Редагувати етап milestones.edit=Редагувати етап
milestones.cancel=Відміна milestones.cancel=Відмінити
milestones.modify=Оновити етап milestones.modify=Оновити етап
milestones.deletion=Видалити етап milestones.deletion=Видалити етап
milestones.filter_sort.most_issues=Найбільш проблем milestones.filter_sort.most_issues=Найбільш проблем
@ -933,7 +939,7 @@ release.preview=Переглянути
release.loading=Завантаження… release.loading=Завантаження…
release.prerelease_desc=Позначити як пре-реліз release.prerelease_desc=Позначити як пре-реліз
release.prerelease_helper=Позначте цей випуск непридатним для ПРОД використання. release.prerelease_helper=Позначте цей випуск непридатним для ПРОД використання.
release.cancel=Відміна release.cancel=Відмінити
release.publish=Опублікувати реліз release.publish=Опублікувати реліз
release.save_draft=Зберегти чернетку release.save_draft=Зберегти чернетку
release.edit_release=Оновити реліз release.edit_release=Оновити реліз

View File

@ -2208,7 +2208,7 @@
"name": "body", "name": "body",
"in": "body", "in": "body",
"schema": { "schema": {
"$ref": "#/definitions/CreateIssueOption" "$ref": "#/definitions/CreateIssueCommentOption"
} }
} }
], ],
@ -7864,24 +7864,16 @@
}, },
"security": [ "security": [
{ {
"BasicAuth": [ "BasicAuth": []
"[]"
]
}, },
{ {
"Token": [ "Token": []
"[]"
]
}, },
{ {
"AccessToken": [ "AccessToken": []
"[]"
]
}, },
{ {
"AuthorizationHeaderToken": [ "AuthorizationHeaderToken": []
"[]"
]
} }
] ]
} }

View File

@ -20,10 +20,10 @@
// - text/html // - text/html
// //
// Security: // Security:
// - BasicAuth: [] // - BasicAuth :
// - Token: [] // - Token :
// - AccessToken: [] // - AccessToken :
// - AuthorizationHeaderToken: [] // - AuthorizationHeaderToken :
// //
// SecurityDefinitions: // SecurityDefinitions:
// BasicAuth: // BasicAuth:

View File

@ -147,7 +147,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti
// - name: body // - name: body
// in: body // in: body
// schema: // schema:
// "$ref": "#/definitions/CreateIssueOption" // "$ref": "#/definitions/CreateIssueCommentOption"
// responses: // responses:
// "201": // "201":
// "$ref": "#/responses/Comment" // "$ref": "#/responses/Comment"

View File

@ -42,6 +42,10 @@ func Home(ctx *context.Context) {
user.Dashboard(ctx) user.Dashboard(ctx)
} }
return return
// Check non-logged users landing page.
} else if setting.LandingPageURL != setting.LandingPageHome {
ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL))
return
} }
// Check auto-login. // Check auto-login.