Skip to content

Commit 5b0f5e6

Browse files
committed
Merge branch 'main' into lunny/refactor_setting2
2 parents 14a8a0e + 20e3ffd commit 5b0f5e6

File tree

17 files changed

+89
-38
lines changed

17 files changed

+89
-38
lines changed

.golangci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,14 @@ linters-settings:
7676
extra-rules: true
7777
lang-version: "1.19"
7878
depguard:
79-
# TODO: use depguard to replace import checks in gitea-vet
8079
list-type: denylist
8180
# Check the list against standard lib.
8281
include-go-root: true
8382
packages-with-error-message:
8483
- encoding/json: "use gitea's modules/json instead of encoding/json"
8584
- github.com/unknwon/com: "use gitea's util and replacements"
85+
- io/ioutil: "use os or io instead"
86+
- golang.org/x/exp: "it's experimental and unreliable."
8687

8788
issues:
8889
max-issues-per-linter: 0

docs/content/doc/advanced/external-renderers.en-us.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,5 +192,5 @@ And so you could write some CSS:
192192
Add your stylesheet to your custom directory e.g `custom/public/css/my-style-XXXXX.css` and import it using a custom header file `custom/templates/custom/header.tmpl`:
193193

194194
```html
195-
<link type="text/css" href="{{AppSubUrl}}/assets/css/my-style-XXXXX.css" />
195+
<link rel="stylesheet" href="{{AppSubUrl}}/assets/css/my-style-XXXXX.css" />
196196
```

models/fixtures/repository.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
fork_id: 0
2525
is_template: false
2626
template_id: 0
27-
size: 0
27+
size: 6708
2828
is_fsck_enabled: true
2929
close_issues_via_commit_in_any_branch: false
3030

models/repo/update.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func ChangeRepositoryName(doer *user_model.User, repo *Repository, newRepoName s
184184
return committer.Commit()
185185
}
186186

187-
// UpdateRepoSize updates the repository size, calculating it using util.GetDirectorySize
187+
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize
188188
func UpdateRepoSize(ctx context.Context, repoID, size int64) error {
189189
_, err := db.GetEngine(ctx).ID(repoID).Cols("size").NoAutoTime().Update(&Repository{
190190
Size: size,

modules/markup/external/external.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package external
55

66
import (
7+
"bytes"
78
"fmt"
89
"io"
910
"os"
@@ -132,11 +133,13 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
132133
if !p.IsInputFile {
133134
cmd.Stdin = input
134135
}
136+
var stderr bytes.Buffer
135137
cmd.Stdout = output
138+
cmd.Stderr = &stderr
136139
process.SetSysProcAttribute(cmd)
137140

138141
if err := cmd.Run(); err != nil {
139-
return fmt.Errorf("%s render run command %s %v failed: %w", p.Name(), commands[0], args, err)
142+
return fmt.Errorf("%s render run command %s %v failed: %w\nStderr: %s", p.Name(), commands[0], args, err, stderr.String())
140143
}
141144
return nil
142145
}

modules/repository/create.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99
"os"
1010
"path"
11+
"path/filepath"
1112
"strings"
1213

1314
"code.gitea.io/gitea/models"
@@ -285,9 +286,36 @@ func CreateRepository(doer, u *user_model.User, opts CreateRepoOptions) (*repo_m
285286
return repo, nil
286287
}
287288

288-
// UpdateRepoSize updates the repository size, calculating it using util.GetDirectorySize
289+
const notRegularFileMode = os.ModeSymlink | os.ModeNamedPipe | os.ModeSocket | os.ModeDevice | os.ModeCharDevice | os.ModeIrregular
290+
291+
// getDirectorySize returns the disk consumption for a given path
292+
func getDirectorySize(path string) (int64, error) {
293+
var size int64
294+
err := filepath.WalkDir(path, func(_ string, info os.DirEntry, err error) error {
295+
if err != nil {
296+
if os.IsNotExist(err) { // ignore the error because the file maybe deleted during traversing.
297+
return nil
298+
}
299+
return err
300+
}
301+
if info.IsDir() {
302+
return nil
303+
}
304+
f, err := info.Info()
305+
if err != nil {
306+
return err
307+
}
308+
if (f.Mode() & notRegularFileMode) == 0 {
309+
size += f.Size()
310+
}
311+
return err
312+
})
313+
return size, err
314+
}
315+
316+
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize
289317
func UpdateRepoSize(ctx context.Context, repo *repo_model.Repository) error {
290-
size, err := util.GetDirectorySize(repo.RepoPath())
318+
size, err := getDirectorySize(repo.RepoPath())
291319
if err != nil {
292320
return fmt.Errorf("updateSize: %w", err)
293321
}

modules/repository/create_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,13 @@ func TestUpdateRepositoryVisibilityChanged(t *testing.T) {
168168
assert.NoError(t, err)
169169
assert.True(t, act.IsPrivate)
170170
}
171+
172+
func TestGetDirectorySize(t *testing.T) {
173+
assert.NoError(t, unittest.PrepareTestDatabase())
174+
repo, err := repo_model.GetRepositoryByID(db.DefaultContext, 1)
175+
assert.NoError(t, err)
176+
177+
size, err := getDirectorySize(repo.RepoPath())
178+
assert.NoError(t, err)
179+
assert.EqualValues(t, size, repo.Size)
180+
}

modules/util/path.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,6 @@ func EnsureAbsolutePath(path, absoluteBase string) string {
2222
return filepath.Join(absoluteBase, path)
2323
}
2424

25-
const notRegularFileMode os.FileMode = os.ModeSymlink | os.ModeNamedPipe | os.ModeSocket | os.ModeDevice | os.ModeCharDevice | os.ModeIrregular
26-
27-
// GetDirectorySize returns the disk consumption for a given path
28-
func GetDirectorySize(path string) (int64, error) {
29-
var size int64
30-
err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
31-
if info != nil && (info.Mode()&notRegularFileMode) == 0 {
32-
size += info.Size()
33-
}
34-
return err
35-
})
36-
return size, err
37-
}
38-
3925
// IsDir returns true if given path is a directory,
4026
// or returns false when it's a file or does not exist.
4127
func IsDir(dir string) (bool, error) {

options/locale/locale_en-US.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,7 @@ issues.label_title = Label name
13791379
issues.label_description = Label description
13801380
issues.label_color = Label color
13811381
issues.label_count = %d labels
1382-
issues.label_open_issues = %d open issues
1382+
issues.label_open_issues = %d open issues/pull requests
13831383
issues.label_edit = Edit
13841384
issues.label_delete = Delete
13851385
issues.label_modify = Edit Label

services/repository/check.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...git.CmdArg)
7373
return db.ErrCancelledf("before GC of %s", repo.FullName())
7474
default:
7575
}
76-
return GitGcRepo(ctx, repo, timeout, args)
76+
// we can ignore the error here because it will be logged in GitGCRepo
77+
_ = GitGcRepo(ctx, repo, timeout, args)
78+
return nil
7779
},
7880
); err != nil {
7981
return err
@@ -93,9 +95,9 @@ func GitGcRepo(ctx context.Context, repo *repo_model.Repository, timeout time.Du
9395
stdout, _, err = command.RunStdString(&git.RunOpts{Timeout: timeout, Dir: repo.RepoPath()})
9496

9597
if err != nil {
96-
log.Error("Repository garbage collection failed for %v. Stdout: %s\nError: %v", repo, stdout, err)
98+
log.Error("Repository garbage collection failed for %-v. Stdout: %s\nError: %v", repo, stdout, err)
9799
desc := fmt.Sprintf("Repository garbage collection failed for %s. Stdout: %s\nError: %v", repo.RepoPath(), stdout, err)
98-
if err = system_model.CreateRepositoryNotice(desc); err != nil {
100+
if err := system_model.CreateRepositoryNotice(desc); err != nil {
99101
log.Error("CreateRepositoryNotice: %v", err)
100102
}
101103
return fmt.Errorf("Repository garbage collection failed in repo: %s: Error: %w", repo.FullName(), err)
@@ -105,7 +107,7 @@ func GitGcRepo(ctx context.Context, repo *repo_model.Repository, timeout time.Du
105107
if err := repo_module.UpdateRepoSize(ctx, repo); err != nil {
106108
log.Error("Updating size as part of garbage collection failed for %-v. Stdout: %s\nError: %v", repo, stdout, err)
107109
desc := fmt.Sprintf("Updating size as part of garbage collection failed for %s. Stdout: %s\nError: %v", repo.RepoPath(), stdout, err)
108-
if err = system_model.CreateRepositoryNotice(desc); err != nil {
110+
if err := system_model.CreateRepositoryNotice(desc); err != nil {
109111
log.Error("CreateRepositoryNotice: %v", err)
110112
}
111113
return fmt.Errorf("Updating size as part of garbage collection failed in repo: %s: Error: %w", repo.FullName(), err)
@@ -165,7 +167,7 @@ func DeleteMissingRepositories(ctx context.Context, doer *user_model.User) error
165167
}
166168
log.Trace("Deleting %d/%d...", repo.OwnerID, repo.ID)
167169
if err := models.DeleteRepository(doer, repo.OwnerID, repo.ID); err != nil {
168-
log.Error("Failed to DeleteRepository %s [%d]: Error: %v", repo.FullName(), repo.ID, err)
170+
log.Error("Failed to DeleteRepository %-v: Error: %v", repo, err)
169171
if err2 := system_model.CreateRepositoryNotice("Failed to DeleteRepository %s [%d]: Error: %v", repo.FullName(), repo.ID, err); err2 != nil {
170172
log.Error("CreateRepositoryNotice: %v", err)
171173
}

templates/base/head.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="{{.locale.Lang}}" class="theme-{{if .SignedUser.Theme}}{{.SignedUser.Theme}}{{else}}auto{{end}}">
2+
<html lang="{{.locale.Lang}}" class="theme-{{if .SignedUser.Theme}}{{.SignedUser.Theme}}{{else}}{{DefaultTheme}}{{end}}">
33
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1">

templates/explore/repo_search.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
</div>
3131
</form>
3232
{{if .OnlyShowRelevant}}
33-
<div class="ui blue attached message explore-relevancy-note">
33+
<div class="ui message explore-relevancy-note">
3434
<span class="ui tooltip" data-content="{{.locale.Tr "explore.relevant_repositories_tooltip"}}">{{.locale.Tr "explore.relevant_repositories" ((printf "%s%s" $.Link "?no_filter=1")|Escape) | Safe}}</span>
3535
</div>
3636
{{end}}

templates/repo/diff/box.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@
143143
{{$.locale.Tr "repo.diff.file_suppressed_line_too_long"}}
144144
{{else}}
145145
{{$.locale.Tr "repo.diff.file_suppressed"}}
146-
<a class="ui basic tiny button diff-show-more-button" data-href="{{$.Link}}?file-only=true&files={{$file.Name}}&files={{$file.OldName}}">{{$.locale.Tr "repo.diff.load"}}</a>
146+
<a class="ui basic tiny button diff-load-button" data-href="{{$.Link}}?file-only=true&files={{$file.Name}}&files={{$file.OldName}}">{{$.locale.Tr "repo.diff.load"}}</a>
147147
{{end}}
148148
{{else}}
149149
{{$.locale.Tr "repo.diff.bin_not_shown"}}

web_src/js/components/DiffFileTree.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<DiffFileTreeItem v-for="item in fileTree" :key="item.name" :item="item" />
99
</div>
1010
<div v-if="isIncomplete" id="diff-too-many-files-stats" class="pt-2">
11-
<span>{{ tooManyFilesMessage }}</span><a :class="['ui', 'basic', 'tiny', 'button', isLoadingNewData === true ? 'disabled' : '']" id="diff-show-more-files-stats" @click.stop="loadMoreData">{{ showMoreMessage }}</a>
11+
<span class="mr-2">{{ tooManyFilesMessage }}</span><a :class="['ui', 'basic', 'tiny', 'button', isLoadingNewData === true ? 'disabled' : '']" id="diff-show-more-files-stats" @click.stop="loadMoreData">{{ showMoreMessage }}</a>
1212
</div>
1313
</div>
1414
</template>
@@ -94,6 +94,9 @@ export default {
9494
mounted() {
9595
// ensure correct buttons when we are mounted to the dom
9696
this.adjustToggleButton(this.fileTreeIsVisible);
97+
// replace the pageData.diffFileInfo.files with our watched data so we get updates
98+
pageData.diffFileInfo.files = this.files;
99+
97100
document.querySelector('.diff-toggle-file-tree-button').addEventListener('click', this.toggleVisibility);
98101
},
99102
unmounted() {

web_src/js/features/repo-diff.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,26 +119,47 @@ function onShowMoreFiles() {
119119

120120
export function doLoadMoreFiles(link, diffEnd, callback) {
121121
const url = `${link}?skip-to=${diffEnd}&file-only=true`;
122+
loadMoreFiles(url, callback);
123+
}
124+
125+
function loadMoreFiles(url, callback) {
126+
const $target = $('a#diff-show-more-files');
127+
if ($target.hasClass('disabled')) {
128+
callback();
129+
return;
130+
}
131+
$target.addClass('disabled');
122132
$.ajax({
123133
type: 'GET',
124134
url,
125135
}).done((resp) => {
126136
if (!resp) {
137+
$target.removeClass('disabled');
127138
callback(resp);
128139
return;
129140
}
141+
$('#diff-incomplete').replaceWith($(resp).find('#diff-file-boxes').children());
130142
// By simply rerunning the script we add the new data to our existing
131143
// pagedata object. this triggers vue and the filetree and filelist will
132144
// render the new elements.
133145
$('body').append($(resp).find('script#diff-data-script'));
146+
onShowMoreFiles();
134147
callback(resp);
135148
}).fail(() => {
149+
$target.removeClass('disabled');
136150
callback();
137151
});
138152
}
139153

140154
export function initRepoDiffShowMore() {
141-
$(document).on('click', 'a.diff-show-more-button', (e) => {
155+
$(document).on('click', 'a#diff-show-more-files', (e) => {
156+
e.preventDefault();
157+
158+
const $target = $(e.target);
159+
loadMoreFiles($target.data('href'), () => {});
160+
});
161+
162+
$(document).on('click', 'a.diff-load-button', (e) => {
142163
e.preventDefault();
143164
const $target = $(e.target);
144165

web_src/less/_explore.less

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,3 @@
8989
}
9090
}
9191
}
92-
93-
.ui.explore-relevancy-note {
94-
border-top: 0;
95-
margin-top: 0;
96-
max-width: 90%;
97-
}

web_src/less/_repository.less

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,6 +1667,9 @@
16671667
background-color: var(--color-teal);
16681668
}
16691669
}
1670+
.button {
1671+
padding: 8px 12px;
1672+
}
16701673
}
16711674

16721675
.diff-box .header:not(.resolved-placeholder) {

0 commit comments

Comments
 (0)