Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fix package link setting can only list limited repositories#35394

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
21 commits
Select commitHold shift + click to select a range
4343688
Fix package link setting can only list limited repositories
lunnySep 1, 2025
18a1050
Remove unused file
lunnySep 1, 2025
f623d68
Merge branch 'main' into lunny/fix_package_link_search_repo
lunnySep 5, 2025
4c6ef5f
Merge branch 'main' into lunny/fix_package_link_search_repo
lunnySep 7, 2025
7a7e4ad
Merge branch 'main' into lunny/fix_package_link_search_repo
lunnySep 8, 2025
538536d
fix
lunnySep 9, 2025
0b34ff8
Merge branch 'main' into lunny/fix_package_link_search_repo
lunnySep 9, 2025
3f82970
Merge branch 'lunny/fix_package_link_search_repo' of github.com:lunny…
lunnySep 9, 2025
d4645fd
improvements
lunnySep 9, 2025
4146753
Add html escape for repository full name
lunnySep 9, 2025
c0a2fd3
improvements
lunnySep 10, 2025
b834153
fix
wxiaoguangSep 10, 2025
7c62d08
improvements
lunnySep 10, 2025
f7156c6
Merge branch 'main' into lunny/fix_package_link_search_repo
lunnySep 10, 2025
fdc0bcd
Merge branch 'lunny/fix_package_link_search_repo' of github.com:lunny…
lunnySep 10, 2025
1f91aa7
Merge branch 'main' into lunny/fix_package_link_search_repo
lunnySep 10, 2025
77f022d
Merge branch 'main' into lunny/fix_package_link_search_repo
GiteaBotSep 10, 2025
0f9ce74
Merge branch 'main' into lunny/fix_package_link_search_repo
GiteaBotSep 10, 2025
d81cb1e
improvement the package link description
lunnySep 10, 2025
99603c6
Merge branch 'lunny/fix_package_link_search_repo' of github.com:lunny…
lunnySep 10, 2025
b004ef5
Merge branch 'main' into lunny/fix_package_link_search_repo
GiteaBotSep 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletionoptions/locale/locale_en-US.ini
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3729,11 +3729,14 @@ swift.install = Add the package in your <code>Package.swift</code> file:
swift.install2 = and run the following command:
vagrant.install = To add a Vagrant box, run the following command:
settings.link = Link this package to a repository
settings.link.description = If you link a package with a repository, the packageis listed in the repository's package list.
settings.link.description = If you link a package with a repository, the packagewill appear in the repository's package list. Only repositories under the same owner can be linked. Leaving the field empty will remove the link.
settings.link.select = Select Repository
settings.link.button = Update Repository Link
settings.link.success = Repository link was successfully updated.
settings.link.error = Failed to update repository link.
settings.link.repo_not_found = Repository %s not found.
settings.unlink.error = Failed to remove repository link.
settings.unlink.success = Repository link was successfully removed.
settings.delete = Delete package
settings.delete.description = Deleting a package is permanent and cannot be undone.
settings.delete.notice = You are about to delete %s (%s). This operation is irreversible, are you sure?
Expand Down
103 changes: 55 additions & 48 deletionsrouters/web/user/package.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -431,74 +431,81 @@ func PackageSettings(ctx *context.Context) {
ctx.Data["Title"] = pd.Package.Name
ctx.Data["IsPackagesPage"] = true
ctx.Data["PackageDescriptor"] = pd

repos, _, _ := repo_model.GetUserRepositories(ctx, repo_model.SearchRepoOptions{
Actor: pd.Owner,
Private: true,
})
ctx.Data["Repos"] = repos
ctx.Data["CanWritePackages"] = ctx.Package.AccessMode >= perm.AccessModeWrite || ctx.IsUserSiteAdmin()

if pd.Package.RepoID > 0 {
repo, err := repo_model.GetRepositoryByID(ctx, pd.Package.RepoID)
if err != nil {
ctx.ServerError("GetRepositoryByID", err)
return
}
ctx.Data["LinkedRepoName"] = repo.Name
}

ctx.HTML(http.StatusOK, tplPackagesSettings)
}

// PackageSettingsPost updates the package settings
func PackageSettingsPost(ctx *context.Context) {
pd := ctx.Package.Descriptor

form := web.GetForm(ctx).(*forms.PackageSettingForm)
switch form.Action {
case "link":
success := func() bool {
repoID := int64(0)
if form.RepoID != 0 {
repo, err := repo_model.GetRepositoryByID(ctx, form.RepoID)
if err != nil {
log.Error("Error getting repository: %v", err)
return false
}

if repo.OwnerID != pd.Owner.ID {
return false
}

repoID = repo.ID
}
packageSettingsPostActionLink(ctx, form)
case "delete":
packageSettingsPostActionDelete(ctx)
default:
ctx.NotFound(nil)
}
}

if err := packages_model.SetRepositoryLink(ctx, pd.Package.ID, repoID); err != nil {
log.Error("Error updating package: %v", err)
return false
}
func packageSettingsPostActionLink(ctx *context.Context, form *forms.PackageSettingForm) {
pd := ctx.Package.Descriptor
if form.RepoName == "" { // remove the link
if err := packages_model.SetRepositoryLink(ctx, pd.Package.ID, 0); err != nil {
ctx.JSONError(ctx.Tr("packages.settings.unlink.error"))
return
}

return true
}()
ctx.Flash.Success(ctx.Tr("packages.settings.unlink.success"))
ctx.JSONRedirect("")
return
}

if success {
ctx.Flash.Success(ctx.Tr("packages.settings.link.success"))
repo, err := repo_model.GetRepositoryByName(ctx, pd.Owner.ID, form.RepoName)
if err != nil {
if repo_model.IsErrRepoNotExist(err) {
ctx.JSONError(ctx.Tr("packages.settings.link.repo_not_found", form.RepoName))
} else {
ctx.Flash.Error(ctx.Tr("packages.settings.link.error"))
ctx.ServerError("GetRepositoryByOwnerAndName", err)
}
return
}

ctx.Redirect(ctx.Link)
if err := packages_model.SetRepositoryLink(ctx, pd.Package.ID, repo.ID); err != nil {
ctx.JSONError(ctx.Tr("packages.settings.link.error"))
return
case "delete":
err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
if err != nil {
log.Error("Error deleting package: %v", err)
ctx.Flash.Error(ctx.Tr("packages.settings.delete.error"))
} else {
ctx.Flash.Success(ctx.Tr("packages.settings.delete.success"))
}
}

redirectURL := ctx.Package.Owner.HomeLink() + "/-/packages"
// redirect to the package if there are still versions available
if has, _ := packages_model.ExistVersion(ctx, &packages_model.PackageSearchOptions{PackageID: ctx.Package.Descriptor.Package.ID, IsInternal: optional.Some(false)}); has {
redirectURL = ctx.Package.Descriptor.PackageWebLink()
}
ctx.Flash.Success(ctx.Tr("packages.settings.link.success"))
ctx.JSONRedirect("")
}

ctx.Redirect(redirectURL)
return
func packageSettingsPostActionDelete(ctx *context.Context) {
err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
if err != nil {
log.Error("Error deleting package: %v", err)
ctx.Flash.Error(ctx.Tr("packages.settings.delete.error"))
} else {
ctx.Flash.Success(ctx.Tr("packages.settings.delete.success"))
}

redirectURL := ctx.Package.Owner.HomeLink() + "/-/packages"
// redirect to the package if there are still versions available
if has, _ := packages_model.ExistVersion(ctx, &packages_model.PackageSearchOptions{PackageID: ctx.Package.Descriptor.Package.ID, IsInternal: optional.Some(false)}); has {
redirectURL = ctx.Package.Descriptor.PackageWebLink()
}

ctx.Redirect(redirectURL)
}

// DownloadPackageFile serves the content of a package file
Expand Down
4 changes: 2 additions & 2 deletionsservices/forms/user_form.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -416,8 +416,8 @@ func (f *WebauthnDeleteForm) Validate(req *http.Request, errs binding.Errors) bi

// PackageSettingForm form for package settings
type PackageSettingForm struct {
Action string
RepoID int64 `form:"repo_id"`
Actionstring
RepoName string `form:"repo_name"`
}

// Validate validates the fields
Expand Down
2 changes: 1 addition & 1 deletiontemplates/org/team/repositories.tmpl
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@
<div class="ui top attached segment tw-flex tw-flex-wrap tw-gap-2">
<form class="ui form ignore-dirty tw-flex-1 tw-flex" action="{{$.OrgLink}}/teams/{{$.Team.LowerName | PathEscape}}/action/repo/add" method="post">
{{.CsrfTokenHtml}}
<divid="search-repo-box" data-uid="{{.Org.ID}}" class="ui search">
<divdata-global-init="initSearchRepoBox" data-uid="{{.Org.ID}}" class="ui search">
<div class="ui input">
<input class="prompt" name="repo_name" placeholder="{{ctx.Locale.Tr "search.repo_kind"}}" autocomplete="off" required>
</div>
Expand Down
26 changes: 6 additions & 20 deletionstemplates/package/settings.tmpl
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{{template "base/head" .}}
<div role="main" aria-label="{{.Title}}" class="page-contentrepository settings options{{if .ContextUser.IsOrganization}} organization{{end}}">
<div role="main" aria-label="{{.Title}}" class="page-contentpackage settings options{{if .ContextUser.IsOrganization}} organization{{end}}">
{{if .ContextUser.IsOrganization}}
{{template "org/header" .}}
{{else}}
Expand All@@ -16,29 +16,15 @@
</h4>
<div class="ui attached segment">
<p>{{ctx.Locale.Tr "packages.settings.link.description"}}</p>
<form class="ui form" action="{{.Link}}" method="post">
{{template "base/disable_form_autofill"}}
<form class="ui form form-fetch-action ignore-dirty flex-text-block" action="{{.Link}}" method="post">
{{.CsrfTokenHtml}}
<input type="hidden" name="action" value="link">
<div class="field">
<div class="ui clearable selection dropdown">
{{$repoID := 0}}
{{if .PackageDescriptor.Repository}}
{{$repoID = .PackageDescriptor.Repository.ID}}
{{end}}
<input type="hidden" name="repo_id" value="{{$repoID}}">
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="default text">{{ctx.Locale.Tr "packages.settings.link.select"}}</div>
<div class="menu">
{{range .Repos}}
<div class="item" data-value="{{.ID}}">{{.Name}}</div>
{{end}}
</div>
<div data-global-init="initSearchRepoBox" class="ui search" data-uid="{{.PackageDescriptor.Owner.ID}}">
<div class="ui input">
<input class="prompt" name="repo_name" value="{{.LinkedRepoName}}" placeholder="{{ctx.Locale.Tr "search.repo_kind"}}" autocomplete="off">
</div>
</div>
<div class="field">
<button class="ui primary button">{{ctx.Locale.Tr "packages.settings.link.button"}}</button>
</div>
<button class="ui primary button">{{ctx.Locale.Tr "packages.settings.link.button"}}</button>
</form>
</div>
<h4 class="ui top attached error header">
Expand Down
7 changes: 3 additions & 4 deletionsweb_src/js/features/common-page.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,7 @@ import {fomanticQuery} from '../modules/fomantic/base.ts';
import {queryElems} from '../utils/dom.ts';
import {registerGlobalInitFunc, registerGlobalSelectorFunc} from '../modules/observer.ts';
import {initAvatarUploaderWithCropper} from './comp/Cropper.ts';
import {initCompSearchRepoBox} from './comp/SearchRepoBox.ts';

const {appUrl} = window.config;

Expand DownExpand Up@@ -77,12 +78,10 @@ export function initGlobalDropdown() {
});
}

export functioninitGlobalTabularMenu() {
export functioninitGlobalComponent() {
fomanticQuery('.ui.menu.tabular:not(.custom) .item').tab();
}

export function initGlobalAvatarUploader() {
registerGlobalInitFunc('initAvatarUploader', initAvatarUploaderWithCropper);
registerGlobalInitFunc('initSearchRepoBox', initCompSearchRepoBox);
}

// for performance considerations, it only uses performant syntax
Expand Down
26 changes: 26 additions & 0 deletionsweb_src/js/features/comp/SearchRepoBox.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
import {fomanticQuery} from '../../modules/fomantic/base.ts';
import {htmlEscape} from '../../utils/html.ts';

const {appSubUrl} = window.config;

export function initCompSearchRepoBox(el: HTMLElement) {
const uid = el.getAttribute('data-uid');
fomanticQuery(el).search({
minCharacters: 2,
apiSettings: {
url: `${appSubUrl}/repo/search?q={query}&uid=${uid}`,
onResponse(response: any) {
const items = [];
for (const item of response.data) {
items.push({
title: htmlEscape(item.repository.full_name.split('/')[1]),
description: htmlEscape(item.repository.full_name),
});
}
return {results: items};
},
},
searchFields: ['full_name'],
showNoResults: false,
});
}
27 changes: 0 additions & 27 deletionsweb_src/js/features/org-team.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
import {queryElems, toggleElem} from '../utils/dom.ts';
import {fomanticQuery} from '../modules/fomantic/base.ts';

const {appSubUrl} = window.config;

function initOrgTeamSettings() {
// on the page "page-content organization new team"
Expand All@@ -14,31 +11,7 @@ function initOrgTeamSettings() {
}));
}

function initOrgTeamSearchRepoBox() {
// on the page "page-content organization teams"
const $searchRepoBox = fomanticQuery('#search-repo-box');
$searchRepoBox.search({
minCharacters: 2,
apiSettings: {
url: `${appSubUrl}/repo/search?q={query}&uid=${$searchRepoBox.data('uid')}`,
onResponse(response: any) {
const items = [];
for (const item of response.data) {
items.push({
title: item.repository.full_name.split('/')[1],
description: item.repository.full_name,
});
}
return {results: items};
},
},
searchFields: ['full_name'],
showNoResults: false,
});
}

export function initOrgTeam() {
if (!document.querySelector('.page-content.organization')) return;
initOrgTeamSettings();
initOrgTeamSearchRepoBox();
}
5 changes: 2 additions & 3 deletionsweb_src/js/index-domready.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,7 +61,7 @@ import {initColorPickers} from './features/colorpicker.ts';
import {initAdminSelfCheck} from './features/admin/selfcheck.ts';
import {initOAuth2SettingsDisableCheckbox} from './features/oauth2-settings.ts';
import {initGlobalFetchAction} from './features/common-fetch-action.ts';
import {initFootLanguageMenu,initGlobalAvatarUploader, initGlobalDropdown, initGlobalInput, initGlobalTabularMenu, initHeadNavbarContentToggle} from './features/common-page.ts';
import {initFootLanguageMenu,initGlobalComponent, initGlobalDropdown, initGlobalInput, initHeadNavbarContentToggle} from './features/common-page.ts';
import {initGlobalButtonClickOnEnter, initGlobalButtons, initGlobalDeleteButton} from './features/common-button.ts';
import {initGlobalComboMarkdownEditor, initGlobalEnterQuickSubmit, initGlobalFormDirtyLeaveConfirm} from './features/common-form.ts';
import {callInitFunctions} from './modules/init.ts';
Expand All@@ -73,9 +73,8 @@ const initPerformanceTracer = callInitFunctions([
initSubmitEventPolyfill,
initGiteaFomantic,

initGlobalAvatarUploader,
initGlobalComponent,
initGlobalDropdown,
initGlobalTabularMenu,
initGlobalFetchAction,
initGlobalTooltips,
initGlobalButtonClickOnEnter,
Expand Down

[8]ページ先頭

©2009-2026 Movatter.jp