commit 3af9de885a0d557ecb7810536cd451f3c320fa68 from: Stefan Sperling date: Wed Sep 22 13:32:37 2021 UTC fix 'got send' with tree objects which contain symlinks; reported by Omar commit - ad324bf53a11587dc227a2c00b65020595aa18dc commit + 3af9de885a0d557ecb7810536cd451f3c320fa68 blob - 6f64f97e5ab0a743040b77f12b907d6537a7f7f5 blob + edaba0504b633bbda16633528dc8c085ed9058e5 --- lib/pack_create.c +++ lib/pack_create.c @@ -372,8 +372,7 @@ load_tree_entries(struct got_object_id_queue *ids, str break; } - if (got_object_tree_entry_is_symlink(e) || - got_object_tree_entry_is_submodule(e) || + if (got_object_tree_entry_is_submodule(e) || got_object_idset_contains(idset, id)) continue; @@ -389,7 +388,7 @@ load_tree_entries(struct got_object_id_queue *ids, str if (err) break; STAILQ_INSERT_TAIL(ids, qid, entry); - } else if (S_ISREG(mode)) { + } else if (S_ISREG(mode) || S_ISLNK(mode)) { err = add_meta(v, idset, id, p, GOT_OBJ_TYPE_BLOB, mtime, loose_obj_only, repo); if (err) blob - 5fdd09a2185f5b0ec3129d8c2ff58780671c2b0a blob + bf7378666fbaffcdef506f93bd3df20d0c8e454b --- regress/cmdline/send.sh +++ regress/cmdline/send.sh @@ -40,6 +40,10 @@ EOF | tr -d ' ' | cut -d: -f2` echo "modified alpha" > $testroot/repo/alpha + (cd $testroot/repo && git rm -q beta) + (cd $testroot/repo && ln -s epsilon/zeta symlink && git add symlink) + echo "new file alpha" > $testroot/repo/new + (cd $testroot/repo && git add new) git_commit $testroot/repo -m "modified alpha" local commit_id2=`git_show_head $testroot/repo` @@ -94,7 +98,19 @@ EOF >> $testroot/stdout.expected echo "refs/remotes/origin/master: $commit_id" \ >> $testroot/stdout.expected + + cmp -s $testroot/stdout $testroot/stdout.expected + ret="$?" + if [ "$ret" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$ret" + return 1 + fi + got tree -r $testroot/repo-clone -c $commit_id2 -i -R \ + > $testroot/stdout + got tree -r $testroot/repo -c $commit_id2 -i -R \ + > $testroot/stdout.expected cmp -s $testroot/stdout $testroot/stdout.expected ret="$?" if [ "$ret" != "0" ]; then