def push(self, remote=None, revision=None):
<EOL>self.ensure_exists()<EOL>if not (remote or self.remote or self.default_push_remote):<EOL><INDENT>logger.info("<STR_LIT>")<EOL><DEDENT>timer = Timer()<EOL>logger.info("<STR_LIT>",<EOL>format_path(self.local),<EOL>remote or self.remote or "<STR_LIT>")<EOL>self.context.execute(*self.get_push_command(remote, revision))<EOL>logger.debug("<STR_LIT>", timer)<EOL>
Push changes from the local repository to a remote repository.

:param remote: The location of a remote repository (a string or :data:`None`).
:param revision: A specific revision to push (a string or :data:`None`).

.. warning:: Depending on the version control backend the push command
             may fail when there are no changes to push. No attempt has
             been made to make this behavior consistent between
             implementations (although the thought has crossed my
             mind and I'll likely revisit this in the future).