commit - 2e3a6c3be72d70d3e58780d82d7545cd0a3d9e82
commit + 924100791157ab7f6842e7c7b5bd225c00ad5aab
blob - 7250f245c5c0f1d67211774b2cb6c6c571879eec
blob + 0576ad42d0f1ba289507bd309c4b24c1bb0f2dbb
--- lib/send.c
+++ lib/send.c
if (!got_ref_name_is_valid(refname))
continue;
+ if (strncmp(refname, "refs/tags/", 10) == 0)
+ is_tag = 1;
/*
* Find out whether this is a reference we want to upload.
* Otherwise we can still use this reference as a hint to
err = got_ref_resolve(&my_id, repo, my_ref);
if (err)
goto done;
- if (got_object_id_cmp(my_id, their_id) != 0)
+ if (got_object_id_cmp(my_id, their_id) != 0) {
+ if (!overwrite_refs && is_tag) {
+ err = got_error_fmt(
+ GOT_ERR_SEND_TAG_EXISTS,
+ "%s", refname);
+ free(my_id);
+ goto done;
+ }
refs_to_send++;
+ }
free(my_id);
-
}
- if (strncmp(refname, "refs/tags/", 10) == 0)
- is_tag = 1;
-
- /* Prevent tags from being overwritten by default. */
- if (!overwrite_refs && my_ref && is_tag) {
- err = got_error_fmt(GOT_ERR_SEND_TAG_EXISTS,
- "%s", refname);
- goto done;
- }
-
/* Check if their object exists locally. */
err = got_object_open(&obj, repo, their_id);
if (err) {
blob - bf7378666fbaffcdef506f93bd3df20d0c8e454b
blob + 3eb8e7e29c0385103d644e4f76b51d8f5f478922
--- regress/cmdline/send.sh
+++ regress/cmdline/send.sh
got tag -l -r $testroot/repo-clone | grep ^tag | sort > $testroot/stdout
echo "tag 1.0 $tag_id" > $testroot/stdout.expected
echo "tag 2.0 $tag_id2" >> $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
+
+ # Send the same tags again. This should be a no-op.
+ got send -q -r $testroot/repo -T > $testroot/stdout 2> $testroot/stderr
+ ret="$?"
+ if [ "$ret" != "0" ]; then
+ echo "got send command failed unexpectedly" >&2
+ test_done "$testroot" "$ret"
+ return 1
+ fi
+
+ echo -n > $testroot/stdout.expected
cmp -s $testroot/stdout $testroot/stdout.expected
ret="$?"
if [ "$ret" != "0" ]; then