@@ -45,12 +45,12 @@ type API struct {
45
45
46
46
// lockCh protects the below fields. We use a channel instead of a
47
47
// mutex so we can handle cancellation properly.
48
- lockCh chan struct {}
49
- containers codersdk.WorkspaceAgentListContainersResponse
50
- mtime time.Time
51
- devcontainerNames map [string ]struct {}// Track devcontainer names to avoid duplicates.
52
- knownDevcontainers []codersdk.WorkspaceAgentDevcontainer // Track predefined and runtime-detected devcontainers.
53
- configModifiedTimes map [string ]time.Time // Track when config files were last modified.
48
+ lockCh chan struct {}
49
+ containers codersdk.WorkspaceAgentListContainersResponse
50
+ mtime time.Time
51
+ devcontainerNames map [string ]struct {}// Track devcontainer names to avoid duplicates.
52
+ knownDevcontainers []codersdk.WorkspaceAgentDevcontainer // Track predefined and runtime-detected devcontainers.
53
+ configFileModifiedTimes map [string ]time.Time // Track when config files were last modified.
54
54
}
55
55
56
56
// Option is a functional option for API.
@@ -108,16 +108,16 @@ func WithWatcher(w watcher.Watcher) Option {
108
108
func NewAPI (logger slog.Logger ,options ... Option )* API {
109
109
ctx ,cancel := context .WithCancel (context .Background ())
110
110
api := & API {
111
- ctx :ctx ,
112
- cancel :cancel ,
113
- done :make (chan struct {}),
114
- logger :logger ,
115
- clock :quartz .NewReal (),
116
- cacheDuration :defaultGetContainersCacheDuration ,
117
- lockCh :make (chan struct {},1 ),
118
- devcontainerNames :make (map [string ]struct {}),
119
- knownDevcontainers : []codersdk.WorkspaceAgentDevcontainer {},
120
- configModifiedTimes :make (map [string ]time.Time ),
111
+ ctx :ctx ,
112
+ cancel :cancel ,
113
+ done :make (chan struct {}),
114
+ logger :logger ,
115
+ clock :quartz .NewReal (),
116
+ cacheDuration :defaultGetContainersCacheDuration ,
117
+ lockCh :make (chan struct {},1 ),
118
+ devcontainerNames :make (map [string ]struct {}),
119
+ knownDevcontainers : []codersdk.WorkspaceAgentDevcontainer {},
120
+ configFileModifiedTimes :make (map [string ]time.Time ),
121
121
}
122
122
for _ ,opt := range options {
123
123
opt (api )
@@ -281,7 +281,7 @@ func (api *API) getContainers(ctx context.Context) (codersdk.WorkspaceAgentListC
281
281
// Check if this container was created after the config
282
282
// file was modified.
283
283
if configFile != "" && api .knownDevcontainers [knownIndex ].Dirty {
284
- lastModified ,hasModTime := api .configModifiedTimes [configFile ]
284
+ lastModified ,hasModTime := api .configFileModifiedTimes [configFile ]
285
285
if hasModTime && container .CreatedAt .After (lastModified ) {
286
286
api .logger .Info (ctx ,"clearing dirty flag for container created after config modification" ,
287
287
slog .F ("container" ,container .ID ),
@@ -316,7 +316,7 @@ func (api *API) getContainers(ctx context.Context) (codersdk.WorkspaceAgentListC
316
316
317
317
dirty := dirtyStates [workspaceFolder ]
318
318
if dirty {
319
- lastModified ,hasModTime := api .configModifiedTimes [configFile ]
319
+ lastModified ,hasModTime := api .configFileModifiedTimes [configFile ]
320
320
if hasModTime && container .CreatedAt .After (lastModified ) {
321
321
api .logger .Info (ctx ,"new container created after config modification, not marking as dirty" ,
322
322
slog .F ("container" ,container .ID ),
@@ -473,7 +473,7 @@ func (api *API) markDevcontainerDirty(configPath string, modifiedAt time.Time) {
473
473
}
474
474
475
475
// Record the timestamp of when this configuration file was modified.
476
- api .configModifiedTimes [configPath ]= modifiedAt
476
+ api .configFileModifiedTimes [configPath ]= modifiedAt
477
477
478
478
for i := range api .knownDevcontainers {
479
479
if api .knownDevcontainers [i ].ConfigPath == configPath {