about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--redo.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/redo.c b/redo.c
index 5dc8064..8bdf85d 100644
--- a/redo.c
+++ b/redo.c
@@ -677,14 +677,22 @@ redo_ifchange(int targetc, char *targetv[])
 			char *target = targetchdir(job->target);
 			char *depfile = targetdep(target);
 
-			rename(job->temp_depfile, depfile);
-
 			if (stat(job->temp_target, &st) == 0 &&
 			    st.st_size > 0) {
+				int dfd, tfd;
+
+				dfd = open(job->temp_depfile, O_WRONLY|O_APPEND);
+				tfd = open(job->temp_target, O_RDONLY);
+				dprintf(dfd, "=%s@%s\n", hashfile(tfd), target);
+				close(dfd);
+				close(tfd);
+
 				rename(job->temp_target, target);
 			} else {
 				remove(job->temp_target);
 			}
+
+			rename(job->temp_depfile, depfile);
 		}
 
 		vacate(job->implicit);