public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Matt Turner <mattst88@gentoo.org>
To: Zac Medico <zmedico@gentoo.org>
Cc: gentoo-portage-dev@lists.gentoo.org
Subject: Re: [gentoo-portage-dev] [PATCH v2 gentoolkit 2/2] eclean: Add option to delete binpkgs with changed deps
Date: Wed, 11 Mar 2020 21:43:19 -0700	[thread overview]
Message-ID: <CAEdQ38EY3-1P6LR_VdjXeEr5nJNVUxudArcqVc9WxnK-VZBEmQ@mail.gmail.com> (raw)
In-Reply-To: <CAEdQ38FjFJcP=KCJRTPYEyKbWX=Jj_6YGAgqVruQYsLkebAPKg@mail.gmail.com>

On Wed, Mar 11, 2020 at 9:36 PM Matt Turner <mattst88@gentoo.org> wrote:
>
> On Wed, Mar 11, 2020 at 9:31 PM Zac Medico <zmedico@gentoo.org> wrote:
> >
> > On 3/6/20 10:11 PM, Matt Turner wrote:
> > > Signed-off-by: Matt Turner <mattst88@gentoo.org>
> > > ---
> > >  pym/gentoolkit/eclean/cli.py    |  7 ++++++-
> > >  pym/gentoolkit/eclean/search.py | 24 +++++++++++++++++++++++-
> > >  2 files changed, 29 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py
> > > index 1a99b3e..39aafd3 100644
> > > --- a/pym/gentoolkit/eclean/cli.py
> > > +++ b/pym/gentoolkit/eclean/cli.py
> > > @@ -147,6 +147,8 @@ def printUsage(_error=None, help=None):
> > >       or help in ('all','packages'):
> > >               print( "Available", yellow("options"),"for the",
> > >                               green("packages"),"action:", file=out)
> > > +             print( yellow("     --changed-deps")+
> > > +                     "               - delete packages for which ebuild dependencies have changed", file=out)
> > >               print( yellow(" -i, --ignore-failure")+
> > >                       "             - ignore failure to locate PKGDIR", file=out)
> > >               print( file=out)
> > > @@ -263,6 +265,8 @@ def parseArgs(options={}):
> > >                               options['size-limit'] = parseSize(a)
> > >                       elif o in ("-v", "--verbose") and not options['quiet']:
> > >                                       options['verbose'] = True
> > > +                     elif o in ("--changed-deps"):
> > > +                             options['changed-deps'] = True
> > >                       elif o in ("-i", "--ignore-failure"):
> > >                               options['ignore-failure'] = True
> > >                       else:
> > > @@ -290,7 +294,7 @@ def parseArgs(options={}):
> > >       getopt_options['short']['distfiles'] = "fs:"
> > >       getopt_options['long']['distfiles'] = ["fetch-restricted", "size-limit="]
> > >       getopt_options['short']['packages'] = "i"
> > > -     getopt_options['long']['packages'] = ["ignore-failure"]
> > > +     getopt_options['long']['packages'] = ["ignore-failure", "changed-deps"]
> > >       # set default options, except 'nocolor', which is set in main()
> > >       options['interactive'] = False
> > >       options['pretend'] = False
> > > @@ -303,6 +307,7 @@ def parseArgs(options={}):
> > >       options['fetch-restricted'] = False
> > >       options['size-limit'] = 0
> > >       options['verbose'] = False
> > > +     options['changed-deps'] = False
> > >       options['ignore-failure'] = False
> > >       # if called by a well-named symlink, set the action accordingly:
> > >       action = None
> > > diff --git a/pym/gentoolkit/eclean/search.py b/pym/gentoolkit/eclean/search.py
> > > index 0efefdb..17655cb 100644
> > > --- a/pym/gentoolkit/eclean/search.py
> > > +++ b/pym/gentoolkit/eclean/search.py
> > > @@ -13,6 +13,8 @@ import sys
> > >  from functools import partial
> > >
> > >  import portage
> > > +from portage.dep import Atom, use_reduce
> > > +from portage.dep._slot_operator import strip_slots
> > >
> > >  import gentoolkit.pprinter as pp
> > >  from gentoolkit.eclean.exclude import (exclDictMatchCP, exclDictExpand,
> > > @@ -488,6 +490,17 @@ class DistfilesSearch(object):
> > >               return clean_me, saved
> > >
> > >
> > > +def _deps_equal(deps_a, deps_b, eapi, uselist=None):
> > > +     """Compare two dependency lists given a set of USE flags"""
> > > +     if deps_a == deps_b: return True
> > > +
> > > +     deps_a = use_reduce(deps_a, uselist=uselist, eapi=eapi, token_class=Atom)
> > > +     deps_b = use_reduce(deps_b, uselist=uselist, eapi=eapi, token_class=Atom)
> > > +     strip_slots(deps_a)
> > > +     strip_slots(deps_b)
> > > +     return deps_a == deps_b
> > > +
> > > +
> > >  def findPackages(
> > >               options,
> > >               exclude=None,
> > > @@ -562,7 +575,16 @@ def findPackages(
> > >
> > >               # Exclude if binpkg exists in the porttree and not --deep
> > >               if not destructive and port_dbapi.cpv_exists(cpv):
> > > -                     continue
> > > +                     if not options['changed-deps']:
> > > +                             continue
> >
> > We can't can't continue above, since that will skip all of the filters
> > that occur later in the loop. So, we have to nest the below changed-deps
> > code under if options['changed-deps']:
>
> I'm happy to make that change, but I don't think it's necessary,
> strictly speaking, since this is inside an 'if not destructive'
> conditional and the only filter afterwards is 'if destructive'.

Wait... the logic was if not destructive and
package-exists-in-porttree -> continue and do not add it to the dead
package list.

I've just changed it so it does that if changed-deps is not set... so
keep the current behavior without --changed-deps.

And if --changed-deps, check the porttree vs binpkg dependencies, and
if they still match, skip.

What is wrong with that logic?


  parent reply	other threads:[~2020-03-12  4:43 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-07  6:11 [gentoo-portage-dev] [PATCH v2 gentoolkit 1/2] eclean: Rewrite findPackages() Matt Turner
2020-03-07  6:11 ` [gentoo-portage-dev] [PATCH v2 gentoolkit 2/2] eclean: Add option to delete binpkgs with changed deps Matt Turner
2020-03-11  3:30   ` Zac Medico
2020-03-11 23:32     ` Matt Turner
2020-03-12  4:35       ` Zac Medico
2020-03-12  4:31   ` Zac Medico
2020-03-12  4:36     ` Matt Turner
2020-03-12  4:42       ` Zac Medico
2020-03-12  4:43       ` Matt Turner [this message]
2020-03-12  5:23         ` Zac Medico
2020-03-12  5:49           ` Matt Turner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAEdQ38EY3-1P6LR_VdjXeEr5nJNVUxudArcqVc9WxnK-VZBEmQ@mail.gmail.com \
    --to=mattst88@gentoo.org \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    --cc=zmedico@gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox