From c21bd5f2d9f4ec2230b31040fd3c34cbe417476f Mon Sep 17 00:00:00 2001 From: Albert Cervin Date: Tue, 25 Nov 2025 15:20:20 +0100 Subject: Fix mode not being kept on the file Also add a revision to the --version --- Makefile | 13 ++++++++++--- scripts/generate-revision | 8 ++++++++ src/dged/buffer.c | 4 +++- src/main/main.c | 3 ++- 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100755 scripts/generate-revision 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[]) { -- cgit v1.2.3