Compare commits
	
		
			17 Commits
		
	
	
		
			tlevine-20
			...
			v0.0.6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 87bb9f4660 | ||
|  | caabcd25ff | ||
|  | 8f82cf5aeb | ||
|  | 385ec3fe81 | ||
|  | d4eb99ffb0 | ||
|  | ed939ff39a | ||
|  | d24a71d0d7 | ||
|  | ceae1811e2 | ||
|  | 2ac3a52707 | ||
|  | 2d4de62729 | ||
|  | 3b3ba0e1fa | ||
|  | 1bc9bb2671 | ||
|  | fafd0c1801 | ||
|  | d85b0ee352 | ||
|  | cf793387e9 | ||
|  | 1f79db874b | ||
|  | c770479884 | 
| @@ -1,3 +1,5 @@ | |||||||
|  | Copyright (c) 2013, 2014, 2015, 2016 Thomas Levine | ||||||
|  | Copyright (c) 2014, Michael Klement | ||||||
| Copyright (c) 2012, ScraperWiki Limited | Copyright (c) 2012, ScraperWiki Limited | ||||||
| All rights reserved. | All rights reserved. | ||||||
| 
 | 
 | ||||||
							
								
								
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -14,6 +14,9 @@ Version 0.0.6 | |||||||
| * Remove the undocumented, experimental -x flag now that shall exists. | * Remove the undocumented, experimental -x flag now that shall exists. | ||||||
| * Display version number with the -v flag. | * Display version number with the -v flag. | ||||||
| * Document why Urchin is called "Urchin" | * Document why Urchin is called "Urchin" | ||||||
|  | * Update TODO | ||||||
|  | * Support mksh (Change a printf command.) | ||||||
|  | * Make long lines shorter. | ||||||
|  |  | ||||||
| These changes are made somewhat separately in the branches "exit-on-fail", | These changes are made somewhat separately in the branches "exit-on-fail", | ||||||
| "remove-urchin-x", "tap", and "update-readme". They are rebased into one | "remove-urchin-x", "tap", and "update-readme". They are rebased into one | ||||||
|   | |||||||
							
								
								
									
										117
									
								
								TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								TODO
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | |||||||
|  | Things I want | ||||||
|  | ============= | ||||||
|  |  | ||||||
|  | Molly guard | ||||||
|  | ------------- | ||||||
|  | The Molly-guard should be more accepting so that people don't have to use it | ||||||
|  | all the time and thus get used to using it. For example, you shouldn't need to | ||||||
|  | pass -f in this case. | ||||||
|  | https://github.com/creationix/nvm/issues/357 | ||||||
|  |  | ||||||
|  | Test speed | ||||||
|  | ------------- | ||||||
|  | Make tests run faster. | ||||||
|  | https://github.com/bike-barn/hermit/issues/62 | ||||||
|  |  | ||||||
|  | First, easier thing is probably to run tests in parallel. | ||||||
|  |  | ||||||
|  | Second, also easier thing is to tell people to save things to RAM rather than | ||||||
|  | disk whenever they can. | ||||||
|  |  | ||||||
|  | Third, harder thing is to put the test suite in RAM automatically. Maybe the | ||||||
|  | whole test directory, which includes fixtures, gets copied to a tmpfs if one | ||||||
|  | exists. | ||||||
|  |  | ||||||
|  | Hmm or maybe there's a compromise: Tell people to mount /tmp as a tmpfs so | ||||||
|  | that temp files are fast. Maybe allow people to set some other directory as | ||||||
|  | the temporary file place, in case they want a different tmpfs location. | ||||||
|  |  | ||||||
|  | Options | ||||||
|  | ------------- | ||||||
|  | I want long options. For example, there's presently -f and -e. | ||||||
|  | I want to make them -f|--force and -e|--exit. | ||||||
|  |  | ||||||
|  | Environment variables | ||||||
|  | ------------- | ||||||
|  | Do something to make it easier to debug environment variables, because that is | ||||||
|  | often confusing. | ||||||
|  | https://github.com/creationix/nvm/issues/719 | ||||||
|  | https://github.com/creationix/nvm/issues/589 | ||||||
|  |  | ||||||
|  | Documenting that people should run "env" when their tests fail might be good | ||||||
|  | enough. | ||||||
|  |  | ||||||
|  | Licensing and copyright | ||||||
|  | ------------------------ | ||||||
|  | * Reference all owners and years in the Copyright file | ||||||
|  | * Consider copyleft licenses | ||||||
|  | * Add license notices to other files if necessary | ||||||
|  |  | ||||||
|  | Packaging | ||||||
|  | ------------ | ||||||
|  | Package for package managers. | ||||||
|  |  | ||||||
|  | * I want NixOS, of course. | ||||||
|  | * Debian is probably the big one. | ||||||
|  |  | ||||||
|  | Other interesting package managers | ||||||
|  |  | ||||||
|  | * Update the npm package | ||||||
|  | * Homebrew (for Mac) | ||||||
|  |  | ||||||
|  | Windows | ||||||
|  | ---------- | ||||||
|  | Try running Urchin in Windows somehow. Interpreters include | ||||||
|  |  | ||||||
|  | * CygWin (https://www.cygwin.com/) | ||||||
|  | * MSYS (http://mingw.org/wiki/msys) | ||||||
|  | * GNU on Windows (https://github.com/bmatzelle/gow/wiki) | ||||||
|  | * Git for Windows (https://git-scm.com/download/win) | ||||||
|  | * win-bash (http://win-bash.sourceforge.net/) | ||||||
|  |  | ||||||
|  | Consider copyleft licenses | ||||||
|  | ---------- | ||||||
|  | ScraperWiki owns the original version of Urchin (Thomas Levine did the early | ||||||
|  | work as part of his work for ScraperWiki.) and originally licensed it under an | ||||||
|  | MIT-style license. Other people made changes after this original ScraperWiki | ||||||
|  | version. As of January 2016, they are just Thomas Levine (when he wasn't | ||||||
|  | working for ScraperWiki) and Michael Klement. | ||||||
|  |  | ||||||
|  | The original license was MIT just because that's what ScraperWiki put on | ||||||
|  | everything. Should we change the license? | ||||||
|  |  | ||||||
|  | The MIT-style license grants pretty much all rights. It says that you need | ||||||
|  | to attribute when you redistribute source code, but you don't | ||||||
|  | necessarily have to redistribute source code. | ||||||
|  |  | ||||||
|  | A copyleft license adds the restriction that modified versions of the | ||||||
|  | code need to be licensed under the same license. GNU licenses in | ||||||
|  | particular require that source code be released if non-source versions are | ||||||
|  | released, and the different GNU licenses differ in what how the | ||||||
|  | non-source version is defined. (The original, GPL, discusses compiled | ||||||
|  | binaries.) Copyleft doesn't mean anything specific for commercial use. | ||||||
|  |  | ||||||
|  | MIT-licensed code can be modified and then licensed as GPL, because MIT | ||||||
|  | license allows that, but GPL code can't be modified as MIT, because MIT | ||||||
|  | doesn't allow that. And if we get all of the authors to agree on it, we | ||||||
|  | can always add whatever crazy license we want, regardless of what we | ||||||
|  | have already. | ||||||
|  |  | ||||||
|  | The distinction between MIT-style and GNU-something might matter quite little | ||||||
|  | in the case of Urchin. | ||||||
|  |  | ||||||
|  | 1. Urchin is written in an interpreted language (shell), so it might be | ||||||
|  |    hard to distribute usefully without providing the source code. | ||||||
|  | 2. Urchin just runs tests; it doesn't get compiled with the rest of the | ||||||
|  |    code (also because it's in shell). Thus, I think a GPL license on | ||||||
|  |    Urchin wouldn't infect the code being tested. | ||||||
|  |  | ||||||
|  | This is as far as I have gotten with contemplating license changes. For now | ||||||
|  | we're sticking with the original MIT-style license, but it's easy to change | ||||||
|  | licenses later. | ||||||
|  |  | ||||||
|  | Nagios plugins | ||||||
|  | ----------------- | ||||||
|  | It would be cool to run Nagios plugins with Urchin. This is already possible, | ||||||
|  | actually, but it might be worth giving some special thought to it. | ||||||
|  | https://nagios-plugins.org/doc/guidelines.html | ||||||
| @@ -2,7 +2,7 @@ | |||||||
| # Run urchin in a bunch of different shells, | # Run urchin in a bunch of different shells, | ||||||
| # including a shell that isn't quite POSIX-compatible (zsh) | # including a shell that isn't quite POSIX-compatible (zsh) | ||||||
|  |  | ||||||
| for shell in dash bash ksh zsh; do | for shell in dash bash mksh ksh zsh; do | ||||||
|   if which $shell > /dev/null 2> /dev/null; then |   if which $shell > /dev/null 2> /dev/null; then | ||||||
|     echo |     echo | ||||||
|     echo Running urchin tests in $shell |     echo Running urchin tests in $shell | ||||||
|   | |||||||
| @@ -169,9 +169,3 @@ It does something similar, but the interface may be more intuitive. | |||||||
| ## Alternatives to Urchin | ## Alternatives to Urchin | ||||||
| Alternatives to Urchin are discussed in | Alternatives to Urchin are discussed in | ||||||
| [this blog post](https://blog.scraperwiki.com/2012/12/how-to-test-shell-scripts/). | [this blog post](https://blog.scraperwiki.com/2012/12/how-to-test-shell-scripts/). | ||||||
|  |  | ||||||
| ## Ideas for new features |  | ||||||
|  |  | ||||||
| * Support [Nagios plugins](https://nagios-plugins.org/doc/guidelines.html) |  | ||||||
| * Stop running if a test fails so one can use Urchin as a |  | ||||||
|     [setup framework](https://github.com/tlevine/urchin/issues/16). |  | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								urchin
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								urchin
									
									
									
									
									
								
							| @@ -1,7 +1,16 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  |  | ||||||
| # Make sure that CDPATH isn't set, as it causes `cd` to behave unpredictably - notably, it can produce output, | # This file is part of urchin. It is subject to the license terms in the | ||||||
| # which breaks fullpath(). | # COPYING file found in the top-level directory of this distribution or at | ||||||
|  | # https://raw.githubusercontent.com/tlevine/urchin/master/COPYING | ||||||
|  |  | ||||||
|  | # No part of urchin, including this file, may be copied, modified, propagated, | ||||||
|  | # or distributed except according to the terms contained in the COPYING file. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Make sure that CDPATH isn't set, as it causes `cd` to behave unpredictably - | ||||||
|  | # notably, it can produce output, which breaks fullpath(). | ||||||
| unset CDPATH | unset CDPATH | ||||||
|  |  | ||||||
| # Urchin version number | # Urchin version number | ||||||
| @@ -16,7 +25,9 @@ fullpath() { | |||||||
|  |  | ||||||
| indent() { | indent() { | ||||||
|   level="$1" |   level="$1" | ||||||
|  |   if test "$level" -gt 0; then | ||||||
|     printf "%$((2 * ${level}))s" |     printf "%$((2 * ${level}))s" | ||||||
|  |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| recurse() { | recurse() { | ||||||
| @@ -131,7 +142,10 @@ recurse() { | |||||||
|           # On fail, print a red '✗' |           # On fail, print a red '✗' | ||||||
|           printf '\033[31m✗ \033[0m' |           printf '\033[31m✗ \033[0m' | ||||||
|           printf '%s\n' "${potential_test}" |           printf '%s\n' "${potential_test}" | ||||||
|           printf '\033[31m' # Print output captured from failed test in red. |  | ||||||
|  |           # Print output captured from failed test in red. | ||||||
|  |           printf '\033[31m' | ||||||
|  |  | ||||||
|           cat "$stdout_file" |           cat "$stdout_file" | ||||||
|           printf '\033[0m' |           printf '\033[0m' | ||||||
|         ;; |         ;; | ||||||
| @@ -149,8 +163,13 @@ recurse() { | |||||||
| } | } | ||||||
|  |  | ||||||
| has_sh_or_no_shebang_line() { | has_sh_or_no_shebang_line() { | ||||||
|   head -n 1 "$1" | grep -vqE '^#!' && return 0 # no shebang line at all |   # no shebang line at all | ||||||
|   head -n 1 "$1" | grep -qE '^#![[:blank:]]*/bin/sh($|[[:blank:]])' && return 0  # shebang line is '#!/bin/sh' or legal variations thereof |   head -n 1 "$1" | grep -vqE '^#!' && return 0 | ||||||
|  |  | ||||||
|  |   # shebang line is '#!/bin/sh' or legal variations thereof | ||||||
|  |   head -n 1 "$1" | grep -qE '^#![[:blank:]]*/bin/sh($|[[:blank:]])' && | ||||||
|  |     return 0   | ||||||
|  |  | ||||||
|   return 1 |   return 1 | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -225,7 +244,10 @@ urchin_go() { | |||||||
|     echo "Done, took $elapsed $(plural second $elapsed)." |     echo "Done, took $elapsed $(plural second $elapsed)." | ||||||
|     printf '%s\n' "$passed $(plural test "$passed") passed." |     printf '%s\n' "$passed $(plural test "$passed") passed." | ||||||
|     printf '%s\n' "$skipped $(plural test "$skipped") skipped." |     printf '%s\n' "$skipped $(plural test "$skipped") skipped." | ||||||
|     [ $failed -gt 0 ] && printf '\033[31m' || printf '\033[32m' # If tests failed, print the message in red, otherwise in green. |  | ||||||
|  |     # If tests failed, print the message in red, otherwise in green. | ||||||
|  |     [ $failed -gt 0 ] && printf '\033[31m' || printf '\033[32m' | ||||||
|  |  | ||||||
|     printf '%s\n' "$failed $(plural test "$failed") failed." |     printf '%s\n' "$failed $(plural test "$failed") failed." | ||||||
|     printf '\033[m' |     printf '\033[m' | ||||||
|   fi |   fi | ||||||
| @@ -257,8 +279,11 @@ do | |||||||
|         -s) |         -s) | ||||||
|           shift |           shift | ||||||
|           shell_for_sh_tests=$1 |           shell_for_sh_tests=$1 | ||||||
|           which "$shell_for_sh_tests" >/dev/null || { echo "Cannot find specified shell: '$shell_for_sh_tests'" >&2; urchin_help >&2; exit 2; } |           which "$shell_for_sh_tests" > /dev/null || { | ||||||
|           ;; |             echo "Cannot find specified shell: '$shell_for_sh_tests'" >&2 | ||||||
|  |             urchin_help >&2 | ||||||
|  |             exit 2 | ||||||
|  |           } ;; | ||||||
|         -t) tap_format=true;; |         -t) tap_format=true;; | ||||||
|         -h|--help) urchin_help |         -h|--help) urchin_help | ||||||
|           exit 0;; |           exit 0;; | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								urchin_test_on_msys64_1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								urchin_test_on_msys64_1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 99 KiB | 
							
								
								
									
										
											BIN
										
									
								
								urchin_test_on_msys64_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								urchin_test_on_msys64_2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 115 KiB | 
		Reference in New Issue
	
	Block a user