From 7a5be6736d141941bda7287c91f1ccd998e0721c Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 31 Mar 2017 00:40:38 +0300 Subject: [PATCH] When contents generation fails, don't bail out This replaces `panic` which aborts aptly execution with warning message on console. So aptly continues publishing actions, but `Contents` indexes might be incomplete. Error will be printed every time contents generation is triggered. --- deb/contents.go | 4 ++-- deb/package.go | 20 ++++++++++++------ deb/package_collection.go | 8 +++++-- deb/publish.go | 2 +- ...oken-program-options-dev_1.49.0.1_i386.deb | Bin 0 -> 2000 bytes system/t06_publish/PublishRepo29Test_gold | 14 ++++++++++++ system/t06_publish/repo.py | 12 +++++++++++ 7 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 system/t06_publish/PublishRepo29Test/libboost-broken-program-options-dev_1.49.0.1_i386.deb create mode 100644 system/t06_publish/PublishRepo29Test_gold diff --git a/deb/contents.go b/deb/contents.go index e3dc8eb7..b13a8343 100644 --- a/deb/contents.go +++ b/deb/contents.go @@ -26,8 +26,8 @@ func NewContentsIndex(db database.Storage) *ContentsIndex { } // Push adds package to contents index, calculating package contents as required -func (index *ContentsIndex) Push(p *Package, packagePool aptly.PackagePool) error { - contents := p.Contents(packagePool) +func (index *ContentsIndex) Push(p *Package, packagePool aptly.PackagePool, progress aptly.Progress) error { + contents := p.Contents(packagePool, progress) qualifiedName := []byte(p.QualifiedName()) for _, path := range contents { diff --git a/deb/package.go b/deb/package.go index c8b8ef63..764ddb71 100644 --- a/deb/package.go +++ b/deb/package.go @@ -403,32 +403,38 @@ func (p *Package) Files() PackageFiles { } // Contents returns cached package contents -func (p *Package) Contents(packagePool aptly.PackagePool) []string { +func (p *Package) Contents(packagePool aptly.PackagePool, progress aptly.Progress) []string { if p.IsSource { return nil } - return p.collection.loadContents(p, packagePool) + return p.collection.loadContents(p, packagePool, progress) } // CalculateContents looks up contents in package file -func (p *Package) CalculateContents(packagePool aptly.PackagePool) []string { +func (p *Package) CalculateContents(packagePool aptly.PackagePool, progress aptly.Progress) ([]string, error) { if p.IsSource { - return nil + return nil, nil } file := p.Files()[0] path, err := packagePool.Path(file.Filename, file.Checksums.MD5) if err != nil { - panic(err) + if progress != nil { + progress.ColoredPrintf("@y[!]@| @!Failed to build pool path: @| %s", err) + } + return nil, err } contents, err := GetContentsFromDeb(path) if err != nil { - panic(err) + if progress != nil { + progress.ColoredPrintf("@y[!]@| @!Failed to generate package contents: @| %s", err) + } + return nil, err } - return contents + return contents, nil } // UpdateFiles saves new state of files diff --git a/deb/package_collection.go b/deb/package_collection.go index abc45452..3f282ac5 100644 --- a/deb/package_collection.go +++ b/deb/package_collection.go @@ -163,7 +163,7 @@ func (collection *PackageCollection) loadFiles(p *Package) *PackageFiles { } // loadContents loads or calculates and saves package contents -func (collection *PackageCollection) loadContents(p *Package, packagePool aptly.PackagePool) []string { +func (collection *PackageCollection) loadContents(p *Package, packagePool aptly.PackagePool, progress aptly.Progress) []string { encoded, err := collection.db.Get(p.Key("xC")) if err == nil { contents := []string{} @@ -181,7 +181,11 @@ func (collection *PackageCollection) loadContents(p *Package, packagePool aptly. panic("unable to load contents") } - contents := p.CalculateContents(packagePool) + contents, err := p.CalculateContents(packagePool, progress) + if err != nil { + // failed to acquire contents, don't persist it + return contents + } var buf bytes.Buffer err = codec.NewEncoder(&buf, collection.codecHandle).Encode(contents) diff --git a/deb/publish.go b/deb/publish.go index df043fde..2f9b516f 100644 --- a/deb/publish.go +++ b/deb/publish.go @@ -574,7 +574,7 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP contentIndexes[key] = contentIndex } - contentIndex.Push(pkg, packagePool) + contentIndex.Push(pkg, packagePool, progress) } bufWriter, err = indexes.PackageIndex(component, arch, pkg.IsUdeb).BufWriter() diff --git a/system/t06_publish/PublishRepo29Test/libboost-broken-program-options-dev_1.49.0.1_i386.deb b/system/t06_publish/PublishRepo29Test/libboost-broken-program-options-dev_1.49.0.1_i386.deb new file mode 100644 index 0000000000000000000000000000000000000000..9ac6e0d68070b508526d69fa839e4f4c1cd2dd0b GIT binary patch literal 2000 zcmaizdpOgJAIGI9MA361LP&`a#w6Eys&zq8VJ@4+#xRDttYX$Fw}URD(TUX3$UPKi z=I*$pl3T;F4QrO`WRuJAJ^h~Z`~9Bh_x%1i@6YS`{P+3%^?Dz+^T(rt9pur00U`dl z69FMOfBa1y9UYK`g}L?5F*DQA`N_}xy+LMXC&6GHouB+W*X7Mk%;ZrKxEOpym`RL3 z-UM^&pYKmv{pZ7VdF>22seeU!=Ryt_`^9Wuw`jg)io>kwf=rEGZda2Gr0%sbcrzc{ zlNFZ1${~ME5?688&s+I0aq+?36AnkcsxK3`jBNf|+tk=@vhl?(qva)=`-KJ>BNx>x z1}779pfl20oeKTF-FsTwgBJ>FBC8G9jZ=ZKW97atXMNlhzf zAj=#LzvKG!xxG)yZe-s=J`O#UNE>UTe^9|rc1*}r>R~4?5w4jC#}@;)Dm|Ir&ptab zdQ}UXsxGZFCF23bvp(s3N&{3-Hf)>wG%T42-+YdBlG3~9G=R_KA=GL2@ZE=8>dJpO z%$$oufeZx=h<%!hvLvysfm~$C-f1cBwA7B!*W<5n%MPFVOcwTiG>c9;t+BSYVVVDd zc6ZC2eod*;D3F@hU^Z&mVajt)gO!arQePw{Ec*6p&3 zO(i=D&d6%@+IGl&__anW|4lg=^BNOt>U!mNJ2ZLV<11?Y;6#3a8lC+<&QKLR=;7n_ z+P>;Gb$?}E%3JALoZgf7=e)R(oOYUAla#u9Vkkn|7j$GN_2$wrR(C=L>ueY8)Y7=(8TICJVBK#SZbiCA z>ESuGX5CErf=Og!i>RDYcqNek?cFiCJ39Zznk9FK)~5$_DFZ1fw115Mf7Sl!{Xew> zbjr&7?|S@?-JV1@Wx>Ig=Lfv9hF@8-WR_*fPC;~2#lFFdMeo^K^^?ux43Uodki=`z z^FBM8pmf$p@0*$~_}nA4L&qF5FF2^5-RFB){Mtrje=bdUp9~mMPF~6`pkBqAKSz{# zlm+S_PVSHs-O1bO*i~J=L`($2w*X~4^szvhkiFgSN^^0|7C&>`TECrFs7!dUU788L z_YyceCqy-+GtQ9So-4@`1ITaMFYUE*_{qcjx;Lx|{)QUA1m{d%Bf66VPK!r+ABEDK z8UW$xt)?ATyy83M$VFsS>INnl3|u5pWD-SC@ksE{Tf=X~p4h=bwBzv^;4W{V_i>M! zWeCF})gDBeZT}@uU;#y(5g|}RoMw)JB0UH z%)koGQHo-sH;VufR#fEC8?B>{Hj9RKF-q}D`R(`nBBm1wRB9})Yw6v5dt9z_U8zxQ z=jI4wRvrCb-#)@;HJ$&VwLgDV%e3WT!i_(QZEv|cBjCuk?u~-nIW*8ye&YSYEyIXV zkMZHocTv8Ns^(e4%S>P7r|_~Ym_aY5RET2bJawHNuR(b)kDWn{sUYDY4T=5xJyx2_ zs>Byms;RJR!0g7x?_Zw$0Ql@O&}35JT;=>W8FHlPPfN|W;#wD~7BOPN3(V4Mw3$Qe zTGPr2G5(}&&I{K_Y%-9iaNf@%LEXGj?BT(`?t1C7g5HBuFq~}ytyD7EIRMjMR~;M8 z0y8j6SNZ!pqGi-g74stkvhJKeMrnx->7j3nIfxC8%I{AmXDV(?PtF!rJnf@gX`y>T z^_2LFS1TaH2XgC~Nyfrv_Ys_PTDV`jTNEpzKx6HXsEmpti@C4ZBeb&jti-J$K2asN zL!ntMJW}zz?X!H2b06*=;(IIe2hxNEueC;#P!;+=mIV4!^)2k0`O#SyfG0Su|G+fl z$~HQRM^zf=?Hwp*CE}{8ZBFHgT2~6lyQ)XBB3bmF#OFr9BQy5**~L}s(GpzJ##Yy5Pwd)FiJiP zJB-Nm^7MH~#Ug4~*GKh(9%K@U^gq*9`=cb?PJLG4a>FL@($DTNw;?7>Qm41z%4Nev dU-=<>3*p?m>6Bk@;3NfyK0*cZdqgjQzW~v$@