Tim Allen wrote:

> The POSIX specification for the dot command[1] states:
>
>     EXIT STATUS
>         Returns the value of the last command executed, or a zero exit
>         status if no command is executed.
> 
> If an empty file is sourced, then "no command is executed"

I agree.  Looking through "git log --patch src/main.c", though, I find
v0.5.3~42 (Do not clobber exit status in dotcmd., 2005-03-03), which
appears to have been meant to take care of the following case:

        $ cat printstatus.sh
        echo $?
        $ false
        $ . ./printstatus.sh
        1

I wonder if the following on top might help (imitating evalcmd)?

Signed-off-by: Jonathan Nieder <[email protected]>
---
 src/main.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/main.c b/src/main.c
index b4c07e9..b38dc27 100644
--- a/src/main.c
+++ b/src/main.c
@@ -202,6 +202,7 @@ cmdloop(int top)
        union node *n;
        struct stackmark smark;
        int inter;
+       int status = 0;
        int numeof = 0;
 
        TRACE(("cmdloop(%d) called\n", top));
@@ -235,6 +236,7 @@ cmdloop(int top)
                        job_warning = (job_warning == 2) ? 1 : 0;
                        numeof = 0;
                        evaltree(n, 0);
+                       status = exitstatus;
                }
                popstackmark(&smark);
 
@@ -245,7 +247,7 @@ cmdloop(int top)
                }
        }
 
-       return 0;
+       return status;
 }
 
 
@@ -318,7 +320,6 @@ int
 dotcmd(int argc, char **argv)
 {
        int status = 0;
-       exitstatus = 0;
 
        if (argc >= 2) {                /* That's what SVR2 does */
                char *fullname;
@@ -326,9 +327,8 @@ dotcmd(int argc, char **argv)
                fullname = find_dot_file(argv[1]);
                setinputfile(fullname, INPUT_PUSH_FILE);
                commandname = fullname;
-               cmdloop(0);
+               status = cmdloop(0);
                popfile();
-               status = exitstatus;
        }
        return status;
 }
-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to