def pull(self, remote=None, revision=None):
remote = remote or self.remote<EOL>if self.create() and (remote == self.remote or not remote):<EOL><INDENT>logger.info("<STR_LIT>",<EOL>self.friendly_name)<EOL>return<EOL><DEDENT>if not (remote or self.default_pull_remote):<EOL><INDENT>logger.info("<STR_LIT>")<EOL>return<EOL><DEDENT>update_limit = int(os.environ.get(UPDATE_VARIABLE, '<STR_LIT:0>'))<EOL>if update_limit and self.last_updated >= update_limit:<EOL><INDENT>logger.info("<STR_LIT>")<EOL>return<EOL><DEDENT>timer = Timer()<EOL>logger.info("<STR_LIT>",<EOL>remote or "<STR_LIT>", self.friendly_name, format_path(self.local))<EOL>self.context.execute(*self.get_pull_command(remote=remote, revision=revision))<EOL>logger.debug("<STR_LIT>", timer, self.friendly_name)<EOL>self.mark_updated()<EOL>
Pull changes from a remote repository into the local repository.

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

If used in combination with :class:`limit_vcs_updates` this won't
perform redundant updates.