mid2path ignores leading '<' and trailing '>'
authorEric Wong <e@80x24.org>
Tue, 8 Apr 2014 23:48:31 +0000 (23:48 +0000)
committerEric Wong <e@80x24.org>
Tue, 8 Apr 2014 23:48:31 +0000 (23:48 +0000)
This simplifies our code a bit, and hopefully in public-inbox, too.
There is little practical danger of a Message-ID not having '<>',
and having '<>' in all URLs is annoying.
This breaks compatibility.  Fortunately, this project is not
publically announced, yet.

Documentation/ssoma_repository.txt
lib/Ssoma/Extractor.pm
lib/Ssoma/Git.pm
t/mda-badheaders.t
t/mda-conflict.t

index 7458bbeef4da40a350bcdd71d29457b28e923442..f7b24ada0665bf878fda027f33f3db2ebed6765d 100644 (file)
@@ -15,13 +15,13 @@ identifier is used by ssoma clients to track synchronization state.
 
 A Message-ID may be extremely long and also contain slashes, so using
 them as a path name is challenging.  Instead we use the SHA-1 hexdigest
-of the Message-ID (including the "<" and ">") to generate a path name.
-Leading and trailing white space in the Message-ID header is ignored
-for hashing.
+of the Message-ID (excluding the leading "<" and trailing ">") to
+generate a path name.  Leading and trailing white space in the
+Message-ID header is ignored for hashing.
 
 A message with Message-ID of: <20131106023245.GA20224@dcvr.yhbt.net>
 
-Would be stored as: 21/4527ce3741f50bb9afa65e7c5003c8a8ddc4b1
+Would be stored as: f2/8c6cfd2b0a65f994c3e1be266105413b3d3f63
 
 Thus it is easy to look up the contents of a message matching a given
 a Message-ID.
index 8f053779baba0f29b1a30d9431a71b87ed2043b0..afe45ce9337d73e02b8ef46a371b433a012b5941 100644 (file)
@@ -139,19 +139,7 @@ sub _deliver_die {
 sub midextract {
        my ($self, $message_id, $mbox) = @_;
        $self->{git}->tmp_git_do(sub {
-               # leaving <> out of Message-IDs on the command-line is
-               # common and practical since it frees the user from
-               # quoting/escaping in most cases, so do not require
-               # Message-IDs have <> around them
-               if ($message_id =~ /\A<.+>\z/) { # rare
-                       $self->_midextract($message_id, $mbox);
-               } else { # common
-                       eval { # try with additional <> first
-                               my $tmpid = "<$message_id>";
-                               $self->_midextract($tmpid, $mbox);
-                       };
-                       $self->_midextract($message_id, $mbox) if $@;
-               }
+               $self->_midextract($message_id, $mbox);
        });
 }
 
index 87bf86864443f5b3dd36e9f43f6234e63e3ed1aa..9a9d82f340fbd40c831d9bcf6f6573c7890c2453 100644 (file)
@@ -200,6 +200,8 @@ sub stripws {
 sub mid2path {
        my ($self, $message_id) = @_;
        stripws($message_id);
+       $message_id =~ s/\A<//;
+       $message_id =~ s/>\z//;
        my $hex = sha1_hex($message_id);
        $hex =~ /\A([a-f0-9]{2})([a-f0-9]{38})\z/i or
                        die "BUG: not a SHA-1 hex: $hex";
index 22571e2fd3a92ec0c90f6aa47648014b207686b5..c36303530f1ed8084c4c6e1291878d75394c1ecf 100644 (file)
@@ -36,7 +36,7 @@ $mda->deliver($email);
 
 local $ENV{GIT_DIR} = "$tmpdir/gittest";
 
-my $blob_id = sha1_hex("<666\@example.com>");
+my $blob_id = sha1_hex("666\@example.com");
 my ($dir, $base) = ($blob_id =~ m!\A([a-f0-9]{2})([a-f0-9]{38})\z!);
 ok(defined $dir && defined $base, "bad sha1: $blob_id");
 
index 09bd5c118bc4eaa212cb23f28efbfc20258b35b4..54b3541e0b6747026e40fb71eaef39361d969c6f 100644 (file)
@@ -50,6 +50,7 @@ foreach my $line (@tree) {
        my $mid = $simple->header("message-id");
        my $path_sha1 = $path;
        $path_sha1 =~ tr!/!!d;
+       $mid =~ tr/<>//d;
        is($path_sha1, sha1_hex($mid), "path mapping works $mid");
 }