public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-dev@lists.gentoo.org,James Le Cuirot <chewi@gentoo.org>
Subject: Re: [gentoo-dev] [PATCH 01/14] cdrom.eclass: Detect case-insensitively and handle special characters
Date: Wed, 19 Apr 2017 05:14:34 +0200	[thread overview]
Message-ID: <189A1488-2EFF-4CF5-BD50-E8FCD4BC3E23@gentoo.org> (raw)
In-Reply-To: <20170418223131.0f657dc2@symphony.aura-online.co.uk>

Dnia 18 kwietnia 2017 23:31:31 CEST, James Le Cuirot <chewi@gentoo.org> napisał(a):
>On Tue, 18 Apr 2017 08:08:44 +0200
>Michał Górny <mgorny@gentoo.org> wrote:
>
>> On pon, 2017-04-17 at 22:53 +0100, James Le Cuirot wrote:
>> > diff --git a/eclass/cdrom.eclass b/eclass/cdrom.eclass
>> > index 41488d2446c2..de72f15563db 100644
>> > --- a/eclass/cdrom.eclass
>> > +++ b/eclass/cdrom.eclass
>> > @@ -79,12 +79,13 @@ cdrom_get_cds() {
>> >  		export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}}
>> >  		einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
>> >  		export CDROM_SET=-1
>> > -		for f in ${CDROM_CHECK_1//:/ } ; do
>> > +		IFS=:  
>> 
>> 'local', please.
>
>This line disappears later in the series but I've amended it for the
>history anyway.
>
>> > @@ -181,28 +182,24 @@ _cdrom_locate_file_on_cd() {
>> >  	local showedmsg=0 showjolietmsg=0
>> >  
>> >  	while [[ -z ${CDROM_ROOT} ]] ; do
>> > -		local i=0
>> > -		local -a cdset=(${*//:/ })
>> > +		local i=0 cdset
>> > +		IFS=: read -a cdset <<< "${*}"  
>> 
>> -r to avoid handling escapes; -d '' to avoid finishing on newline.
>
>Good call.
>
>> > @@ -243,4 +240,27 @@ _cdrom_locate_file_on_cd() {
>> >  	done
>> >  }
>> >  
>> > +# @FUNCTION: _cdrom_glob_match
>> > +# @USAGE: <root directory> <path>
>> > +# @INTERNAL
>> > +# @DESCRIPTION:
>> > +# Locates the given path ($2) within the given root directory ($1)
>> > +# case-insensitively and returns the first actual matching path.
>This
>> > +# eclass previously used "find -iname" but it only checked the
>file
>> > +# case-insensitively and not the directories. There is "find
>-ipath" but
>> > +# this does not intelligently skip non-matching paths, making it
>> > +# slow. Case-insensitive matching can only be applied to patterns
>so
>> > +# extended globbing is used to turn regular strings into patterns.
>All
>> > +# special characters are escaped so don't worry about breaking
>this. The
>> > +# first person to make this work without an eval wins a cookie.
>> > +_cdrom_glob_match() {
>> > +	local p=\?\($(sed -e 's:[^A-Za-z0-9/]:\\\0:g' -e 's:/:)/?(:g' <<<
>"$2" || die)\)  
>> 
>> Explanatory comment needed, i.e. what gets converted into what, and
>why.
>
>I'll add this:
>
># The following line turns this:
>#  foo*foo/bar bar/baz/file.zip
>#
># Into this:
>#  ?(foo\*foo)/?(bar\ bar)/?(baz)/?(file\.zip)
>#
># This turns every path component into an escaped extended glob
># pattern to allow case-insensitive matching. Globs cannot span
># directories so each component becomes an individual pattern.

Why do you escape pattern chars? Wasn't the variable supposed to be a pattern in the first place?

-- 
Best regards,
Michał Górny (by phone)
-- 
Best regards,
Michał Górny (by phone)


  reply	other threads:[~2017-04-19  3:14 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-17 21:53 [gentoo-dev] [PATCH] cdrom.eclass: Near rewrite James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 01/14] cdrom.eclass: Detect case-insensitively and handle special characters James Le Cuirot
2017-04-18  6:08   ` Michał Górny
2017-04-18 21:31     ` James Le Cuirot
2017-04-19  3:14       ` Michał Górny [this message]
2017-04-19 21:50         ` James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 02/14] cdrom.eclass: Simplify printing of CD_ROOT_# variable names James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 03/14] cdrom.eclass: Rename CDROM_NAME_SET array to CDROM_NAMES James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 04/14] cdrom.eclass: Allow CDROM_NAMES changes before each cdrom_load_next_cd James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 05/14] cdrom.eclass: Remove ye olde Submount check James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 06/14] cdrom.eclass: Simplify loop with seq James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 07/14] cdrom.eclass: We don't know for sure how many discs will be needed James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 08/14] cdrom.eclass: Fix important typo in the multiple disc instructions James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 09/14] cdrom.eclass: Change CDROM_CHECK_# variables to a CDROM_CHECKS array James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 10/14] cdrom.eclass: The CDROM_TOTAL_CDS variable is redundant now James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 11/14] cdrom.eclass: Make CD_ROOT less of a special case, fixes #195868 James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 12/14] cdrom.eclass: Use consistent terminology in prompts and messages James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 13/14] cdrom.eclass: Update and improve documentation following changes James Le Cuirot
2017-04-17 21:53 ` [gentoo-dev] [PATCH 14/14] cdrom.eclass: Update copyright year James Le Cuirot
2017-04-18  5:51 ` [gentoo-dev] [PATCH] cdrom.eclass: Near rewrite Ulrich Mueller
2017-04-18  6:18   ` Michał Górny
2017-04-18 21:01   ` James Le Cuirot
2017-04-27 21:55 ` James Le Cuirot

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=189A1488-2EFF-4CF5-BD50-E8FCD4BC3E23@gentoo.org \
    --to=mgorny@gentoo.org \
    --cc=chewi@gentoo.org \
    --cc=gentoo-dev@lists.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