logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

cow-shell - Start a copy-on-write session and invoke a shell.

Author

       Junichi Uekawa (dancer@debian.org)

       Upstream page is available at http://www.netfort.gr.jp/~dancer/software/cowdancer.html

Description

cow-shell Executes specified command with cowdancer or a shell if no command-line option is given.

       Inside  the  cowdancer  session, files under the current directory are protected in a way so that a write
       operation to an i-node which existed at the point of running cow-shell is not modified.

       Useful for managing hard-linked source-trees and scratch-filesystems.

Environment

COWDANCER_ILISTFILE
              The path to the current .ilist file.

       COWDANCER_IGNORE
              Used internally to work around infinite loops.  It will be unset.

       LD_PRELOAD
              Utilized to preload libcowdancer.soCOWDANCER_DEBUG
              Debugging option.  Enables debug messages.  cowdancer will give verbose debug messages in standard
              error output.

       COWDANCER_SO
              Debugging option.  Specifies a different path for libcowdancer.so.

       COWDANCER_REUSE=yes
              Enables reuse of cowdancer .ilist file found for consecutive runs of cow-shell.

Examples

cp-alcowdancer/cowdancer.new&&cdcowdancer.new&&cow-shell
              Create a hardlinked tree, and cd into the newly created tree.   After  invoking  cow-shell  inside
              that  tree,  a  write  operation  against a file that is hardlinked with the original tree will be
              copied to a new file before write.

       cp-alcowdancer/cowdancer.new&&cdcowdancer.new&&cow-shelldebuild
              Tries to run dpkg-buildpackage on the new tree, to avoid damage to the original tree.

              Configure debuild to ignore .ilist files, through -i or -I option.

Files

.ilist Generated dynamically in the current directory.  The file contains the list of i-node numbers that
              should be protected from write operation.

       /usr/lib/cowdancer/libcowdancer.so
              The shared library used internally that overrides some functions that potentially write to  files.
              This library implements the COW feature and is preloaded with LD_PRELOAD.

       /bin/cp
              Used for copying.  Requires GNU option -a to be functional.

Name

       cow-shell - Start a copy-on-write session and invoke a shell.

Restrictions

       Can only support directories that are scanned by cow-shell command.

       The  operation  is  not  semantically  correct when files are originally hardlinked, hardlinks are always
       broken.

       Does not support anything when LD_PRELOAD trick does not work.

       Does not work unless hardlinks are supported on the filesystem.

       Not very user-friendly.

       Leaves .ilist file around.

Return Value

       The  functions  that  are  overridden  with  cowdancer will give an errno value of ENOMEM when there is a
       problem.

       System isn't really out of memory, but this error code is chosen because this error  is  usually  handled
       gracefully by applications.

See Also

cowdancer-ilistcreate(1)

cowdancer                                          2006 Jan 25                                      cow-shell(1)

Synopsis

cow-shell[commandline]

See Also