summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-12 02:00:29 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-12 02:00:29 -0400
commitc8002bd91b03b66c195014ecaa9111c50fa5e716 (patch)
tree444f5ecfe5b5defcdfc499d22f5d1dd59341f6d4
parenteea55856e9db85884a7fb28ce1b408fdbc05f90f (diff)
update
-rw-r--r--GitRepo.hs4
-rw-r--r--TODO34
-rw-r--r--git-annex.mdwn24
3 files changed, 51 insertions, 11 deletions
diff --git a/GitRepo.hs b/GitRepo.hs
index fb3ddbaf8..27fc0632c 100644
--- a/GitRepo.hs
+++ b/GitRepo.hs
@@ -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,
diff --git a/TODO b/TODO
index ea930f803..b08784ec2 100644
--- a/TODO
+++ b/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
diff --git a/git-annex.mdwn b/git-annex.mdwn
index 6bfdd57c7..1348886f2 100644
--- a/git-annex.mdwn
+++ b/git-annex.mdwn
@@ -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