hg archive to Remote Directory

Posted by Brett Daniel on Stack Overflow See other posts from Stack Overflow or by Brett Daniel
Published on 2010-02-25T23:40:23Z Indexed on 2010/03/30 17:13 UTC
Read the original article Hit count: 459

Filed under:
|
|

Is there any way to archive a Mercurial repository to a remote directory over SSH? For example, it would be nice if one could do the following:

hg archive ssh://[email protected]/path/to/archive

However, that does not appear to work. It instead creates a directory called ssh: in the current directory.

I made the following quick-and-dirty script that emulates the desired behavior by creating a temporary ZIP archive, copying it over SSH, and unzipping the destination directory. However, I would like to know if there is a better way.

if [[ $# != 1 ]]; then
  echo "Usage: $0 [user@]hostname:remote_dir"
  exit
fi

arg=$1

arg=${arg%/} # remove trailing slash
host=${arg%%:*}
remote_dir=${arg##*:}
# zip named to match lowest directory in $remote_dir
zip=${remote_dir##*/}.zip 

# root of archive will match zip name
hg archive -t zip $zip  
# make $remote_dir if it doesn't exist
ssh $host mkdir --parents $remote_dir
# copy zip over ssh into destination
scp $zip $host:$remote_dir  
# unzip into containing directory (will prompt for overwrite)
ssh $host unzip $remote_dir/$zip -d $remote_dir/..
# clean up zips
ssh $host rm $remote_dir/$zip 
rm $zip

Edit: clone-and-push would be ideal, but unfortunately the remote server does not have Mercurial installed.

© Stack Overflow or respective owner

Related posts about mercurial

Related posts about ssh