You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2013/07/01 20:48:08 UTC

[lucy-commits] [3/4] git commit: refs/heads/master - Check that parcel nickname is unique

Check that parcel nickname is unique


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/146a6860
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/146a6860
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/146a6860

Branch: refs/heads/master
Commit: 146a6860d31b52bfcef6ce9f9747e7596a7e7085
Parents: 25b290f
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Jul 1 03:01:03 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Jul 1 20:41:33 2013 +0200

----------------------------------------------------------------------
 clownfish/compiler/perl/t/403-parcel.t | 15 ++++++++++++++-
 clownfish/compiler/src/CFCParcel.c     | 17 ++++++++++++++---
 2 files changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/146a6860/clownfish/compiler/perl/t/403-parcel.t
----------------------------------------------------------------------
diff --git a/clownfish/compiler/perl/t/403-parcel.t b/clownfish/compiler/perl/t/403-parcel.t
index de887fd..c311987 100644
--- a/clownfish/compiler/perl/t/403-parcel.t
+++ b/clownfish/compiler/perl/t/403-parcel.t
@@ -16,7 +16,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 16;
+use Test::More tests => 18;
 use File::Spec::Functions qw( catfile );
 
 BEGIN { use_ok('Clownfish::CFC::Model::Parcel') }
@@ -26,6 +26,19 @@ isa_ok( $foo, "Clownfish::CFC::Model::Parcel", "new" );
 ok( !$foo->included, "not included" );
 $foo->register;
 
+my $same_name = Clownfish::CFC::Model::Parcel->new( name => "Foo" );
+eval { $same_name->register; };
+like( $@, qr/parcel .* already registered/i,
+      "can't register two parcels with the same name" );
+
+my $same_nick = Clownfish::CFC::Model::Parcel->new(
+    name  => "OtherFoo",
+    cnick => "Foo",
+);
+eval { $same_nick->register; };
+like( $@, qr/parcel with nickname .* already registered/i,
+      "can't register two parcels with the same nickname" );
+
 my $included_foo = Clownfish::CFC::Model::Parcel->new(
     name        => "IncludedFoo",
     is_included => 1,

http://git-wip-us.apache.org/repos/asf/lucy/blob/146a6860/clownfish/compiler/src/CFCParcel.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/src/CFCParcel.c b/clownfish/compiler/src/CFCParcel.c
index 6e72f2e..bb6eb56 100644
--- a/clownfish/compiler/src/CFCParcel.c
+++ b/clownfish/compiler/src/CFCParcel.c
@@ -94,10 +94,20 @@ CFCParcel_fetch(const char *name) {
 
 void
 CFCParcel_register(CFCParcel *self) {
-    CFCParcel *existing = CFCParcel_fetch(self->name);
-    if (existing) {
-        CFCUtil_die("Parcel '%s' already registered", self->name);
+    const char *name  = self->name;
+    const char *cnick = self->cnick;
+
+    for (size_t i = 0; i < num_registered ; i++) {
+        CFCParcel *other = registry[i];
+
+        if (strcmp(other->name, name) == 0) {
+            CFCUtil_die("Parcel '%s' already registered", name);
+        }
+        if (strcmp(other->cnick, cnick) == 0) {
+            CFCUtil_die("Parcel with nickname '%s' already registered", cnick);
+        }
     }
+
     if (!num_registered) {
         // Init default parcel as first.
         registry = (CFCParcel**)CALLOCATE(3, sizeof(CFCParcel*));
@@ -105,6 +115,7 @@ CFCParcel_register(CFCParcel *self) {
         registry[0] = (CFCParcel*)CFCBase_incref((CFCBase*)def);
         num_registered++;
     }
+
     size_t size = (num_registered + 2) * sizeof(CFCParcel*);
     registry = (CFCParcel**)REALLOCATE(registry, size);
     registry[num_registered++] = (CFCParcel*)CFCBase_incref((CFCBase*)self);