VimŸUnDoå�Ȩ3ÃÔÔi‡ö%I *¯5„ôžINR‡_*o¨¥Ú= return next(err)¯¯¯¯WŽzCR_ÐÿÿÿÿVàn¨õõ5�_ÐÿÿÿÿVànªõ"õ!5�_ÐÿÿÿÿVàn¹õ module.expo5�_ÐÿÿÿÿVànºõ# }õ"õ!5�_ÐÿÿÿÿVànÃõ%võ$õ#5�_Ð ÿÿÿÿ vVànØõ%var checkRepoName(name) {5�_Ðÿÿÿÿ vVànèõ1 if (_.endsWith(url.hostname, 'github.com')) {5�_Ð ÿÿÿÿ vVànèõ$5�_Ð ÿÿÿÿ vVànéõ%õ%5�_Ð ÿÿÿÿ vVànêõ5�_Ð ÿÿÿÿvVànëõ%1 if (_.endsWith(url.hostname, 'github.com')) {5�_Ð ,ÿÿÿÿvVànìõ%- _.endsWith(url.hostname, 'github.com')) {5�_Ð  +ÿÿÿÿvVànìõ%, _.endsWith(url.hostname, 'github.com')) 5�_Ð *ÿÿÿÿvVànìõ%+ _.endsWith(url.hostname, 'github.com'))5�_ÐÿÿÿÿvVànîõ&õ%5�_ÐÿÿÿÿvVànõõ&5�_ÐÿÿÿÿvVàn÷õ'* _.endsWith(url.hostname, 'github.com')5�_ÐÿÿÿÿvVànúõ'var fetchRepo(5�_Ðÿÿÿÿ&vVànýõ''H var fileOpts = { mode: 0644, prefix: 'repo-', postfix: '.tar.gz' }> tmp.file(fileOpts, function (err, fPath, fd, fCleanup) { if (err) {Q self.logger.error('could not create a temporary file: {0}'.format(err)) return next(err) }0 fs.ensureDir(self.apps, function (err) { if (err) {W self.logger.error('could not create the images directory: {0}'.format(err)) return next(err) }F var tarUrl = urljoin(url.format(), '/archive/master.tar.gz')7 var dirName = path.join(self.apps, imageName) info.dir = dirName; self.logger.info('starting the fetch request...')) var tarStream = request(tarUrl) .pipe(gunzip()); .pipe(tar.Extract({ path: dirName, strip: 1 })), .on('error', function (response) {\ self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) })" .on('end', function () {% info.status = 'completed'* next(null, imageName, dirName) }) }) }) } else {0 next(new Error("unsupported repo source")) }5�_Ðÿÿÿÿ&vVàoõ''F var fileOpts = { mode: 0644, prefix: 'repo-', postfix: '.tar.gz' }< tmp.file(fileOpts, function (err, fPath, fd, fCleanup) { if (err) {O self.logger.error('could not create a temporary file: {0}'.format(err)) return next(err) }. fs.ensureDir(self.apps, function (err) { if (err) {U self.logger.error('could not create the images directory: {0}'.format(err)) return next(err) }D var tarUrl = urljoin(url.format(), '/archive/master.tar.gz')5 var dirName = path.join(self.apps, imageName) info.dir = dirName9 self.logger.info('starting the fetch request...')' var tarStream = request(tarUrl) .pipe(gunzip())9 .pipe(tar.Extract({ path: dirName, strip: 1 }))* .on('error', function (response) {Z self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () {# info.status = 'completed'( next(null, imageName, dirName) }) }) }) } else {. next(new Error("unsupported repo source")) }5�_Ð#ÿÿÿÿ&vVào õ#%( õ#%'5�_Ð$ÿÿÿÿ'vVào õ$&(5�_Ð&ÿÿÿÿ&(vÿÿÿVào,õ%} else {, next(new Error("unsupported repo source"))}5�_Ð$ÿÿÿÿ&&vÿÿÿVàpQõ&() }õ%((võ$''õ$&&5�_Ð&ÿÿÿÿ))vÿÿÿVàpYõ&()5�_Ð'ÿÿÿÿ**vÿÿÿVàpYõ&**õ'(*5�_Ð)ÿÿÿÿ,,vÿÿÿVàp[õ()5�_Ð&ÿÿÿÿ++vÿÿÿVàp]õ%'+var generateName(source) {5�_Ð&ÿÿÿÿ++vÿÿÿVàp`õ%'+var generateName(url) {5�_Ð &ÿÿÿÿ++vÿÿÿVàpbõ%'+var generateName(name) {5�_Ð! &ÿÿÿÿ++vÿÿÿVàpdõ&(, õ&(+5�_Ð "!)ÿÿÿÿ,,vÿÿÿVàpkõ)+- õ)+,5�_Ð!#")ÿÿÿÿ))vVàpqõ(*-1 var imageName = processedPath.replace('/', '-')5�_Ð"$#*ÿÿÿÿ))vVàpr õ)* return imageName5�_Ð#%$ÿÿÿÿ))vVàq) õ,var checkSourceName(name) {5�_Ð$&%+ÿÿÿÿ))vVàq-õ,.. }õ+.-õ+-,5�_Ð%'&,ÿÿÿÿ))vVàq1 õ.01 eõ-00 fõ,// õ,..5�_Ð&('ÿÿÿÿ))vVàqMõ1var fetchRepo() { 5�_Ð')(ÿÿÿÿ))vVàqSõ1var canProcess(name) {5�_Ð(*)ÿÿÿÿ))vVàqUõ1var canProcess(name) {5�_Ð)+*ÿÿÿÿ))vVàqYõ1var fetchSource () { 5�_Ð*,+ÿÿÿÿ))vVàq_õ1 var fetchSource = function () { 5�_Ð+-,$ÿÿÿÿ))vVàqf õ1*var fetchSource = function (source, cb) { 5�_Ð,.-ÿÿÿÿ&v&Vàq� õ1B var tarUrl = urljoin(url.format(), '/archive/master.tar.gz')5�_Ð-/.ÿÿÿÿ!vÿÿÿVàq©õ1< var tarUrl = urljoin(source, '/archive/master.tar.gz')3 var dirName = path.join(self.apps, imageName) info.dir = dirName7 self.logger.info('starting the fetch request...')% var tarStream = request(tarUrl) .pipe(gunzip())7 .pipe(tar.Extract({ path: dirName, strip: 1 }))( .on('error', function (response) {X self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () {! info.status = 'completed'& next(null, imageName, dirName) }) })5�_Ð.0/ÿÿÿÿvÿÿÿVàqªõ % }õ $võ#õ"5�_Ð/10ÿÿÿÿvÿÿÿVàq°õ %5�_Ð021ÿÿÿÿvÿÿÿVàq±õ&õ &5�_Ð132ÿÿÿÿvVàqµõ5< var tarUrl = urljoin(source, '/archive/master.tar.gz')3 var dirName = path.join(self.apps, imageName) info.dir = dirName7 self.logger.info('starting the fetch request...')% var tarStream = request(tarUrl) .pipe(gunzip())7 .pipe(tar.Extract({ path: dirName, strip: 1 }))( .on('error', function (response) {X self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () {! info.status = 'completed'& next(null, imageName, dirName) })5�_Ð243ÿÿÿÿvVàq·õ5: var tarUrl = urljoin(source, '/archive/master.tar.gz')1 var dirName = path.join(self.apps, imageName) info.dir = dirName5 self.logger.info('starting the fetch request...')# var tarStream = request(tarUrl) .pipe(gunzip())5 .pipe(tar.Extract({ path: dirName, strip: 1 }))& .on('error', function (response) {V self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () { info.status = 'completed'$ next(null, imageName, dirName) })5�_Ð354ÿÿÿÿvVàq¹õ5�_Ð465ÿÿÿÿ&vÿÿÿVàq½õ4D var fileOpts = { mode: 0644, prefix: 'repo-', postfix: '.tar.gz' }: tmp.file(fileOpts, function (err, fPath, fd, fCleanup) { if (err) {M self.logger.error('could not create a temporary file: {0}'.format(err)) return next(err) }, fs.ensureDir(self.apps, function (err) { if (err) {S self.logger.error('could not create the images directory: {0}'.format(err)) return next(err) } }) })}5�_Ð576ÿÿÿÿvÿÿÿVàw5õ '5�_Ð687ÿÿÿÿvÿÿÿVàw5õ(õ (5�_Ð798#ÿÿÿÿ""vÿÿÿVàwJõ/+var fetchSource = function (source, next) {5�_Ð8:9'ÿÿÿÿ""vÿÿÿVàwKõ//var fetchSource = function (source, dir next) {5�_Ð9;:ÿÿÿÿ"v"VàwSõ// var dirName = path.join(self.apps, imageName)5�_Ð:<;ÿÿÿÿ"v"VàwZõ info.dir = dirName5�_Ð;><ÿÿÿÿ"v"Vàweõ3 self.logger.info('starting the fetch request...')5�_Ð<?=>ÿÿÿÿ"v"Vàwlõ.õ-5�_Ð>@?ÿÿÿÿvÿÿÿVàw}õ.8 var tarUrl = urljoin(source, '/archive/master.tar.gz')) var dirName = path.join(dir, imageName)! var tarStream = request(tarUrl) .pipe(gunzip())3 .pipe(tar.Extract({ path: dirName, strip: 1 }))$ .on('error', function (response) {T self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () { info.status = 'completed'" next(null, imageName, dirName) })}5�_Ð?A@ÿÿÿÿvÿÿÿVàwõ!5�_Ð@BAÿÿÿÿvÿÿÿVàwõ"õ"5�_ÐACBÿÿÿÿvVàw�õ/ 8 var tarUrl = urljoin(source, '/archive/master.tar.gz')) var dirName = path.join(dir, imageName)! var tarStream = request(tarUrl) .pipe(gunzip())3 .pipe(tar.Extract({ path: dirName, strip: 1 }))$ .on('error', function (response) {T self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () { info.status = 'completed'" next(null, imageName, dirName) })5�_ÐBECÿÿÿÿvVàwƒõ5�_ÐCFDEÿÿÿÿvVàw„õ5�_ÐEGFÿÿÿÿ vÿÿÿVàw†õ -,var fetchSource = function (source, next) { }5�_ÐFHGÿÿÿÿvÿÿÿVàw†õ5�_ÐGIHÿÿÿÿvÿÿÿVàwŒõ+õ*5�_ÐHJI ÿÿÿÿ vÿÿÿVà¥êõ D var fileOpts = { mode: 0644, prefix: 'repo-', postfix: '.tar.gz' }5�_ÐIKJ ÿÿÿÿvÿÿÿVà¥ëõ : tmp.file(fileOpts, function (err, fPath, fd, fCleanup) {5�_ÐJLK ÿÿÿÿ vÿÿÿVà¥íõ ) if (err) {M self.logger.error('could not create a temporary file: {0}'.format(err)) return next(err) }: var tarUrl = urljoin(source, '/archive/master.tar.gz')5�_ÐKML ÿÿÿÿ vVà¥ðõ % : var tarUrl = urljoin(source, '/archive/master.tar.gz')+ var dirName = path.join(dir, imageName)# var tarStream = request(tarUrl) .pipe(gunzip())5 .pipe(tar.Extract({ path: dirName, strip: 1 }))& .on('error', function (response) {V self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err)) return next(err) }) .on('end', function () { info.status = 'completed'$ next(null, imageName, dirName) })5�_ÐLNMÿÿÿÿ vVà¥ñõ })5�_ÐMONÿÿÿÿvVঠõ$" next(null, imageName, dirName)5�_ÐNPOÿÿÿÿvVà§|õ info.status = 'completed'5�_ÐOQPÿÿÿÿvVáÍ"õ#var generateName(source) {5�_ÐPRQÿÿÿÿvVáÍ#õ#var generateName (source) {5�_ÐQSRÿÿÿÿvVáИõ$ õ#5�_ÐRTSÿÿÿÿvVáйõ%õ$5�_ÐSUT ÿÿÿÿvVáÑ0õ & õ %5�_ÐTVUÿÿÿÿvVáÑ8õ'õ&5�_ÐUWVÿÿÿÿvVáÑ; õ'var tmp = require5�_ÐVXWÿÿÿÿvVáÑ=õvar tmp = require('tmp')5�_ÐWYXÿÿÿÿvVáÑ@õ'fõ&var 5�_ÐXZYÿÿÿÿvVáÑH!õformat.extend(String.protot5�_ÐY[Z "ÿÿÿÿvVáÑP#õ &" console.log('fetching source {0}5�_ÐZ\[ÿÿÿÿvVáÔê$õ &( _.endsWith(url.hostname, 'github.com')5�_Ð[]\ ÿÿÿÿvVâF*õ E console.log('fetching source {0} into dir {1}'.format(source, dir))5�_Ð\^]ÿÿÿÿvVâF2%õ&õ%5�_Ð]_^ÿÿÿÿvVâF>õ&3 .pipe(tar.Extract({ path: dirName, strip: 1 }))5�_Ð^`_ÿÿÿÿvVâF@õ& next(null, dirName)5�_Ð_a`ÿÿÿÿvVâFB'õ ) var dirName = path.join(dir, imageName)5�_Ð`baÿÿÿÿvVâFQ(õT self.logger.error('could not extract the GitHub repo tarball: {0}'.format(err))5�_ÐacbÿÿÿÿvVâFV)õ$$ .on('error', function (response) {5�_ÐbdcÿÿÿÿvVâFfõ% õ$5�_ÐcfdÿÿÿÿvVâFm*õ& õ%5�_ÐdgefÿÿÿÿvVâF„õ&5�_ÐfhgÿÿÿÿvVâF…+õ(õ'5�_Ðgih ÿÿÿÿvVâFŸ,õ *võ )õ (5�_Ðhji ÿÿÿÿvVâF¬õ $var gunzip = require('gunzip-maybe')5�_ÐikjÿÿÿÿvVâF­õ )5�_ÐjlkÿÿÿÿvVâF­õ *õ *5�_ÐkmlÿÿÿÿvVâF­.õ5�_ÐlnmÿÿÿÿvVâFðõ( console.log('fetch errored: ' + err)5�_ÐmonÿÿÿÿvVâFñ/õ" console.log('fetch succeeded')5�_Ðnpo!ÿÿÿÿWõ#%+ }õ"%*võ!$)õ!#(5�_Ðoqp#ÿÿÿÿWõ#&, õ#%+5�_Ðprq$ÿÿÿÿ\vÿÿÿW;õ$&-5�_Ðqsr%ÿÿÿÿ\vÿÿÿW;õ$'.õ%&.5�_Ðrts&ÿÿÿÿ\vÿÿÿW<õ%&5�_Ðsut&ÿÿÿÿ\vÿÿÿW>õ%'.5�_Ðtvu&ÿÿÿÿ\vÿÿÿWE0õ%'. return processedPth5�_Ðuwv,ÿÿÿÿ\vÿÿÿWH3õ,./ gõ+.. generateName: generateName5�_Ðvxw#ÿÿÿÿ#'vÿÿÿW õ"$/-var generateDisplayName = function (source) { var url = URL.parse(source)\ var processedPath = _.startsWith(url.pathname, '/') ? url.pathname.slice(1) : url.pathname return processedPath}5�_Ðwyx#ÿÿÿÿ##vÿÿÿW õ"#5�_Ðxzy'ÿÿÿÿ##vÿÿÿW õ&'* generateDisplayName: generateDisplayName5�_Ðy{z&ÿÿÿÿ##vÿÿÿW 4õ%'( generateName: generateName,5�_Ðz|{ ÿÿÿÿ ' vW+8õ!(( return processedPath.replace('/', '-')5�_Ð{}| ÿÿÿÿWÎã9õ!( return processedPath5�_Ð|~}!ÿÿÿÿWÎêõ#%+ }õ"%*võ!$)õ!#(5�_Ð}~#ÿÿÿÿ +vÿÿÿWÎòõ#%+5�_Ð~€$ÿÿÿÿ +vÿÿÿWÎóõ#(,õ$%,5�_Ð�€'ÿÿÿÿ +vÿÿÿWÎóõ&'5�_Ѐ‚�&ÿÿÿÿ&&*v*WÎ÷õ%'.+ return processedPath.split('/').join('-')5�_Ð�ƒ‚&ÿÿÿÿ&&*v*WÎ÷:õ%'. return processedPath.5�_Ђ„ƒÿÿÿÿ&&*v*WÎûõ1 }õ0võ/õ.5�_Ѓ…„!ÿÿÿÿ!"\vÿÿÿWÏõ "1 var url = URL.parse(source)\ var processedPath = _.startsWith(url.pathname, '/') ? url.pathname.slice(1) : url.pathname+ return processedPath.split('/').join('-')5�_Є†…ÿÿÿÿ!!\vÿÿÿWÏõ/5�_Ð…‡†ÿÿÿÿ""\vÿÿÿWÏõ!0õ05�_Іˆ‡ ÿÿÿÿ$$\vÿÿÿWÏõ 5�_Ї‰ˆÿÿÿÿ##\vÿÿÿWÏ ;õ!2 õ!15�_ÐˆŠ‰ÿÿÿÿvWÏõ 2\ var processedPath = _.startsWith(url.pathname, '/') ? url.pathname.slice(1) : url.pathname5�_Љ‹Š ÿÿÿÿvWÏ<õ  return processedPath5�_ЊŒ‹# ÿÿÿÿvWÏõ"$1+ return processedPath.split('/').join('-')5�_Ћ�Œ#ÿÿÿÿvWÏõ"$1, return _processedPath.split('/').join('-')5�_ÐŒŽ�#ÿÿÿÿvWÏõ"$1+ return _processdPath.split('/').join('-')5�_Ð��Ž#ÿÿÿÿvWÏ=õ"$1* return _processPath.split('/').join('-')5�_ÐŽ��'ÿÿÿÿvWÏõ&' var url = URL.parse(source)5�_Ð�‘�'ÿÿÿÿvWÏ õ&'\ var processedPath = _.startsWith(url.pathname, '/') ? url.pathname.slice(1) : url.pathname5�_Ð�’‘'ÿÿÿÿvWÏ õ&' return processedPath5�_Б“’&ÿÿÿÿvWÏ >õ&(/ õ&(.5�_Ð’”“-ÿÿÿÿvWÏ'Bõ-/0 gõ,// generateName: generateName5�_Г•”ÿÿÿÿWÑLCõ5�_Д–•ÿÿÿÿWÑ_Eõ/'var _ processPath = function (source) {5�_Е—–"2ÿÿÿÿWPËòGõ!#/2 return _processPath(source).split('/').join('-')5�_Ж˜—"2ÿÿÿÿ"?"2v2WQYÇHõ!#/@ return _processPath(source).split('/').join('-').toLowerCase()5�_З™˜ÿÿÿÿW‰hõ/5�_Иš™ÿÿÿÿW‰hIõ1õ05�_Й›šÿÿÿÿW‰h3õ2 õ15�_Кœ›ÿÿÿÿW‰h:õ3 õ25�_Л�œÿÿÿÿW‰hAõ function removeIfExists () 5�_Мž�ÿÿÿÿW‰hBõ5�_Ð�ŸžÿÿÿÿW‰hCõ1 function fetch5�_О ŸÿÿÿÿvW‰hJJõ1 ! var tarStream = request(tarUrl) .pipe(gunzip())/ .pipe(tar.Extract({ path: dir, strip: 1 })) .on('error', function (err) { return next(err) }) .on('end', function () { next(null, dir) })5�_П¡ ÿÿÿÿvW‰hMKõ2 õ15�_Р¢¡ÿÿÿÿvW‰hQõ 4 }õ 3 õ25�_С£¢ÿÿÿÿvW‰hXõ "7 }õ"6 iõ!5 õ 45�_Т¤£ ÿÿÿÿvW‰haõ!#9 }õ #8 õ "75�_У¥¤!ÿÿÿÿvW‰hiõ"$; fõ!$: õ!#95�_Ф¦¥%ÿÿÿÿvW‰hpõ$&; }5�_Ð¥§¦%ÿÿÿÿvW‰hrõ%'< }õ$'; } 5�_Ц¨§%ÿÿÿÿvW‰hsMõ%'= õ%'<5�_Ч©¨ÿÿÿÿvWŽuTõ=) fs.exists(dir, function (err, exists) {5�_Шª©ÿÿÿÿvWŽuUõ if (err) return next(err)5�_Щ«ª ÿÿÿÿvWŽzõ =õ <5�_Ъ¬«!ÿÿÿÿ!!vWŽz'õ "=% fs.unlink(dir, function (err) {5�_Ы­¬! ÿÿÿÿ!!vWŽz(õ "=" rimraf(dir, function (err) {5�_Ь®­!ÿÿÿÿ!!vWŽz*Oõ "=/ rimraf(path.resolve(dir, function (err) {5�_Э¯®ÿÿÿÿvWŽz<Põ=# var tarStream = request(tarUrl)5�_Ю¯ÿÿÿÿvWŽzBRõ= return next(err)5�_ÐdfeÿÿÿÿvVâF�õ&õ'v5�_ÐCEDÿÿÿÿvVàw„õ5�_Ð<>=ÿÿÿÿ"v"Vàwjõ-õ.va5�_Ð 'ÿÿÿÿ,,vÿÿÿVàpcõ'(+5�çª