added renameremote command
This commit is contained in:
parent
ed1a0926c1
commit
c0c38e986d
8 changed files with 80 additions and 13 deletions
|
@ -11,6 +11,9 @@ git-annex (7.20190323) UNRELEASED; urgency=medium
|
|||
syncing with are export/import remotes.
|
||||
* sync: When listing contents on an import remote fails, proceed with
|
||||
other syncing instead of aborting.
|
||||
* renameremote: New command, changes the name that is used to enable
|
||||
a special remote. Especially useful when you want to reuse the name
|
||||
of an old remote for something new.
|
||||
|
||||
-- Joey Hess <id@joeyh.name> Tue, 09 Apr 2019 14:07:53 -0400
|
||||
|
||||
|
|
|
@ -54,6 +54,7 @@ import qualified Command.Init
|
|||
import qualified Command.Describe
|
||||
import qualified Command.InitRemote
|
||||
import qualified Command.EnableRemote
|
||||
import qualified Command.RenameRemote
|
||||
import qualified Command.EnableTor
|
||||
import qualified Command.Multicast
|
||||
import qualified Command.Expire
|
||||
|
@ -145,6 +146,7 @@ cmds testoptparser testrunner mkbenchmarkgenerator =
|
|||
, Command.Describe.cmd
|
||||
, Command.InitRemote.cmd
|
||||
, Command.EnableRemote.cmd
|
||||
, Command.RenameRemote.cmd
|
||||
, Command.EnableTor.cmd
|
||||
, Command.Multicast.cmd
|
||||
, Command.Reinject.cmd
|
||||
|
|
41
Command/RenameRemote.hs
Normal file
41
Command/RenameRemote.hs
Normal file
|
@ -0,0 +1,41 @@
|
|||
{- git-annex command
|
||||
-
|
||||
- Copyright 2019 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
||||
module Command.RenameRemote where
|
||||
|
||||
import Command
|
||||
import qualified Logs.Remote
|
||||
import qualified Types.Remote as R
|
||||
import qualified Remote
|
||||
|
||||
import qualified Data.Map as M
|
||||
|
||||
cmd :: Command
|
||||
cmd = command "renameremote" SectionSetup
|
||||
"changes name of special remote"
|
||||
(paramPair paramName paramName)
|
||||
(withParams seek)
|
||||
|
||||
seek :: CmdParams -> CommandSeek
|
||||
seek = withWords (commandAction . start)
|
||||
|
||||
start :: [String] -> CommandStart
|
||||
start (oldname:newname:[]) = do
|
||||
m <- Logs.Remote.readRemoteLog
|
||||
Remote.nameToUUID' oldname >>= \case
|
||||
Left e -> giveup e
|
||||
Right u -> case M.lookup u m of
|
||||
Nothing -> giveup "That is not a special remote."
|
||||
Just cfg -> do
|
||||
showStart' "rename" Nothing
|
||||
next $ perform u cfg newname
|
||||
start _ = giveup "Specify an old name (or uuid or description) and a new name."
|
||||
|
||||
perform :: UUID -> R.RemoteConfig -> String -> CommandPerform
|
||||
perform u cfg newname = do
|
||||
Logs.Remote.configSet u (M.insert "name" newname cfg)
|
||||
next $ return True
|
|
@ -32,6 +32,8 @@ by using eg, `git-annex reinject`.)
|
|||
|
||||
[[git-annex-untrust]](1)
|
||||
|
||||
[[git-annex-renameremote]](1)
|
||||
|
||||
[[git-annex-expire]](1)
|
||||
|
||||
[[git-annex-fsck]](1)
|
||||
|
|
|
@ -27,16 +27,26 @@ All special remotes support encryption. You can specify
|
|||
address associated with a key). For details about ways to configure
|
||||
encryption, see <https://git-annex.branchable.com/encryption/>
|
||||
|
||||
If you anticipate using the new special remote in other clones of the
|
||||
repository, you can pass "autoenable=true". Then when [[git-annex-init]](1)
|
||||
Once a special remote has been initialized once with this command,
|
||||
other clones of the repository can also be set up to access it using
|
||||
`git annex enableremote`.
|
||||
|
||||
To avoid `git annex enableremote` needing to be run,
|
||||
you can pass "autoenable=true". Then when [[git-annex-init]](1)
|
||||
is run in a new clone, it will attempt to enable the special remote. Of
|
||||
course, this works best when the special remote does not need anything
|
||||
special to be done to get it enabled.
|
||||
|
||||
The name you provide for the remote can't be one that's been used for any
|
||||
other special remote before, because `git-annex enableremote` uses the name
|
||||
to identify which special remote to enable. If some old special remote
|
||||
that's no longer used has taken the name you want to reuse, you might
|
||||
want to use `git annex renameremote`.
|
||||
|
||||
Normally, git-annex generates a new UUID for the new special remote.
|
||||
If you want to, you can specify a UUID for it to use, by passing a
|
||||
uuid=whatever parameter. This can be useful in some situations, eg when the
|
||||
same data can be accessed via two different special remote backends.
|
||||
same data can be accessed via two different remote backends.
|
||||
But if in doubt, don't do this.
|
||||
|
||||
# OPTIONS
|
||||
|
@ -55,6 +65,8 @@ But if in doubt, don't do this.
|
|||
|
||||
[[git-annex-enableremote]](1)
|
||||
|
||||
[[git-annex-renameremote]](1)
|
||||
|
||||
# AUTHOR
|
||||
|
||||
Joey Hess <id@joeyh.name>
|
||||
|
|
|
@ -225,6 +225,12 @@ subdirectories).
|
|||
|
||||
See [[git-annex-enableremote]](1) for details.
|
||||
|
||||
* `renameremote`
|
||||
|
||||
Renames a special remote.
|
||||
|
||||
See [[git-annex-renameremote]](1) for details.
|
||||
|
||||
* `enable-tor`
|
||||
|
||||
Sets up tor hidden service.
|
||||
|
|
|
@ -9,16 +9,15 @@ with the same name, and so enableremote would need to be run with a uuid
|
|||
instead of a name to specify which one to enable, which is not a desirable
|
||||
state of affairs.
|
||||
|
||||
So, add `git annex renameremote oldname newname`. This could also do a `git
|
||||
So, add `git annex renameremote oldname newname`. Updates the remote.log
|
||||
with the new name.
|
||||
|
||||
This could also do a `git
|
||||
remote rename`, or equivilant. (`git remote rename` gets confused by special
|
||||
remotes not having a fetch url and fails; this can be worked around by
|
||||
manually renaming the stanza in git config.)
|
||||
manually renaming the stanza in git config.) But.. Perhaps it's better to
|
||||
keep it simple and not do that. There's no necessarily a correspondance
|
||||
between the name of a remote in the local repo and the name of a
|
||||
special remote in the remote.log.
|
||||
|
||||
Implementing that would need a way to remove the old name from remote.log.
|
||||
We can't remove lines from union merged files, but what we could do is
|
||||
add a new line like:
|
||||
|
||||
- name=oldname timestamp=<latest>
|
||||
|
||||
And in parsing remote.log, if the UUID is "-", don't include the
|
||||
remote with that name in the the resulting map.
|
||||
[[done]] --[[Joey]]
|
||||
|
|
|
@ -104,6 +104,7 @@ Extra-Source-Files:
|
|||
doc/git-annex-reinject.mdwn
|
||||
doc/git-annex-rekey.mdwn
|
||||
doc/git-annex-remotedaemon.mdwn
|
||||
doc/git-annex-renameremote.mdwn
|
||||
doc/git-annex-repair.mdwn
|
||||
doc/git-annex-required.mdwn
|
||||
doc/git-annex-resolvemerge.mdwn
|
||||
|
@ -766,6 +767,7 @@ Executable git-annex
|
|||
Command.Reinit
|
||||
Command.Reinject
|
||||
Command.RemoteDaemon
|
||||
Command.RenameRemote
|
||||
Command.Repair
|
||||
Command.Required
|
||||
Command.ResolveMerge
|
||||
|
|
Loading…
Reference in a new issue