* [PATCH/RFC v3] git-p4: warn if git authorship won't be retained @ 2011-05-10 19:27 Luke Diamand 2011-05-10 19:27 ` [PATCH] " Luke Diamand 0 siblings, 1 reply; 6+ messages in thread From: Luke Diamand @ 2011-05-10 19:27 UTC (permalink / raw) To: git; +Cc: Pete Wyckoff, Junio C Hamano, Luke Diamand Updated version of git-p4 authorship warning suggested by Junio, incorporating fixes for problems in v2 pointed out by Pete Wyckoff. Luke Diamand (1): git-p4: warn if git authorship won't be retained contrib/fast-import/git-p4 | 33 +++++++++++++++++++++++++++- contrib/fast-import/git-p4.txt | 7 ++++++ t/t9800-git-p4.sh | 46 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] git-p4: warn if git authorship won't be retained 2011-05-10 19:27 [PATCH/RFC v3] git-p4: warn if git authorship won't be retained Luke Diamand @ 2011-05-10 19:27 ` Luke Diamand 2011-05-10 22:11 ` Luke Diamand ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Luke Diamand @ 2011-05-10 19:27 UTC (permalink / raw) To: git; +Cc: Pete Wyckoff, Junio C Hamano, Luke Diamand If the git commits you are submitting contain changes made by other people, the authorship will not be retained. Change git-p4 to warn of this and to note that --preserve-user can be used to solve the problem (if you have suitable permissions). The warning can be disabled. Add a test case and update documentation. Requested-by: Junio C Hamano <gitster@pobox.com> Helped-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Luke Diamand <luke@diamand.org> --- contrib/fast-import/git-p4 | 33 +++++++++++++++++++++++++++- contrib/fast-import/git-p4.txt | 7 ++++++ t/t9800-git-p4.sh | 46 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4 index bd8c761..021b985 100755 --- a/contrib/fast-import/git-p4 +++ b/contrib/fast-import/git-p4 @@ -614,6 +614,7 @@ class P4Submit(Command, P4UserMap): self.verbose = False self.preserveUser = gitConfig("git-p4.preserveUser").lower() == "true" self.isWindows = (platform.system() == "Windows") + self.myP4UserId = None def check(self): if len(p4CmdList("opened ...")) > 0: @@ -721,6 +722,25 @@ class P4Submit(Command, P4UserMap): return 1 return 0 + def p4UserId(self): + if self.myP4UserId: + return self.myP4UserId + + results = p4CmdList("user -o") + for r in results: + if r.has_key('User'): + self.myP4UserId = r['User'] + return r['User'] + die("Could not find your p4 user id") + + def p4UserIsMe(self, p4User): + # return True if the given p4 user is actually me + me = self.p4UserId() + if not p4User or p4User != me: + return False + else: + return True + def prepareSubmitTemplate(self): # remove lines in the Files section that show changes to files outside the depot path we're committing into template = "" @@ -750,8 +770,7 @@ class P4Submit(Command, P4UserMap): def applyCommit(self, id): print "Applying %s" % (read_pipe("git log --max-count=1 --pretty=oneline %s" % id)) - if self.preserveUser: - (p4User, gitEmail) = self.p4UserForCommit(id) + (p4User, gitEmail) = self.p4UserForCommit(id) if not self.detectRenames: # If not explicitly set check the config variable @@ -887,6 +906,11 @@ class P4Submit(Command, P4UserMap): newdiff += "+" + line f.close() + if self.checkAuthorship and not self.p4UserIsMe(p4User): + submitTemplate += "######## git author %s does not match your p4 account.\n" % gitEmail + submitTemplate += "######## Use git-p4 option --preserve-user to modify authorship\n" + submitTemplate += "######## Use git-p4 config git-p4.skipUserNameCheck hides this message.\n" + separatorLine = "######## everything below this line is just the diff #######\n" [handle, fileName] = tempfile.mkstemp() @@ -998,6 +1022,11 @@ class P4Submit(Command, P4UserMap): commits.append(line.strip()) commits.reverse() + if self.preserveUser or (gitConfig("git-p4.skipUserNameCheck") == "true"): + self.checkAuthorship = False + else: + self.checkAuthorship = True + if self.preserveUser: self.checkValidP4Users(commits) diff --git a/contrib/fast-import/git-p4.txt b/contrib/fast-import/git-p4.txt index d46b7a5..3c7c138 100644 --- a/contrib/fast-import/git-p4.txt +++ b/contrib/fast-import/git-p4.txt @@ -226,6 +226,13 @@ stop. With allowMissingPerforceUsers set to true, git-p4 will use the current user (i.e. the behavior without --preserve-user) and carry on with the perforce commit. +git-p4.skipUserNameCheck + + git config [--global] git-p4.skipUserNameCheck false + +When submitting, git-p4 checks that the git commits are authored by the current +p4 user, and warns if they are not. This disables the check. + Implementation Details... ========================= diff --git a/t/t9800-git-p4.sh b/t/t9800-git-p4.sh index 4fb0e24..d6c7d13 100755 --- a/t/t9800-git-p4.sh +++ b/t/t9800-git-p4.sh @@ -160,6 +160,15 @@ p4_check_commit_author() { fi } +make_change_by_user() { + file=$1 + name=$2 + email=$3 + echo "username: a change by $name" >> $file && + git add $file && + git commit --author "$name <$email>" -m "a change by $name" +} + # Test username support, submitting as user 'alice' test_expect_success 'preserve users' ' p4_add_user alice Alice && @@ -213,6 +222,43 @@ test_expect_success 'preserve user where author is unknown to p4' ' rm -rf "$git" && mkdir "$git" ' +# If we're *not* using --preserve-user, git-p4 should warn if we're submitting +# changes that are not all ours. +# Test: user in p4 and user unknown to p4. +# Test: warning disabled and user is the same. +test_expect_success 'not preserving user with mixed authorship' ' + "$GITP4" clone --dest="$git" //depot && + cd "$git" && + git config git-p4.skipSubmitEditCheck true + p4_add_user derek Derek && + + make_change_by_user usernamefile3 Derek derek@localhost && + (P4EDITOR=cat P4USER=alice P4PASSWD=secret "$GITP4" commit | + grep "git author derek@localhost does not match") && + git diff --exit-code HEAD..p4/master && + + make_change_by_user usernamefile3 Charlie charlie@localhost && + (P4EDITOR=cat P4USER=alice P4PASSWD=secret "$GITP4" commit | + grep "git author charlie@localhost does not match") && + git diff --exit-code HEAD..p4/master && + + make_change_by_user usernamefile3 alice alice@localhost && + !(P4EDITOR=cat P4USER=alice P4PASSWD=secret "$GITP4" commit | + grep "does not match") && + git diff --exit-code HEAD..p4/master && + + git config git-p4.skipUserNameCheck true && + make_change_by_user usernamefile3 Charlie charlie@localhost && + !(P4EDITOR=cat P4USER=alice P4PASSWD=secret "$GITP4" commit | + grep "git author charlie@localhost does not match") && + git diff --exit-code HEAD..p4/master && + + p4_check_commit_author usernamefile3 alice && + cd "$TRASH_DIRECTORY" && + rm -rf "$git" && mkdir "$git" +' + + test_expect_success 'shutdown' ' pid=`pgrep -f p4d` && test -n "$pid" && -- 1.7.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] git-p4: warn if git authorship won't be retained 2011-05-10 19:27 ` [PATCH] " Luke Diamand @ 2011-05-10 22:11 ` Luke Diamand 2011-05-10 22:51 ` Junio C Hamano 2011-05-10 23:38 ` Junio C Hamano 2 siblings, 0 replies; 6+ messages in thread From: Luke Diamand @ 2011-05-10 22:11 UTC (permalink / raw) To: git; +Cc: Pete Wyckoff, Junio C Hamano, Luke Diamand On Tue, May 10, 2011 at 8:27 PM, Luke Diamand <luke@diamand.org> wrote: > If the git commits you are submitting contain changes made by > other people, the authorship will not be retained. Change git-p4 > to warn of this and to note that --preserve-user can be used > to solve the problem (if you have suitable permissions). > The warning can be disabled. > Of course, I've forgotten the && in the test case. Sigh. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] git-p4: warn if git authorship won't be retained 2011-05-10 19:27 ` [PATCH] " Luke Diamand 2011-05-10 22:11 ` Luke Diamand @ 2011-05-10 22:51 ` Junio C Hamano 2011-05-11 7:50 ` Luke Diamand 2011-05-10 23:38 ` Junio C Hamano 2 siblings, 1 reply; 6+ messages in thread From: Junio C Hamano @ 2011-05-10 22:51 UTC (permalink / raw) To: Luke Diamand; +Cc: git, Pete Wyckoff Luke Diamand <luke@diamand.org> writes: > diff --git a/t/t9800-git-p4.sh b/t/t9800-git-p4.sh > index 4fb0e24..d6c7d13 100755 > --- a/t/t9800-git-p4.sh > +++ b/t/t9800-git-p4.sh > @@ -160,6 +160,15 @@ p4_check_commit_author() { > fi > } > > +make_change_by_user() { > + file=$1 > + name=$2 > + email=$3 file=$1 name=$2 email=$3 && > + echo "username: a change by $name" >> $file && > ... > @@ -213,6 +222,43 @@ test_expect_success 'preserve user where author is unknown to p4' ' > rm -rf "$git" && mkdir "$git" > ' > > +# If we're *not* using --preserve-user, git-p4 should warn if we're submitting > +# changes that are not all ours. > +# Test: user in p4 and user unknown to p4. > +# Test: warning disabled and user is the same. > +test_expect_success 'not preserving user with mixed authorship' ' > + "$GITP4" clone --dest="$git" //depot && > + cd "$git" && > + git config git-p4.skipSubmitEditCheck true > + p4_add_user derek Derek && > + ... > + p4_check_commit_author usernamefile3 alice && > + cd "$TRASH_DIRECTORY" && > + rm -rf "$git" && mkdir "$git" > +' When the commands in the && chain fails after 'cd "$git"' near the top but not before 'cd "$TRASH_DIRECTORY"' near the end, you would end up starting the next test from somewhere different from "$TRASH_DIRECTORY". Do it like this instead: "$GITP4" clone --dest="$git" //depot && ( cd "$git" && ... ) && rm -fr "$git" ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] git-p4: warn if git authorship won't be retained 2011-05-10 22:51 ` Junio C Hamano @ 2011-05-11 7:50 ` Luke Diamand 0 siblings, 0 replies; 6+ messages in thread From: Luke Diamand @ 2011-05-11 7:50 UTC (permalink / raw) To: Junio C Hamano; +Cc: git, Pete Wyckoff On Tue, May 10, 2011 at 11:51 PM, Junio C Hamano <gitster@pobox.com> wrote: <snip> > >> + ... >> + p4_check_commit_author usernamefile3 alice && >> + cd "$TRASH_DIRECTORY" && >> + rm -rf "$git" && mkdir "$git" >> +' > > When the commands in the && chain fails after 'cd "$git"' near the top but > not before 'cd "$TRASH_DIRECTORY"' near the end, you would end up starting > the next test from somewhere different from "$TRASH_DIRECTORY". > > Do it like this instead: > > "$GITP4" clone --dest="$git" //depot && > ( > cd "$git" && > ... > ) && > rm -fr "$git" > Thanks - that might explain a few oddities I had when testing. There's a few others of those in the earlier tests; I'll resend this patch, and send a second patch to fix those if that's ok. Regards! Luke ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] git-p4: warn if git authorship won't be retained 2011-05-10 19:27 ` [PATCH] " Luke Diamand 2011-05-10 22:11 ` Luke Diamand 2011-05-10 22:51 ` Junio C Hamano @ 2011-05-10 23:38 ` Junio C Hamano 2 siblings, 0 replies; 6+ messages in thread From: Junio C Hamano @ 2011-05-10 23:38 UTC (permalink / raw) To: Luke Diamand; +Cc: git, Pete Wyckoff Luke Diamand <luke@diamand.org> writes: > If the git commits you are submitting contain changes made by > other people, the authorship will not be retained. Change git-p4 > to warn of this and to note that --preserve-user can be used > to solve the problem (if you have suitable permissions). > The warning can be disabled. > > Add a test case and update documentation. > > Requested-by: Junio C Hamano <gitster@pobox.com> > Helped-by: Pete Wyckoff <pw@padd.com> > Signed-off-by: Luke Diamand <luke@diamand.org> Heh, I didn't really "request" it; I am not a git-p4 user and am in no position to judge if such a feature is useful. If you felt it is a good thing to do, please take full the credit (no need to resend; I am not complaining). Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-05-11 16:36 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-05-10 19:27 [PATCH/RFC v3] git-p4: warn if git authorship won't be retained Luke Diamand 2011-05-10 19:27 ` [PATCH] " Luke Diamand 2011-05-10 22:11 ` Luke Diamand 2011-05-10 22:51 ` Junio C Hamano 2011-05-11 7:50 ` Luke Diamand 2011-05-10 23:38 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).