Skip to content

Commit 69dba91

Browse files
committed
Improve GitApp. Handle app loading.
1 parent a26ccde commit 69dba91

File tree

2 files changed

+56
-8
lines changed

2 files changed

+56
-8
lines changed

coder-apps/common/vcs/app/gitapp.js

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,85 @@
11
var async = require("async");
2+
var util = require("util");
23
var Git = require("./git");
34
var App = coderlib.App;
45
var LocalApp = coderlib.LocalApp;
56

6-
var GitApp = exports.GitApp = function(name, rev) {
7+
var GitApp = exports = function(name, rev) {
78
GitApp.super_.call(this, name);
89

910
this.revision = rev;
11+
this.localApp = null;
12+
this.repo = null;
13+
this.tree = null;
14+
this.module = null;
1015
}
1116

1217
util.inherits(GitApp, App);
1318

1419
GitApp.appcache = {}
1520

1621
GitApp.prototype.load = function(callback) {
22+
var self = this;
1723
async.waterfall([
1824
function(callback) {
19-
LocalApp.find(this.name, callback);
25+
LocalApp.find(self.name, callback);
2026
},
2127
function(app, callback) {
22-
this.localApp = app;
23-
this.repo = new Git(this.localApp.rootPath);
28+
self.localApp = app;
29+
self.repo = new Git(self.localApp.rootPath);
2430

25-
this.repo.parseCommit(this.revision, callback);
31+
self.repo.parseCommit(self.revision, callback);
2632
},
2733
function(commit, callback) {
28-
this.tree = commit.tree;
34+
self.tree = commit.tree;
2935
callback(null);
3036
}
3137
], callback);
3238
}
3339

34-
GitApp.prototype.require = function() {
35-
return null;
40+
GitApp.prototype.require = function(callback) {
41+
var self = this;
42+
if (this.module) {
43+
callback(null, this.module);
44+
return;
45+
}
46+
47+
async.waterfall([
48+
function(callback) {
49+
self.repo.findBlob(self.tree, "/app/index.js", callback);
50+
},
51+
function(blob, callback) {
52+
self.repo.cat_file(blob.object, blob.type, callback);
53+
},
54+
function(src, callback) {
55+
var Module = module.constructor;
56+
var m = new Module();
57+
m.paths = module.paths;
58+
m._compile(src, "/app/index.js");
59+
self.module = m;
60+
61+
callback(null, m);
62+
}
63+
], callback);
3664
}
3765

66+
GitApp.find = function(name, rev, callback) {
67+
callback = callback || function() {};
68+
69+
if (GitApp.appcache[name] && GitApp.appcache[name][rev]) {
70+
callback(null, GitApp.appcache[name][rev]);
71+
}
72+
73+
var userapp = new GitApp(name, rev);
74+
userapp.load(function(err) {
75+
if (err) {
76+
callback(err, null);
77+
}
78+
else {
79+
GitApp.appcache[name] = GitApp.appcache[name] || Object.create(null);
80+
GitApp.appcache[name][rev] = userapp;
81+
callback(null, userapp);
82+
}
83+
});
84+
}
3885

coder-apps/common/vcs/app/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var pathutil = require('path');
22
var fs = require('fs');
33
var async = require('async');
44
var Git = require('./git');
5+
var GitApp = require('./gitapp');
56
var mime = require('mime');
67

78
var isVersionned = function(app, callback) {

0 commit comments

Comments
 (0)