Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Amend co-authors on a commit? #17

Open
rkotze opened this issue Apr 2, 2018 · 6 comments
Open

Amend co-authors on a commit? #17

rkotze opened this issue Apr 2, 2018 · 6 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@rkotze
Copy link
Owner

rkotze commented Apr 2, 2018

Should we make an easy amend feature if a user realises they have committed the wrong or forgotten to add co-authors?

Perhaps something like: git mob rk di --amend - this will replace co-authors in the commit?

@rkotze rkotze added the question Further information is requested label Apr 2, 2018
@dideler
Copy link
Contributor

dideler commented Apr 8, 2018

I don't find it adds much value since this is easily possible with existing commands.

git mob <coauthors>
git commit --amend

If we increase the functionality with a git command, it can become a slippery slope for supporting more existing commands. Would rather keep git-mob's scope small and focused.

@rkotze rkotze closed this as completed May 5, 2018
@rkotze
Copy link
Owner Author

rkotze commented May 14, 2018

I followed those git commands to amend co-authors. Unfortunately did not work.

The co-authors did not get appended to the end. I had to copy pasta it into the message. Maybe the template does not apply on amend?

I agree we should not have this in git mob but I think it will be worked documented here how to amend a commit to add co-authors. I can see it being an issue which should have an easy to find solution.

@rkotze rkotze reopened this May 14, 2018
@dideler
Copy link
Contributor

dideler commented May 18, 2018

Good catch, doesn't look like commit templates apply to amends. 😮

This should be solved for free if we switch over to a git hook (see #22). In the mean time feel free to document it somewhere visible.

@jonsmithers
Copy link
Contributor

jonsmithers commented Jan 4, 2021

I started working on a prepare-commit-msg hook written in bash. (My team already relies on a bash prepare-commit-msg hook to insert a ticket number, so we need to combine two hooks into one)

Unlike the sample in node, this implementation only inserts co-authors that are not already present. You can amend a commit with a new set-of co-authors, and it will selectively append the new co-authors after the old co-authors. Tested only on macOS:

# https://github.com/findmypast-oss/git-mob/issues/17#issuecomment-754133882
append_git_mob_co_authors() {
  local commit_file="$1"
  if [[ "$commit_file" =~ "COMMIT_EDITMSG" ]]; then
    local commit_author current_author co_authors missing_co_authors git_message git_comments
    commit_author=$(git var GIT_AUTHOR_IDENT | grep -o '^.*>')
    current_author="$(git config user.name) <$(git config user.email)>"
    co_authors=$(git mob-print | grep '^Co-authored-by')
    if [[ "$commit_author" != "$current_author" ]]; then
      co_authors=$(echo "$co_authors"; echo "Co-authored-by: $current_author")
    fi

    commit_file_contents=$(cat "$commit_file")
    missing_co_authors="$(comm -1 -3 <(echo "$commit_file_contents" | sort -u) <(echo "$co_authors" | sort -u))"
    if [[ -n "$missing_co_authors" ]]; then
      git_message=$(echo "$commit_file_contents" | sed '/^#/,$d')
      git_comments=$(echo "$commit_file_contents" | sed -n '/^#/,$p')
      echo "$git_message" > "$commit_file"

      if ! echo "$git_message" | tail -n 1 | grep --quiet '^Co-authored-by'; then
        echo -en "\n" >> "$commit_file"
      fi
      echo "${missing_co_authors}" >> "$commit_file"
      echo "$git_comments" >> "$commit_file"
    else
      echo "git-mob co-author is already present"
    fi
  fi
}

append_git_mob_co_authors "$1" "$2"

(updated 2021-01-14 to fix a lil bug)
(updated 2021-05-28 to fix a big bug when using git commit --verbose, and to skip altogether when rebasing or using commit --message)
(updated 2021-10-15 to append the current user as a coauthor when they are amending a commit by a different author)
(updated 2021-11-09 to undo part of 2021-05-28 update. Do not skip when using commit --message)

@rkotze
Copy link
Owner Author

rkotze commented Jan 18, 2021

Thanks for sharing @jonsmithers

This would be good to add in as an alternative hook and we can list the options in the readme

@rkotze rkotze removed the question Further information is requested label May 21, 2022
@rkotze
Copy link
Owner Author

rkotze commented May 21, 2022

Perhaps it is worth having a command in Git Mob to replace the co-authors if there is a mistake.

So you would specify all the co-authors for that comment with a command like:

git mob --amend <co-authors>

It grabs the latest message (git log -1 --pretty=format:%B | cat) and replaces any existing co-authors.

What are your thoughts about the above?

@rkotze rkotze added the help wanted Extra attention is needed label Nov 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

3 participants