Return-Path: X-Original-To: apmail-cordova-commits-archive@www.apache.org Delivered-To: apmail-cordova-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B7C3E10789 for ; Wed, 12 Jun 2013 23:06:57 +0000 (UTC) Received: (qmail 59546 invoked by uid 500); 12 Jun 2013 23:06:57 -0000 Delivered-To: apmail-cordova-commits-archive@cordova.apache.org Received: (qmail 59526 invoked by uid 500); 12 Jun 2013 23:06:57 -0000 Mailing-List: contact commits-help@cordova.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cordova.apache.org Delivered-To: mailing list commits@cordova.apache.org Received: (qmail 59519 invoked by uid 99); 12 Jun 2013 23:06:57 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Jun 2013 23:06:57 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 3A1528A4379; Wed, 12 Jun 2013 23:06:57 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bennmapes@apache.org To: commits@cordova.apache.org Date: Wed, 12 Jun 2013 23:06:57 -0000 Message-Id: <8a4d2ab77ca744d89d0b7b61e35ef5ce@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/2] git commit: Updating wp parsers to explicitly list www content in .csproj Updated Branches: refs/heads/master2 80cb25d85 -> 6fa5e8bbd Updating wp parsers to explicitly list www content in .csproj Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/f56117c9 Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/f56117c9 Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/f56117c9 Branch: refs/heads/master2 Commit: f56117c99a59203724128f58eb786e6e14d37fd4 Parents: 80cb25d Author: Benn Mapes Authored: Mon Jun 10 16:46:20 2013 -0700 Committer: Benn Mapes Committed: Wed Jun 12 16:04:11 2013 -0700 ---------------------------------------------------------------------- src/metadata/wp7_parser.js | 64 ++++++++++++++++++++++++++++++++++++++- src/metadata/wp8_parser.js | 66 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 127 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f56117c9/src/metadata/wp7_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/wp7_parser.js b/src/metadata/wp7_parser.js index f0127e9..a00f6f0 100644 --- a/src/metadata/wp7_parser.js +++ b/src/metadata/wp7_parser.js @@ -135,7 +135,7 @@ module.exports.prototype = { www_dir:function() { return path.join(this.wp7_proj_dir, 'www'); }, - // copyies the app www folder into the wp7 project's www folder + // copies the app www folder into the wp7 project's www folder and updates the csproj file. update_www:function() { var project_www = util.projectWww(path.join(this.wp7_proj_dir, '..', '..')); // remove stock platform assets @@ -146,8 +146,70 @@ module.exports.prototype = { // copy over wp7 lib's cordova.js var cordovajs_path = path.join(util.libDirectory, 'cordova-wp7', 'templates', 'standalone', 'www', 'cordova.js'); fs.writeFileSync(path.join(this.www_dir(), 'cordova.js'), fs.readFileSync(cordovajs_path, 'utf-8'), 'utf-8'); + this.update_csproj(); }, + // updates the csproj file to explicitly list all www content. + update_csproj:function() { + var raw = fs.readFileSync(this.csproj_path, 'utf-8'); + var cleaned = raw.replace(/^\uFEFF/i, ''); + var csproj_xml = new et.ElementTree(et.XML(cleaned)); + // remove any previous references to the www files + var item_groups = csproj_xml.findall('ItemGroup'); + for (var i = 0, l = item_groups.length; i < l; i++) { + var group = item_groups[i]; + var files = group.findall('Content'); + for (var j = 0, k = files.length; j < k; j++) { + var file = files[j]; + if (file.attrib.Include.substr(0, 3) == 'www') { + // remove file reference + group.remove(0, file); + // remove ItemGroup if empty + var new_group = group.findall('Content'); + if(new_group.length < 1) { + csproj_xml.getroot().remove(0, group); + } + } + } + } + // now add all www references back in + var www_files = this.folder_contents('www', this.www_dir()); + for(file in www_files) { + var item = new et.Element('ItemGroup'); + var content = new et.Element('Content'); + content.attrib.Include = www_files[file]; + item.append(content); + csproj_xml.getroot().append(item); + } + // save file + fs.writeFileSync(this.csproj_path, csproj_xml.write({indent:4}), 'utf-8'); + }, + // Returns an array of all the files in the given directory with reletive paths + // - name : the name of the top level directory (i.e all files will start with this in their path) + // - path : the directory whos contents will be listed under 'name' directory + folder_contents:function(name, dir) { + var results = []; + var folder_dir = fs.readdirSync(dir); + for(item in folder_dir) + { + var stat = fs.statSync(path.join(dir, folder_dir[item])); + // means its a folder? + if(stat.size == 0) + { + var sub_dir = this.folder_contents(path.join(name, folder_dir[item]), path.join(dir, folder_dir[item])); + //Add all subfolder item paths + for(sub_item in sub_dir) + { + results.push(sub_dir[sub_item]); + } + } + else + { + results.push(path.join(name, folder_dir[item])); + } + } + return results; + }, staging_dir: function() { return path.join(this.wp7_proj_dir, '.staging', 'www'); }, http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f56117c9/src/metadata/wp8_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/wp8_parser.js b/src/metadata/wp8_parser.js index ac5613c..a6d9bea 100644 --- a/src/metadata/wp8_parser.js +++ b/src/metadata/wp8_parser.js @@ -40,7 +40,7 @@ module.exports = function wp8_parser(project) { }; module.exports.check_requirements = function(callback) { - events.emit('log', 'Checking WP8 requirements...'); + events.emit('log', 'Checking wp8 requirements...'); var command = '"' + path.join(util.libDirectory, 'cordova-wp8', 'bin', 'check_reqs') + '"'; events.emit('log', 'Running "' + command + '" (output to follow)'); shell.exec(command, {silent:true, async:true}, function(code, output) { @@ -135,7 +135,7 @@ module.exports.prototype = { www_dir:function() { return path.join(this.wp8_proj_dir, 'www'); }, - // copyies the app www folder into the wp8 project's www folder + // copies the app www folder into the wp8 project's www folder and updates the csproj file. update_www:function() { var project_www = util.projectWww(path.join(this.wp8_proj_dir, '..', '..')); // remove stock platform assets @@ -146,8 +146,70 @@ module.exports.prototype = { // copy over wp8 lib's cordova.js var cordovajs_path = path.join(util.libDirectory, 'cordova-wp8', 'templates', 'standalone', 'www', 'cordova.js'); fs.writeFileSync(path.join(this.www_dir(), 'cordova.js'), fs.readFileSync(cordovajs_path, 'utf-8'), 'utf-8'); + this.update_csproj(); }, + // updates the csproj file to explicitly list all www content. + update_csproj:function() { + var raw = fs.readFileSync(this.csproj_path, 'utf-8'); + var cleaned = raw.replace(/^\uFEFF/i, ''); + var csproj_xml = new et.ElementTree(et.XML(cleaned)); + // remove any previous references to the www files + var item_groups = csproj_xml.findall('ItemGroup'); + for (var i = 0, l = item_groups.length; i < l; i++) { + var group = item_groups[i]; + var files = group.findall('Content'); + for (var j = 0, k = files.length; j < k; j++) { + var file = files[j]; + if (file.attrib.Include.substr(0, 3) == 'www') { + // remove file reference + group.remove(0, file); + // remove ItemGroup if empty + var new_group = group.findall('Content'); + if(new_group.length < 1) { + csproj_xml.getroot().remove(0, group); + } + } + } + } + // now add all www references back in + var www_files = this.folder_contents('www', this.www_dir()); + for(file in www_files) { + var item = new et.Element('ItemGroup'); + var content = new et.Element('Content'); + content.attrib.Include = www_files[file]; + item.append(content); + csproj_xml.getroot().append(item); + } + // save file + fs.writeFileSync(this.csproj_path, csproj_xml.write({indent:4}), 'utf-8'); + }, + // Returns an array of all the files in the given directory with reletive paths + // - name : the name of the top level directory (i.e all files will start with this in their path) + // - path : the directory whos contents will be listed under 'name' directory + folder_contents:function(name, dir) { + var results = []; + var folder_dir = fs.readdirSync(dir); + for(item in folder_dir) + { + var stat = fs.statSync(path.join(dir, folder_dir[item])); + // means its a folder? + if(stat.size == 0) + { + var sub_dir = this.folder_contents(path.join(name, folder_dir[item]), path.join(dir, folder_dir[item])); + //Add all subfolder item paths + for(sub_item in sub_dir) + { + results.push(sub_dir[sub_item]); + } + } + else + { + results.push(path.join(name, folder_dir[item])); + } + } + return results; + }, staging_dir: function() { return path.join(this.wp8_proj_dir, '.staging', 'www'); },