Skip to content

Commit

Permalink
Modernise diff and main code
Browse files Browse the repository at this point in the history
Applies the same code style improvements
from previous commit, but also:

- Change the interface of `fenv.parse.diff`
- Abort on error prints execution and maintain status
- fenv.main propagates execution’s return code
  • Loading branch information
derekstavis committed Oct 19, 2015
1 parent a1111f7 commit 76edd9a
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 22 deletions.
32 changes: 18 additions & 14 deletions functions/fenv.main.fish
Expand Up @@ -22,25 +22,29 @@


function fenv.main
set PROGRAM $argv
set DIVIDER (fenv.parse.divider)
set OLD_ENV (bash -c 'env')
set program $argv
set divider (fenv.parse.divider)
set previous_env (bash -c 'env')

if not set PROGRAM_EXECUTION (bash -c "$PROGRAM; echo; echo '$DIVIDER'; env")
return
end
set program_execution (bash -c "$program && (echo; echo '$divider'; env)" ^&1)
set program_status $status

if not contains -- (fenv.parse.divider) $PROGRAM_EXECUTION
echo "Foreign environment found and error! Aborting to avoid damage!"
return
if not contains -- "$divider" $program_execution
printf '%s\n' $program_execution
return $program_status
end

set PROGRAM_OUTPUT (fenv.parse.before $PROGRAM_EXECUTION)
set NEW_ENV (fenv.parse.after $PROGRAM_EXECUTION)
set program_output (fenv.parse.before $program_execution)

if test $program_status != 0
printf "%s\n" $program_output
return $program_status
end

set ENVIRONMENT_DIFF (fenv.parse.diff "$OLD_ENV $DIVIDER $NEW_ENV")
set new_env (fenv.parse.after $program_execution)

fenv.apply $ENVIRONMENT_DIFF
fenv.apply (fenv.parse.diff "$previous_env" "$new_env")

printf "%s\n" $PROGRAM_OUTPUT
printf "%s\n" $program_output
return $program_status
end
15 changes: 7 additions & 8 deletions functions/fenv.parse.diff.fish
Expand Up @@ -21,14 +21,13 @@
# SOFTWARE.


function fenv.parse.diff
set SEGMENTED_ENVIRONMENT (echo $argv | tr ' ' '\n')
set OLD_ENV (fenv.parse.before $SEGMENTED_ENVIRONMENT)
set NEW_ENV (fenv.parse.after $SEGMENTED_ENVIRONMENT)
function fenv.parse.diff -a env_before env_after
set -l before (echo $env_before | tr ' ' '\n')
set -l after (echo $env_after | tr ' ' '\n')

for environment in $NEW_ENV
if not contains -- $environment $OLD_ENV
echo $environment
end
for environment in $after
if not contains -- "$environment" $before
echo $environment
end
end
end

0 comments on commit 76edd9a

Please sign in to comment.