meteor update app

This commit is contained in:
David Glasser
2013-03-06 12:11:32 -08:00
parent 1a08a0f26d
commit 5f168a2a4a
3 changed files with 50 additions and 24 deletions

View File

@@ -160,8 +160,7 @@ var files = module.exports = {
return test_dir;
},
// compatibility shim. delete when unused.
find_app_dir: function (filepath) {
findAppDir: function (filepath) {
return files.find_upwards(files.is_app_dir, filepath);
},

View File

@@ -19,6 +19,8 @@ Fiber(function () {
process.exit(1);
}
var Commands = [];
var usage = function() {
process.stdout.write(
"Usage: meteor [--version] [--help] <command> [<args>]\n" +
@@ -48,7 +50,7 @@ Fiber(function () {
// @param cmd {String} The command that was run. Used when printing
// error message.
var requireDirInApp = function (cmd) {
var app_dir = files.find_upwards(files.is_app_dir);
var app_dir = files.findAppDir();
if (app_dir) {
return app_dir;
} else {
@@ -99,7 +101,7 @@ Fiber(function () {
if (argv.release)
return argv.release;
var appDir = files.find_upwards(files.is_app_dir);
var appDir = files.findAppDir();
if (appDir)
return project.getMeteorReleaseVersion(appDir);
else
@@ -112,8 +114,6 @@ Fiber(function () {
mongo_runner.find_mongo_port(app_dir, callback);
};
Commands = [];
var findCommand = function (name) {
for (var i = 0; i < Commands.length; i++)
if (Commands[i].name === name)
@@ -273,7 +273,7 @@ Fiber(function () {
"sample applications. Use --list to see the available examples.");
var new_argv = opt.argv;
var appname;
var appPath;
var example_dir = path.join(__dirname, '..', 'examples');
var examples = _.reject(fs.readdirSync(example_dir), function (e) {
@@ -281,9 +281,9 @@ Fiber(function () {
});
if (argv._.length === 1) {
appname = argv._[0];
appPath = argv._[0];
} else if (argv._.length === 0 && new_argv.example) {
appname = new_argv.example;
appPath = new_argv.example;
}
if (new_argv['list']) {
@@ -292,28 +292,28 @@ Fiber(function () {
process.stdout.write(" " + e + "\n");
});
process.stdout.write("\n" +
"Create a project from an example with 'meteor create --example <name>'.\n")
"Create a project from an example with 'meteor create --example <name>'.\n");
process.exit(1);
};
if (argv.help || !appname) {
if (argv.help || !appPath) {
process.stdout.write(opt.help());
process.exit(1);
}
if (fs.existsSync(appname)) {
process.stderr.write(appname + ": Already exists\n");
if (fs.existsSync(appPath)) {
process.stderr.write(appPath + ": Already exists\n");
process.exit(1);
}
if (files.find_app_dir(appname)) {
if (files.findAppDir(appPath)) {
process.stderr.write(
"You can't create a Meteor project inside another Meteor project.\n");
process.exit(1);
}
var transform = function (x) {
return x.replace(/~name~/g, path.basename(appname));
return x.replace(/~name~/g, path.basename(appPath));
};
if (new_argv.example) {
@@ -322,12 +322,12 @@ Fiber(function () {
process.stderr.write("List available applications with 'meteor create --list'.\n");
process.exit(1);
} else {
files.cp_r(path.join(example_dir, new_argv.example), appname, {
files.cp_r(path.join(example_dir, new_argv.example), appPath, {
ignore: [/^local$/]
});
}
} else {
files.cp_r(path.join(__dirname, 'skel'), appname, {
files.cp_r(path.join(__dirname, 'skel'), appPath, {
transform_filename: function (f) {
return transform(f);
},
@@ -341,18 +341,17 @@ Fiber(function () {
});
}
fs.writeFileSync(path.join(appname, '.meteor', 'release'),
releaseVersion + '\n');
project.writeMeteorReleaseVersion(appPath, releaseVersion);
process.stderr.write(appname + ": created");
process.stderr.write(appPath + ": created");
if (new_argv.example &&
new_argv.example !== appname)
new_argv.example !== appPath)
process.stderr.write(" (from '" + new_argv.example + "' template)");
process.stderr.write(".\n\n");
process.stderr.write(
"To run your new app:\n" +
" cd " + appname + "\n" +
" cd " + appPath + "\n" +
" meteor\n");
}
});
@@ -405,7 +404,26 @@ Fiber(function () {
" is already the latest release.");
}
// XXX update app XXX
// If we're not in an app, then we're done. Otherwise, we have to upgrade
// the app too.
var appDir = files.findAppDir();
if (!appDir)
return;
var appRelease = project.getMeteorReleaseVersion(appDir);
if (appRelease === releaseVersion) {
console.log("Your app is already running Meteor release "
+ releaseVersion + ".");
return;
}
project.writeMeteorReleaseVersion(appDir, releaseVersion);
// This is the right spot to do any other changes we need to the app in
// order to update it for the new release (new metadata file formats,
// etc, or maybe even updating renamed APIs).
console.log("Updated app '%s' to release %s from release %s.",
appDir, releaseVersion, appRelease);
// XXX print change log
}
});

View File

@@ -60,8 +60,12 @@ var project = module.exports = {
return ret;
},
_meteorReleaseFilePath: function (appDir) {
return path.join(appDir, '.meteor', 'release');
},
getMeteorReleaseVersion: function (appDir) {
var releasePath = path.join(appDir, '.meteor', 'release');
var releasePath = project._meteorReleaseFilePath(appDir);
if (fs.existsSync(releasePath))
return project._trim_line(project._get_lines(releasePath)[0]);
else
@@ -71,6 +75,11 @@ var project = module.exports = {
return '0.6.0';
},
writeMeteorReleaseVersion: function (appDir, release) {
var releasePath = project._meteorReleaseFilePath(appDir);
fs.writeFileSync(releasePath, release + '\n');
},
add_package: function (app_dir, name) {
var lines = project._get_packages_lines(app_dir);