From 03f859f367115f2dbd7f00cc55cfa247a910fc72 Mon Sep 17 00:00:00 2001 From: jackgr Date: Tue, 22 Mar 2016 18:51:25 -0700 Subject: [PATCH 1/2] List chart names not charts --- pkg/repo/inmem_repo_service.go | 6 +++--- pkg/repo/inmem_repo_service_test.go | 6 +++++- pkg/repo/types.go | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/repo/inmem_repo_service.go b/pkg/repo/inmem_repo_service.go index a987dd467..b40368853 100644 --- a/pkg/repo/inmem_repo_service.go +++ b/pkg/repo/inmem_repo_service.go @@ -42,13 +42,13 @@ func NewInmemRepoService() IRepoService { } // List returns the list of all known chart repositories -func (rs *inmemRepoService) List() ([]IRepo, error) { +func (rs *inmemRepoService) List() ([]string, error) { rs.RLock() defer rs.RUnlock() - ret := []IRepo{} + ret := []string{} for _, r := range rs.repositories { - ret = append(ret, r) + ret = append(ret, r.GetName()) } return ret, nil diff --git a/pkg/repo/inmem_repo_service_test.go b/pkg/repo/inmem_repo_service_test.go index 22d8184c8..59c273a2a 100644 --- a/pkg/repo/inmem_repo_service_test.go +++ b/pkg/repo/inmem_repo_service_test.go @@ -32,7 +32,11 @@ func TestService(t *testing.T) { t.Fatalf("unexpected repo count; want: %d, have %d.", 1, len(repos)) } - tr := repos[0] + tr, err := rs.Get(repos[0]) + if err != nil { + t.Fatalf("cannot get repo named %s: %s", repos[0], err) + } + if err := validateRepo(tr, GCSPublicRepoName, GCSPublicRepoURL, "", GCSRepoFormat, GCSRepoType); err != nil { t.Fatal(err) } diff --git a/pkg/repo/types.go b/pkg/repo/types.go index fa13bf474..d58e482db 100644 --- a/pkg/repo/types.go +++ b/pkg/repo/types.go @@ -118,7 +118,7 @@ type IStorageRepo interface { // repository based operations, such as search and chart reference resolution. type IRepoService interface { // List returns the list of all known chart repositories - List() ([]IRepo, error) + List() ([]string, error) // Create adds a known repository to the list Create(repository IRepo) error // Get returns the repository with the given name From 18068bdcf62bc125fb62ca8be239a70e9e836008 Mon Sep 17 00:00:00 2001 From: jackgr Date: Tue, 22 Mar 2016 18:54:46 -0700 Subject: [PATCH 2/2] Return repo from get chart by reference --- pkg/chart/testdata/frobnitz-0.0.1.tgz | Bin 2327 -> 2363 bytes pkg/repo/gcs_repo_test.go | 2 +- pkg/repo/repoprovider.go | 19 ++++++++++++------- pkg/repo/repoprovider_test.go | 6 +++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pkg/chart/testdata/frobnitz-0.0.1.tgz b/pkg/chart/testdata/frobnitz-0.0.1.tgz index 322f463969025c897ec52b7f94fc44f98d37093d..fae67e01141c91d380b367764a5b634ea7731792 100644 GIT binary patch literal 2363 zcmV-B3B>jviwFQl_3>5!1MM4YbK5pDpYtJGN{B`vMlbSS+DAC9}}u*Xpy!15MKgy&ift zFpYr;e>Gk2>lza6DIneG4@_O_nMNOJy3sYXXQ=mxI%TkA+@he$2g|-#(9h?Sj3fK| zjlev$|4Y}RTv=Oz|KKuUKKiD)(f)c@Gb;8s4O4%HvP@W)Z!S; z32B8^fQKku7%c}gn|cxVNH|1iuE!AkSV{l2(pq84WM5lX45iz#{K&Nw{d;g?v)682 z;PoY;4jZ-*>f~I-1B)oJFEE!64sk4}6exVG*c2_5@Iy+87`89WJa8IiHMOUwQ(%aR32{XK6Kr ztjK#!$ucUi>r!V716jB5Rb;`WP|+2uH03%Dugan0|u!=Upq#-6Gf&5F}Ew<3oq)B^@D>0 zRra=vsY|R8y7V0G9<_~LzYQs$w{Us#;5kQa$QpS2IZz#nRQ35NPN|Ss(1)sQ5`7fg zT%ylC3i#*>IJD7PekSZqE$7~c|L30XAGJekwQj3r9t;C>M>5fSl8d>83&oCLawsO` zdF!dIob>Utw+pDTe^zPhz=y1ivM+ltur2;~tLHyMH_Uz$|91g< z=rth=i1aUgvUDJ5M?P7Ln2p|AA;fZ;m1bMnY8bZCdUH5u9miuAa5&=Y2pVh>L`#m9 zm98Z15fveyCxvl@u1N@ZOV+VP{nzsKPFx#j-Zg$b8zMM0X6%DC`=9?90-k!-zaF^D z|Km#gm&@4V|2?f&J^u~5{igo26R5oZbAt2C-#>l_DH=!P$?14BIXf9m(NV$K5M*>8 zZ_sx)1-yTZUY-F`PVs&p2tHt&@Bc^O?>j-~;z!mI6&o*H>=&rty_%j+N0VPilL`Y7 zVi=|?Ok*A;nK{+@$ruRp=lAEx_J9ub;oZD{5}J=yWe z^ydnh2ug|EG&pXMDTvQsP0xNGk19OoOvJi`3%=rJiNouYcmJ-=(ZUO_>ZV8Fri1%Y zyVWxpjp6+NLKs#yyx)fm-1lsYB_l6T{B}Ay9#2No>G}B0xFSE#7$P^S(W69Llv?Vz zxAb&G73$n#2f_n$;cZphawgwFUt}+kRV$Ll5bvuy;J5ky zz~F!enSlx{hAX{h2lk>N`uMTpoHsYJPt0YtSI&0QF9uufm-CbK$0HON8(azSvM~y` z_}ozfUO+-MS&|$(A_#dl92DB_(w4K4pX zRS0pqjBhx20oVmbYE#7{DsV_+^39DZCu1nb7Qeb*5q}xr!i)QWEJJ=CS==2Wb!Aae zo>yHS_z4D#S`_6OhrH@nN&M2cykMAh!x%-wyKI4#^0+55M8Tmq8{#%nZV0_NwQ?lG zp3;v^5w7y-i-#I>nw*}VWpN>!pOxh=aZz3xI1-uLE#iAKHJ!{D7B(JdRyh{VQ!q#5 z#J0#J7CkA3IXg@IsV1%ze5n-TcWcUe1!_!Pvq@|=`DWzY^hVM2nF7Ok6l^ko&h_~3 zpS}P#@Og7OJ*)DFw}xa2cID4covb$S;IRGtm)x}a0vTJ*e_ioVuK#HL=KbGpK$PNz z$8(SSBJQNNho;iS&p%{TIL32`qT>2zhKMfljCpW$oUMTZy5V4l=8$fpJj|z|8bYcS zip(x;_(43&%%sp#4)sM;2Rh%bMKYf>DlMs&xE@;KB5}pLh2QE}p&8*WS~4tE;RG?) zqFB7B#|$`@_o3tf8%M=>*JGT*Amelu&#k2oJ4*RvoAedtZydA9u7C=$KCxmg z%+p0)iQNh5C%Ad(g}|m&vBlBL)A0nZUZ=p5rPg=me-HF+pl$E}bYoDh{~O&V|Jw<8 zfrt~bFc_Z{tKYw;001X`puzwE literal 2327 zcmV+y3F!78iwFR`*Rxgt1MM4YbK5pDpYaiR(-KM&@}C+(?RmH z8+~d8BNQC3Dp%o zzm?SKME}=p;9%)e68Jdad3irBCYT18V^*a2U03vI4sJLOM4MDoKr7d#F7*lKmi|DO zYFpTcXK6Krtk8W+$s)|LGpRj*fvg(Oy|ioC0@CNT|7-j29#Z?eQxYg_Ip2Yd4f&te>2}NcpLW!)^S^z-$qzTamm~_O zkiu!rA6_<2U?CvrfHVRAJ8i}(&-L}Sa&0Pv&Q${jsX|{fLVFNJrUntW8_x}{s*v^L z<6~9!HuI@Vq!GGyZSI^ljZU`-DW5xcc>Lhnr%lLqc=IJtorqNRWj{)(kXXNCpScw9(G75DqLus`vu|q|_b&WDb3O008Cc6zQ!Vmf7?|6ViQbW1+8ek~YzrnQ zVnSYiMX6Eh|396-?td8dcOhew|7%94RR4F{hF1IkJ|H$b3O#Fz9pc%TDqqp^tYOEH z`v0*1>g;`A@$ILVvC01pQ!nR#-EMvUvllo(Z;~UKMtZmtp!i$@$ukM1(Kt9j|6{^HY@E5b`0b>JplVFn`z!W8 zZx;fdd)B`mc*y^iPj2wZ`f?c?{J*1hIwk+t+ui#7XD?8C|7ZJ`slR{z22wPR2E&U% ze>gtxkI-q(*$`xOpYPB&cR9R&^k0twDWmv!2n3(-lpp>_;2+w4>*{;f5+^opFh9&u ze|R&x9QB7k_lG40BE&FEmzYL83NkaQ%ku#cX3rlF-7praYl@~A9aAydN7W)P2N%O} zi994U*4oh8$JJzK=c6A>WFjcVa+Bb=My4RXd@~yVI_Q^p%$SIEF&BKp+XW79&p-UT zJV$dkxT%^Rftw8Od+lD&us?wM|CKPTZ1{Kx8Mx<8Ef$YFNAb(W@N6*bk4Be+cY~7r zEMo|rutJXlZC+}jV{7Tjh)UF%#g2ssX2kD*9sTpClFD*xsZdqoCIaL`p0R0a-TTO| zMkAq0j=*9}%t>s*Xd6o#?=gs%QB0g$LD~LSO_VL4n6`T5tl7EKJ$3GKXEBlQps&&w z$f^}eV~F?FE%4iHe_&9cL1v%=i{4VN*n!=!hdzHUIp^J->=ScY?v=A0_lv=n`{n$^ z{m}>o#u`@wymXAhE&k{z0naCa8ZSwXZ4rdrDef(eiXq3Hm)Y<#*NZiulK5uBLr94S z~X zeXHI7$Z-MjjlE4wm+-wogov6uV zMlhe^L28vV;XFBWgmz?$RASzfBABsp>`xVOCFe_p5WinjRx40p>WWQby~)=jXQnsu zrcV{<%|d^j`7^F(e}DV}Si|St#b{jS5p50e6zt2NpF3Ht;mKih{iiUfiTp1q12@!v zW>+tr{~5-Sxc^(%f4c{96fZoUyWA6TC$T*=6)t}MCZoa`oh0<}d z0t)Dc!Vb+K-9%ZKPeL_>R4WjfUDEKKc$S$-uB902^Qbm-zF&!CK5kSRQY~>kw7^B; zigydYRIx%6!X30=SgOJaVva?zcu|iTa4haaaRD1e#c0=KoWdZZbQRC6g$FxIv9gW( za`QKc*rZoLg;7d3aE{gUB_)#J-vc%l17f zq^y8g8Z6NwE;zQ-L)2XBb&xA;1%iDkQp&zR{#1OFvTwTr(zInO!#pri3m-B$p;y8Y z+?h%x3qB?^EO_eIq-kXcdGzuX=Lj2??^Kw8%O2yf77V*zrBF#i#Q<<2BS)`l>Jv89$x3N#K=j?RL?!E8n%Se{eQ4w%MDJk-xT1~>HPlc;4K>tILk%_5P(uwh)bJ;U{{u*v{-FR+001N6iq`-D diff --git a/pkg/repo/gcs_repo_test.go b/pkg/repo/gcs_repo_test.go index 163d662f5..3f7c01ee4 100644 --- a/pkg/repo/gcs_repo_test.go +++ b/pkg/repo/gcs_repo_test.go @@ -112,7 +112,7 @@ func TestGetChart(t *testing.T) { t.Fatal(err) } - if reflect.DeepEqual(wantFile, haveFile) { + if !reflect.DeepEqual(wantFile, haveFile) { t.Fatalf("retrieved invalid chart\nwant:%#v\nhave:\n%#v\n", wantFile, haveFile) } } diff --git a/pkg/repo/repoprovider.go b/pkg/repo/repoprovider.go index 8695c0c3e..5dbe2ee0a 100644 --- a/pkg/repo/repoprovider.go +++ b/pkg/repo/repoprovider.go @@ -33,7 +33,7 @@ import ( type IRepoProvider interface { GetRepoByURL(URL string) (IChartRepo, error) GetRepoByName(repoName string) (IChartRepo, error) - GetChartByReference(reference string) (*chart.Chart, error) + GetChartByReference(reference string) (*chart.Chart, IChartRepo, error) } type repoProvider struct { @@ -157,25 +157,30 @@ func (rp *repoProvider) findRepoByURL(URL string) IChartRepo { // GetChartByReference maps the supplied chart reference into a fully qualified // URL, uses the URL to find the repository it references, queries the repository -// for the chart by URL, and returns the result. -func (rp *repoProvider) GetChartByReference(reference string) (*chart.Chart, error) { +// for the chart by URL, and returns the chart and the repository that backs it. +func (rp *repoProvider) GetChartByReference(reference string) (*chart.Chart, IChartRepo, error) { l, err := ParseGCSChartReference(reference) if err != nil { - return nil, err + return nil, nil, err } URL, err := l.Long(true) if err != nil { - return nil, fmt.Errorf("invalid reference %s: %s", reference, err) + return nil, nil, fmt.Errorf("invalid reference %s: %s", reference, err) } r, err := rp.GetRepoByURL(URL) if err != nil { - return nil, err + return nil, nil, err } name := fmt.Sprintf("%s-%s.tgz", l.Name, l.Version) - return r.GetChart(name) + c, err := r.GetChart(name) + if err != nil { + return nil, nil, err + } + + return c, r, nil } // GCSRepoProvider is a factory for GCS IRepo instances. diff --git a/pkg/repo/repoprovider_test.go b/pkg/repo/repoprovider_test.go index 86533dcc8..ff554ab1c 100644 --- a/pkg/repo/repoprovider_test.go +++ b/pkg/repo/repoprovider_test.go @@ -99,14 +99,14 @@ func TestGetChartByReferenceWithValidReferences(t *testing.T) { for _, vcr := range ValidChartReferences { t.Logf("getting chart by reference: %s", vcr) - tc, err := rp.GetChartByReference(vcr) + tc, _, err := rp.GetChartByReference(vcr) if err != nil { t.Error(err) continue } haveFile := tc.Chartfile() - if reflect.DeepEqual(wantFile, haveFile) { + if !reflect.DeepEqual(wantFile, haveFile) { t.Fatalf("retrieved invalid chart\nwant:%#v\nhave:\n%#v\n", wantFile, haveFile) } } @@ -130,7 +130,7 @@ func getTestRepoProvider(t *testing.T) IRepoProvider { func TestGetChartByReferenceWithInvalidReferences(t *testing.T) { rp := NewRepoProvider(nil, nil, nil) for _, icr := range InvalidChartReferences { - _, err := rp.GetChartByReference(icr) + _, _, err := rp.GetChartByReference(icr) if err == nil { t.Fatalf("found chart using invalid reference: %s", icr) }