Login
timeline2.th1ish at [94e51dc289]
Login

File th1ish/timeline2.th1ish artifact a5c02bdb8b part of check-in 94e51dc289


[import {unit-common.th1ish}]
const App = object {
    f: [Fossil.createContext],
    opt:object{
        limit: (ARGV.flags.limit || ARGV.flags.n) || 5        
    }
}

if(!App.f.db || !App.f.db.repo){
    throw "No repository opened. Use -R=... to open a repo DB."
}

var sql = [api.Buffer 1024]
var bind = array[]
[sql.append {
    SELECT
      substr(uuid,1,12) AS uuid,
    -- CAST(strftime('%s',event.mtime) AS INTEGER) AS mtime,
      datetime(event.mtime,'localtime') AS timestampString,
      coalesce(euser, user) AS user,
    --- blob.rid IN leaf AS isLeaf,
    -- bgcolor AS bgColor,
      event.type AS eventType,
      (SELECT group_concat(substr(tagname,5), ',') FROM tag, tagxref
        WHERE tagname GLOB 'sym-*' AND tag.tagid=tagxref.tagid
          AND tagxref.rid=blob.rid AND tagxref.tagtype>0) as tags,
    --  tagid as tagId,
      coalesce(ecomment, comment) AS comment
    --  brief as brief
     FROM event JOIN blob 
    WHERE blob.rid=event.objid
}]
//[sql.append bufTL] // bug (th1ish): appending wrongly when arg is-a Buffer
if('string' === typename ARGV.flags.t){
    // This is not a proper tag check: it will have false positives at times
    [sql.append " AND tags LIKE ?"]
    [bind.push '%'+ARGV.flags.t+'%']
}
[sql.append ' ORDER BY mtime DESC']
if('integer' === typename App.opt.limit){
    [sql.append ' LIMIT ?']
    [bind.push App.opt.limit]
}

const eachCallback = proc(){
    //(1===rowNumber) && [print [columnNames.join '\t']]
    if(0){ [print [this.join '\t']] }
    else{
        const li = array[this.3, " @ ", this.1, " [",
                    this.0,"] by [",this.2, "]"];
        this.4 && [li.push " in branch [" this.4 "]"]
        [li.push '\n\t' this.5]
        [print [li.join '']]
   }
}

[print 'The ' App.opt.limit ' most recent timeline event(s) for '
    App.f.db.repo.filename ':']
[App.f.db.each object{
    sql:sql,
    mode:1,
    bind: bind,
    callback: eachCallback}
]