[Intel-gfx] [PATCH dim 1/2] dim: Add extract-tags command

Ville Syrjälä ville.syrjala at linux.intel.com
Wed Mar 15 10:51:53 UTC 2017


On Wed, Mar 15, 2017 at 11:11:29AM +0200, Jani Nikula wrote:
> On Tue, 14 Mar 2017, ville.syrjala at linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> >
> > Add a command for extracting various tags (eg. Reviwed-by:) from
> > emails. You can give the comamnd a rangeish to add the tags from
> > the same email to multiple already applied patches.
> >
> > The regexp used to pick up tags is purposefully quite broad. People
> > tend to typo these things, or add extra whitespace etc. However the
> > broad regexp does mean this occasionally picks up stuff that isn't
> > a tag. So manually amending the commit is probably a wise idea,
> > and so I simply decided to also leave a '--- extracted tags ---'
> > separator in the commit message just before the extracted tags,
> > which can be cleaned up manually when verifying that the tags look
> > correct.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > ---
> >  dim | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 60 insertions(+)
> >
> > diff --git a/dim b/dim
> > index 6d3b9734b348..4110642b2f4a 100755
> > --- a/dim
> > +++ b/dim
> > @@ -333,6 +333,28 @@ if message_id is not None:
> >  EOF
> >  }
> >  
> > +message_print_body ()
> > +{
> > +	python2 <<EOF
> > +import email
> > +
> > +def print_part(part):
> > +    mtype = part.get_content_maintype()
> > +    if mtype == 'text':
> > +        print(part.get_payload(decode=True))
> > +
> > +def print_msg(file):
> > +    msg = email.message_from_file(file)
> > +    if msg.is_multipart():
> > +        for part in msg.get_payload():
> > +            print_part(part)
> > +    else:
> > +        print_part(msg)
> > +
> > +print_msg(open('$1', 'r'))
> > +EOF
> > +}
> > +
> >  # append all arguments as tags at the end of the commit message of HEAD
> >  function dim_commit_add_tag
> >  {
> > @@ -973,6 +995,44 @@ function rangeish()
> >  	fi
> >  }
> >  
> > +dim_alias_xt=extract-tags
> > +function dim_extract_tags
> > +{
> > +	local branch=$1
> > +	shift
> > +	local range=$(rangeish "$1")
> > +	local file=`mktemp`
> 
> So shell has an annoying feature that the 'set -e' has no effect on
> commands failing when used in an initialization within the local
> variable declaration. Simple assignments would be okay, but for clarity
> I've opted to put all local variable declarations in a single line,
> folled by a blank line and then assignments. See elsewhere in dim.
> 
> I also prefer $(...) over `...`.

dim is a bit of a hodge podge of varying styles. Which is why my
copy-paste coding technique gave me all kinds of things ;)

> 
> > +
> > +	assert_branch $branch
> > +	assert_repo_clean
> > +
> > +	cat > $file
> > +
> > +	echo "message_print_body \"$file\""
> 
> Leftover debug message?

Most likely. Dropped.

> 
> > +	local tags=$(message_print_body "$file" | grep -ai '^[^>]*[A-Za-z-]\+: [^ ]')
> 
> That's indeed quite liberal in accepting stuff. But perhaps it's okay
> for starters, and we can restrict it more if it gets to be annoying.

I've had surprisingly few false positives with this myself. But yeah,
it can always be refined. Or if needed we could even make it user
configurable.

> 
> > +	test -n "$tags" || return 0
> 
> Maybe it's just me trying to maintain a 1.5k line shell script, but I'd
> like to be more verbose with the if statements. I'd write this as
> 
> 	if [[ -n "$tags" ]]; then
> 		...

Done

> 
> > +	local tags=$(printf -- "--- extracted tags ---\n%s" "$tags")
> 
> Lose the local here. Nitpick, AFAICT most git commands (like
> format-patch) wrap placeholders in *** rather than ---.

Dunno. I can live with either, so changed to ***

> 
> An interesting observation, if you put # in front of the line, you can
> actually have that as part of the commit message. But after you do 'git
> commit --amend' on it, the line gets dropped as a comment
> automatically. In short, that would save a couple of keystrokes perhaps,
> even if you'd have to move the other tags around.

That's a nice idea. I'll give it a go.

> 
> > +	git filter-branch -f --msg-filter "cat ; echo \"$tags\"" $range
> 
> I wonder what I screwed up when I was trying to use that for
> dim_commit_add_tag and failed; the current implementation of it is
> hidous. :/
> 
> > +}
> > +
> > +dim_alias_xq=extract-queued
> > +function dim_extract_queued
> > +{
> > +	dim_extract_tags drm-intel-next-queued "$@"
> > +}
> > +
> > +dim_alias_xf=extract-fixes
> > +function dim_extract_fixes
> > +{
> > +	dim_extract_tags drm-intel-fixes "$@"
> > +}
> > +
> > +dim_alias_xnf=extract-next-fixes
> > +function dim_extract_next_fixes
> > +{
> > +	dim_extract_tags drm-intel-next-fixes "$@"
> > +}
> 
> These are all in line with what we have all around, but makes me wonder

I can drop the aliases here as well if people prefer. My .dimrc already
has a boatload of these for all the other branches so having to move a
few more there isn't a big deal.

> if we should consider just working on the current branch in the future.

Not sure there is any "current branch" as such when you have worktrees
for everything.

> 
> Thanks for doing this, regardless of the nitpicks above. ;)
> 
> BR,
> Jani.
> 
> > +
> >  dim_alias_check_patch=checkpatch
> >  dim_alias_cp=checkpatch
> >  function dim_checkpatch
> 
> -- 
> Jani Nikula, Intel Open Source Technology Center

-- 
Ville Syrjälä
Intel OTC


More information about the Intel-gfx mailing list