Mercurial > hgsubversion
view hgsubversion/svnwrap/common.py @ 746:174f03c288d4
svnmeta: abort when no UUID given and none is stored on disk.
Previously, not passing a UUID when instantiating an SVNMeta instance
would cause it to succeed even if no UUID was previously known. First
when the UUID was actually read would an exception be raised.
This slight refactoring of _set_uuid() makes it so an exception is
raised immediately. While at it, the exception message is changed to
be slightly more accurate and helpful.
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Thu, 11 Nov 2010 21:32:22 +0100 |
parents | a51e50d943b2 |
children | e9af7eba88db |
line wrap: on
line source
import cStringIO import getpass import errno import os import shutil import sys import tempfile import urlparse import urllib import collections class SubversionRepoCanNotReplay(Exception): """Exception raised when the svn server is too old to have replay. """ class SubversionRepoCanNotDiff(Exception): """Exception raised when the svn API diff3() command cannot be used """ class SubversionConnectionException(Exception): """Exception raised when a generic error occurs when connecting to a repository. """ # Default chunk size used in fetch_history_at_paths() and revisions(). chunk_size = 1000 def parse_url(url, user=None, passwd=None): """Parse a URL and return a tuple (username, password, url) """ scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) if '@' in netloc: userpass, netloc = netloc.split('@') if not user and not passwd: if ':' in userpass: user, passwd = userpass.split(':') else: user, passwd = userpass, '' user, passwd = urllib.unquote(user), urllib.unquote(passwd) if user and scheme == 'svn+ssh': netloc = '@'.join((user, netloc, )) url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment)) return (user or None, passwd or None, url) class Revision(tuple): """Wrapper for a Subversion revision. Derives from tuple in an attempt to minimise the memory footprint. """ def __new__(self, revnum, author, message, date, paths, strip_path=''): _paths = {} if paths: for p in paths: _paths[p[len(strip_path):]] = paths[p] return tuple.__new__(self, (revnum, author, message, date, _paths)) @property def revnum(self): return self[0] @property def author(self): return self[1] @property def message(self): return self[2] @property def date(self): return self[3] @property def paths(self): return self[4] def __str__(self): return 'r%d by %s' % (self.revnum, self.author)