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  }