<div dir="ltr">2013/6/27 Igor Vlasenko <span dir="ltr"><<a href="mailto:vlasenko@imath.kiev.ua" target="_blank">vlasenko@imath.kiev.ua</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">On Thu, Jun 27, 2013 at 07:47:39PM +0300, Igor Vlasenko wrote:<br>
> хочу написать библиотеку, которая определяла бы, какое<br>
> минимальное число версий пакета надо собрать и порядок их<br>
> сборки.<br>
<br>
</div>И хочу отметить, что эту библиотеку я еще не написал,<br>
а то, что ушло в autoimports, это тестирование,<br>
пробная сборка, чтобы убедиться, что rpm-build-nodejs работает,<br>
toolchain работает, зависимости присутствуют.<br>
<br>
Я эти пакеты могу удалить, если они кому-то мешают.</blockquote><div><br></div><div><br></div><div style>Может помогу немного...на примере того же express.</div><div style><br></div><div style>Я надеюсь робот умеет брать с интернета то что ему нужно.</div>
<div style><br></div><div style>для начала <a href="https://registry.npmjs.org/express">https://registry.npmjs.org/express</a> получаем описание пакета в package.</div><div style><br></div><div style>разбираем package.versions<br>
</div><div style><br></div><div style><span class="" style="color:rgb(32,74,135);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">"<span class="">versions</span>"</span><span style="color:rgb(0,0,0);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">:</span><span class="" style="color:rgb(0,0,0);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px"><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><ul style="list-style-type:none;margin:0px;padding:0px 0px 0px 20px">
<li><span class="" style="color:rgb(32,74,135)">"<span class="">0.14.0</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">"<span class="">0.14.1</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">"<span class="">1.0.0beta</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">"<span class="">1.0.0beta2</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">"<span class="">1.0.0rc</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">"<span class="">1.0.0rc2</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">"<span class="">1.0.0rc3</span>"</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li>...</li></ul></span></div><div style>}</div><div style><br></div><div style>сортируем в порядке убывания версии. для сортировки родной механизм - <a href="https://github.com/isaacs/node-semver">https://github.com/isaacs/node-semver</a> в ридми все по человечески написано</div>
<div style><br></div><div style>если не указана версия - то берем максимальную иначе через semver идем от максимальной и вниз.</div><div style><br></div><div style>если подходит - запоминаем version</div><div style><br></div>
<div style>если эта версия уже есть в репозитории - то припускаем,</div><div style><br></div><div style>далее работаем с package.versions[version] </div><div style><div>{</div><div> "name": "express",</div>
<div> "description": "Sinatra inspired web development framework",</div><div> "version": "3.3.1",</div><div> "author": {</div><div> "name": "TJ Holowaychuk",</div>
<div> "email": "<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>"</div><div> },</div><div> "contributors": [</div><div> {</div><div> "name": "TJ Holowaychuk",</div>
<div> "email": "<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>"</div><div> },</div><div> {</div><div> "name": "Aaron Heckmann",</div>
<div> "email": "<a href="mailto:aaron.heckmann%2Bgithub@gmail.com">aaron.heckmann+github@gmail.com</a>"</div><div> },</div><div> {</div><div> "name": "Ciaran Jessup",</div>
<div> "email": "<a href="mailto:ciaranj@gmail.com">ciaranj@gmail.com</a>"</div><div> },</div><div> {</div><div> "name": "Guillermo Rauch",</div><div>
"email": "<a href="mailto:rauchg@gmail.com">rauchg@gmail.com</a>"</div><div> }</div><div> ],</div><div> "dependencies": { //<span style="color:rgb(114,159,207);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">Их снова скармливаем роботу, робот должен по идее вернуть собраную версию для наших Reqs</span></div>
<div> "connect": "2.8.1",</div><div> "commander": "0.6.1",</div><div> "range-parser": "0.0.4",</div><div> ...</div><div> },</div><div>
"devDependencies": { <span style="color:rgb(114,159,207);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">// Эти зависимости не ставятся по умолчанию. Только если мы разрабатываем модуль, для тестирования, прочее</span></div>
<div> "ejs": "*",</div><div> "mocha": "*",</div><div> "jade": "0.30.0",</div><div> ...</div><div> },</div><div> "keywords": [</div>
<div> "express",</div><div> "framework",</div><div> ...</div><div> ],</div><div> "repository": {</div><div> "type": "git",</div><div> "url": "git://<a href="http://github.com/visionmedia/express">github.com/visionmedia/express</a>"</div>
<div> },</div><div> "main": "index",</div><div> "bin": { <span style="color:rgb(114,159,207);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">// это то что должно линковаться в /usr/bin и как называться</span></div>
<div> "express": "./bin/express"</div><div> },</div><div> "scripts": { <span style="color:rgb(114,159,207);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">//здесь описываются команды для сборки </span></div>
<div> "prepublish": "npm prune",</div><div> "test": "make test"</div><div> },</div><div> "engines": { <span style="color:rgb(114,159,207);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">//некоторые модули могут указывать на старые версии, но работают и на более новых</span></div>
<div> "node": "*"</div><div> },</div><div><span style="color:rgb(0,0,0);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">// Это у нас markdown. иногда присутствует файлом</span><br>
</div><div> "readme": "![express logo](<a href="http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png">http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png</a>)\n\n Fast, unopinionated, minimalist web framework for [node](<a href="http://nodejs.org">http://nodejs.org</a>). ",</div>
<div> "readmeFilename": "Readme.md",</div><div> "_id": "express@3.3.1",</div><div> "dist": {</div><div> "shasum": "4bb79fb3548313d9e1a49ffdc5aa369a936127d7",</div>
<div> "tarball": "<a href="http://registry.npmjs.org/express/-/express-3.3.1.tgz">http://registry.npmjs.org/express/-/express-3.3.1.tgz</a>"</div><div> },</div><div> "_from": ".",</div>
<div> "_npmVersion": "1.2.14",</div><div> "_npmUser": {</div><div> "name": "tjholowaychuk",</div><div> "email": "<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>"</div>
<div> },</div><div> "maintainers": [</div><div> {</div><div> "name": "tjholowaychuk",</div><div> "email": "<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>"</div>
<div> }</div><div> ],</div><div> "directories": {</div><div style> },</div><div style>}<br></div></div><div style><br></div><div style>Более подробно читаем <a href="https://npmjs.org/doc/json.html">https://npmjs.org/doc/json.html</a><br>
</div><div style><br></div><div style>Надеюсь информация будет полезной</div><div style> </div></div><div style>З.Ы есть в версиях package.versions[version].license</div><ul style="list-style-type:none;margin:0px;padding:0px 0px 0px 20px;color:rgb(0,0,0);font-family:'DejaVu Sans Mono','Courier New',monospace;font-size:11px;line-height:17px">
<li><br></li></ul>-- <br>Dmitry Kulik<br>ALTLinux Team<br>e-mail: lnkvisitor.ts[at]<a href="http://gmail.com" target="_blank">gmail.com</a><br>jabber: lnkvisitor.ts[at]<a href="http://gmail.com" target="_blank">gmail.com</a></div>
</div>