github.com/kilpkonn/gtm-enhanced@v1.3.5/metric/manager.go (about) 1 // Copyright 2016 Michael Schenk. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package metric 6 7 import ( 8 "github.com/git-time-metric/gtm/event" 9 "github.com/git-time-metric/gtm/note" 10 "github.com/git-time-metric/gtm/project" 11 "github.com/git-time-metric/gtm/scm" 12 "github.com/git-time-metric/gtm/util" 13 ) 14 15 // Process events for last git commit and save time spent as a git note 16 // If interim is true, process events for the current working and staged files 17 func Process(interim bool, projPath ...string) (note.CommitNote, error) { 18 defer util.Profile()() 19 20 rootPath, gtmPath, err := project.Paths(projPath...) 21 if err != nil { 22 return note.CommitNote{}, err 23 } 24 25 // load any saved metrics 26 metricMap, err := loadMetrics(gtmPath) 27 if err != nil { 28 return note.CommitNote{}, err 29 } 30 31 // process event files 32 epochEventMap, err := event.Process(gtmPath, interim) 33 if err != nil { 34 return note.CommitNote{}, err 35 } 36 37 // allocate time for events 38 for ep := range epochEventMap { 39 err := allocateTime(ep, metricMap, epochEventMap[ep]) 40 if err != nil { 41 return note.CommitNote{}, err 42 } 43 } 44 45 var commitNote note.CommitNote 46 47 if interim { 48 commitMap, readonlyMap, err := buildInterimCommitMaps(metricMap, projPath...) 49 if err != nil { 50 return note.CommitNote{}, err 51 } 52 53 commitNote, err = buildCommitNote(rootPath, commitMap, readonlyMap) 54 if err != nil { 55 return note.CommitNote{}, err 56 } 57 58 } else { 59 commitMap, readonlyMap, err := buildCommitMaps(metricMap) 60 if err != nil { 61 return note.CommitNote{}, err 62 } 63 64 commitNote, err = buildCommitNote(rootPath, commitMap, readonlyMap) 65 if err != nil { 66 return note.CommitNote{}, err 67 } 68 69 if err := scm.CreateNote(note.Marshal(commitNote), project.NoteNameSpace); err != nil { 70 return note.CommitNote{}, err 71 } 72 if err := saveAndPurgeMetrics(gtmPath, metricMap, commitMap, readonlyMap); err != nil { 73 return note.CommitNote{}, err 74 } 75 } 76 77 return commitNote, nil 78 }