/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/generate_ids.py

  • Committer: John Arbash Meinel
  • Date: 2007-02-08 16:28:05 UTC
  • mto: This revision was merged to the branch mainline in revision 2278.
  • Revision ID: john@arbash-meinel.com-20070208162805-dcqiqrwjh9a5lo7n
``GPGStrategy.sign()`` will now raise ``BzrBadParameterUnicode`` if
you pass a Unicode string rather than an 8-bit string. It doesn't 
make sense to sign a Unicode string, and it turns out that some 
versions of python will write out the raw Unicode bytes rather than
encoding automatically. So fail and make callers do the right thing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Common code for generating file or revision ids."""
18
18
 
32
32
    lazy_regex,
33
33
    )
34
34
 
35
 
# the regex removes any weird characters; we don't escape them
 
35
# the regex removes any weird characters; we don't escape them 
36
36
# but rather just pull them out
37
37
_file_id_chars_re = lazy_regex.lazy_compile(r'[^\w.]')
38
38
_rev_id_chars_re = lazy_regex.lazy_compile(r'[^-\w.+@]')
42
42
 
43
43
def _next_id_suffix():
44
44
    """Create a new file id suffix that is reasonably unique.
45
 
 
 
45
    
46
46
    On the first call we combine the current time with 64 bits of randomness to
47
47
    give a highly probably globally unique number. Then each call in the same
48
48
    process adds 1 to a serial number we append to that unique value.
49
49
    """
50
 
    # XXX TODO: change bzrlib.add.smart_add_tree to call workingtree.add() rather
 
50
    # XXX TODO: change bzrlib.add.smart_add to call workingtree.add() rather 
51
51
    # than having to move the id randomness out of the inner loop like this.
52
52
    # XXX TODO: for the global randomness this uses we should add the thread-id
53
53
    # before the serial #.
80
80
    #    filesystems
81
81
    # 4) Removing starting '.' characters to prevent the file ids from
82
82
    #    being considered hidden.
83
 
    ascii_word_only = str(_file_id_chars_re.sub('', name.lower()))
 
83
    ascii_word_only = _file_id_chars_re.sub('', name.lower())
84
84
    short_no_dots = ascii_word_only.lstrip('.')[:20]
85
85
    return short_no_dots + _next_id_suffix()
86
86
 
114
114
    if timestamp is None:
115
115
        timestamp = time.time()
116
116
 
117
 
    rev_id = u'-'.join((user_or_email,
118
 
                        osutils.compact_date(timestamp),
119
 
                        unique_chunk))
120
 
    return rev_id.encode('utf8')
 
117
    return '-'.join((user_or_email,
 
118
                    osutils.compact_date(timestamp),
 
119
                    unique_chunk))