Hi guys, I met a pretty weird staff when running the following code to 
update tags.
Code:

#!/usr/bin/env python

from concurrent import futures
import sh

executor = futures.ThreadPoolExecutor(
    max_workers=20, thread_name_prefix="update-tags"
)

tag_list = [ f"tag-test-{i}" for i in range(1,100)]


def update_tag(tag_name):
    current_commit_id = sh.git("rev-parse", "HEAD").strip()
    print("fetch remote tags")
    try:
        sh.git("fetch", "--all", "--tags", "--force","--atomic")
    except Exception:
        pass
    output=sh.git("rev-list","-n","1",tag_name)
    if output.strip("\n") == current_commit_id:
        return
    print(f"{tag_name}: commit id before update is {output}")
    # sh.git("tag","-d",tag_name)
    print(f"{tag_name}: create tag with current commit {current_commit_id}")
    sh.git("tag","--force", "-a","-m","test",tag_name)
    print(f"{tag_name}: push to remote")
    sh.git("push", "origin", tag_name, "--force")
    output=sh.git("rev-list","-n","1",tag_name)
    print(f"{tag_name}: commit id after update is {output}")

threadpool_results = executor.map(update_tag, tag_list)

current_commit_id = sh.git("rev-parse", "HEAD").strip()
print(f"current repo commit is {current_commit_id}")
print(list(threadpool_results))
for tag_name in tag_list:
    output=sh.git("rev-list","-n","1",tag_name)
    if output.strip("\n") != current_commit_id:
        print(f"{tag_name}: Failed to update tag {tag_name}")

In the code above, when we update a tag, we fetch the remote tags first, 
then compare the tag with current local commit to decide whether we should 
update or not.

When we run this process concurrently, we find some of the tags failed to 
update. Moreover, the command does not fail. That's so weird.

taking tag-test-98 as an example, the commit id of this tag was changed 
after running git tag. However, the tag is unchanged after the whole thread 
pool is finished.

tag-test-98: commit id before the update is 
75e3f1b922a4673baa73fe4312928088d10a620c
tag-test-98: create tag with current commit 
4dc6859c15f0a25b532f050ddc9f75a1a25d3860
tag-test-98: push to remote
tag-test-98: commit id after update is 
75e3f1b922a4673baa73fe4312928088d10a620c
tag-test-98: Failed to update tag tag-test-98

Is it a bug or something?

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/git-users/b2f77dec-b1c7-4d25-81ee-f9c46906216an%40googlegroups.com.

Reply via email to