Paul Eggert wrote:
> > - If F is under version control and not modified locally:
> > the time of the last change of F in the version control system.
>
> It's worth mentioning that in Git, this is the commit timestamp and not
> the author timestamp.
Done through the first of the patches below.
> Why is this a C program and not a shell script? A script would be easier
> to maintain. That's worth commenting on, at least.
For my use as part of 'xgettext', I need a C program
- for portability, since xgettext is meant to work on native Windows,
- for speed, since the 2 git subprocesses per file are already enough of
a slowdown; I don't need extra runtime overhead of a shell.
If someone needs the functionality as part of the build system, feel free
to add a module 'vc-mtime-script' that implements the same thing within a few
lines of /bin/sh script.
2025-02-25 Bruno Haible <[email protected]>
csharpcomp: Reduce number of read() system calls.
* lib/csharpcomp.c: Include <stddef.h>.
(compile_csharp_using_dotnet): Read bytes into a buffer, not one-by-one.
2025-02-25 Bruno Haible <[email protected]>
vc-mtime: Reduce number of read() system calls.
* lib/vc-mtime.c: Include <stddef.h>.
(git_vc_controlled): Read bytes into a buffer, not one-by-one.
2025-02-25 Bruno Haible <[email protected]>
vc-mtime: Improve comment.
Suggested by Paul Eggert.
* lib/vc-mtime.c (git_mtime): Clarify CommitDate vs. AuthorDate.
>From 399d9dce562a909ae493a591371e0a6c83518182 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Tue, 25 Feb 2025 09:19:52 +0100
Subject: [PATCH 1/3] vc-mtime: Improve comment.
Suggested by Paul Eggert.
* lib/vc-mtime.c (git_mtime): Clarify CommitDate vs. AuthorDate.
---
ChangeLog | 6 ++++++
lib/vc-mtime.c | 4 +++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 3e170e5117..dfea4e0e6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-02-25 Bruno Haible <[email protected]>
+
+ vc-mtime: Improve comment.
+ Suggested by Paul Eggert.
+ * lib/vc-mtime.c (git_mtime): Clarify CommitDate vs. AuthorDate.
+
2025-02-24 Bruno Haible <[email protected]>
vc-mtime: New module.
diff --git a/lib/vc-mtime.c b/lib/vc-mtime.c
index 0f333d5b6b..0e609033f6 100644
--- a/lib/vc-mtime.c
+++ b/lib/vc-mtime.c
@@ -102,7 +102,9 @@ static int
git_mtime (struct timespec *mtime, const char *filename)
{
/* Run "git log -1 --format=%ct -- FILENAME". It prints the time of last
- modification, as the number of seconds since the Epoch.
+ modification (the 'CommitDate', not the 'AuthorDate' which merely
+ represents the time at which the author locally committed the first version
+ of the change), as the number of seconds since the Epoch.
The '--' option is for the case that the specified file was removed. */
const char *argv[7];
pid_t child;
--
2.43.0
>From 60cd34886c2c9f509974239fcf64a61f9a507d14 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Tue, 25 Feb 2025 09:04:28 +0100
Subject: [PATCH 2/3] vc-mtime: Reduce number of read() system calls.
* lib/vc-mtime.c: Include <stddef.h>.
(git_vc_controlled): Read bytes into a buffer, not one-by-one.
---
ChangeLog | 6 ++++++
lib/vc-mtime.c | 15 +++++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index dfea4e0e6e..af7413ee5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-02-25 Bruno Haible <[email protected]>
+
+ vc-mtime: Reduce number of read() system calls.
+ * lib/vc-mtime.c: Include <stddef.h>.
+ (git_vc_controlled): Read bytes into a buffer, not one-by-one.
+
2025-02-25 Bruno Haible <[email protected]>
vc-mtime: Improve comment.
diff --git a/lib/vc-mtime.c b/lib/vc-mtime.c
index 0e609033f6..f80bd77b69 100644
--- a/lib/vc-mtime.c
+++ b/lib/vc-mtime.c
@@ -21,6 +21,7 @@
/* Specification. */
#include "vc-mtime.h"
+#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
@@ -56,11 +57,17 @@ git_vc_controlled (const char *filename)
return false;
/* Read the subprocess output, and test whether it is non-empty. */
- size_t count = 0;
- char c;
+ ptrdiff_t count = 0;
- while (safe_read (fd[0], &c, 1) > 0)
- count++;
+ for (;;)
+ {
+ char buf[1024];
+ ptrdiff_t n = safe_read (fd[0], buf, sizeof (buf));
+ if (n > 0)
+ count += n;
+ else
+ break;
+ }
close (fd[0]);
--
2.43.0
>From f703b5434b1eb02c483f631fe23368130ebc3e07 Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Tue, 25 Feb 2025 09:04:45 +0100
Subject: [PATCH 3/3] csharpcomp: Reduce number of read() system calls.
* lib/csharpcomp.c: Include <stddef.h>.
(compile_csharp_using_dotnet): Read bytes into a buffer, not one-by-one.
---
ChangeLog | 6 ++++++
lib/csharpcomp.c | 15 +++++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index af7413ee5e..4ece515f20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-02-25 Bruno Haible <[email protected]>
+
+ csharpcomp: Reduce number of read() system calls.
+ * lib/csharpcomp.c: Include <stddef.h>.
+ (compile_csharp_using_dotnet): Read bytes into a buffer, not one-by-one.
+
2025-02-25 Bruno Haible <[email protected]>
vc-mtime: Reduce number of read() system calls.
diff --git a/lib/csharpcomp.c b/lib/csharpcomp.c
index ad74604dd8..5b6c9684d9 100644
--- a/lib/csharpcomp.c
+++ b/lib/csharpcomp.c
@@ -23,6 +23,7 @@
#include <dirent.h>
#include <errno.h>
+#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -311,11 +312,17 @@ compile_csharp_using_dotnet (const char * const *sources,
{
/* Read the subprocess output, and test whether it is
non-empty. */
- size_t count = 0;
- char c;
+ ptrdiff_t count = 0;
- while (safe_read (fd[0], &c, 1) > 0)
- count++;
+ for (;;)
+ {
+ char buf[1024];
+ ptrdiff_t n = safe_read (fd[0], buf, sizeof (buf));
+ if (n > 0)
+ count += n;
+ else
+ break;
+ }
close (fd[0]);
--
2.43.0