GitLogParser.js
authorAlan Knowles <alan@roojs.com>
Wed, 1 Aug 2012 05:01:01 +0000 (13:01 +0800)
committerAlan Knowles <alan@roojs.com>
Wed, 1 Aug 2012 05:01:01 +0000 (13:01 +0800)
GitLogParser.js [new file with mode: 0644]

diff --git a/GitLogParser.js b/GitLogParser.js
new file mode 100644 (file)
index 0000000..64f96ff
--- /dev/null
@@ -0,0 +1,120 @@
+
+var File = imports.File.File;
+
+GitLogParser = { 
+
+    parse : function(date)
+    {
+        this.date  = date;        
+        var home = '/home/alan';        
+        var lines = File.read(  home + '/.gitlog' + date.format('/Y/M/d') + 'txt').split("\n");
+        // first just convert them..
+        
+        for (var i = 0; i < lines.length; i++) {
+            lines[i] = this.parseLine(lines[i]);
+            if (i > 0) {
+                lines[i-1].span = lines[i].start - lines[i-1].start; // should be seconds..?
+            }
+        });
+        // summarize data...
+        var hours = {};
+        for (var i = 0; i < lines.length; i++) {
+            var line = lines[i];
+            var hour = hours[line].start.format('H');
+            hours[hour] = (typeof(hours[hour]) == 'undefined') ? {} : hours[hour];
+            hours[hour][project] = (typeof(hours[project]) == 'undefined') ? 
+                    { total : 0, items = [] } 
+                    : hours[project];
+            hours[hour][project].total += line.span;
+            hours[hour][project].items.push(line);
+        }
+        return hours;
+
+    },
+    parseLine : function(l) 
+    {
+        var ret = { cmd : false; line : l };
+        var ar = l.split(/\S+/);
+        var time = ar.shift();
+        ret.start = xDate.parseDate(this.date.format('Y-m-d') + ' ' + time, 'Y-m-d H:i:s');
+
+
+        while (ret.cmd !== false) {
+            var ta = ar.pop();
+            if (ta == 'false') || ta[0] == '/') {
+                ret.cmd = ta;
+                break;
+            }
+            if (!ar.length) {
+                throw "invalid line: " + l;
+            }
+
+        }
+        ret.title = ar.join(' ');
+        if (ret.title == 'IDLE') {
+            ret.project = 'IDLE';
+            return ret;        
+        }
+                
+        
+
+        if (typeof(this[ret.cmd])=='undefined') {
+            throw "Unknown application: " + ret.line;
+        }
+        if (typeof(this[ret.cmd])=='string') {
+            ret.project = this[ret.cmd]  
+        } else {
+
+            this[ret.cmd](ret);
+        }
+
+
+        return ret;
+
+    },
+
+    '/usr/bin/perl' : function(ret) {
+        if (ret.title.match(/^PAC/)) {
+            ret.project = 'Unknown';
+            return;
+        }
+        throw "Unknown match: " + ret.line;
+    },
+    '/usr/lib/icedove/icedove-bin' : 'Checking Mail',
+    '/usr/lib/chromium/chromium' : function (ret) {
+
+          switch(true) {
+
+                case (ret.title.match(/Media Clipping Portal/)):
+                    ret.project = 'Media Outreach';
+                    return;
+                
+                default:
+                    ret.project = 'Browsing';
+                    return;
+          }
+
+    },
+    '/usr/lib/Komodo-Edit-7/lib/mozilla/komodo' : function(ret) {
+          var l = ret.title.match(/Project\s+(^\)+)/);
+          print(l);
+              
+         throw "Unknown match: " + ret.line;
+    },
+    'guake' : 'Local Terminal',
+
+
+}
+
+var res = GitLogParser.parse(xDate.parseDate('2012-07-31', 'Y-m-d'));
+print(JSON.stringify(res,null,4));
+
+// open file..
+
+// read lines
+
+// summarize each hour
+
+//convert line into 'Project / filename'
+
+