[Intel-gfx] [maintainer-tools PATCH] dim: Check for required tags before pushing a branch

Jani Nikula jani.nikula at intel.com
Thu Mar 3 12:18:50 UTC 2016


On Thu, 03 Mar 2016, Imre Deak <imre.deak at intel.com> wrote:
> On Thu, 2016-03-03 at 10:11 +0200, Jani Nikula wrote:
>> On Wed, 02 Mar 2016, Imre Deak <imre.deak at intel.com> wrote:
>> > Check if the committer's and author's Signed-off-by line and at
>> > least
>> > one Reviewed-by line exists in each commit to be pushed.
>> > 
>> > Signed-off-by: Imre Deak <imre.deak at intel.com>
>> > ---
>> >  dim | 32 ++++++++++++++++++++++++++++++++
>> >  1 file changed, 32 insertions(+)
>> > 
>> > diff --git a/dim b/dim
>> > index 1addd6f..b951fb4 100755
>> > --- a/dim
>> > +++ b/dim
>> > @@ -361,6 +361,37 @@ function dim_nightly_forget
>> >  	git rerere forget
>> >  }
>> >  
>> > +function assert_one_commit_tag
>> > +{
>> > +        local commit_message="$1"
>> > +        local tag="$2"
>> > +
>> > +        if ! echo "$commit_message" | grep -q "^$tag"; then
>> 
>> I think you'll find this is too strict. There may be subtle
>> differences
>> in the author (which comes from the patch email From: header) and
>> signed-off-by lines.
>
> How about requiring that at least the name part matches? We have a few
> existing cases where it doesn't due to the missing "name" part in
> GIT_AUTHOR_EMAIL, but imo that's just incorrect setup on the author's
> side.

I don't think that will fly either. You need to run this against a bunch
of commits in the tree now, and see what it says.

>
>> > +                echo "Tag '$tag' missing from $commit"
>> > +                return 1
>> > +        fi
>> > +
>> > +}
>> > +
>> > +function assert_all_commit_tags
>> > +{
>> > +        local branch=$1
>> > +        local new_commits=$(git rev-list
>> > $DIM_DRM_INTEL_REMOTE/$branch..$branch)
>> > +
>> > +        local commit
>> > +        for commit in $new_commits; do
>> > +                local commit_message=$(git show -s --format=%B
>> > $commit)
>> > +                local committer_email=$(git show -s --format="%cn
>> > <%ce>" $commit)
>> > +                local author_email=$(git show -s --format="%an
>> > <%ae>" $commit)
>> > +
>> > +                assert_one_commit_tag "$commit_message" "Signed-
>> > off-by: $author_email"
>> > +                assert_one_commit_tag "$commit_message" "Signed-
>> > off-by: $committer_email"
>> > +                assert_one_commit_tag "$commit_message" "Reviewed-
>> > by: .\+ <.\+ at .\+>"
>> 
>> If you write a patch and I review and push it, I won't add an extra
>> reviewed-by, just a signed-off-by.
>
> To me it's clearer to state explicitly that you reviewed it, but if
> people don't do that in general then I'll remove this check.

Alternatively, you can check that the patch has either 1) two
signed-off-bys, or 2) one reviewed-by and one signed-off-by.

>
>> > +        done
>> > +        return 0
>> > +}
>> > +
>> >  # push branch $1, rebuild nightly. the rest of the arguments are
>> > passed to git
>> >  # push.
>> >  function dim_push_branch
>> > @@ -374,6 +405,7 @@ function dim_push_branch
>> >  	shift
>> >  
>> >  	assert_branch $branch
>> > +	assert_all_commit_tags $branch
>> 
>> This should be added to the checkpatch part instead of push. First,
>> we
>> need to push a lot of non-i915 stuff when rebasing fixes or pushing
>> backmerges. Second, it is useful to be able to non-intrusively check
>> this before pushing.
>
> Ok, I can move it to dim_checkpatch.
>
> But I also wanted to actually prevent the push without proper commit
> tags. So how about a customizable DIM_PRE_PUSH_CHECK that would be
> called from dim_push_branch?

I think I'd like to have this in dim_checkpatch, and condition people to
run that before they push anything.

BR,
Jani.



>
> --Imre
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Jani Nikula, Intel Open Source Technology Center


More information about the Intel-gfx mailing list