@@ -113,14 +113,34 @@ Pipeline <- R6::R6Class(classname = "Pipeline", list(
113113 # Out of date?
114114 edges $ from_mtime <- file.mtime(as.character(edges $ from ))
115115 edges $ to_mtime <- file.mtime(as.character(edges $ to ))
116- edges $ out_of_date <- edges $ from_mtime > edges $ to_mtime
117- edges $ out_of_date <- ifelse(is.na(edges $ out_of_date ), FALSE , edges $ out_of_date )
118- for (i in seq_along(edges $ from )) {
119- x <- edges $ out_of_date
120- edges $ out_of_date <- (edges $ from %in% edges [edges $ out_of_date , " to" ]) | (edges $ out_of_date )
121- if (identical(edges $ out_of_date , x )) break
116+ edges $ out_of_date <- ifelse(edges $ .source , FALSE , edges $ from_mtime > edges $ to_mtime )
117+
118+ # Propagate out-of-dateness
119+ edges_i <- edges
120+ for (i in 1 : nrow(edges )) {
121+ edges_i <- merge(
122+ edges_i ,
123+ edges_i [, c(" from" , " to" , " to_mtime" )],
124+ by.x = " to" ,
125+ by.y = " from" ,
126+ suffixes = c(" " , " 2" )
127+ )
128+
129+ edges_i $ to <- edges_i $ to2
130+ edges_i $ to_mtime <- edges_i $ to_mtime2
131+ edges_i $ out_of_date <-
132+ ifelse(
133+ is.na(edges_i $ from_mtime > edges_i $ to_mtime ),
134+ edges_i $ out_of_date ,
135+ edges_i $ out_of_date | edges_i $ from_mtime > edges_i $ to_mtime
136+ )
137+ outdated <- edges_i [edges_i $ out_of_date , " to" ]
138+ edges $ out_of_date <- (edges $ to %in% outdated ) | (edges $ out_of_date )
139+
140+ edges_i <- edges_i [, names(edges )]
122141 }
123142
143+
124144 # Group
125145 nodes $ group <- ifelse(nodes $ id %in% edges [edges $ out_of_date , " to" ], " Out-of-date" , " Up-to-date" )
126146 nodes $ group <- ifelse(nodes $ id %in% edges [edges $ .source , " to" ], " Source" , nodes $ group )
@@ -143,6 +163,7 @@ Pipeline <- R6::R6Class(classname = "Pipeline", list(
143163 out <- visNetwork :: visGroups(out , groupname = " Out-of-date" , color = " #ffcaef" )
144164 out <- visNetwork :: visGroups(out , groupname = " Up-to-date" , color = " #caffda" )
145165 out <- visNetwork :: visLegend(out )
166+ out <- visNetwork :: visHierarchicalLayout(out , sortMethod = " directed" , direction = " LR" )
146167 print(out )
147168 invisible (self )
148169 },
@@ -156,6 +177,7 @@ Pipeline <- R6::R6Class(classname = "Pipeline", list(
156177 out <- visNetwork :: visGroups(out , groupname = " Out-of-date" , color = " #ffcaef" )
157178 out <- visNetwork :: visGroups(out , groupname = " Up-to-date" , color = " #caffda" )
158179 out <- visNetwork :: visLegend(out )
180+ out <- visNetwork :: visHierarchicalLayout(out , sortMethod = " directed" , direction = " LR" )
159181 visNetwork :: visSave(out , file , ... )
160182 invisible (self )
161183 }
0 commit comments