aboutsummaryrefslogtreecommitdiffstats
path: root/templates/repo
diff options
context:
space:
mode:
authorKN4CK3R <KN4CK3R@users.noreply.github.com>2021-04-09 00:25:57 +0200
committerGitHub <noreply@github.com>2021-04-08 18:25:57 -0400
commitc03e488e14fdaf1c0056952f40c5fc8124719a30 (patch)
tree22338add91196fad9f40f9a74033525ad8f591eb /templates/repo
parentf544414a232c148d4baf2e9d807f6cbffed67928 (diff)
downloadgitea-c03e488e14fdaf1c0056952f40c5fc8124719a30.tar.gz
gitea-c03e488e14fdaf1c0056952f40c5fc8124719a30.zip
Add LFS Migration and Mirror (#14726)
* Implemented LFS client. * Implemented scanning for pointer files. * Implemented downloading of lfs files. * Moved model-dependent code into services. * Removed models dependency. Added TryReadPointerFromBuffer. * Migrated code from service to module. * Centralised storage creation. * Removed dependency from models. * Moved ContentStore into modules. * Share structs between server and client. * Moved method to services. * Implemented lfs download on clone. * Implemented LFS sync on clone and mirror update. * Added form fields. * Updated templates. * Fixed condition. * Use alternate endpoint. * Added missing methods. * Fixed typo and make linter happy. * Detached pointer parser from gogit dependency. * Fixed TestGetLFSRange test. * Added context to support cancellation. * Use ReadFull to probably read more data. * Removed duplicated code from models. * Moved scan implementation into pointer_scanner_nogogit. * Changed method name. * Added comments. * Added more/specific log/error messages. * Embedded lfs.Pointer into models.LFSMetaObject. * Moved code from models to module. * Moved code from models to module. * Moved code from models to module. * Reduced pointer usage. * Embedded type. * Use promoted fields. * Fixed unexpected eof. * Added unit tests. * Implemented migration of local file paths. * Show an error on invalid LFS endpoints. * Hide settings if not used. * Added LFS info to mirror struct. * Fixed comment. * Check LFS endpoint. * Manage LFS settings from mirror page. * Fixed selector. * Adjusted selector. * Added more tests. * Added local filesystem migration test. * Fixed typo. * Reset settings. * Added special windows path handling. * Added unit test for HTTPClient. * Added unit test for BasicTransferAdapter. * Moved into util package. * Test if LFS endpoint is allowed. * Added support for git:// * Just use a static placeholder as the displayed url may be invalid. * Reverted to original code. * Added "Advanced Settings". * Updated wording. * Added discovery info link. * Implemented suggestion. * Fixed missing format parameter. * Added Pointer.IsValid(). * Always remove model on error. * Added suggestions. * Use channel instead of array. * Update routers/repo/migrate.go * fmt Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'templates/repo')
-rw-r--r--templates/repo/migrate/git.tmpl14
-rw-r--r--templates/repo/migrate/gitea.tmpl16
-rw-r--r--templates/repo/migrate/github.tmpl16
-rw-r--r--templates/repo/migrate/gitlab.tmpl16
-rw-r--r--templates/repo/migrate/gogs.tmpl16
-rw-r--r--templates/repo/migrate/options.tmpl29
-rw-r--r--templates/repo/settings/options.tmpl19
7 files changed, 55 insertions, 71 deletions
diff --git a/templates/repo/migrate/git.tmpl b/templates/repo/migrate/git.tmpl
index 233a019435..6525a9b4f5 100644
--- a/templates/repo/migrate/git.tmpl
+++ b/templates/repo/migrate/git.tmpl
@@ -15,7 +15,6 @@
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required>
<span class="help">
{{.i18n.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.i18n.Tr "repo.migrate.clone_local_path"}}{{end}}
- {{if .LFSActive}}<br/>{{.i18n.Tr "repo.migrate.lfs_mirror_unsupported"}}{{end}}
</span>
</div>
<div class="inline field {{if .Err_Auth}}error{{end}}">
@@ -28,18 +27,7 @@
<input id="auth_password" name="auth_password" type="password" value="{{.auth_password}}">
</div>
- <div class="inline field">
- <label>{{.i18n.Tr "repo.migrate_options"}}</label>
- <div class="ui checkbox">
- {{if .DisableMirrors}}
- <input id="mirror" name="mirror" type="checkbox" readonly>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
- {{else}}
- <input id="mirror" name="mirror" type="checkbox" {{if .mirror}}checked{{end}}>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_helper" | Safe}}</label>
- {{end}}
- </div>
- </div>
+ {{template "repo/migrate/options" .}}
<div class="ui divider"></div>
diff --git a/templates/repo/migrate/gitea.tmpl b/templates/repo/migrate/gitea.tmpl
index b21e6b18ff..52528fc57c 100644
--- a/templates/repo/migrate/gitea.tmpl
+++ b/templates/repo/migrate/gitea.tmpl
@@ -15,28 +15,16 @@
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required>
<span class="help">
{{.i18n.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.i18n.Tr "repo.migrate.clone_local_path"}}{{end}}
- {{if .LFSActive}}<br />{{.i18n.Tr "repo.migrate.lfs_mirror_unsupported"}}{{end}}
</span>
</div>
<div class="inline field {{if .Err_Auth}}error{{end}}">
<label for="auth_token">{{.i18n.Tr "access_token"}}</label>
<input id="auth_token" name="auth_token" value="{{.auth_token}}" {{if not .auth_token}} data-need-clear="true" {{end}}>
- <a target=”_blank” href="https://docs.gitea.io/en-us/api-usage">{{svg "octicon-question"}}</a>
+ <a target="_blank" href="https://docs.gitea.io/en-us/api-usage">{{svg "octicon-question"}}</a>
</div>
- <div class="inline field">
- <label>{{.i18n.Tr "repo.migrate_options"}}</label>
- <div class="ui checkbox">
- {{if .DisableMirrors}}
- <input id="mirror" name="mirror" type="checkbox" readonly>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
- {{else}}
- <input id="mirror" name="mirror" type="checkbox" {{if .mirror}} checked{{end}}>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_helper" | Safe}}</label>
- {{end}}
- </div>
- </div>
+ {{template "repo/migrate/options" .}}
<span class="help">{{.i18n.Tr "repo.migrate.migrate_items_options"}}</span>
<div id="migrate_items">
diff --git a/templates/repo/migrate/github.tmpl b/templates/repo/migrate/github.tmpl
index 06f76d7298..b7c5bd5b0d 100644
--- a/templates/repo/migrate/github.tmpl
+++ b/templates/repo/migrate/github.tmpl
@@ -15,28 +15,16 @@
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required>
<span class="help">
{{.i18n.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.i18n.Tr "repo.migrate.clone_local_path"}}{{end}}
- {{if .LFSActive}}<br/>{{.i18n.Tr "repo.migrate.lfs_mirror_unsupported"}}{{end}}
</span>
</div>
<div class="inline field {{if .Err_Auth}}error{{end}}">
<label for="auth_token">{{.i18n.Tr "access_token"}}</label>
<input id="auth_token" name="auth_token" value="{{.auth_token}}" {{if not .auth_token}}data-need-clear="true"{{end}}>
- <a target=”_blank” href="https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token">{{svg "octicon-question"}}</a>
+ <a target="_blank" href="https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token">{{svg "octicon-question"}}</a>
</div>
- <div class="inline field">
- <label>{{.i18n.Tr "repo.migrate_options"}}</label>
- <div class="ui checkbox">
- {{if .DisableMirrors}}
- <input id="mirror" name="mirror" type="checkbox" readonly>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
- {{else}}
- <input id="mirror" name="mirror" type="checkbox" {{if .mirror}}checked{{end}}>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_helper" | Safe}}</label>
- {{end}}
- </div>
- </div>
+ {{template "repo/migrate/options" .}}
<span class="help">{{.i18n.Tr "repo.migrate.migrate_items_options"}}</span>
<div id="migrate_items">
diff --git a/templates/repo/migrate/gitlab.tmpl b/templates/repo/migrate/gitlab.tmpl
index 545a1ff437..26eebd18bb 100644
--- a/templates/repo/migrate/gitlab.tmpl
+++ b/templates/repo/migrate/gitlab.tmpl
@@ -15,28 +15,16 @@
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required>
<span class="help">
{{.i18n.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.i18n.Tr "repo.migrate.clone_local_path"}}{{end}}
- {{if .LFSActive}}<br/>{{.i18n.Tr "repo.migrate.lfs_mirror_unsupported"}}{{end}}
</span>
</div>
<div class="inline field {{if .Err_Auth}}error{{end}}">
<label for="auth_token">{{.i18n.Tr "access_token"}}</label>
<input id="auth_token" name="auth_token" value="{{.auth_token}}" {{if not .auth_token}}data-need-clear="true"{{end}}>
- <a target=”_blank” href="https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html">{{svg "octicon-question"}}</a>
+ <a target="_blank" href="https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html">{{svg "octicon-question"}}</a>
</div>
- <div class="inline field">
- <label>{{.i18n.Tr "repo.migrate_options"}}</label>
- <div class="ui checkbox">
- {{if .DisableMirrors}}
- <input id="mirror" name="mirror" type="checkbox" readonly>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
- {{else}}
- <input id="mirror" name="mirror" type="checkbox" {{if .mirror}}checked{{end}}>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_helper" | Safe}}</label>
- {{end}}
- </div>
- </div>
+ {{template "repo/migrate/options" .}}
<span class="help">{{.i18n.Tr "repo.migrate.migrate_items_options"}}</span>
<div id="migrate_items">
diff --git a/templates/repo/migrate/gogs.tmpl b/templates/repo/migrate/gogs.tmpl
index ac81872b92..dc83ac5bb8 100644
--- a/templates/repo/migrate/gogs.tmpl
+++ b/templates/repo/migrate/gogs.tmpl
@@ -15,28 +15,16 @@
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required>
<span class="help">
{{.i18n.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{.i18n.Tr "repo.migrate.clone_local_path"}}{{end}}
- {{if .LFSActive}}<br />{{.i18n.Tr "repo.migrate.lfs_mirror_unsupported"}}{{end}}
</span>
</div>
<div class="inline field {{if .Err_Auth}}error{{end}}">
<label for="auth_token">{{.i18n.Tr "access_token"}}</label>
<input id="auth_token" name="auth_token" value="{{.auth_token}}" {{if not .auth_token}} data-need-clear="true" {{end}}>
- <!-- <a target=”_blank” href="https://docs.gitea.io/en-us/api-usage">{{svg "octicon-question"}}</a> -->
+ <!-- <a target="_blank" href="https://docs.gitea.io/en-us/api-usage">{{svg "octicon-question"}}</a> -->
</div>
- <div class="inline field">
- <label>{{.i18n.Tr "repo.migrate_options"}}</label>
- <div class="ui checkbox">
- {{if .DisableMirrors}}
- <input id="mirror" name="mirror" type="checkbox" readonly>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
- {{else}}
- <input id="mirror" name="mirror" type="checkbox" {{if .mirror}} checked{{end}}>
- <label>{{.i18n.Tr "repo.migrate_options_mirror_helper" | Safe}}</label>
- {{end}}
- </div>
- </div>
+ {{template "repo/migrate/options" .}}
<span class="help">{{.i18n.Tr "repo.migrate.migrate_items_options"}}</span>
<div id="migrate_items">
diff --git a/templates/repo/migrate/options.tmpl b/templates/repo/migrate/options.tmpl
new file mode 100644
index 0000000000..bca773a53f
--- /dev/null
+++ b/templates/repo/migrate/options.tmpl
@@ -0,0 +1,29 @@
+<div class="inline field">
+ <label>{{.i18n.Tr "repo.migrate_options"}}</label>
+ <div class="ui checkbox">
+ {{if .DisableMirrors}}
+ <input id="mirror" name="mirror" type="checkbox" readonly>
+ <label>{{.i18n.Tr "repo.migrate_options_mirror_disabled"}}</label>
+ {{else}}
+ <input id="mirror" name="mirror" type="checkbox" {{if .mirror}} checked{{end}}>
+ <label>{{.i18n.Tr "repo.migrate_options_mirror_helper" | Safe}}</label>
+ {{end}}
+ </div>
+</div>
+{{if .LFSActive}}
+<div class="inline field">
+ <label></label>
+ <div class="ui checkbox">
+ <input id="lfs" name="lfs" type="checkbox" {{if .lfs}} checked{{end}}>
+ <label>{{.i18n.Tr "repo.migrate_options_lfs"}}</label>
+ </div>
+ <span id="lfs_settings" style="display:none">(<a id="lfs_settings_show" href="#">{{.i18n.Tr "repo.settings.advanced_settings"}}</a>)</span>
+</div>
+<div id="lfs_endpoint" style="display:none">
+ <span class="help">{{.i18n.Tr "repo.migrate_options_lfs_endpoint.description" "https://github.com/git-lfs/git-lfs/blob/main/docs/api/server-discovery.md#server-discovery" | Str2html}}{{if .ContextUser.CanImportLocal}} {{.i18n.Tr "repo.migrate_options_lfs_endpoint.description.local"}}{{end}}</span>
+ <div class="inline field {{if .Err_LFSEndpoint}}error{{end}}">
+ <label>{{.i18n.Tr "repo.migrate_options_lfs_endpoint.label"}}</label>
+ <input name="lfs_endpoint" value="{{.lfs_endpoint}}" placeholder="{{.i18n.Tr "repo.migrate_options_lfs_endpoint.placeholder"}}">
+ </div>
+</div>
+{{end}}
diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl
index 514a2f5c0a..012bff317d 100644
--- a/templates/repo/settings/options.tmpl
+++ b/templates/repo/settings/options.tmpl
@@ -81,8 +81,8 @@
<div class="inline field {{if .Err_EnablePrune}}error{{end}}">
<label>{{.i18n.Tr "repo.mirror_prune"}}</label>
<div class="ui checkbox">
- <input id="enable_prune" name="enable_prune" type="checkbox" {{if .MirrorEnablePrune}}checked{{end}}>
- <label>{{.i18n.Tr "repo.mirror_prune_desc"}}</label>
+ <input id="enable_prune" name="enable_prune" type="checkbox" {{if .MirrorEnablePrune}}checked{{end}}>
+ <label>{{.i18n.Tr "repo.mirror_prune_desc"}}</label>
</div>
</div>
<div class="inline field {{if .Err_Interval}}error{{end}}">
@@ -112,6 +112,21 @@
</div>
</div>
+ {{if .LFSStartServer}}
+ <div class="inline field">
+ <label>{{.i18n.Tr "repo.mirror_lfs"}}</label>
+ <div class="ui checkbox">
+ <input id="mirror_lfs" name="mirror_lfs" type="checkbox" {{if .Mirror.LFS}}checked{{end}}>
+ <label>{{.i18n.Tr "repo.mirror_lfs_desc"}}</label>
+ </div>
+ </div>
+ <div class="field {{if .Err_LFSEndpoint}}error{{end}}">
+ <label for="mirror_lfs_endpoint">{{.i18n.Tr "repo.mirror_lfs_endpoint"}}</label>
+ <input id="mirror_lfs_endpoint" name="mirror_lfs_endpoint" value="{{.Mirror.LFSEndpoint}}" placeholder="{{.i18n.Tr "repo.migrate_options_lfs_endpoint.placeholder"}}">
+ <p class="help">{{.i18n.Tr "repo.mirror_lfs_endpoint_desc" "https://github.com/git-lfs/git-lfs/blob/main/docs/api/server-discovery.md#server-discovery" | Str2html}}</p>
+ </div>
+ {{end}}
+
<div class="field">
<button class="ui green button">{{$.i18n.Tr "repo.settings.update_settings"}}</button>
</div>