clowder
Commands¶
Examples based on the Swift projects clowder.yaml
clowder branch
¶
# Print all local branches
$ clowder branch
# Print all remote branches
$ clowder branch -r
# Print all local and remote branches
$ clowder branch -a
# Print local branches in llvm group
$ clowder branch -g llvm
# Print local branches in swift project
$ clowder branch -p apple/swift
clowder checkout
¶
# Checkout branches
$ clowder checkout branch_name
# Checkout branches in llvm group
$ clowder checkout branch_name -g llvm
# Checkout branches in swift project
$ clowder checkout branch_name -p apple/swift
clowder clean
¶
Discards changes in dirty repositories
# Discard changes in all projects
# Equivalent to:
# git clean -f; git reset --hard; git rebase --abort
$ clowder clean
# Clean all the things
# Equivalent to:
# git clean -ffdx; git reset --hard; git rebase --abort
# git submodule foreach --recursive git clean -ffdx
# git submodule foreach --recursive git reset --hard
# git submodule update --checkout --recursive --force
$ clowder clean -a
# Discard changes in projects in llvm group
$ clowder clean -g llvm
# Discard changes in swift project
$ clowder clean -p apple/swift
# Remove untracked directories in addition to untracked files
# Equivalent to:
# git clean -fd; git reset --hard; git rebase --abort
$ clowder clean -d
# Delete directories with .git sub directory or file
# Equivalent to:
# git clean -ff; git reset --hard; git rebase --abort
$ clowder clean -f
# Remove only files ignored by git
# Equivalent to:
# git clean -fX; git reset --hard; git rebase --abort
$ clowder clean -X
# Remove all untracked files
# Equivalent to:
# git clean -fx; git reset --hard; git rebase --abort
$ clowder clean -x
# Recursively clean submodules
# Equivalent to:
# git clean -f; git reset --hard; git rebase --abort
# git submodule foreach --recursive git clean -ffdx
# git submodule foreach --recursive git reset --hard
# git submodule update --checkout --recursive --force
$ clowder clean -r
clowder diff
¶
Equivalent to running git status -vv
in project directories
# Print git diff status for all projects
$ clowder diff
# Print git diff status for projects in llvm group
$ clowder diff -g llvm
# Print git diff status for swift project
$ clowder diff -p apple/swift
clowder forall
¶
Runs command or script in project directories
# Run command in all project directories
$ clowder forall -c "git status"
# Run script in all project directories
$ clowder forall -c "/path/to/script.sh"
# Run command in all project directories, ignoring errors
$ clowder forall -ic "git status"
# Run script in all project directories, ignoring errors
$ clowder forall -ic "/path/to/script.sh"
# Run command for projects in llvm group
$ clowder forall -c "git status" -g llvm
# Run script for projects in llvm group
$ clowder forall -c "/path/to/script.sh" -g llvm
# Run command for swift project
$ clowder forall -c "git status" -p apple/swift
# Run script for swift project
$ clowder forall -c "/path/to/script.sh" -p apple/swift
The following environment variables are available for use in commands and scripts:
CLOWDER_PATH
is the absolute path to the root directory the clowder repo was initialized inPROJECT_PATH
is the absolute path to the project directoryPROJECT_NAME
is the unique name of the projectPROJECT_REMOTE
is the name of the project’s remotePROJECT_REF
is the project ref as written in theclowder.yaml
file
clowder herd
¶
Update with latest changes
# Herd a shallow clone to specified depth
$ clowder herd -d 1
# Herd using rebase instead of pull
$ clowder herd -r
# Herd a specified branch if it exists, otherwise use default ref
$ clowder herd -b my_branch
# Herd a specified tag if it exists, otherwise use default ref
$ clowder herd -t my_tag
# Only herd projects in swift and llvm groups
$ clowder herd -g swift llvm
# Only herd swift project
$ clowder herd -p apple/swift
clowder init
¶
Clone repo containing clowder.yaml
file (referred to as the “clowder repo”)
# Clone clowder repo
$ clowder init https://github.com/jrgoodle/swift-clowder.git
# Clone clowder repo from branch 'tags'
$ clowder init https://github.com/jrgoodle/cats.git -b tags
clowder link
¶
Set clowder.yaml
symlink
# Point clowder.yaml symlink to default clowder.yaml file
$ clowder link
# Point clowder.yaml symlink to saved version
$ clowder link -v 0.1
clowder prune
¶
Prune local or remote branches
# Prune branch 'stale_branch' for all projects
$ clowder prune stale_branch
# Force prune branch 'stale_branch' for all projects
$ clowder prune -f stale_branch
# Prune remote branch 'stale_branch' for all projects
$ clowder prune -r stale_branch
# Prune local and remote branch 'stale_branch' for all projects
$ clowder prune -a stale_branch
# Force prune local and remote branch 'stale_branch' for all projects
$ clowder prune -af stale_branch
# Prune branch 'stale_branch' for projects in llvm group
$ clowder prune stale_branch -g llvm
# Prune branch 'stale_branch' in swift project
$ clowder prune stale_branch -p apple/swift
clowder repo
¶
Convenience commands for managing clowder repo (the .clowder
directory)
More advanced needs may require changing to the .clowder
directory and running commands directly
# Add modified files in working tree to the index
$ clowder repo add .
# Checkout git ref in clowder repo
$ clowder repo checkout my_branch
# Discard current changes in clowder repo
$ clowder repo clean
# Commit changes to yaml files in clowder repo
$ clowder repo commit 'commit message'
# Pull latest changes in clowder repo
$ clowder repo pull
# Push latest changes in clowder repo
$ clowder repo push
# Run command in .clowder directory
$ clowder repo run 'git status'
# Print clowder repo git status
$ clowder repo status
clowder reset
¶
Reset branches to upstream state
# Reset branches in all projects
$ clowder reset
# Reset branches in all projects to closest timestamp to swift project
$ clowder reset --timestamp apple/swift
# Reset branches in projects in llvm group
$ clowder reset -g llvm
# Reset branches in swift project
$ clowder reset -p apple/swift
clowder save
¶
Save a clowder.yaml
version with the information from currently checked out repositories
Versions are saved to .clowder/versions/<version_name>/clowder.yaml
# Save a version of clowder.yaml with current commit sha's
$ clowder save 0.1
clowder start
¶
Start a new feature branch or check out if it already exists
# Create new local branch 'my_feature' for all projects
$ clowder start my_feature
# Create new local and remote tracking branch 'my_feature' for all projects
$ clowder start -t my_feature
# Create new local branch 'my_feature' for projects in llvm group
$ clowder start my_feature -g llvm
# Create new local branch 'my_feature' in swift project
$ clowder start my_feature -p apple/swift
clowder stash
¶
Stash changes in dirty repositories
# Stash changes in all projects
$ clowder stash
# Stash changes in projects in llvm group
$ clowder stash -g llvm
# Stash changes in swift project
$ clowder stash -p apple/swift
clowder status
¶
Print status of projects
# Print status of projects
$ clowder status
# Fetch upstream changes for projects before printing status
$ clowder status -f
clowder sync
¶
Sync default fork branches with upstream remotes
# Sync all forks with upstream remotes
$ clowder sync
# Sync using rebase instead of pull
$ clowder sync -r
# Sync swift fork with upstream remote
$ clowder sync -p apple/swift
clowder yaml
¶
Print information about clowder.yaml files
# Print clowder.yaml file(s) referenced from current symlink and imports
$ clowder yaml
# Print resolved clowder.yaml
$ clowder yaml -r