[rfc] Windows symlink support

Jari Aalto jari.aalto at cante.net
Mon Jan 16 19:20:41 GMT 2006


Jamie Wilkinson <jaq at spacepants.org> writes:

> Both these use cases are more easily solved using management agents like
> puppet or cfengine; pushing symlinks out from your RCS is a terrible way to
> handle this.  Usually one requires a tool run after the RCS push to modify
> the final layout.  In such a case I've found it best to let this tool do the
> linking itself, and leave the symlinks out of revision control.
>
>>Some people version $HOME, which I have started playing around with.
>>Mostly because I have 10 different machines I work on, at various sites
>>(home, work, laptop, school, etc), where doing an NFS mounted home
>>directory is not possible (kind of hard to do on an airplane), but it
>>also sucks to try and keep my ~/.vimrc .vim/* in sync.

CNERALIZED MANAGEMENT

    People, CVS has been there for ages to keep separate hosts and 10
    different user identities (root, cvsadm, wwwadm, $USER) well on synch
    :-) It has been ideal for star-like system, where all hosts share the
    same configuration (even if they are on different OS, you can still
    separate "common" from site-specific).

               Host 3   Host 4
                     \ /
             Host 2 - o - Host 5
                     / \
               Host 1   Host ...

    Make change, check in, move to another site and just do

         cvs up

    With appropriate ssh setup, this can be automated:

         ssh login at example.com "cd that-dir; cvs up"

HOME DIRECTORY MANAGEMENT

    Personally I have found this to be best working for HOME directories
    with different identities (root, cvsadm, $USER ...), hosts and
    Operating Systems (HP-UX, SunOs, Linux, Cygwin):

         $HOME/vc           Keep all version control files under this
                            * Can be excluded from backup. 
                            * Files that you want to preserve. 

     You can selectively check out the pieces that you need
     under this directory from master repository.

 Example: dot-files

    Every directory contains a "Makefile" or makefile.sh that will
    populate the needed directory(ies). For examples for VI/Emacs,
    symlinks must be drawn to DOT-files from site specific VC
    directory to $HOME

    1) common settings for all hosts

         cd $HOME/vc/my/shell/rc/common
         makefile.sh
         
    2) Overwrite with site specific needs (and possibly more files)

         cd $HOME/vc/my/shell/rc/$(hostname)
         makefile.sh

    Now there will appear ~/.vimrc, ~/.emacsrc, ~/.muttrc ...

  Example: shell startup

    1) common settings for all hosts

         cd $HOME/vc/my/shell/bash/rc/common
         makefile.sh

    2) Overwrite with site specific needs (and possibly more files)

         cd $HOME/vc/my/shell/bash/rc/$(hostname)
         makefile.sh

    Now there appears ~/.bashrc, ~/.bashrc_logout ... and some
    libraries that are put under $HOME/var/link/bash and "sourced" by
    the host-specific bash settings. They provide aliases, functions,
    etc.

  Example: programs

     I use toplevel $HOME/var for "permanent" files so that it
     is easy enought to make a backup for everything.

         $HOME/var/bin

     Same as previously drill, but the files are symlinked to one
     common directory

         cd $HOME/vc/my/shell/bin/common
         makefile.sh
         cd $HOME/vc/my/shell/bin/admin
         makefile.sh         
         cd $HOME/vc/my/shell/bin/$(hostname)
         makefile.sh

     Sympliks are in place, so PATH setting only contains in
     ~/.bashrc:

         export PATH=$HOME/var/bin:$PATH

Now, when bzr gets central repository concept, this will all be even
more fun.

Jari





More information about the bazaar mailing list