Compare commits

..

43 commits

Author SHA1 Message Date
Kita Ikuyo 5f9f0a3b4b
Translated using Weblate (Filipino)
Currently translated at 50.4% (1792 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fil/
2024-04-26 22:18:28 +00:00
Pi-Cla c06cd48219
Translated using Weblate (Chinese (Traditional, Hong Kong))
Currently translated at 15.9% (565 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hant_HK/
2024-04-26 22:18:28 +00:00
emansije f233603c7d
Translated using Weblate (Portuguese (Portugal))
Currently translated at 94.3% (3350 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_PT/
2024-04-26 22:18:28 +00:00
toasterbirb d4aa1321cf
Translated using Weblate (Finnish)
Currently translated at 31.3% (1114 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fi/
2024-04-26 22:18:27 +00:00
ZilloweZ c1e63bf2db
Translated using Weblate (Arabic)
Currently translated at 41.5% (1475 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ar/
2024-04-26 22:18:27 +00:00
Xinayder 4f8bf98ecd
Translated using Weblate (Portuguese (Brazil))
Currently translated at 74.9% (2662 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_BR/
2024-04-26 22:18:27 +00:00
owofied 4a9316c178
Translated using Weblate (Polish)
Currently translated at 50.8% (1805 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pl/
2024-04-26 22:18:27 +00:00
SteffoSpieler eae7a48b9b
Translated using Weblate (German)
Currently translated at 100.0% (3550 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/de/
2024-04-26 22:18:27 +00:00
Fjuro bcff2538a6
Translated using Weblate (Czech)
Currently translated at 100.0% (3550 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/cs/
2024-04-26 22:18:27 +00:00
leana8959 d3b366ae68
Translated using Weblate (Chinese (Traditional))
Currently translated at 78.6% (2791 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hant/
2024-04-26 22:18:27 +00:00
kecrily 38a52e28e0
Translated using Weblate (Chinese (Simplified))
Currently translated at 91.1% (3235 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hans/
2024-04-26 22:18:27 +00:00
0ko 092ad96059
Translated using Weblate (Russian)
Currently translated at 91.8% (3262 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ru/
2024-04-26 22:18:27 +00:00
emansije 151086a034
Translated using Weblate (Portuguese (Portugal))
Currently translated at 94.3% (3348 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_PT/
2024-04-26 22:18:27 +00:00
Xinayder 4d45827138
Translated using Weblate (Portuguese (Brazil))
Currently translated at 74.3% (2639 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_BR/
2024-04-26 22:18:27 +00:00
Fjuro c349584c90
Translated using Weblate (Czech)
Currently translated at 99.9% (3549 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/cs/
2024-04-26 22:18:27 +00:00
leana8959 b2f33b8b3c
Translated using Weblate (Chinese (Traditional))
Currently translated at 72.5% (2575 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hant/
2024-04-26 22:18:27 +00:00
0ko 4ed0a437b5
Translated using Weblate (Russian)
Currently translated at 91.8% (3261 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ru/
2024-04-26 22:18:27 +00:00
owofied 9b857c4426
Translated using Weblate (Polish)
Currently translated at 47.7% (1694 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pl/
2024-04-26 22:18:27 +00:00
FunctionalHacker e15fa0be6a
Translated using Weblate (Finnish)
Currently translated at 30.6% (1089 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fi/
2024-04-26 22:18:27 +00:00
Dirk 4ca75f88e7
Translated using Weblate (German)
Currently translated at 100.0% (3550 of 3550 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/de/
2024-04-26 22:18:27 +00:00
leana8959 b61b061f94
Translated using Weblate (Chinese (Traditional))
Currently translated at 69.3% (2462 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hant/
2024-04-26 22:18:27 +00:00
0ko 5980dcba19
Translated using Weblate (Russian)
Currently translated at 91.8% (3259 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ru/
2024-04-26 22:18:27 +00:00
emansije 8407543b36
Translated using Weblate (Portuguese (Portugal))
Currently translated at 81.2% (2882 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_PT/
2024-04-26 22:18:27 +00:00
lucasmz f130e5d6f9
Translated using Weblate (Portuguese (Brazil))
Currently translated at 73.7% (2615 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_BR/
2024-04-26 22:18:27 +00:00
Mylloon 7fc83b24b4
Translated using Weblate (French)
Currently translated at 99.4% (3527 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fr/
2024-04-26 22:18:27 +00:00
SteffoSpieler 68d60a302c
Translated using Weblate (German)
Currently translated at 100.0% (3548 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/de/
2024-04-26 22:18:26 +00:00
leana8959 0a0faa3f60
Translated using Weblate (Chinese (Traditional))
Currently translated at 66.8% (2373 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hant/
2024-04-26 22:18:26 +00:00
yeziruo e3f5216d32
Translated using Weblate (Chinese (Simplified))
Currently translated at 91.1% (3235 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hans/
2024-04-26 22:18:26 +00:00
earl-warren 4102e5d566
Translated using Weblate (French)
Currently translated at 99.3% (3524 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fr/
2024-04-26 22:18:26 +00:00
leana8959 83ce1fcd7a
Translated using Weblate (French)
Currently translated at 99.3% (3524 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fr/
2024-04-26 22:18:26 +00:00
Kita Ikuyo 5327bd0e05
Translated using Weblate (Filipino)
Currently translated at 49.4% (1754 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fil/
2024-04-26 22:18:26 +00:00
Salif Mehmed 69d2fc8459
Translated using Weblate (Bulgarian)
Currently translated at 43.4% (1543 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/bg/
2024-04-26 22:18:26 +00:00
Dirk e803c379d7
Translated using Weblate (German)
Currently translated at 100.0% (3548 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/de/
2024-04-26 22:18:26 +00:00
Fjuro e999519d9c
Translated using Weblate (Czech)
Currently translated at 100.0% (3548 of 3548 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/cs/
2024-04-26 22:18:26 +00:00
0ko 438321547f
Translated using Weblate (Russian)
Currently translated at 91.8% (3259 of 3547 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ru/
2024-04-26 22:18:26 +00:00
Fjuro 3594a4a3ec
Translated using Weblate (Czech)
Currently translated at 100.0% (3547 of 3547 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/cs/
2024-04-26 22:18:26 +00:00
earl-warren b8bd8b9683
Translated using Weblate (French)
Currently translated at 98.6% (3500 of 3547 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fr/
2024-04-26 22:18:26 +00:00
Earl Warren d6c36ec406 Merge pull request 'Drop Gitea-specific columns from two tables' (#3475) from algernon/forgejo:wiki-branch-wars-episode-iii-a-new-migration into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3475
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-04-26 10:21:28 +00:00
oliverpool 20350846fc Merge pull request 'fix: git.ComputeHash did not write the content' (#3466) from oliverpool/forgejo:fix_compute_hash into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3466
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-04-26 10:15:23 +00:00
Earl Warren c31ae1a651 fix(lfs): gogit /settings/lfs/find 500 error (#3472)
Refs: https://codeberg.org/forgejo/forgejo/pulls/3448
Refs: https://codeberg.org/forgejo/forgejo/issues/3438
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3472
Reviewed-by: oliverpool <oliverpool@noreply.codeberg.org>
Co-authored-by: Earl Warren <contact@earl-warren.org>
Co-committed-by: Earl Warren <contact@earl-warren.org>
2024-04-26 09:22:09 +00:00
Gergely Nagy 2bc226eb57
Drop Gitea-specific columns from two tables
Gitea and Forgejo chose to implement wiki branch naming differently, but
Forgejo picked the Gitea migration anyway, resulting in an unused column
in the database, which wasn't part of the `Repository` struct either -
something warned about during startup, too.

Similarly, Forgejo chose not to implement User badges at all - but kept
the existing code for it -, and the `badge` table ended up with an
unused `slug` column due to a Gitea migration, and resulted in another
warning at startup.

To keep the database consistent with the code, and to get rid of these
warnings, lets introduce a new migration, which simply drops these
Gitea-specific columns from the database.

Fixes #3463.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-04-26 10:34:06 +02:00
oliverpool 5247fd50db fix: git.ComputeHash did not write the content 2024-04-26 10:16:59 +02:00
oliverpool 3dfa5ba43a test: LFS gc should not delete all metadata objects
and ComputeBlobHash should depend on the blob content (not only the
length)
2024-04-26 10:16:59 +02:00
14 changed files with 213 additions and 76 deletions

View file

@ -9,7 +9,7 @@
-
id: 2
id: 2 # this is an LFS orphan object
oid: 2eccdb43825d2a49d99d542daa20075cff1d97d9d2349a8977efe9c03661737c
size: 107
repository_id: 54

View file

@ -64,6 +64,8 @@ var migrations = []*Migration{
NewMigration("Add repo_archive_download_count table", forgejo_v1_22.AddRepoArchiveDownloadCount),
// v13 -> v14
NewMigration("Add `hide_archive_links` column to `release` table", AddHideArchiveLinksToRelease),
// v14 -> v15
NewMigration("Remove Gitea-specific columns from the repository and badge tables", RemoveGiteaSpecificColumnsFromRepositoryAndBadge),
}
// GetCurrentDBVersion returns the current Forgejo database version.

View file

@ -0,0 +1,43 @@
// Copyright 2024 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package forgejo_migrations //nolint:revive
import (
"code.gitea.io/gitea/models/migrations/base"
"xorm.io/xorm"
)
func RemoveGiteaSpecificColumnsFromRepositoryAndBadge(x *xorm.Engine) error {
// Make sure the columns exist before dropping them
type Repository struct {
ID int64
DefaultWikiBranch string
}
if err := x.Sync(&Repository{}); err != nil {
return err
}
type Badge struct {
ID int64 `xorm:"pk autoincr"`
Slug string
}
err := x.Sync(new(Badge))
if err != nil {
return err
}
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
if err := base.DropTableColumns(sess, "repository", "default_wiki_branch"); err != nil {
return err
}
if err := base.DropTableColumns(sess, "badge", "slug"); err != nil {
return err
}
return sess.Commit()
}

View file

@ -6,6 +6,7 @@ package git
import (
"crypto/sha1"
"crypto/sha256"
"hash"
"regexp"
"strconv"
)
@ -33,6 +34,15 @@ type ObjectFormat interface {
ComputeHash(t ObjectType, content []byte) ObjectID
}
func computeHash(dst []byte, hasher hash.Hash, t ObjectType, content []byte) []byte {
_, _ = hasher.Write(t.Bytes())
_, _ = hasher.Write([]byte(" "))
_, _ = hasher.Write([]byte(strconv.Itoa(len(content))))
_, _ = hasher.Write([]byte{0})
_, _ = hasher.Write(content)
return hasher.Sum(dst)
}
/* SHA1 Type */
type Sha1ObjectFormatImpl struct{}
@ -65,16 +75,9 @@ func (Sha1ObjectFormatImpl) MustID(b []byte) ObjectID {
// ComputeHash compute the hash for a given ObjectType and content
func (h Sha1ObjectFormatImpl) ComputeHash(t ObjectType, content []byte) ObjectID {
hasher := sha1.New()
_, _ = hasher.Write(t.Bytes())
_, _ = hasher.Write([]byte(" "))
_, _ = hasher.Write([]byte(strconv.FormatInt(int64(len(content)), 10)))
_, _ = hasher.Write([]byte{0})
// HashSum generates a SHA1 for the provided hash
var sha1 Sha1Hash
copy(sha1[:], hasher.Sum(nil))
return &sha1
var obj Sha1Hash
computeHash(obj[:0], sha1.New(), t, content)
return &obj
}
/* SHA256 Type */
@ -111,16 +114,9 @@ func (Sha256ObjectFormatImpl) MustID(b []byte) ObjectID {
// ComputeHash compute the hash for a given ObjectType and content
func (h Sha256ObjectFormatImpl) ComputeHash(t ObjectType, content []byte) ObjectID {
hasher := sha256.New()
_, _ = hasher.Write(t.Bytes())
_, _ = hasher.Write([]byte(" "))
_, _ = hasher.Write([]byte(strconv.FormatInt(int64(len(content)), 10)))
_, _ = hasher.Write([]byte{0})
// HashSum generates a SHA256 for the provided hash
var sha256 Sha1Hash
copy(sha256[:], hasher.Sum(nil))
return &sha256
var obj Sha256Hash
computeHash(obj[:0], sha256.New(), t, content)
return &obj
}
var (

View file

@ -18,4 +18,8 @@ func TestIsValidSHAPattern(t *testing.T) {
assert.False(t, h.IsValid("abc"))
assert.False(t, h.IsValid("123g"))
assert.False(t, h.IsValid("some random text"))
assert.Equal(t, "79ee38a6416c1ede423ec7ee0a8639ceea4aad22", ComputeBlobHash(Sha1ObjectFormat, []byte("some random blob")).String())
assert.Equal(t, "d5c6407415d85df49592672aa421aed39b9db5e3", ComputeBlobHash(Sha1ObjectFormat, []byte("same length blob")).String())
assert.Equal(t, "df0b5174ed06ae65aea40d43316bcbc21d82c9e3158ce2661df2ad28d7931dd6", ComputeBlobHash(Sha256ObjectFormat, []byte("some random blob")).String())
}

View file

@ -0,0 +1,32 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package pipeline
import (
"fmt"
"time"
"code.gitea.io/gitea/modules/git"
)
// LFSResult represents commits found using a provided pointer file hash
type LFSResult struct {
Name string
SHA string
Summary string
When time.Time
ParentHashes []git.ObjectID
BranchName string
FullCommitName string
}
type lfsResultSlice []*LFSResult
func (a lfsResultSlice) Len() int { return len(a) }
func (a lfsResultSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a lfsResultSlice) Less(i, j int) bool { return a[j].When.After(a[i].When) }
func lfsError(msg string, err error) error {
return fmt.Errorf("LFS error occurred, %s: err: %w", msg, err)
}

View file

@ -7,12 +7,10 @@ package pipeline
import (
"bufio"
"fmt"
"io"
"sort"
"strings"
"sync"
"time"
"code.gitea.io/gitea/modules/git"
@ -21,23 +19,6 @@ import (
"github.com/go-git/go-git/v5/plumbing/object"
)
// LFSResult represents commits found using a provided pointer file hash
type LFSResult struct {
Name string
SHA string
Summary string
When time.Time
ParentHashes []git.ObjectID
BranchName string
FullCommitName string
}
type lfsResultSlice []*LFSResult
func (a lfsResultSlice) Len() int { return len(a) }
func (a lfsResultSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a lfsResultSlice) Less(i, j int) bool { return a[j].When.After(a[i].When) }
// FindLFSFile finds commits that contain a provided pointer file hash
func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, error) {
resultsMap := map[string]*LFSResult{}
@ -51,7 +32,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
All: true,
})
if err != nil {
return nil, fmt.Errorf("Failed to get GoGit CommitsIter. Error: %w", err)
return nil, lfsError("failed to get GoGit CommitsIter", err)
}
err = commitsIter.ForEach(func(gitCommit *object.Commit) error {
@ -85,7 +66,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
return nil
})
if err != nil && err != io.EOF {
return nil, fmt.Errorf("Failure in CommitIter.ForEach: %w", err)
return nil, lfsError("failure in CommitIter.ForEach", err)
}
for _, result := range resultsMap {
@ -156,7 +137,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
select {
case err, has := <-errChan:
if has {
return nil, fmt.Errorf("Unable to obtain name for LFS files. Error: %w", err)
return nil, lfsError("unable to obtain name for LFS files", err)
}
default:
}

View file

@ -8,33 +8,14 @@ package pipeline
import (
"bufio"
"bytes"
"fmt"
"io"
"sort"
"strings"
"sync"
"time"
"code.gitea.io/gitea/modules/git"
)
// LFSResult represents commits found using a provided pointer file hash
type LFSResult struct {
Name string
SHA string
Summary string
When time.Time
ParentIDs []git.ObjectID
BranchName string
FullCommitName string
}
type lfsResultSlice []*LFSResult
func (a lfsResultSlice) Len() int { return len(a) }
func (a lfsResultSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a lfsResultSlice) Less(i, j int) bool { return a[j].When.After(a[i].When) }
// FindLFSFile finds commits that contain a provided pointer file hash
func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, error) {
resultsMap := map[string]*LFSResult{}
@ -137,11 +118,11 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
n += int64(count)
if bytes.Equal(binObjectID, objectID.RawValue()) {
result := LFSResult{
Name: curPath + string(fname),
SHA: curCommit.ID.String(),
Summary: strings.Split(strings.TrimSpace(curCommit.CommitMessage), "\n")[0],
When: curCommit.Author.When,
ParentIDs: curCommit.Parents,
Name: curPath + string(fname),
SHA: curCommit.ID.String(),
Summary: strings.Split(strings.TrimSpace(curCommit.CommitMessage), "\n")[0],
When: curCommit.Author.When,
ParentHashes: curCommit.Parents,
}
resultsMap[curCommit.ID.String()+":"+curPath+string(fname)] = &result
} else if string(mode) == git.EntryModeTree.String() {
@ -183,7 +164,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
for _, result := range resultsMap {
hasParent := false
for _, parentID := range result.ParentIDs {
for _, parentID := range result.ParentHashes {
if _, hasParent = resultsMap[parentID.String()+":"+result.Name]; hasParent {
break
}
@ -241,7 +222,7 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
select {
case err, has := <-errChan:
if has {
return nil, fmt.Errorf("Unable to obtain name for LFS files. Error: %w", err)
return nil, lfsError("unable to obtain name for LFS files", err)
}
default:
}

View file

@ -115,14 +115,39 @@ concept_user_organization=Organisaatio
name=Nimi
enable_javascript = Tämä sivu vaatii Javascriptin.
new_project_column = Uusi sarake
retry = Yritä uudelleen
copy_type_unsupported = Tätä tiedostotyyppiä ei voi kopioida
locked = Lukittu
filter = Suodatin
filter.is_archived = Arkistoitu
filter.not_archived = Ei arkistoitu
filter.public = Julkinen
filter.private = Yksityinen
copy_content = Kopioi sisältö
download_logs = Lataa lokit
show_full_screen = Näytä koko näytössä
unknown = Tuntematon
show_timestamps = Näytä aikaleimat
show_log_seconds = Näytä sekunnit
copy_generic = Kopioi leikepöydälle
[aria]
footer.links = Linkit
[heatmap]
less = Vähemmän
more = Enemmän
[editor]
buttons.code.tooltip = Lisää koodia
buttons.link.tooltip = Lisää linkki
buttons.mention.tooltip = Mainitse käyttäjä tai tiimi
buttons.list.task.tooltip = Lisää tehtävälista
[filter]
string.asc = A - Ö
string.desc = Ö - A
[error]
occurred=Virhe tapahtui

View file

@ -140,6 +140,7 @@ home = Panimula
dashboard = Dashboard
more_items = Higit pang mga item
invalid_data = Hindi wastong datos: %v
copy_generic = Kopyahin sa clipboard
[home]
search_repos = Maghanap ng Repository…
@ -592,6 +593,12 @@ admin_cannot_delete_self = Hindi mo maaring burahin ang sarili mo kapag isa kang
required_prefix = Ang input ay dapat magsimula sa "%s"
FullName = Buong pangalan
Description = Paglalarawan
Pronouns = Mga panghalip
Website = Website
To = Pangalan ng branch
AccessToken = Token ng pag-access
Biography = Byograpya
Location = Lokasyon
[user]
joined_on = Sumali noong %s
@ -1429,6 +1436,12 @@ milestones.title = Pamagat
milestones.desc = paglalarawan
pulls.blocked_by_user = Hindi ka makakagawa ng [pull request] sa [repository] na ito dahil hinarang ka ng may-ari ng [repository].
pulls.no_merge_access = Hindi ka pinapayagang isali ang [pull request] na ito.
editor.commit_directly_to_this_branch = Direktang mag-commit sa branch na <strong class="branch-name">%s</strong>.
editor.branch_already_exists = Umiiral na ang branch na "%s" sa repositoryo na ito.
editor.file_editing_no_longer_exists = Ang file na ine-edit, "%s", ay hindi na umiiral sa repositoryo na ito.
editor.filename_is_a_directory = Ang pangalan ng file "%s" ay ginagamit na bilang pangalan ng direktoryo sa repositoryo na ito.
editor.file_is_a_symlink = `Ang %s ay isang symbolink link. Hindi mae-edit ang mga symbolic link sa web editor`
editor.directory_is_a_file = Ang pangalan ng direktoryo "%s" ay ginagamit na bilang pangalan ng file sa repositoryo na ito.
[search]
commit_kind = Maghanap ng mga commit...
@ -1690,6 +1703,31 @@ repos.owner = May-ari
repos.lfs_size = Laki ng LFS
packages.package_manage_panel = Ipamahala ang mga package
auths.attribute_mail = Attribute ng email
config.server_config = Configuration ng server
config.app_name = Pangalan ng instansya
config.lfs_root_path = Root path ng LFS
config.log_file_root_path = Path ng log
config.ssh_root_path = Root path
config.script_type = Uri ng script
config.reverse_auth_user = Authentication user ng reverse proxy
config.ssh_domain = Server domain ng SSH
config.custom_conf = File path ng configuration
config.app_url = Base URL
config.offline_mode = Lokal na mode
config.ssh_port = Port
config.custom_file_root_path = Pasadyang root path ng file
config.domain = Domain ng server
config.disable_router_log = I-disable ang router log
config.run_user = User na tatakbo bilang
config.run_mode = Mode ng pagtakbo
config.app_data_path = Path ng data ng app
config.repo_root_path = Root path ng repositoryo
config.ssh_config = Configuration ng SSH
config.ssh_enabled = Naka-enable
config.ssh_start_builtin_server = Gamitin ang built-in server
config.ssh_listen_port = Listen port
config.ssh_keygen_path = Path ng keygen ("ssh-keygen")
config.ssh_key_test_path = Path ng key test
[org]
repo_updated = Binago

View file

@ -423,7 +423,7 @@ twofa_scratch_used=Você usou o seu código de recuperação. Foi reencaminhado
twofa_passcode_incorrect=A senha está errada. Se perdeu o seu dispositivo, use o código de recuperação para iniciar a sessão.
twofa_scratch_token_incorrect=O código de recuperação está errado.
login_userpass=Iniciar sessão
tab_openid=
tab_openid=OpenID
oauth_signup_tab=Fazer inscrição
oauth_signup_title=Completar a nova conta
oauth_signup_submit=Completar conta
@ -477,7 +477,7 @@ activate_email.text=Por favor clique na seguinte ligação para validar o seu en
register_notify=Bem-vindo(a) ao Forgejo
register_notify.title=%[1]s, bem-vindo(a) a %[2]s
register_notify.text_1=este é o seu email de confirmação de registo para %s!
register_notify.text_2=Pode iniciar a sessão usando o seu nome de utilizador: %s.
register_notify.text_2=Pode iniciar a sessão usando o seu nome de utilizador: %s
register_notify.text_3=Se outra pessoa criou esta conta para si, terá de <a href="%s">definir a sua senha</a> primeiro.
reset_password=Recupere a sua conta
@ -2699,7 +2699,7 @@ settings.confirm_wiki_branch_rename = Renomear o ramo do wiki
settings.wiki_branch_rename_success = O nome do ramo do wiki do repositório foi normalizado com sucesso.
settings.wiki_branch_rename_failure = Falhou a normalização do nome do ramo do wiki do repositório.
settings.add_collaborator_blocked_them = Não foi possível adicionar o colaborador porque bloquearam o/a proprietário/a do repositório.
pulls.made_using_agit =
pulls.made_using_agit =AGit
settings.confirmation_string = Texto de confirmação
settings.event_pull_request_enforcement = Execução
pulls.blocked_by_user = Não pode criar um pedido de integração neste repositório porque foi bloqueado/a pelo/a proprietário/a do repositório.

View file

@ -61,6 +61,32 @@ concept_code_repository=儲存庫
name=組織名稱
sign_in_with_provider = 使用 %s 登入
sign_up = 登記
email = 電子信箱
access_token = 訪問令牌
powered_by = 由 %s 提供
create_new = 建立…
user_profile_and_more = 個人資料同埋設定…
signed_in_as = 已經登入
toc = 目錄
licenses = 軟件授權
return_to_gitea = 返來 Forgejo
username = 用戶名
captcha = 驗證碼
toggle_menu = 切換選單
webauthn_insert_key = 插入安全密鑰
twofa = 兩步驟驗證
webauthn_sign_in = 撳下安全密鑰嘅掣。如果安全密鑰冇掣,請再插入。
webauthn_press_button = 請撳下安全密鑰嘅掣…
more_items = 多啲嘢
webauthn_use_twofa = 用手機嘅兩步驟驗證
webauthn_error = 唔可以讀取安全密鑰。
webauthn_unsupported_browser = 你嘅瀏覽器唔支援 WebAuthn。
webauthn_error_unknown = 發生未知嘅錯誤,請再試下。
webauthn_error_unable_to_process = 伺服器唔可以執行你嘅請求。
logo = 標識
enable_javascript = 本網站需要 JavaScript。
[aria]

View file

@ -28,9 +28,13 @@ func TestGarbageCollectLFSMetaObjects(t *testing.T) {
err := storage.Init()
assert.NoError(t, err)
repo, err := repo_model.GetRepositoryByOwnerAndName(db.DefaultContext, "user2", "repo1")
repo, err := repo_model.GetRepositoryByOwnerAndName(db.DefaultContext, "user2", "lfs")
assert.NoError(t, err)
validLFSObjects, err := db.GetEngine(db.DefaultContext).Count(git_model.LFSMetaObject{RepositoryID: repo.ID})
assert.NoError(t, err)
assert.Greater(t, validLFSObjects, int64(1))
// add lfs object
lfsContent := []byte("gitea1")
lfsOid := storeObjectInRepo(t, repo.ID, &lfsContent)
@ -39,13 +43,18 @@ func TestGarbageCollectLFSMetaObjects(t *testing.T) {
err = repo_service.GarbageCollectLFSMetaObjects(context.Background(), repo_service.GarbageCollectLFSMetaObjectsOptions{
AutoFix: true,
OlderThan: time.Now().Add(7 * 24 * time.Hour).Add(5 * 24 * time.Hour),
UpdatedLessRecentlyThan: time.Now().Add(7 * 24 * time.Hour).Add(3 * 24 * time.Hour),
UpdatedLessRecentlyThan: time.Time{}, // ensure that the models/fixtures/lfs_meta_object.yml objects are considered as well
LogDetail: t.Logf,
})
assert.NoError(t, err)
// lfs meta has been deleted
_, err = git_model.GetLFSMetaObjectByOid(db.DefaultContext, repo.ID, lfsOid)
assert.ErrorIs(t, err, git_model.ErrLFSObjectNotExist)
remainingLFSObjects, err := db.GetEngine(db.DefaultContext).Count(git_model.LFSMetaObject{RepositoryID: repo.ID})
assert.NoError(t, err)
assert.Equal(t, validLFSObjects-1, remainingLFSObjects)
}
func storeObjectInRepo(t *testing.T, repositoryID int64, content *[]byte) string {

View file

@ -23,9 +23,9 @@
<span class="text grey">{{svg "octicon-git-branch"}}{{.BranchName}}</span>
</td>
<td>
{{if .ParentIDs}}
{{if .ParentHashes}}
{{ctx.Locale.Tr "repo.diff.parent"}}
{{range .ParentIDs}}
{{range .ParentHashes}}
<a class="ui primary sha label" href="{{$.RepoLink}}/commit/{{.String}}">{{ShortSha .String}}</a>
{{end}}
{{end}}