@@ -98,9 +98,20 @@ struct Dependency {
98
98
/* * Constructs a new dependency specification that matches a specific
99
99
Git reference.
100
100
*/
101
- this (Repository repository, string spec) {
102
- this .versionSpec = spec;
101
+ this (Repository repository)
102
+ {
103
103
this .repository = repository;
104
+ // Set for backward compatibility
105
+ auto ver = Version(repository.m_ref);
106
+ this .m_range = VersionRange(ver, ver, true , true );
107
+ }
108
+
109
+ deprecated (" Instantiate the `Repository` struct with the string directy" )
110
+ this (Repository repository, string spec)
111
+ {
112
+ assert (repository.m_ref is null );
113
+ repository.m_ref = spec;
114
+ this (repository);
104
115
}
105
116
106
117
// / If set, overrides any version based dependency selection.
@@ -112,6 +123,9 @@ struct Dependency {
112
123
@property void repository(Repository value)
113
124
{
114
125
m_repository = value;
126
+ // Set for backward compatibility
127
+ auto ver = Version(value.m_ref);
128
+ this .m_range = VersionRange(ver, ver, true , true );
115
129
}
116
130
117
131
// / ditto
@@ -246,7 +260,7 @@ struct Dependency {
246
260
}
247
261
248
262
@trusted unittest {
249
- Dependency dependency = Dependency(Repository(" git+http://localhost" ) , " 1.0.0" );
263
+ Dependency dependency = Dependency(Repository(" git+http://localhost" , " 1.0.0" ) );
250
264
Json expected = Json([
251
265
" repository" : Json(" git+http://localhost" ),
252
266
" version" : Json(" 1.0.0" )
@@ -272,8 +286,8 @@ struct Dependency {
272
286
enforce(" version" in verspec, " No version field specified!" );
273
287
enforce(repository.length > 0 , " No repository field specified!" );
274
288
275
- dep = Dependency(Repository(repository. get ! string ),
276
- verspec[" version" ].get ! string );
289
+ dep = Dependency(Repository(
290
+ repository. get ! string , verspec[" version" ].get ! string ) );
277
291
} else {
278
292
enforce(" version" in verspec, " No version field specified!" );
279
293
auto ver = verspec[" version" ].get ! string ;
@@ -606,6 +620,7 @@ unittest {
606
620
struct Repository
607
621
{
608
622
private string m_remote;
623
+ private string m_ref;
609
624
610
625
private Kind m_kind;
611
626
@@ -617,18 +632,28 @@ struct Repository
617
632
/**
618
633
Params:
619
634
remote = Repository remote.
635
+ ref_ = Reference to use (SHA1, tag, branch name...)
620
636
*/
637
+ this (string remote, string ref_)
638
+ {
639
+ enforce(remote.startsWith(" git+" ), " Unsupported repository type" );
640
+
641
+ m_remote = remote[" git+" .length .. $];
642
+ m_kind = Kind.git;
643
+ m_ref = ref_;
644
+ assert (m_remote.length);
645
+ assert (m_ref.length);
646
+ }
647
+
648
+ // / Ditto
649
+ deprecated (" Use the constructor accepting a second parameter named `ref_`" )
621
650
this (string remote)
622
651
{
623
- if (remote.startsWith(" git+" ))
624
- {
625
- m_remote = remote[" git+" .length .. $];
626
- m_kind = Kind.git;
627
- }
628
- else
629
- {
630
- throw new Exception (" Unsupported repository type" );
631
- }
652
+ enforce(remote.startsWith(" git+" ), " Unsupported repository type" );
653
+
654
+ m_remote = remote[" git+" .length .. $];
655
+ m_kind = Kind.git;
656
+ assert (m_remote.length);
632
657
}
633
658
634
659
string toString () nothrow pure @safe
@@ -655,6 +680,18 @@ struct Repository
655
680
return m_remote;
656
681
}
657
682
683
+ /**
684
+ Returns:
685
+ The reference (commit hash, branch name, tag) we are targeting
686
+ */
687
+ @property string ref_() @nogc nothrow pure @safe
688
+ in { assert (m_remote ! is null ); }
689
+ in { assert (m_ref ! is null ); }
690
+ do
691
+ {
692
+ return m_ref;
693
+ }
694
+
658
695
/**
659
696
Returns:
660
697
Repository type.
0 commit comments