--- /dev/null
+///<script type="text/javascript">
+
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+
+const Spawn = imports.Spawn.Spawn;
+const File = imports.File.File;
+ /**
+ * @namespace Git
+ *
+ * Class to handle git operations..???
+ *
+ * usage:
+ *
+ * Git = import.Git.Git;
+ *
+ * var g = new Git( '/home/me/git' );
+ *
+ * g.run('commit', { all : true , message : 'test' }, 'filename',)
+ *
+ * or
+ * print(Git.run('/home/me/git', 'log'))
+ *
+ *
+ *
+ */
+
+
+/**
+ * @class Git
+ * @param repo {String} directory that the repo is in, either bare or not.
+ *
+ *
+ */
+//var prototypeInit = false;
+function Git( repo) {
+
+ if (!GLib.file_test(repo, GLib.FileTest.IS_DIR)) {
+ throw "Repo does not exist";
+ }
+ this.repo = repo;
+ /*
+ if (!prototypeInit) {
+ // proto type on set up yet..
+ // we could list this to generate methods.. /usr/lib/git-core/
+ var props = Gil.prototypeInit();
+ for (var i in props) {
+ this[i]= props[i];
+ }
+ }
+ */
+
+}
+Git.prototype = {
+ repo : '',
+ /**
+ * @method run
+ * @arg command {String} command to run
+ * @arg arguments.... {String|Object} arguments to send to command
+ * { xxxx : yyyy} -> --xxxx YYYYY
+ * { x : yyyy} -> -x yyyy
+ *
+ */
+ run : function() {
+ //print("GIT RUN");
+ var args = ['git'];
+
+
+ for (var i=0;i< arguments.length;i++) {
+ if (typeof(arguments[i]) == 'string') {
+ args.push(arguments[i]);
+ continue;
+ }
+ if (typeof(arguments[i]) == 'object') {
+ for(var k in arguments[i]) {
+ var v = arguments[i][k];
+
+ args.push(k.length > 1 ? ('--' + k) : ('-' + k));
+
+ if (v === true) {
+ continue;
+ }
+ args.push(v);
+ }
+ }
+
+ }
+ var env = [ "HOME=" + GLib.get_home_dir() ];
+
+ if (File.exists(this.repo + '/.git/config')) {
+ env.push("GITPATH=" + this.repo );
+ }
+
+
+ //print(args.join( ' '));
+ var sp = new Spawn({
+ //env : [ "GITPATH=" + this.repo , "HOME=" + GLib.get_home_dir() ],
+ env : env,
+ cwd : this.repo,
+ args: args,
+ debug: true,
+ exceptions : false,
+ async : false
+ });
+ var out = sp.run();
+ // parse output for some commands ?
+ return out;
+ }
+}
+
+
+/**
+ * @function run
+ * @arg command {String} command to run
+ * @arg arguments.... {String|Object} arguments to send to command
+ *
+ *
+ */
+
+function run() {
+ // print("Git.run()");
+ var args = Array.prototype.slice.call(arguments);
+ //print(JSON.stringify(args));
+ var repo = args.shift(args);
+ var x = new Git(repo);
+ // print(JSON.stringify(args));
+ return x.run.apply(x, args);
+
+}
+
+// test.
+
+//print(run('/home/alan/gitlive/gitlive', 'log'));
+