mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-31 20:02:09 +00:00
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>
This commit is contained in:
parent
f544414a23
commit
c03e488e14
75 changed files with 2159 additions and 711 deletions
|
@ -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>
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
29
templates/repo/migrate/options.tmpl
Normal file
29
templates/repo/migrate/options.tmpl
Normal file
|
@ -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}}
|
Loading…
Add table
Add a link
Reference in a new issue