bk csetprune(7.3ce)         BitKeeper User's Manual        bk csetprune(7.3ce)

NAME
       bk csetprune - shrink a repository by removing files

SYNOPSIS
       bk csetprune [options] - < keylist

DESCRIPTION
       The  csetprune  command is used to prune certain files from the reposi-
       tory.  These files are removed in a way which is permanent,  i.e.,  the
       prune cannot be undone.

       The command operates on a list of file keys (sometimes called BitKeeper
       inodes).  Each file associated with a key is removed from  the  reposi-
       tory  and  from  all  changesets in the ChangeSet file.  If a changeset
       becomes empty as a result of the key removal, then  that  changeset  is
       removed  from the ChangeSet file history.  If a removed changeset had a
       tag, the tag is moved  to  the  closest  non-removed  ancestor  in  the
       ChangeSet file.  If that ancestor was already tagged with the same tag,
       the duplicate tag is discarded.

       After all files have been removed, the identity of the  ChangeSet  file
       is  changed (using bk newroot) and the remaining files are "reparented"
       to the new ChangeSet file.

OPTIONS
       -k<16hexDigits>
                    Specify the <16hexDigits> used in a repository root
                    key.   This  is needed when doing a csetprunes over
                    time on same key  set  and  wanting  the  resulting
                    repository to communicate with a repository created
                    by an earlier csetprune.
       -G<gonefile> This will prune out the gone file and put the  con-
                    tents of file passed in with -G as the initial con-
                    tent of a new gone file.  If there  are  additional
                    files  and  deltas missing, a delta to the new gone
                    file will be automatically generated and committed.
       -S
       --standalone Just run csetprune on the current component.   This
                    has  no  effect in a traditional standalone reposi-
                    tory, but in a nested  collection,  processes  just
                    the  current  component  and  not the entire nested
                    collection.
       --tag-csets  Alter the symbol structure to remove duplicates and
                    move  the  symbols  directly  onto the tagged cset.
                    Use this if you do not need to csetprune more  than
                    one repository such that the resulting repositories
                    to communicate via push,  pull  or  changes.   With
                    this option, the internal symbol graph structure is
                    streamlined.

GENERATING KEYS
       The bk log command may be used to generate  the  list  of  keys.
       When generating keys, it is important to realize that looking in
       a particular subdirectory is likely to miss some  of  the  files
       that  you  may want to remove.  The files may have been moved to
       another directory or they may have been removed (which is really
       just a move to the BitKeeper/deleted subdirectory).

       The following command will generate a list of keys for all files
       originally created  in  the  junk  subdirectory,  including  all
       deleted and/or moved files:

           bk -A log -hr+ -nd:ROOTKEY: | grep '|junk/'

EXAMPLE
       Suppose  there  is a repository which has two major subsections,
       called docs and src respectively.  The repository has  grown  to
       be  too  large  and the goal is to split it in two.  The process
       for doing so would be to

       (1) Make sure all users have pushed their changes into the  main
           repository.   Changes  made  after  the  split  will have to
           exported as a traditional patch and  imported,  which  loses
           the checkin comments.

       (2) Clone the repository twice, once for each of docs and src.

       (3) In each new repository, strip out the files which will be in
           the other repository.

       Commands which will do this:

           bk clone master src
           bk clone master docs
           # Remove the docs files from the src repository
           cd src
           bk -A log -hr+ -nd:ROOTKEY: | grep '|docs/' | bk csetprune
           # Remove the src files from the docs repository
           cd ../docs
           bk -A log -hr+ -nd:ROOTKEY: | grep '|src/' | bk csetprune

SEE ALSO
       bk newroot
       bk log
       bk gfiles

CATEGORY
       Admin

BitKeeper Inc                         1E1                  bk csetprune(7.3ce)