aboutsummaryrefslogtreecommitdiff
path: root/devel/got
diff options
context:
space:
mode:
authorChristian Weisgerber <naddy@FreeBSD.org>2021-04-06 19:30:58 +0000
committerChristian Weisgerber <naddy@FreeBSD.org>2021-04-06 19:30:58 +0000
commite266435ffbb1c555f9f4c754ec47c19fc1212df7 (patch)
tree85005ba9818d68ab924fa10170228f0bbb4e479f /devel/got
parentc843f27db11ff5754a4e417e2b71815e62d504b8 (diff)
downloadports-e266435ffbb1c555f9f4c754ec47c19fc1212df7.tar.gz
ports-e266435ffbb1c555f9f4c754ec47c19fc1212df7.zip
devel/got: update to 0.52
Small bug and performance fixes only, no user-visible changes.
Diffstat (limited to 'devel/got')
-rw-r--r--devel/got/Makefile2
-rw-r--r--devel/got/distinfo6
-rw-r--r--devel/got/files/patch-lib_worktree.c102
3 files changed, 106 insertions, 4 deletions
diff --git a/devel/got/Makefile b/devel/got/Makefile
index 9d1f76b4015f..8de806563cfd 100644
--- a/devel/got/Makefile
+++ b/devel/got/Makefile
@@ -1,6 +1,6 @@
PORTNAME= got
-PORTVERSION= 0.51
+PORTVERSION= 0.52
CATEGORIES= devel
MASTER_SITES= https://gameoftrees.org/releases/
diff --git a/devel/got/distinfo b/devel/got/distinfo
index cdea9908cbc9..4dba46472de5 100644
--- a/devel/got/distinfo
+++ b/devel/got/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1616533460
-SHA256 (got-0.51.tar.gz) = 03ca8a071f1126b9ba1739eb9d610bb26c13c730c002ead71b20656a45701319
-SIZE (got-0.51.tar.gz) = 493879
+TIMESTAMP = 1617736627
+SHA256 (got-0.52.tar.gz) = 625875685cbed6637cf99dc93df3ca2fa9128519752fe8cc5bd509b50a46e8b7
+SIZE (got-0.52.tar.gz) = 494359
diff --git a/devel/got/files/patch-lib_worktree.c b/devel/got/files/patch-lib_worktree.c
new file mode 100644
index 000000000000..a8fe9ecc7731
--- /dev/null
+++ b/devel/got/files/patch-lib_worktree.c
@@ -0,0 +1,102 @@
+https://git.gameoftrees.org/gitweb/?p=got.git;a=commitdiff;h=c6e8a8268ec4f4240d51dcfd54d05c5370060747
+
+--- lib/worktree.c.orig 2021-04-06 19:21:25 UTC
++++ lib/worktree.c
+@@ -1246,14 +1246,16 @@ install_blob(struct got_worktree *worktree, const char
+ * safe location in the work tree!
+ */
+ static const struct got_error *
+-replace_existing_symlink(const char *ondisk_path, const char *target_path,
+- size_t target_len)
++replace_existing_symlink(int *did_something, const char *ondisk_path,
++ const char *target_path, size_t target_len)
+ {
+ const struct got_error *err = NULL;
+ ssize_t elen;
+ char etarget[PATH_MAX];
+ int fd;
+
++ *did_something = 0;
++
+ /*
+ * "Bad" symlinks (those pointing outside the work tree or into the
+ * .got directory) are installed in the work tree as a regular file
+@@ -1277,6 +1279,7 @@ replace_existing_symlink(const char *ondisk_path, cons
+ return NULL; /* nothing to do */
+ }
+
++ *did_something = 1;
+ err = update_symlink(ondisk_path, target_path, target_len);
+ if (fd != -1 && close(fd) == -1 && err == NULL)
+ err = got_error_from_errno2("close", ondisk_path);
+@@ -1398,7 +1401,6 @@ install_symlink(int *is_bad_symlink, struct got_worktr
+
+ if (*is_bad_symlink) {
+ /* install as a regular file */
+- *is_bad_symlink = 1;
+ got_object_blob_rewind(blob);
+ err = install_blob(worktree, ondisk_path, path,
+ GOT_DEFAULT_FILE_MODE, GOT_DEFAULT_FILE_MODE, blob,
+@@ -1409,20 +1411,26 @@ install_symlink(int *is_bad_symlink, struct got_worktr
+
+ if (symlink(target_path, ondisk_path) == -1) {
+ if (errno == EEXIST) {
++ int symlink_replaced;
+ if (path_is_unversioned) {
+ err = (*progress_cb)(progress_arg,
+ GOT_STATUS_UNVERSIONED, path);
+ goto done;
+ }
+- err = replace_existing_symlink(ondisk_path,
+- target_path, target_len);
++ err = replace_existing_symlink(&symlink_replaced,
++ ondisk_path, target_path, target_len);
+ if (err)
+ goto done;
+ if (progress_cb) {
+- err = (*progress_cb)(progress_arg,
+- reverting_versioned_file ?
+- GOT_STATUS_REVERT : GOT_STATUS_UPDATE,
+- path);
++ if (symlink_replaced) {
++ err = (*progress_cb)(progress_arg,
++ reverting_versioned_file ?
++ GOT_STATUS_REVERT :
++ GOT_STATUS_UPDATE, path);
++ } else {
++ err = (*progress_cb)(progress_arg,
++ GOT_STATUS_EXISTS, path);
++ }
+ }
+ goto done; /* Nothing else to do. */
+ }
+@@ -1930,11 +1938,19 @@ update_blob(struct got_worktree *worktree,
+ goto done;
+ }
+
+- if (ie && status != GOT_STATUS_MISSING &&
+- (te->mode & S_IXUSR) == (sb.st_mode & S_IXUSR)) {
++ if (ie && status != GOT_STATUS_MISSING && S_ISREG(sb.st_mode) &&
++ (S_ISLNK(te->mode) ||
++ (te->mode & S_IXUSR) == (sb.st_mode & S_IXUSR))) {
++ /*
++ * This is a regular file or an installed bad symlink.
++ * If the file index indicates that this file is already
++ * up-to-date with respect to the repository we can skip
++ * updating contents of this file.
++ */
+ if (got_fileindex_entry_has_commit(ie) &&
+ memcmp(ie->commit_sha1, worktree->base_commit_id->sha1,
+ SHA1_DIGEST_LENGTH) == 0) {
++ /* Same commit. */
+ err = sync_timestamps(worktree->root_fd,
+ path, status, ie, &sb);
+ if (err)
+@@ -1946,6 +1962,7 @@ update_blob(struct got_worktree *worktree,
+ if (got_fileindex_entry_has_blob(ie) &&
+ memcmp(ie->blob_sha1, te->id.sha1,
+ SHA1_DIGEST_LENGTH) == 0) {
++ /* Different commit but the same blob. */
+ err = sync_timestamps(worktree->root_fd,
+ path, status, ie, &sb);
+ goto done;