Re: [PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-05 Thread Yuya Nishihara
On Wed, 04 Oct 2017 18:25:41 +0100, FUJIWARA Katsunori wrote:
> At Tue, 3 Oct 2017 22:22:52 +0900,
> Yuya Nishihara wrote:
> > 
> > On Sun, 01 Oct 2017 17:15:06 +0100, FUJIWARA Katsunori wrote:
> > > At Sun, 01 Oct 2017 13:00:18 +0100,
> > > Yuya Nishihara wrote:
> > > > 
> > > > # HG changeset patch
> > > > # User Yuya Nishihara 
> > > > # Date 1506856910 -3600
> > > > #  Sun Oct 01 12:21:50 2017 +0100
> > > > # Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
> > > > # Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
> > > > extdata: abort if external command exits with non-zero status
> > > > 
> > > > It could be a warning, but a warning in template output would be 
> > > > unreadable.
> > > 
> > > > diff --git a/tests/test-extdata.t b/tests/test-extdata.t
> > > > --- a/tests/test-extdata.t
> > > > +++ b/tests/test-extdata.t
> > > > @@ -12,6 +12,7 @@ test revset support
> > > >> filedata = file:extdata.txt
> > > >> notes = notes.txt
> > > >> shelldata = shell:cat extdata.txt | grep 2
> > > 
> > > Just nit:
> > > 
> > > I sometime forget that filtering by grep might cause non-zero exit
> > > code. So, hint like "use `| grep PATTERN | cat` to allow empty
> > > external data" or so will prevent me from falling into a pitfall in
> > > the future :-)
> > 
> > Good catch. So it might not be ideal to check the exit code by default.
> 
> But it is also fact that "abort at non-zero exit code" itself is
> reasonable for consistency, because validity of external data isn't
> ensured at "non-zero exit code".
> 
> Therefore, let's write document with an explanation like
> "unintentional failure with grep" (in the future) ! :-)
> 
> (or does we need another "ignore exist code of shell command" scheme
> other than "shell:" ?)

encode/decode filters?

I'm not sure if which will be better. For grep, erroring out is inconvenient,
but for curl, non-zero status should be detected. However, the latter isn't
possible if an error is ignored at all. So I lean towards raising Abort in
such case.
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


Re: [PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-04 Thread FUJIWARA Katsunori
At Tue, 3 Oct 2017 22:22:52 +0900,
Yuya Nishihara wrote:
> 
> On Sun, 01 Oct 2017 17:15:06 +0100, FUJIWARA Katsunori wrote:
> > At Sun, 01 Oct 2017 13:00:18 +0100,
> > Yuya Nishihara wrote:
> > > 
> > > # HG changeset patch
> > > # User Yuya Nishihara 
> > > # Date 1506856910 -3600
> > > #  Sun Oct 01 12:21:50 2017 +0100
> > > # Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
> > > # Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
> > > extdata: abort if external command exits with non-zero status
> > > 
> > > It could be a warning, but a warning in template output would be 
> > > unreadable.
> > 
> > > diff --git a/tests/test-extdata.t b/tests/test-extdata.t
> > > --- a/tests/test-extdata.t
> > > +++ b/tests/test-extdata.t
> > > @@ -12,6 +12,7 @@ test revset support
> > >> filedata = file:extdata.txt
> > >> notes = notes.txt
> > >> shelldata = shell:cat extdata.txt | grep 2
> > 
> > Just nit:
> > 
> > I sometime forget that filtering by grep might cause non-zero exit
> > code. So, hint like "use `| grep PATTERN | cat` to allow empty
> > external data" or so will prevent me from falling into a pitfall in
> > the future :-)
> 
> Good catch. So it might not be ideal to check the exit code by default.
> 

But it is also fact that "abort at non-zero exit code" itself is
reasonable for consistency, because validity of external data isn't
ensured at "non-zero exit code".

Therefore, let's write document with an explanation like
"unintentional failure with grep" (in the future) ! :-)

(or does we need another "ignore exist code of shell command" scheme
other than "shell:" ?)

-- 
--
[FUJIWARA Katsunori] fo...@lares.dti.ne.jp
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


Re: [PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-04 Thread Augie Fackler
On Sun, Oct 01, 2017 at 01:00:18PM +0100, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara 
> # Date 1506856910 -3600
> #  Sun Oct 01 12:21:50 2017 +0100
> # Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
> # Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
> extdata: abort if external command exits with non-zero status

I've queued 1-6, but will await a version of 7 that logs a warning or
similar per foozy's comment about grep (which I appreciated, as I
would have missed that.)
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


Re: [PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-04 Thread Augie Fackler
On Tue, Oct 03, 2017 at 10:22:52PM +0900, Yuya Nishihara wrote:
> On Sun, 01 Oct 2017 17:15:06 +0100, FUJIWARA Katsunori wrote:
> > At Sun, 01 Oct 2017 13:00:18 +0100,
> > Yuya Nishihara wrote:
> > >
> > > # HG changeset patch
> > > # User Yuya Nishihara 
> > > # Date 1506856910 -3600
> > > #  Sun Oct 01 12:21:50 2017 +0100
> > > # Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
> > > # Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
> > > extdata: abort if external command exits with non-zero status
> > >
> > > It could be a warning, but a warning in template output would be 
> > > unreadable.
> >
> > > diff --git a/tests/test-extdata.t b/tests/test-extdata.t
> > > --- a/tests/test-extdata.t
> > > +++ b/tests/test-extdata.t
> > > @@ -12,6 +12,7 @@ test revset support
> > >> filedata = file:extdata.txt
> > >> notes = notes.txt
> > >> shelldata = shell:cat extdata.txt | grep 2
> >
> > Just nit:
> >
> > I sometime forget that filtering by grep might cause non-zero exit
> > code. So, hint like "use `| grep PATTERN | cat` to allow empty
> > external data" or so will prevent me from falling into a pitfall in
> > the future :-)
>
> Good catch. So it might not be ideal to check the exit code by default.

Maybe it should be as a debug message, so that with --debug these
things can be figured out.

> ___
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


Re: [PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-03 Thread Yuya Nishihara
On Sun, 01 Oct 2017 17:15:06 +0100, FUJIWARA Katsunori wrote:
> At Sun, 01 Oct 2017 13:00:18 +0100,
> Yuya Nishihara wrote:
> > 
> > # HG changeset patch
> > # User Yuya Nishihara 
> > # Date 1506856910 -3600
> > #  Sun Oct 01 12:21:50 2017 +0100
> > # Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
> > # Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
> > extdata: abort if external command exits with non-zero status
> > 
> > It could be a warning, but a warning in template output would be unreadable.
> 
> > diff --git a/tests/test-extdata.t b/tests/test-extdata.t
> > --- a/tests/test-extdata.t
> > +++ b/tests/test-extdata.t
> > @@ -12,6 +12,7 @@ test revset support
> >> filedata = file:extdata.txt
> >> notes = notes.txt
> >> shelldata = shell:cat extdata.txt | grep 2
> 
> Just nit:
> 
> I sometime forget that filtering by grep might cause non-zero exit
> code. So, hint like "use `| grep PATTERN | cat` to allow empty
> external data" or so will prevent me from falling into a pitfall in
> the future :-)

Good catch. So it might not be ideal to check the exit code by default.
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


Re: [PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-01 Thread FUJIWARA Katsunori
At Sun, 01 Oct 2017 13:00:18 +0100,
Yuya Nishihara wrote:
> 
> # HG changeset patch
> # User Yuya Nishihara 
> # Date 1506856910 -3600
> #  Sun Oct 01 12:21:50 2017 +0100
> # Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
> # Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
> extdata: abort if external command exits with non-zero status
> 
> It could be a warning, but a warning in template output would be unreadable.

> diff --git a/tests/test-extdata.t b/tests/test-extdata.t
> --- a/tests/test-extdata.t
> +++ b/tests/test-extdata.t
> @@ -12,6 +12,7 @@ test revset support
>> filedata = file:extdata.txt
>> notes = notes.txt
>> shelldata = shell:cat extdata.txt | grep 2

Just nit:

I sometime forget that filtering by grep might cause non-zero exit
code. So, hint like "use `| grep PATTERN | cat` to allow empty
external data" or so will prevent me from falling into a pitfall in
the future :-)


> +  > fail = shell:false
>> EOF
>$ cat <<'EOF' > extdata.txt
>> 2 another comment on 2
> @@ -50,6 +51,9 @@ test bad extdata() revset source
>$ hg log -qr "extdata(unknown)"
>abort: unknown extdata source 'unknown'
>[255]
> +  $ hg log -qr "extdata(fail)"
> +  abort: extdata command 'false' failed: exited with status 1
> +  [255]
>  
>  test template support:
>  
> ___
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

-- 
--
[FUJIWARA Katsunori] fo...@lares.dti.ne.jp
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH 7 of 7] extdata: abort if external command exits with non-zero status

2017-10-01 Thread Yuya Nishihara
# HG changeset patch
# User Yuya Nishihara 
# Date 1506856910 -3600
#  Sun Oct 01 12:21:50 2017 +0100
# Node ID 86c51cf6c4ff8a9a01e34e365c8fbc50415d072e
# Parent  b3a36705720f5ed1e7cc5129b27450ca59c7952b
extdata: abort if external command exits with non-zero status

It could be a warning, but a warning in template output would be unreadable.

diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -1039,7 +1039,7 @@ def extdatasource(repo, source):
 raise error.Abort(_("unknown extdata source '%s'") % source)
 
 data = {}
-src = proc = None
+src = proc = err = None
 try:
 if spec.startswith("shell:"):
 # external commands should be run relative to the repo root
@@ -1065,8 +1065,13 @@ def extdatasource(repo, source):
 finally:
 if proc:
 proc.communicate()
+if proc.returncode != 0:
+err = (_("extdata command '%s' failed: %s")
+   % (cmd, util.explainexit(proc.returncode)[0]))
 if src:
 src.close()
+if err:
+raise error.Abort(err)
 
 return data
 
diff --git a/tests/test-extdata.t b/tests/test-extdata.t
--- a/tests/test-extdata.t
+++ b/tests/test-extdata.t
@@ -12,6 +12,7 @@ test revset support
   > filedata = file:extdata.txt
   > notes = notes.txt
   > shelldata = shell:cat extdata.txt | grep 2
+  > fail = shell:false
   > EOF
   $ cat <<'EOF' > extdata.txt
   > 2 another comment on 2
@@ -50,6 +51,9 @@ test bad extdata() revset source
   $ hg log -qr "extdata(unknown)"
   abort: unknown extdata source 'unknown'
   [255]
+  $ hg log -qr "extdata(fail)"
+  abort: extdata command 'false' failed: exited with status 1
+  [255]
 
 test template support:
 
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel