summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2025-11-25 15:20:20 +0100
committerAlbert Cervin <albert@acervin.com>2025-11-25 15:20:20 +0100
commitc21bd5f2d9f4ec2230b31040fd3c34cbe417476f (patch)
treec4d43d09326ea623172bd2763e7076d5e79dc751
parentf5645976b2ed01e643db9183826b6afdf9a96541 (diff)
downloaddged-c21bd5f2d9f4ec2230b31040fd3c34cbe417476f.tar.gz
dged-c21bd5f2d9f4ec2230b31040fd3c34cbe417476f.tar.xz
dged-c21bd5f2d9f4ec2230b31040fd3c34cbe417476f.zip
Fix mode not being kept on the file
Also add a revision to the --version
-rw-r--r--Makefile13
-rwxr-xr-xscripts/generate-revision8
-rw-r--r--src/dged/buffer.c4
-rw-r--r--src/main/main.c3
4 files changed, 23 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index cfb430a..aac5f42 100644
--- a/Makefile
+++ b/Makefile
@@ -64,6 +64,8 @@ CFLAGS ?= -g -O2
CFLAGS += -Werror -Wall -Wextra -std=c99\
-I $(.CURDIR)/src\
-I $(.CURDIR)/src/main\
+ -I $(.OBJDIR)/src\
+ -I $(.OBJDIR)/src/main\
-DDATADIR="$(prefix)/$(datadir)"\
-DTEST_ROOT="$(.CURDIR)/test"
@@ -120,19 +122,24 @@ FILES = $(DEPS) \
$(MAIN_OBJS) \
$(OBJS) \
$(TEST_OBJS) \
+ src/main/revision.h \
dged \
libdged.a
+src/main/revision.h: scripts/generate-revision
+ @$(.CURDIR)/scripts/generate-revision $@
+
# dependency generation
-.c.d: config.mk
+.c.d: config.mk src/main/revision.h
@mkdir -p $(@D)
$(CC) -MM $(CFLAGS) -MT $*.o $< > $@
@sed -i 's,\($*\)\.o[ :]*,\1.o $@ : ,g' $@
-.c.o: config.mk
+.c.o: config.mk src/main/revision.h
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c $< -o $@
+# TODO: remove this
grammars:
@if [ "$(SYNTAX_ENABLE)" = "true" ] && [ -n "$$BUNDLE_TREESITTER_GRAMMARS" ]; then \
IFS=":"; for p in "$$BUNDLE_TREESITTER_GRAMMARS"; do \
@@ -142,7 +149,7 @@ grammars:
mkdir -p ./grammars; \
fi
-dged: $(MAIN_OBJS) libdged.a grammars
+dged: src/main/revision.h $(MAIN_OBJS) libdged.a grammars
$(CC) $(LDFLAGS) $(MAIN_OBJS) libdged.a -o dged -lm
libdged.a: $(OBJS)
diff --git a/scripts/generate-revision b/scripts/generate-revision
new file mode 100755
index 0000000..9698141
--- /dev/null
+++ b/scripts/generate-revision
@@ -0,0 +1,8 @@
+#! /bin/sh
+rev="$(git rev-parse --verify --quiet HEAD)"
+cat << EOF > "$1"
+#ifndef _REVISION_H
+#define _REVISION_H
+#define DGED_REVISION "$rev"
+#endif
+EOF
diff --git a/src/dged/buffer.c b/src/dged/buffer.c
index 3259534..6337096 100644
--- a/src/dged/buffer.c
+++ b/src/dged/buffer.c
@@ -440,6 +440,8 @@ void buffer_to_file(struct buffer *buffer) {
minibuffer_echo_timeout(4, "wrote %d lines to %s", nlines_to_write,
buffer->filename);
fclose(file);
+ struct stat sb;
+ stat(buffer->filename, &sb);
if (rename(backupname, fullname) == -1) {
minibuffer_echo("failed to rename backup \"%s\" to \"%s\": %s", backupname,
fullname, strerror(errno));
@@ -447,6 +449,7 @@ void buffer_to_file(struct buffer *buffer) {
free(backupname);
return;
}
+ chmod(buffer->filename, sb.st_mode);
free(fullname);
free(backupname);
@@ -454,7 +457,6 @@ void buffer_to_file(struct buffer *buffer) {
buffer->modified = false;
undo_push_boundary(&buffer->undo, (struct undo_boundary){.save_point = true});
- struct stat sb;
stat(buffer->filename, &sb);
buffer->last_write = sb.st_mtim;
diff --git a/src/main/main.c b/src/main/main.c
index 70c62a3..e9f7938 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -39,6 +39,7 @@
#include "cmds.h"
#include "completion.h"
#include "frame-hooks.h"
+#include "revision.h"
#include "version.h"
/* welcome.h is generated from welcome.inc with
@@ -169,7 +170,7 @@ static void usage(void) {
}
static void version(void) {
- printf("dged - %s\n© Albert Cervin 2024\n", DGED_VERSION);
+ printf("dged - %s (%s)\n© Albert Cervin 2025\n", DGED_VERSION, DGED_REVISION);
}
int main(int argc, char *argv[]) {