[PATCH 2/2] cache.c: cache ls_cache output properly

John Keeping john at keeping.me.uk
Sat May 18 19:46:39 CEST 2013


By using the standard library's printf, cache_ls does not redirect its
output to the cache when we change the process' stdout file descriptor
to point to the cache file.  Fix this by using "htmlf" in the same way
that we do for writing HTTP headers.

Signed-off-by: John Keeping <john at keeping.me.uk>
---
 cache.c                       | 13 +++++++------
 tests/t0020-validate-cache.sh |  8 +++++++-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/cache.c b/cache.c
index c1d777b..265d392 100644
--- a/cache.c
+++ b/cache.c
@@ -15,6 +15,7 @@
 
 #include "cgit.h"
 #include "cache.h"
+#include "html.h"
 
 #define CACHE_BUFSIZE (1024 * 4)
 
@@ -398,12 +399,12 @@ int cache_ls(const char *path)
 				  fullname.buf, strerror(err), err);
 			continue;
 		}
-		printf("%s %s %10"PRIuMAX" %s\n",
-		       fullname.buf,
-		       sprintftime("%Y-%m-%d %H:%M:%S",
-				   slot.cache_st.st_mtime),
-		       (uintmax_t)slot.cache_st.st_size,
-		       slot.buf);
+		htmlf("%s %s %10"PRIuMAX" %s\n",
+		      fullname.buf,
+		      sprintftime("%Y-%m-%d %H:%M:%S",
+				  slot.cache_st.st_mtime),
+		      (uintmax_t)slot.cache_st.st_size,
+		      slot.buf);
 		close_slot(&slot);
 	}
 	slot.cache_name = strbuf_detach(&fullname, NULL);
diff --git a/tests/t0020-validate-cache.sh b/tests/t0020-validate-cache.sh
index 7e7379a..657765d 100755
--- a/tests/t0020-validate-cache.sh
+++ b/tests/t0020-validate-cache.sh
@@ -66,7 +66,13 @@ test_expect_success 'verify cache-size=1021' '
 	cgit_url "bar/diff" &&
 	cgit_url "bar/patch" &&
 	ls cache >output &&
-	test_line_count = 13 output
+	test_line_count = 13 output &&
+	cgit_url "foo/ls_cache" >output.full &&
+	strip_headers <output.full >output &&
+	test_line_count = 13 output &&
+	# Check that ls_cache output is cached correctly
+	cgit_url "foo/ls_cache" >output.second &&
+	test_cmp output.full output.second
 '
 
 test_done
-- 
1.8.3.rc2.285.gfc18c2c



More information about the CGit mailing list