Compare commits

...

4 Commits

Author SHA1 Message Date
Lunny Xiao
9816ed56d2
Merge 963df7d669e204a8ce6d8cb565dc4ace6db3cb26 into 97fc87af89a03470999a1a68e293417e36bd9b52 2025-07-02 20:24:35 -05:00
GiteaBot
97fc87af89 [skip ci] Updated translations via Crowdin 2025-07-03 00:37:58 +00:00
silverwind
6fe5c4c4d9
Exclude devtest.ts from tailwindcss (#34935)
Fix this leftover from the typescript migration.
2025-07-02 18:00:16 -04:00
Lunny Xiao
963df7d669
Don't create default column when viewing project columns 2025-06-26 21:31:58 -07:00
6 changed files with 64 additions and 48 deletions

View File

@ -157,42 +157,52 @@ func NewColumn(ctx context.Context, column *Column) error {
// DeleteColumnByID removes all issues references to the project column. // DeleteColumnByID removes all issues references to the project column.
func DeleteColumnByID(ctx context.Context, columnID int64) error { func DeleteColumnByID(ctx context.Context, columnID int64) error {
return db.WithTx(ctx, func(ctx context.Context) error { return db.WithTx(ctx, func(ctx context.Context) error {
return deleteColumnByID(ctx, columnID) column, err := GetColumn(ctx, columnID)
}) if err != nil {
} if IsErrProjectColumnNotExist(err) {
return nil
}
func deleteColumnByID(ctx context.Context, columnID int64) error { return err
column, err := GetColumn(ctx, columnID)
if err != nil {
if IsErrProjectColumnNotExist(err) {
return nil
} }
return err if column.Default {
} return errors.New("deleteColumnByID: cannot delete default column")
}
if column.Default { var numColumns int64
return errors.New("deleteColumnByID: cannot delete default column") if _, err := db.GetEngine(ctx).Table("project_board").
} Where("project_id=?", column.ProjectID).Count(&numColumns); err != nil {
return err
}
// move all issues to the default column // last column with issues cannot be deleted
project, err := GetProjectByID(ctx, column.ProjectID) if column.NumIssues > 0 && numColumns <= 1 {
if err != nil { return errors.New("deleteColumnByID: cannot delete last column with issues")
return err }
}
defaultColumn, err := project.MustDefaultColumn(ctx)
if err != nil {
return err
}
if err = column.moveIssuesToAnotherColumn(ctx, defaultColumn); err != nil { if column.NumIssues > 0 {
return err project, err := GetProjectByID(ctx, column.ProjectID)
} if err != nil {
return err
}
if _, err := db.GetEngine(ctx).ID(column.ID).NoAutoCondition().Delete(column); err != nil { defaultColumn, err := project.getDefaultColumn(ctx)
return err if err != nil {
} return err
return nil }
// move all issues to the default column
if err = column.moveIssuesToAnotherColumn(ctx, defaultColumn); err != nil {
return err
}
}
if _, err := db.GetEngine(ctx).ID(column.ID).NoAutoCondition().Delete(column); err != nil {
return err
}
return nil
})
} }
func deleteColumnByProjectID(ctx context.Context, projectID int64) error { func deleteColumnByProjectID(ctx context.Context, projectID int64) error {
@ -261,6 +271,20 @@ func (p *Project) getDefaultColumn(ctx context.Context) (*Column, error) {
return nil, ErrProjectColumnNotExist{ColumnID: 0} return nil, ErrProjectColumnNotExist{ColumnID: 0}
} }
func (p *Project) createDefaultColumn(ctx context.Context) (*Column, error) {
// create a default column if none is found
column := Column{
ProjectID: p.ID,
Default: true,
Title: "Uncategorized",
CreatorID: p.CreatorID,
}
if _, err := db.GetEngine(ctx).Insert(&column); err != nil {
return nil, err
}
return &column, nil
}
// MustDefaultColumn returns the default column for a project. // MustDefaultColumn returns the default column for a project.
// If one exists, it is returned // If one exists, it is returned
// If none exists, the first column will be elevated to the default column of this project // If none exists, the first column will be elevated to the default column of this project
@ -286,17 +310,7 @@ func (p *Project) MustDefaultColumn(ctx context.Context) (*Column, error) {
return &column, nil return &column, nil
} }
// create a default column if none is found return p.createDefaultColumn(ctx)
column = Column{
ProjectID: p.ID,
Default: true,
Title: "Uncategorized",
CreatorID: p.CreatorID,
}
if _, err := db.GetEngine(ctx).Insert(&column); err != nil {
return nil, err
}
return &column, nil
} }
// SetDefaultColumn represents a column for issues not assigned to one // SetDefaultColumn represents a column for issues not assigned to one

View File

@ -1969,6 +1969,7 @@ pulls.cmd_instruction_checkout_title=Basculer
pulls.cmd_instruction_checkout_desc=Depuis votre dépôt, basculer sur une nouvelle branche et tester des modifications. pulls.cmd_instruction_checkout_desc=Depuis votre dépôt, basculer sur une nouvelle branche et tester des modifications.
pulls.cmd_instruction_merge_title=Fusionner pulls.cmd_instruction_merge_title=Fusionner
pulls.cmd_instruction_merge_desc=Fusionner les modifications et mettre à jour sur Gitea. pulls.cmd_instruction_merge_desc=Fusionner les modifications et mettre à jour sur Gitea.
pulls.cmd_instruction_merge_warning=Attention : cette opération ne peut pas fusionner la demande dajout car la « détection automatique de fusion manuelle » na pas été activée
pulls.clear_merge_message=Effacer le message de fusion pulls.clear_merge_message=Effacer le message de fusion
pulls.clear_merge_message_hint=Effacer le message de fusion ne supprimera que le message de la révision, mais pas les pieds de révision générés tels que "Co-Authored-By:". pulls.clear_merge_message_hint=Effacer le message de fusion ne supprimera que le message de la révision, mais pas les pieds de révision générés tels que "Co-Authored-By:".
@ -2768,6 +2769,8 @@ branch.new_branch_from=`Créer une nouvelle branche à partir de "%s"`
branch.renamed=La branche %s à été renommée en %s. branch.renamed=La branche %s à été renommée en %s.
branch.rename_default_or_protected_branch_error=Seuls les administrateurs peuvent renommer les branches par défaut ou protégées. branch.rename_default_or_protected_branch_error=Seuls les administrateurs peuvent renommer les branches par défaut ou protégées.
branch.rename_protected_branch_failed=Cette branche est protégée par des règles de protection basées sur des globs. branch.rename_protected_branch_failed=Cette branche est protégée par des règles de protection basées sur des globs.
branch.commits_divergence_from=Divergence de révisions : %[1]d en retard et %[2]d en avance sur %[3]s
branch.commits_no_divergence=Identique à la branche %[1]s
tag.create_tag=Créer l'étiquette %s tag.create_tag=Créer l'étiquette %s
tag.create_tag_operation=Créer une étiquette tag.create_tag_operation=Créer une étiquette

View File

@ -2769,6 +2769,8 @@ branch.new_branch_from=`Cruthaigh brainse nua ó "%s"`
branch.renamed=Ainmníodh brainse %s go %s. branch.renamed=Ainmníodh brainse %s go %s.
branch.rename_default_or_protected_branch_error=Ní féidir ach le riarthóirí brainsí réamhshocraithe nó cosanta a athainmniú. branch.rename_default_or_protected_branch_error=Ní féidir ach le riarthóirí brainsí réamhshocraithe nó cosanta a athainmniú.
branch.rename_protected_branch_failed=Tá an brainse seo faoi chosaint ag rialacha cosanta domhanda. branch.rename_protected_branch_failed=Tá an brainse seo faoi chosaint ag rialacha cosanta domhanda.
branch.commits_divergence_from=Déanann sé dialltacht a thiomnú: %[1]d taobh thiar agus %[2]d chun tosaigh ar %[3]s
branch.commits_no_divergence=Mar an gcéanna le brainse %[1]s
tag.create_tag=Cruthaigh clib %s tag.create_tag=Cruthaigh clib %s
tag.create_tag_operation=Cruthaigh clib tag.create_tag_operation=Cruthaigh clib

View File

@ -2769,6 +2769,8 @@ branch.new_branch_from=`Criar um novo ramo a partir do ramo "%s"`
branch.renamed=O ramo %s foi renomeado para %s. branch.renamed=O ramo %s foi renomeado para %s.
branch.rename_default_or_protected_branch_error=Só os administradores é que podem renomear o ramo principal ou ramos protegidos. branch.rename_default_or_protected_branch_error=Só os administradores é que podem renomear o ramo principal ou ramos protegidos.
branch.rename_protected_branch_failed=Este ramo está protegido por regras de salvaguarda baseadas em padrões glob. branch.rename_protected_branch_failed=Este ramo está protegido por regras de salvaguarda baseadas em padrões glob.
branch.commits_divergence_from=Divergência nos cometimentos: %[1]d atrás e %[2]d à frente de %[3]s
branch.commits_no_divergence=Idêntico ao ramo %[1]s
tag.create_tag=Criar etiqueta %s tag.create_tag=Criar etiqueta %s
tag.create_tag_operation=Criar etiqueta tag.create_tag_operation=Criar etiqueta

View File

@ -100,12 +100,7 @@ func LoadIssuesFromProject(ctx context.Context, project *project_model.Project,
return nil, err return nil, err
} }
defaultColumn, err := project.MustDefaultColumn(ctx) issueColumnMap, err := issues_model.LoadProjectIssueColumnMap(ctx, project.ID, 0)
if err != nil {
return nil, err
}
issueColumnMap, err := issues_model.LoadProjectIssueColumnMap(ctx, project.ID, defaultColumn.ID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -113,7 +108,7 @@ func LoadIssuesFromProject(ctx context.Context, project *project_model.Project,
results := make(map[int64]issues_model.IssueList) results := make(map[int64]issues_model.IssueList)
for _, issue := range issueList { for _, issue := range issueList {
projectColumnID, ok := issueColumnMap[issue.ID] projectColumnID, ok := issueColumnMap[issue.ID]
if !ok { if !ok || projectColumnID == 0 {
continue continue
} }
if _, ok := results[projectColumnID]; !ok { if _, ok := results[projectColumnID]; !ok {

View File

@ -29,7 +29,7 @@ export default {
important: true, // the frameworks are mixed together, so tailwind needs to override other framework's styles important: true, // the frameworks are mixed together, so tailwind needs to override other framework's styles
content: [ content: [
isProduction && '!./templates/devtest/**/*', isProduction && '!./templates/devtest/**/*',
isProduction && '!./web_src/js/standalone/devtest.js', isProduction && '!./web_src/js/standalone/devtest.ts',
'!./templates/swagger/v1_json.tmpl', '!./templates/swagger/v1_json.tmpl',
'!./templates/user/auth/oidc_wellknown.tmpl', '!./templates/user/auth/oidc_wellknown.tmpl',
'!**/*_test.go', '!**/*_test.go',