update
This commit is contained in:
parent
eea55856e9
commit
c8002bd91b
3 changed files with 51 additions and 11 deletions
|
@ -31,7 +31,9 @@ import Network.URI
|
|||
import Maybe
|
||||
import Utility
|
||||
|
||||
{- A git repository can be local or remote. -}
|
||||
{- A git repository can be on local disk or remote. Not to be confused
|
||||
- with a git repo's configured remotes, some of which may be on local
|
||||
- disk. -}
|
||||
data GitRepo =
|
||||
LocalGitRepo {
|
||||
top :: FilePath,
|
||||
|
|
34
TODO
34
TODO
|
@ -1,7 +1,39 @@
|
|||
* bug when annexing files in a subdir of a git repo
|
||||
* how to handle git mv file?
|
||||
|
||||
* query remotes for their annex.name settings
|
||||
* query remotes for their annex.name settings, or figure out a different
|
||||
solution to nameing problem?
|
||||
|
||||
- querying network remotes all the time will be slow. local caching in
|
||||
.git/config?
|
||||
- having a git annex name and a git remote name that are distinct
|
||||
will be confusing
|
||||
- but git remote names are repo-local, I want a global name
|
||||
- really, I don't want a name at all, I want a per-repo UUID
|
||||
|
||||
So, each repo has a UUID, stored in annex.uuid.
|
||||
|
||||
And also, the last seen UUID for each remote is listed:
|
||||
|
||||
remote.origin.annex-uuid=d3d2474c-d5c3-11df-80a9-002170d25c55
|
||||
|
||||
Then when it need to find a repo by UUID, it can see if a known remote
|
||||
has it -- and then query the remote to confirm the repo there still has
|
||||
that UUID (a different repo may have been mounted there).
|
||||
|
||||
Failing that, it can force a refresh of all uuids, updating .git/config,
|
||||
and check again.
|
||||
|
||||
- Only downside for this is that if I put a repo on a usb disk,
|
||||
and it is disconnected and I have no remote for it,
|
||||
git-annex will have to say:
|
||||
|
||||
"You asked for a file that is only present on a git repo with
|
||||
UUID d3d2474c-d5c3-11df-80a9-002170d25c55 -- and I don't know
|
||||
where it is."
|
||||
|
||||
To solve that, let .git-annex/uuid.map map between uuids and descriptions,
|
||||
like "d3d2474c-d5c3-11df-80a9-002170d25c55 SATA drive labeled '* arch-2'"
|
||||
|
||||
* hook up LocationLog
|
||||
* --push/--pull/--get/--want/--drop
|
||||
|
|
|
@ -79,7 +79,7 @@ git-annex information that should be propigated between repositories.
|
|||
|
||||
Data is stored here in files that are arranged to avoid conflicts in most
|
||||
cases. A conflict could occur if a file with the same name but different
|
||||
content was added to multiple clones.
|
||||
content was added to multiple repositories.
|
||||
|
||||
## key/value storage
|
||||
|
||||
|
@ -117,26 +117,32 @@ you indicate you --want a file, git-annex will tell you which repositories
|
|||
have the file's content.
|
||||
|
||||
Location tracking information is stored in `.git-annex/$filename.log`.
|
||||
Repositories record their name and the date when they --get or --drop
|
||||
Repositories record their UUID and the date when they --get or --drop
|
||||
a file's content. (Git is configured to use a union merge for this file,
|
||||
so the lines may be in arbitrary order, but it will never conflict.)
|
||||
|
||||
The optional file `.git-annex/uuid.map` can be created to add a description
|
||||
to a UUID. If git-annex needs a file from a repository and it cannot find
|
||||
the repository amoung the remotes, it will use the description from this
|
||||
file when asking for the repository to be made available. The file format
|
||||
is a UUID, a space, and the rest of the line is its description. For
|
||||
example:
|
||||
|
||||
UUID d3d2474c-d5c3-11df-80a9-002170d25c55 USB drive in red enclosure
|
||||
|
||||
## configuration
|
||||
|
||||
* `annex.numcopies` -- number of copies of files to keep
|
||||
* `annex.uuid` -- a unique UUID for this repository
|
||||
* `annex.numcopies` -- number of copies of files to keep (default: 1)
|
||||
* `annex.backends` -- space-separated list of names of
|
||||
the key/value backends to use. The first listed is used to store
|
||||
new files.
|
||||
* `annex.name` -- allows specifying a unique name for this repository.
|
||||
If not specified, the name is derived from its directory's location and
|
||||
the hostname. When a repository is on removable media it is useful to give
|
||||
it a more stable name. Typically the name of a repository is the same
|
||||
name configured as a git remote to allow pulling from that repository.
|
||||
new files. (default: file, checksum, url)
|
||||
* `remote.<name>.annex-cost` -- When determining which repository to
|
||||
transfer annexed files from or to, ones with lower costs are preferred.
|
||||
The default cost is 50. Note that other factors may be configured
|
||||
when pushing files to repositories, in particular, whether the repository
|
||||
is on a filesystem with sufficient free space.
|
||||
* `remote.<name>.annex-uuid` -- git-annex caches UUIDs of remotes here
|
||||
|
||||
## issues
|
||||
|
||||
|
|
Loading…
Reference in a new issue