[Pkg-bazaar-commits] ./bzr/unstable r847: - remove rsync plugin; better to get it from john's site at
Martin Pool
mbp at sourcefrog.net
Fri Apr 10 08:20:07 UTC 2009
------------------------------------------------------------
revno: 847
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Wed 2005-07-06 23:59:19 +1000
message:
- remove rsync plugin; better to get it from john's site at
http://bzr.arbash-meinel.com/plugins/bzr-rsync
removed:
plugins/rsync/
plugins/rsync/__init__.py
plugins/rsync/rsync_update.py
-------------- next part --------------
=== removed directory 'plugins/rsync'
=== removed file 'plugins/rsync/__init__.py'
--- a/plugins/rsync/__init__.py 2005-06-27 05:03:27 +0000
+++ b/plugins/rsync/__init__.py 1970-01-01 00:00:00 +0000
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-"""\
-This is a plugin for the Bazaar-NG revision control system.
-"""
-
-import os
-import bzrlib, bzrlib.commands
-
-class cmd_rsync_pull(bzrlib.commands.Command):
- """Update the current working tree using rsync.
- With no arguments, look for a .bzr/x-rsync-location file
- to determine which remote system to rsync from.
- Otherwise, you can specify a new location to rsync from.
-
- Normally the first time you use it, you would write:
- bzr rsync-pull . path/to/otherdirectory
- """
- takes_args = ['local?', 'remote?']
- takes_options = ['verbose']
- aliases = ['rpull']
-
- def run(self, local=None, remote=None, verbose=True):
- from rsync_update import get_branch_remote_update, \
- check_should_pull, set_default_remote_info, pull
-
- b, remote, last_revno, last_revision = \
- get_branch_remote_update(local=local, remote=remote)
-
- if not check_should_pull(b, last_revno, last_revision):
- return 1
- b = pull(b, remote, verbose=verbose)
-
- set_default_remote_info(b, remote)
-
-class cmd_rsync_pull_bzr(cmd_rsync_pull):
- takes_args = ['remote?']
- def run(self, remote=None, verbose=True):
- from rsync_update import get_branch_remote_update, \
- check_should_pull, set_default_remote_info, pull
-
- bzr_path = os.path.dirname(bzrlib.__path__[0])
- b, remote, last_revno, last_revision = \
- get_branch_remote_update(local=bzr_path, remote=remote
- , alt_remote='bazaar-ng.org::bazaar-ng/bzr/bzr.dev/')
-
- if not check_should_pull(b, last_revno, last_revision):
- return 1
- b = pull(b, remote, verbose=verbose)
-
- set_default_remote_info(b, remote)
-
-class cmd_rsync_push(bzrlib.commands.Command):
- """Update the remote tree using rsync.
- With no arguments, look for a .bzr/x-rsync-location file
- to determine which remote system to rsync to.
- Otherwise, you can specify a new location to rsync to.
- """
- takes_args = ['local?', 'remote?']
- takes_options = ['verbose']
- aliases = ['rpush']
-
- def run(self, local=None, remote=None, verbose=True):
- from rsync_update import get_branch_remote_update, \
- check_should_push, set_default_remote_info, push
-
- b, remote, last_revno, last_revision = \
- get_branch_remote_update(local=local, remote=remote)
-
- if not check_should_push(b, last_revno, last_revision):
- return 1
-
- push(b, remote, verbose=verbose)
-
- set_default_remote_info(b, remote)
-
-
-if hasattr(bzrlib.commands, 'register_plugin_command'):
- bzrlib.commands.register_plugin_command(cmd_rsync_pull)
- bzrlib.commands.register_plugin_command(cmd_rsync_pull_bzr)
- bzrlib.commands.register_plugin_command(cmd_rsync_push)
-elif hasattr(bzrlib.commands, 'register_command'):
- bzrlib.commands.register_command(cmd_rsync_pull)
- bzrlib.commands.register_command(cmd_rsync_pull_bzr)
- bzrlib.commands.register_command(cmd_rsync_push)
-
=== removed file 'plugins/rsync/rsync_update.py'
--- a/plugins/rsync/rsync_update.py 2005-06-27 05:03:27 +0000
+++ b/plugins/rsync/rsync_update.py 1970-01-01 00:00:00 +0000
@@ -1,351 +0,0 @@
-#!/usr/bin/env python
-"""\
-This encapsulates the functionality for trying to rsync a local
-working tree to/from a remote rsync accessible location.
-"""
-
-import os
-import bzrlib
-
-_rsync_location = 'x-rsync-data'
-_parent_locations = ['parent', 'pull', 'x-pull']
-
-def temp_branch():
- import tempfile
- dirname = tempfile.mkdtemp("temp-branch")
- return bzrlib.Branch(dirname, init=True)
-
-def rm_branch(branch):
- import shutil
- shutil.rmtree(branch.base)
-
-def is_clean(branch):
- """
- Return true if no files are modifed or unknown
- >>> br = temp_branch()
- >>> is_clean(br)
- True
- >>> fooname = os.path.join(br.base, "foo")
- >>> file(fooname, "wb").write("bar")
- >>> is_clean(br)
- False
- >>> bzrlib.add.smart_add([fooname])
- >>> is_clean(br)
- False
- >>> br.commit("added file")
- >>> is_clean(br)
- True
- >>> rm_branch(br)
- """
- old_tree = branch.basis_tree()
- new_tree = branch.working_tree()
- for path, file_class, kind, file_id in new_tree.list_files():
- if file_class == '?':
- return False
- delta = bzrlib.compare_trees(old_tree, new_tree, want_unchanged=False)
- if len(delta.added) > 0 or len(delta.removed) > 0 or \
- len(delta.modified) > 0:
- return False
- return True
-
-def get_default_remote_info(branch):
- """Return the value stored in .bzr/x-rsync-location if it exists.
-
- >>> br = temp_branch()
- >>> get_default_remote_info(br)
- (None, 0, None)
- >>> import bzrlib.commit
- >>> bzrlib.commit.commit(br, 'test commit', rev_id='test-id-12345')
- >>> set_default_remote_info(br, 'http://somewhere')
- >>> get_default_remote_info(br)
- ('http://somewhere', 1, 'test-id-12345')
- """
- def_remote = None
- revno = 0
- revision = None
- def_remote_filename = branch.controlfilename(_rsync_location)
- if os.path.isfile(def_remote_filename):
- [def_remote,revno, revision] = [x.strip() for x in open(def_remote_filename).readlines()]
- return def_remote, int(revno), revision
-
-def set_default_remote_info(branch, location):
- """Store the location into the .bzr/x-rsync-location.
-
- """
- from bzrlib.atomicfile import AtomicFile
- remote, revno, revision = get_default_remote_info(branch)
- if (remote == location
- and revno == branch.revno()
- and revision == branch.last_patch()):
- return #Nothing would change, so skip it
- # TODO: Consider adding to x-pull so that we can try a RemoteBranch
- # for checking the need to update
- f = AtomicFile(branch.controlfilename(_rsync_location))
- f.write(location)
- f.write('\n')
- f.write(str(branch.revno()))
- f.write('\n')
- f.write(branch.last_patch())
- f.write('\n')
- f.commit()
-
-def get_parent_branch(branch):
- """Try to get the pull location, in case this directory supports the normal bzr pull.
-
- The idea is that we can use RemoteBranch to see if we actually need to do anything,
- and then we can decide whether to run rsync or not.
- """
- import errno
- stored_loc = None
- for fname in _parent_locations:
- try:
- stored_loc = branch.controlfile(fname, 'rb').read().rstrip('\n')
- except IOError, e:
- if e.errno != errno.ENOENT:
- raise
-
- if stored_loc:
- break
-
- if stored_loc:
- from bzrlib.branch import find_branch
- return find_branch(stored_loc)
- return None
-
-def get_branch_remote_update(local=None, remote=None, alt_remote=None):
- from bzrlib.errors import BzrCommandError
- from bzrlib.branch import find_branch
- if local is None:
- local = '.'
-
- if remote is not None and remote[-1:] != '/':
- remote += '/'
-
- if alt_remote is not None and alt_remote[-1:] != '/':
- alt_remote += '/'
-
- if not os.path.exists(local):
- if remote is None:
- remote = alt_remote
- if remote is None:
- raise BzrCommandError('No remote location specified while creating a new local location')
- return local, remote, 0, None
-
- b = find_branch(local)
-
- def_remote, last_revno, last_revision = get_default_remote_info(b)
- if remote is None:
- if def_remote is None:
- if alt_remote is None:
- raise BzrCommandError('No remote location specified, and no default exists.')
- else:
- remote = alt_remote
- else:
- remote = def_remote
-
- if remote[-1:] != '/':
- remote += '/'
-
- return b, remote, last_revno, last_revision
-
-def check_should_pull(branch, last_revno, last_revision):
- if isinstance(branch, basestring): # We don't even have a local branch yet
- return True
-
- if not is_clean(branch):
- print '** Local tree is not clean. Either has unknown or modified files.'
- return False
-
- b_parent = get_parent_branch(branch)
- if b_parent is not None:
- from bzrlib.branch import DivergedBranches
- # This may throw a Diverged branches.
- try:
- missing_revisions = branch.missing_revisions(b_parent)
- except DivergedBranches:
- print '** Local tree history has diverged from remote.'
- print '** Not allowing you to overwrite local changes.'
- return False
- if len(missing_revisions) == 0:
- # There is nothing to do, the remote branch has no changes
- missing_revisions = b_parent.missing_revisions(branch)
- if len(missing_revisions) > 0:
- print '** Local tree is up-to-date with remote.'
- print '** But remote tree is missing local revisions.'
- print '** Consider using bzr rsync-push'
- else:
- print '** Both trees fully up-to-date.'
- return False
- # We are sure that we are missing remote revisions
- return True
-
- if last_revno == branch.revno() and last_revision == branch.last_patch():
- # We can go ahead and try
- return True
-
- print 'Local working directory has a different revision than last rsync.'
- val = raw_input('Are you sure you want to download [y/N]? ')
- if val.lower() in ('y', 'yes'):
- return True
- return False
-
-def check_should_push(branch, last_revno, last_revision):
- if not is_clean(branch):
- print '** Local tree is not clean (either modified or unknown files)'
- return False
-
- b_parent = get_parent_branch(branch)
- if b_parent is not None:
- from bzrlib.branch import DivergedBranches
- # This may throw a Diverged branches.
- try:
- missing_revisions = b_parent.missing_revisions(branch)
- except DivergedBranches:
- print '** Local tree history has diverged from remote.'
- print '** Not allowing you to overwrite remote changes.'
- return False
- if len(missing_revisions) == 0:
- # There is nothing to do, the remote branch is up to date
- missing_revisions = branch.missing_revisions(b_parent)
- if len(missing_revisions) > 0:
- print '** Remote tree is up-to-date with local.'
- print '** But local tree is missing remote revisions.'
- print '** Consider using bzr rsync-pull'
- else:
- print '** Both trees fully up-to-date.'
- return False
- # We are sure that we are missing remote revisions
- return True
-
- if last_revno is None and last_revision is None:
- print 'Local tree does not have a valid last rsync revision.'
- val = raw_input('push anyway [y/N]? ')
- if val.lower() in ('y', 'yes'):
- return True
- return False
-
- if last_revno == branch.revno() and last_revision == branch.last_patch():
- print 'No new revisions.'
- return False
-
- return True
-
-
-def pull(branch, remote, verbose=False, dry_run=False):
- """Update the local repository from the location specified by 'remote'
-
- :param branch: Either a string specifying a local path, or a Branch object.
- If a local path, the download will be performed, and then
- a Branch object will be created.
-
- :return: Return the branch object that was created
- """
- if isinstance(branch, basestring):
- local = branch
- cur_revno = 0
- else:
- local = branch.base
- cur_revno = branch.revno()
- if remote[-1:] != '/':
- remote += '/'
-
- rsyncopts = ['-rltp', '--delete'
- # Don't pull in a new parent location
- , "--exclude '**/.bzr/x-rsync*'", "--exclude '**/.bzr/x-pull*'"
- , "--exclude '**/.bzr/parent'", "--exclude '**/.bzr/pull'"
- ]
-
- # Note that when pulling, we do not delete excluded files
- rsync_exclude = os.path.join(local, '.rsyncexclude')
- if os.path.exists(rsync_exclude):
- rsyncopts.append('--exclude-from "%s"' % rsync_exclude)
- bzr_ignore = os.path.join(local, '.bzrignore')
- if os.path.exists(bzr_ignore):
- rsyncopts.append('--exclude-from "%s"' % bzr_ignore)
-
- if verbose:
- rsyncopts.append('-v')
- if dry_run:
- rsyncopts.append('--dry-run')
-
- cmd = 'rsync %s "%s" "%s"' % (' '.join(rsyncopts), remote, local)
- if verbose:
- print cmd
-
- status = os.system(cmd)
- if status != 0:
- from bzrlib.errors import BzrError
- raise BzrError('Rsync failed with error code: %s' % status)
-
-
- if isinstance(branch, basestring):
- from bzrlib.branch import Branch
- branch = Branch(branch)
-
- new_revno = branch.revno()
- if cur_revno == new_revno:
- print '** tree is up-to-date'
-
- if verbose:
- if cur_revno != new_revno:
- from bzrlib.log import show_log
- show_log(branch, direction='forward',
- start_revision=cur_revno+1, end_revision=new_revno)
-
- return branch
-
-
-def push(branch, remote, verbose=False, dry_run=False):
- """Update the local repository from the location specified by 'remote'
-
- :param branch: Should always be a Branch object
- """
- if isinstance(branch, basestring):
- from bzrlib.errors import BzrError
- raise BzrError('rsync push requires a Branch object, not a string')
- local = branch.base
- if remote[-1:] != '/':
- remote += '/'
-
- rsyncopts = ['-rltp', '--include-from -'
- , '--include .bzr'
- # We don't want to push our local meta information to the remote
- , "--exclude '.bzr/x-rsync*'", "--exclude '.bzr/x-pull*'"
- , "--exclude '.bzr/parent'", "--exclude '.bzr/pull'"
- , "--include '.bzr/**'"
- , "--exclude '*'", "--exclude '.*'"
- , '--delete', '--delete-excluded'
- ]
-
- rsync_exclude = os.path.join(local, '.rsyncexclude')
- if os.path.exists(rsync_exclude):
- rsyncopts.append('--exclude-from "%s"' % rsync_exclude)
- bzr_ignore = os.path.join(local, '.bzrignore')
- if os.path.exists(bzr_ignore):
- rsyncopts.append('--exclude-from "%s"' % bzr_ignore)
-
- if verbose:
- rsyncopts.append('-v')
- if dry_run:
- rsyncopts.append('--dry-run')
-
- cmd = 'rsync %s "." "%s"' % (' '.join(rsyncopts), remote)
- if verbose:
- print cmd
-
- pwd = os.getcwd()
- try:
- os.chdir(local)
- child = os.popen(cmd, 'w')
- inv = branch.read_working_inventory()
- for path, entry in inv.entries():
- child.write(path)
- child.write('\n')
- child.flush()
- retval = child.close()
- if retval is not None:
- from bzrlib.errors import BzrError
- raise BzrError('Rsync failed with error code: %s' % retval)
- finally:
- os.chdir(pwd)
-
More information about the Pkg-bazaar-commits
mailing list