newbie: "fake" README for remote of a `vcsh` repo?
Tom Roche
Tom_Roche at pobox.com
Thu Feb 12 01:19:37 CET 2015
summary: Testing the Demeester hook[1] shows that it does not solve the "input-side" problem (more below), though it may solve the "output-side" problem. The "input-side"/"output-side" dichotomy is detailed below.
I sketch below what an input-side solution might look like. Is there a hook (or other solution) that would solve the input-side problem?
details:
Tom Roche Tue Feb 10 19:46:36 CET 2015 [2]
>> note the "newbie" in the Subject line :-) I'm a beginner-level `git` user and a totally-novice-level `vcsh` user.
Vincent Demeester Tue, 10 Feb 2015 21:27:51 +0100 [1]
> I [don't think this is] a newbie question
I installed vcsh (via debian package) late Monday night (9 Feb). It's now early Wednesday night (11 Feb). How I could be much more newbie?
That I've gotten to this point with vcsh is also a tribute to vcsh's ease of use, e.g., that the "30 Second How-to"[3] works so well. (And that the vcsh team has done the packaging work, which is non-trivial.)
input-side vs output-side
=========================
> vcsh looks for executable file as hooks in $XDG_CONFIG_HOME/vcsh/hooks-enabled
> (usually $XDG_CONFIG_HOME is $HOME/.config so ~/.config/vcsh/hooks-enabled).
> Let's create an executable script : ~/.config/vcsh/hooks-enabled/setUpSparseCheckout.sh
Hmm ... 'checkout' seems to imply this hook is meant to solve the "output-side" problem rather than the "input-side" problem. This is understandable in that there seems to be much more interest in the output-side than the input-side[4]; however, I have tried to make clear that I am concerned with the input-side and *not* the output-side:
Tom Roche Tue Feb 10 19:00:07 CET 2015 [4] (rearranged)
>>> a lotta people, for a long time, has been concerned with what I would call
>>> [the "output-side"] (or, temporally, post-commit): they don't want [to checkout]
>>> extraneous content to checkout into their $HOME. [But] I'm asking about the
>>> *input* side, or *pre-commit*: how can I get a README into the root of a [local] repo
>>> (to make it available for a remote/web repo) *without* putting it into ${HOME} pre-commit?
Here's a sketch of an input-side problem (reproduced in detail below):
>>> 1. I create repo=vcsh-bash to VC files including ~/.bash* . I add a ~/README.rst to make it available to its remote/web repo, then commit and push.
>>> 2. I create repo=vcsh-emacs to VC files including ~/.authinfo , ~/bin/emacsclient_helper.sh , ~/emacs/init.el , etc . I rewrite ~/README.rst to make that available to the remote for vcsh-emacs, then commit and push.
>>> 3. I make a change to ~/.bashrc , which I seek to commit to vcsh-bash. `vcsh vcsh-bash status` shows as modified=
>>> * ~/.bashrc [<- that I intend]
>>> * ~/README.rst [<- that I want to avoid]
handwaving an input-side solution
=================================
Here's a sketch (adapted from this vcsh issue[5]) of a workflow enable by an input-side solution. My guesses about what would need done to implement such a solution are indicated by '(TODO)':
1. `mkdir -p ~/path/to/input-side-soln/fakeroot/`
2. create/edit ~/path/to/input-side-soln/fakeroot/README.rst
3. `vcsh init input-side-soln`
4. (TODO) tell repo=input-side-soln that its filetree has *2* roots:
4.1. (TODO) a "real root" @ ~/
4.1. (TODO) a "fake root" @ ~/path/to/input-side-soln/fakeroot/
5. `vcsh input-side-soln add ~/.bashrc ~/path/to/input-side-soln/fakeroot/README.rst`
6. input-side-soln now "believes":
6.1. it has staged ./.bashrc
6.2. it should checkout ./.bashrc to ~/.bashrc
6.3. it should look for changes to ./.bashrc @ ~/.bashrc
6.4. (TODO) it has staged ./README.rst
6.5. (TODO) it should checkout ./README.rst to ~/path/to/input-side-soln/fakeroot/README.rst
6.6. (TODO) it should look for changes to ./README.rst @ ~/path/to/input-side-soln/fakeroot/README.rst
7. `vcsh input-side-soln status | head -n 20`
...
> Changes to be committed:
...
> new file: .bashrc
> new file: README.rst
8. `vcsh input-side-soln commit ...`
...
> create mode 100644 .bashrc
> create mode 100644 README.rst
9. create remote==https://bitbucket.com/tlroche/input-side-soln
10. `vcsh input-side-soln remote add ...`
11. `vcsh input-side-soln push ...`
12. I see an Overview @ https://bitbucket.com/tlroche/input-side-soln !-)
13. `mkdir -p ~/path/to/input-side-test/fakeroot/`
14. create/edit ~/path/to/input-side-test/fakeroot/README.rst
15. `vcsh init input-side-test`
16. (TODO) tell repo=input-side-test that its filetree has *2* roots:
16.1. (TODO) a "real root" @ ~/
16.1. (TODO) a "fake root" @ ~/path/to/input-side-test/fakeroot/
17. `vcsh input-side-test add ~/.emacs ~/path/to/input-side-test/fakeroot/README.rst`
18. input-side-test now "believes":
18.1. it has staged ./.emacs
18.2. it should checkout ./.emacs to ~/.emacs
18.3. it should look for changes to ./.emacs @ ~/.emacs
18.4. (TODO) it has staged ./README.rst
18.5. (TODO) it should checkout ./README.rst to ~/path/to/input-side-test/fakeroot/README.rst
18.6. (TODO) it should look for changes to ./README.rst @ ~/path/to/input-side-test/fakeroot/README.rst
19. `vcsh input-side-test status | head -n 20`
...
> Changes to be committed:
...
> new file: .emacs
> new file: README.rst
20. `vcsh input-side-test commit ...`
...
> create mode 100644 .emacs
> create mode 100644 README.rst
21. create remote==https://bitbucket.com/tlroche/input-side-test
22. `vcsh input-side-test remote add ...`
23. `vcsh input-side-test push ...`
24. I see an Overview @ https://bitbucket.com/tlroche/input-side-test !-)
25. Any future changes to ~/path/to/input-side-soln/fakeroot/README.rst
* will show in `vcsh input-side-soln status`
* will NOT show in `vcsh input-side-test status`
26. Any future changes to ~/path/to/input-side-test/fakeroot/README.rst
* will NOT show in `vcsh input-side-soln status`
* will show in `vcsh input-side-test status`
27. Anything that happens @ ~/README.rst will be ignored by both input-side-soln and input-side-test
testing the Demeester hook
==========================
~/.config/vcsh/hooks-enabled/setUpSparseCheckout.sh below is "the Demeester hook."
0. setup
--------
Starting out, I have
$ lsalh ~/.config/vcsh/
> drwxr-xr-x 4 me me 4.0K Feb 11 12:47 .
> drwxr-xr-x 27 me me 4.0K Feb 9 16:31 ..
> drwxr-xr-x 2 me me 4.0K Feb 11 12:50 hooks-enabled
> drwxr-xr-x 4 me me 4.0K Feb 9 23:12 repo.d
$ ls -al ~/.config/vcsh/hooks-enabled/
> drwxr-xr-x 2 me me 4096 Feb 11 12:50 .
> drwxr-xr-x 4 me me 4096 Feb 11 12:47 ..
> -rwxr-xr-x 1 me me 475 Feb 11 12:50 setUpSparseCheckout.sh
$ cat ~/.config/vcsh/hooks-enabled/setUpSparseCheckout.sh
> #!/bin/sh
> ### From http://lists.madduck.net/pipermail/vcs-home/2015-February/000993.html
> ### Thanks, Vincent Demeester!
> if ! test "$(git config core.sparseCheckout)" = "true"; then
> # Enable sparseCheckout for the repository
> git config core.sparseCheckout true
> # And write the sparseCheckout configuration where it's needed
> cat >> $GIT_DIR/info/sparse-checkout << EOF
> # vcsh automatic sparse-checkout configuration
> *
> !README
> !README.rst
> !README.md
> !README.org
> EOF
> fi
Cleanup what I have already:
$ vcsh delete vcsh-bash
> vcsh: info: This operation WILL DESTROY DATA!
> These files will be deleted:
>
> .bash_aliases
> .bash_history
> .bash_logout
> .bash_profile
> .bashrc
> .profile
@#$%^&! Don't do that!
$ ls -al ~/.config/vcsh/repo.d/
drwxr-xr-x 4 me me 4096 Feb 9 23:12 .
drwxr-xr-x 4 me me 4096 Feb 11 12:47 ..
drwxr-xr-x 8 me me 4096 Feb 9 22:44 vcsh-bash.git
drwxr-xr-x 8 me me 4096 Feb 9 23:33 vcsh-emacs.git
$ rm -fr ~/.config/vcsh/repo.d/vcsh-bash.git
$ rm -fr ~/.config/vcsh/repo.d/vcsh-emacs.git
<whew/> Perhaps there could be API (e.g., a commandline flag) to say, "just delete the repo, NOT what it's pointing to"?
1. start vcsh-bash
------------------
# check for what I want to add
ls -al \
~/README.rst \
~/.bash_aliases \
~/.bash_logout \
~/.bash_profile \
~/.bashrc \
~/.profile
$ vcsh init vcsh-bash
> Initialized empty Git repository in /home/me/.config/vcsh/repo.d/vcsh-bash.git/
$ vcsh vcsh-bash add \
~/README.rst \
~/.bash_aliases \
~/.bash_logout \
~/.bash_profile \
~/.bashrc \
~/.profile
$ vcsh vcsh-bash status | head -n 20
...
> Changes to be committed:
...
> new file: .bash_aliases
> new file: .bash_logout
> new file: .bash_profile
> new file: .bashrc
> new file: .profile
> new file: README.rst
$ vcsh vcsh-bash commit -m 'initial commit, testing Demeester hook: see http://lists.madduck.net/pipermail/vcs-home/2015-February/000993.html'
...
> create mode 100644 .bash_aliases
> create mode 100644 .bash_logout
> create mode 100644 .bash_profile
> create mode 100644 .bashrc
> create mode 100644 .profile
> create mode 100644 README.rst
# create remote==https://bitbucket.com/tlroche/vcsh-bash
$ vcsh vcsh-bash remote add bbg git at bitbucket.org:tlroche/vcsh-bash.git
$ vcsh vcsh-bash remote add bbh https://tlroche@bitbucket.org/tlroche/vcsh-bash.git
$ vcsh vcsh-bash push bbg master
# and now I see an Overview @ https://bitbucket.com/tlroche/vcsh-bash !-)
# so far, so good
2. start vcsh-emacs
-------------------
# check for what I want to add
ls -al \
~/README.rst \
~/.authinfo \
~/.bashrc \
~/bin/emacs-nw-q.sh \
~/.emacs.d/.emacs.bmk \
~/.emacs.d/abbrev_defs \
~/.emacs.d/init.el \
~/.emacs.d/linux_desktop
$ vcsh init vcsh-emacs
> Initialized empty Git repository in /home/me/.config/vcsh/repo.d/vcsh-emacs.git/
$ vcsh vcsh-emacs add \
~/README.rst \
~/.authinfo \
~/.bashrc \
~/bin/emacs-nw-q.sh \
~/.emacs.d/.emacs.bmk \
~/.emacs.d/abbrev_defs \
~/.emacs.d/init.el \
~/.emacs.d/linux_desktop
$ vcsh vcsh-emacs status | head -n 20
...
> Changes to be committed:
...
> new file: .authinfo
> new file: .bashrc
> new file: .emacs.d/.emacs.bmk
> new file: .emacs.d/abbrev_defs
> new file: .emacs.d/init.el
> new file: .emacs.d/linux_desktop
> new file: README.rst
> new file: bin/emacs-nw-q.sh
$ vcsh vcsh-emacs commit -m 'initial commit, testing Demeester hook: see http://lists.madduck.net/pipermail/vcs-home/2015-February/000993.html'
...
# create remote==https://bitbucket.com/tlroche/vcsh-emacs
$ vcsh vcsh-emacs remote add bbg git at bitbucket.org:tlroche/vcsh-emacs.git
$ vcsh vcsh-emacs remote add bbh https://tlroche@bitbucket.org/tlroche/vcsh-emacs.git
$ vcsh vcsh-emacs push bbg master
# and now I see an Overview @ https://bitbucket.com/tlroche/vcsh-emacs !-)
# so far, so good!
3. change vcsh-bash
-------------------
# make very minor change to .bashrc
tlroche at tlrW510:~$ vcsh vcsh-bash status | head -n 20
..
> Changes not staged for commit:
...
> modified: .bashrc
> modified: README.rst # currently contains content appropriate to repo=vcsh-emacs
So obviously the Demeester hook does not solve the input-side problem, though it may very well solve the output-side problem.
Your assistance is appreciated, Tom Roche <Tom_Roche at pobox.com>
[1]: http://lists.madduck.net/pipermail/vcs-home/2015-February/000993.html
[2]: http://lists.madduck.net/pipermail/vcs-home/2015-February/000989.html
[3]: https://github.com/RichiH/vcsh#30-second-how-to
[4]: http://lists.madduck.net/pipermail/vcs-home/2015-February/000985.html
[5]: https://github.com/RichiH/vcsh/issues/147#issue-57104673
More information about the vcs-home
mailing list