Merge branch 'master' of ssh://git-annex.branchable.com

This commit is contained in:
Joey Hess 2013-12-13 14:20:21 -04:00
commit 75627390cd
13 changed files with 190 additions and 0 deletions

View file

@ -0,0 +1,16 @@
### Please describe the problem, What steps will reproduce the problem?
$ which git-annex
~/.local/bin/git-annex
$ git help annex
No manual entry for git-annex
$ git annex --help
No manual entry for git-annex
(either that or it display the manual of system-installed git-annex, not the locally installed one)
### What version of git-annex are you using? On what operating system?
Fedora 20
`git-annex --version` doesn't work and the webapp tells me Version: 5.20131130-gc25be33

View file

@ -0,0 +1,8 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawmLdL4zLty4fsfaIXNtPMS5RXs4y8OAk0o"
nickname="Marc"
subject="comment 5"
date="2013-12-13T15:43:46Z"
content="""
That's great, Joey, thanks a lot!
"""]]

View file

@ -0,0 +1,11 @@
I have two machines A & B. Each have their our repository.
On machine A I have created a remotehost (S3) and have synced successfully.
I am trying to link machine B to the same remote host. I keep getting an error on the initremote command on machine B.
I tried using the same command as I did on A and it is not working. Is there a different command to link machine B to an existing remote repository?
Any help is appreciated.
Rob

View file

@ -0,0 +1,11 @@
[[!comment format=mdwn
username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
nickname="Hamza"
subject="comment 1"
date="2013-12-13T08:37:24Z"
content="""
On machine B you don't initremote you enableremote,
git annex enableremote mys3
"""]]

View file

@ -0,0 +1,8 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawnKhw0-Tu5oHjeoz_gAP4Nu5V9uo8ta3hM"
nickname="Robert"
subject="unknown special remote"
date="2013-12-13T15:12:37Z"
content="""
How does machine B know about the remote? Machines A & B are separate and don't share references. Am I missing a step?
"""]]

View file

@ -0,0 +1,8 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawk_bIB1Vadfc_GfPLKX_ScfWFCcaGyk8Ac"
nickname="Rob"
subject="Remove quotes"
date="2013-12-13T04:44:22Z"
content="""
I tried the command with and without quotes it results in the same error. I think the issue is that the host is trying to resolve a concatenation of the hostname and amazon.com when in fact it should be resolving to the host name only.
"""]]

View file

@ -0,0 +1,14 @@
[[!comment format=mdwn
username="Renaud"
ip="182.171.224.143"
subject="comment 2"
date="2013-12-13T06:16:12Z"
content="""
Thanks for the reply!
I tried to commit manually but I got confused by the (recently introduced?) annex/direct/master branch and I am not sure which branch I need to commit/merge/pull/push my changes to.
I also got blocked when pulling from origin fail due to file changes needed to be overwritten.
I see git-annex cleverly merges those in .git/annex/merge folder so I could try doing the same but I am not too confortable doing a large part of git-annex's job...
Is there a simpler way to sync with a remote repository?
"""]]

View file

@ -0,0 +1,10 @@
[[!comment format=mdwn
username="http://joeyh.name/"
ip="209.250.56.87"
subject="comment 5"
date="2013-12-12T21:40:16Z"
content="""
Well, I was wrong, we don't know only one of the 2 has the problem. The other one will probably not have run ssh-keygen yet.
Can you run `/Applications/git-annex.app/Contents/MacOS/bundle/ssh-keygen --help` on both of them and see if it manages to print its help, or fails with an error?
"""]]

View file

@ -0,0 +1,17 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawnfC02DTOZygFDDvvg0maRciYYMhEIFgkw"
nickname="Utku"
subject="comment 6"
date="2013-12-12T21:50:15Z"
content="""
ok so it is ok on my computer, but here is what I got on the other one :
dyld: lazy symbol binding failed: Symbol not found: ___strlcpy_chk
Referenced from: /Applications/git-annex.app/Contents/MacOS/bundle/ssh-keygen
Expected in: /usr/lib/libSystem.B.dylib
dyld: Symbol not found: ___strlcpy_chk
Referenced from: /Applications/git-annex.app/Contents/MacOS/bundle/ssh-keygen
Expected in: /usr/lib/libSystem.B.dylib
Trace/BPT trap: 5
"""]]

View file

@ -0,0 +1,10 @@
[[!comment format=mdwn
username="http://joeyh.name/"
ip="209.250.56.87"
subject="comment 7"
date="2013-12-12T21:53:56Z"
content="""
So it does only fail on one machine and not the other. I wonder what is different?
Can you also try running `/Volumes/git-annex/git-annex.app/Contents/MacOS/bundle/cp` on both? (I think it uses the same symbol.)
"""]]

View file

@ -0,0 +1,16 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawnfC02DTOZygFDDvvg0maRciYYMhEIFgkw"
nickname="Utku"
subject="comment 8"
date="2013-12-12T22:03:54Z"
content="""
you mean /Applications/git-annex.app/Contents/MacOS/bundle/cp ?
on both computers it prints :
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
/Volumes/git-annex/git-annex.app/Contents/MacOS/bundle/cp doesn't work
"""]]

View file

@ -0,0 +1,42 @@
Direct mode is great because it removes symlinks. A must-have for directories like `~/Documents`. Unfortunately, it removes the possibility to use `git` commands other than `git-annex`. Also, it doen't preserve history of files.
I would be great to have a mode where:
- files are available in plain, not as sylinks
- the repository could still be trusted to hold version of some files from other repositories
- from a user point of view, the history of a file before the checkout would be preserved.
In feature rich file systems that have copy on write feature, it could be implemented by having the files in both places at the same time:
- the current version of a file would be in the working copy
- the file in the working copy would be a copy-on-write of the file in the annex repository
- when the file in the working copy changes, `git-annex` notices it and copy the file in the annex repository using copy-on-write semantic
If the file system do not support copy-on-write, it could be an option (do you want secure direct mode that takes twice the disk space or light direct mode that don't preserve the history of your files?)
This would make direct more much more robust.
copy on write is available using `cp --reflink=always`. It correspond to the following code ([coreutils src/copy.c line 224](http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/copy.c#n224)):
/* Perform the O(1) btrfs clone operation, if possible.
Upon success, return 0. Otherwise, return -1 and set errno. */
static inline int
clone_file (int dest_fd, int src_fd)
{
#ifdef __linux__
# undef BTRFS_IOCTL_MAGIC
# define BTRFS_IOCTL_MAGIC 0x94
# undef BTRFS_IOC_CLONE
# define BTRFS_IOC_CLONE _IOW (BTRFS_IOCTL_MAGIC, 9, int)
return ioctl (dest_fd, BTRFS_IOC_CLONE, src_fd);
#else
(void) dest_fd;
(void) src_fd;
errno = ENOTSUP;
return -1;
#endif
}
Looking at the code it would be preferable to exec directly to `cp`, see [copy_range() on LWN](http://lwn.net/Articles/550621/) and this [more recent article about splice() on LWN](http://lwn.net/Articles/567086/)
Also, `cp --reflink` fall back to copy when copy-on-write is not available while `cp --reflink=always` do not.

View file

@ -0,0 +1,19 @@
Instead of changing the `PATH`, it should be possible to symlink the binaries to the `~/.local/bin` directory.
Here is a script I put on the prebuilt package (its basename is unimportant but it must be placed along with the git-annex script):
#!/bin/sh
link="$(readlink "$0")"
base="$(cd "$(dirname "$0")"; cd "$(dirname "$link")"; echo "$PWD")"
name="$(basename "$0")"
exec "$base/$name" "$@"
Symlink this script to `~/.local/bin/git-annex`, `~/.local/bin/git-annex-shell` and `~/.local/bin/git-annex-webapp`. on my system I have:
lrwxrwxrwx. 1 mildred mildred 36 Dec 13 12:12 git-annex -> ../opt/git-annex.linux/run-git-annex
lrwxrwxrwx. 1 mildred mildred 36 Dec 13 12:12 git-annex-shell -> ../opt/git-annex.linux/run-git-annex
lrwxrwxrwx. 1 mildred mildred 36 Dec 13 12:12 git-annex-webapp -> ../opt/git-annex.linux/run-git-annex
The script will detect the installation directory using `readlink`. Both absolute and relative links works. Then it starts the correct script depending on the basename of the link.
It should be possible to link the `git-annex`, `git-annex-webapp` and `git-annex-shell` scripts instead if they used `readlink` to find out the location of the prebuilt package.