github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/task_cache_factory.go (about)

     1  package db
     2  
     3  //go:generate counterfeiter . TaskCacheFactory
     4  
     5  type TaskCacheFactory interface {
     6  	Find(jobID int, stepName string, path string) (UsedTaskCache, bool, error)
     7  	FindOrCreate(jobID int, stepName string, path string) (UsedTaskCache, error)
     8  }
     9  
    10  type taskCacheFactory struct {
    11  	conn Conn
    12  }
    13  
    14  func NewTaskCacheFactory(conn Conn) TaskCacheFactory {
    15  	return &taskCacheFactory{
    16  		conn: conn,
    17  	}
    18  }
    19  
    20  func (f *taskCacheFactory) Find(jobID int, stepName string, path string) (UsedTaskCache, bool, error) {
    21  	return usedTaskCache{
    22  		jobID:    jobID,
    23  		stepName: stepName,
    24  		path:     path,
    25  	}.find(f.conn)
    26  }
    27  
    28  func (f *taskCacheFactory) FindOrCreate(jobID int, stepName string, path string) (UsedTaskCache, error) {
    29  	tx, err := f.conn.Begin()
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  
    34  	defer Rollback(tx)
    35  
    36  	utc, err := usedTaskCache{
    37  		jobID:    jobID,
    38  		stepName: stepName,
    39  		path:     path,
    40  	}.findOrCreate(tx)
    41  
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	err = tx.Commit()
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  
    51  	return utc, nil
    52  }