var fs=require('fs'); var path=require('path'); var exec = require('child_process').exec; global.window=global; require(__dirname+'/update.js'); require(__dirname+'/asset.js'); var updates=window.noname_update; var newversion=false; var commit=false if(process.argv[2]){ if(/[0-9]/.test(process.argv[2][0])){ newversion=true; updates.update = updates.version; updates.version = '1.9.' + process.argv[2]; commit=updates.version; } else{ commit=process.argv[2]; } } var assetlist=''; var skinlist='window.noname_skin_list={\n'; var entrylist=[]; var entrymap={}; var get = function(dir,callback){ fs.readdir(dir,function(err,list){ var shift=function(){ if(list.length){ var filename=list.shift(); var delay=false; if(!/\.|~|_/.test(filename[0])){ var url=dir+'/'+filename; var stat=fs.statSync(url); if(stat.isFile()){ if(['.jpg','.png','.mp3','.ttf'].indexOf(path.extname(url))!=-1){ var assetentry=path.relative(path.dirname(__dirname),url); assetlist+=',\n\t\''+assetentry+'\''; entrylist.push(assetentry); } } else if(stat.isDirectory()){ if(dir==path.dirname(__dirname)+'/image/skin'){ fs.readdir(url,function(err,list){ var num=0; for(var i=0;i<list.length;i++){ var url2=url+'/'+list[i]; var stat=fs.statSync(url2); if(stat.isFile()&&path.extname(url2)=='.jpg'){ num++; } } skinlist+='\t'+filename+':'+num+',\n'; entrymap[filename]=num; shift(); }); delay=true; } else{ get(url,shift); delay=true; } } } if(!delay){ shift(); } } else{ callback(); } } shift(); }); }; get(path.dirname(__dirname),function(){ var diff=false; if(window.noname_asset_list.length==entrylist.length+1){ for(var i=0;i<entrylist.length;i++){ if(entrylist[i]!=window.noname_asset_list[i+1]){ diff=true; break; } } if(!diff){ for(var i in entrymap){ if(window.noname_skin_list[i]!==entrymap[i]){ diff=true; break; } } for(var i in noname_skin_list){ if(window.noname_skin_list[i]!==entrymap[i]){ diff=true; break; } } } } else{ diff=true; } var next=function(){ exec('git diff --name-only', (error, stdout, stderr) => { var updatelist='window.noname_update={\n\tversion:\''+updates.version+'\','; updatelist+='\n\tupdate:\''+(updates.update||'')+'\','; var apply=function(name,list){ updatelist+='\n\t'+name+':[\n'; for(var i=0;i<list.length;i++){ updatelist+='\t\t\''+list[i]+'\''; if(i<list.length-1){ updatelist+=','; } updatelist+='\n'; } updatelist+='\t]'; }; if(updates.changeLog){ apply('changeLog',updates.changeLog); updatelist+=','; } if(updates.players){ apply('players',updates.players); updatelist+=','; } if(updates.cards){ apply('cards',updates.cards); updatelist+=','; } var changes = stdout.split('\n'); for(var i=0;i<changes.length;i++){ var extname=path.extname(changes[i]); if(!changes[i]||(extname!='.js'&&extname!='.css')||changes[i]=='game/update.js'){ changes.splice(i--,1); } } var files; if(newversion){ files = []; } else{ files = updates.files || []; } for(var i=0;i<changes.length;i++){ if(files.indexOf(changes[i])===-1){ files.push(changes[i]) } } files.sort(function(a,b){ if (a>b) return 1; if (a<b) return -1; return 0; }) apply('files',files); fs.writeFile('game/update.js',updatelist+'\n};','utf-8',function(){ console.log('updated update.js'); if(commit && typeof commit==='string'){ exec('git add . && git commit -am '+commit); console.log('committed '+commit); } }); }); } if(diff){ var assetversion='window.noname_asset_list=[\n\t\''+updates.version+'\''; fs.writeFile('game/asset.js',assetversion+assetlist+'\n];\n'+skinlist.slice(0,skinlist.length-2)+'\n};','utf-8',function(){ console.log('udpated asset.js'); next(); }); } else{ next(); } });