Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python scripts: compatibility with Windows #446

Merged
merged 26 commits into from
Dec 12, 2019

Conversation

JoaoRodrigues
Copy link
Contributor

This PR includes several commits that improve compatibility of the code on windows machines. For a detailed description of the problems and fixes, see #445 .

Copy link
Contributor

@maxim-belkin maxim-belkin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, João. Please see my comments.

bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
bin/util.py Outdated Show resolved Hide resolved
bin/lesson_check.py Outdated Show resolved Hide resolved
Makefile Outdated Show resolved Hide resolved
@JoaoRodrigues
Copy link
Contributor Author

Hi @maxim-belkin,

I got a bit lost with all the comments and diverging conversations on the PR so I'm summarizing here.

This PR addresses compatibility with Windows systems (at least for Win 10, which I can test) by fixing 3 issues:

  1. Hard-coded paths in the lesson-check.py file, in particular in regular expressions.
  2. Encoding issues when parsing/reading files within the lesson-check.py script following an external process (subprocess.Popen).
  3. The absence of python3 aliases or executables in some distributions/versions of Python on Windows, namely those recommended by the Carpentries (Anaconda3).

I believe this PR, as is, addresses all three points coherently. The change in the Makefile does not fix the problem, but provides an extremely trivial solution. All that is left to do is add a comment in the setup instructions for Windows users to change the PYTHON variable in the Makefile.

As for the other changes that might be considered cosmetic, to be completely honest, I had an incredibly hard time understanding (at a glance) what some methods were doing in this code. If I changed things, it was because I had to rewrite parts of the code to understand how to fix it. I believe the result is more readable and more maintainable.

As such, I am not willing to work on this PR further. You're welcome to fork my repo and cherry-pick the changes and commit them yourself to the main branch/repo. I spent a more than a few hours figuring out what the problem was and how to fix it, then working on a PR, and writing an issue that rivals chapters of my PhD thesis in length.

The lessons are up and running on my laptop, that's all I wanted. Fixing it for everybody else was a bonus. You're all volunteers with limited time to devote to this project, but so am I. I hope you understand my point of view.

@maxim-belkin
Copy link
Contributor

Thanks for your contribution, @JoaoRodrigues. I'll take the PR from here, so please don't delete your fork and the branch you used to submit the PR from (win10_compatibility).

Regarding your last comment: conversations are not diverging, but there are quite a few of them, which makes things hard to follow. The usual recommendation (and a common practice) is to submit smaller pull requests. They are easier to discuss and usually take less time and effort on both sides (contributors' and maintainers').

These will be submitted in a separate PR
We can't use a single shebang:
* on some platforms `python` may mean Python 2, on others - Python 3
* on some platforms `python3` does not exist at all

Therefore, we're removing the shebangs altogether.
... for compatibility with Windows
@maxim-belkin
Copy link
Contributor

maxim-belkin commented Dec 5, 2019

I think I caught all remaining Windows incompatibilities.
Handing off to you, @fmichonneau and @brownsarahm.

@maxim-belkin maxim-belkin changed the title Win10 compatibility Python scripts: compatibility with Windows Dec 5, 2019
Copy link
Contributor

@brownsarahm brownsarahm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I improved one comment to make it more complete, but otherwise this looks good to me; noting that I cannot test on windows

@hoytpr
Copy link

hoytpr commented Dec 6, 2019

@maxim-belkin

By this time I had already run "python bin/lesson_initialize.py"
You sent me the curl link, and I downloaded the patch into my "data-cleanup" repo.
I entered git apply 446.patch and got many warnings similar to:
warning: bin/lesson_check.py has type 100644, expected 100755
but no "errors" or "failures"
Then entered make lesson-check and got the error

make: execvp: python3: Permission denied
make: *** [Makefile:112: lesson-check] Error 127

When I viewed my repo with ls -lart I remember seeing new python script files in the /bin directory. I tried to run the lesson_check.py directly but the response was:

$ python lesson_check.py   ## note underscore: this was "lesson_check" not "lesson-check"
Path to Markdown parser not provided

Then, being new to this, I tried to re-apply the patch, and there were many errors including:

$ git apply 446.patch 
error: patch failed: bin/util.py:118
error: bin/util.py: patch does not apply
warning: bin/lesson_check.py has type 100644, expected 100755
error: patch failed: bin/lesson_check.py:1
error: bin/lesson_check.py: patch does not apply
warning: bin/lesson_initialize.py has type 100644, expected 100755

I'm going to delete the local repo, and re-clone it from my Github

My machine:

I'm using a Win10 machine and GitBash. When I type:

$ bash --version
GNU bash, version 4.4.23(1)-release (x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

I have Anaconda3 (64-bit) installed, although when I open the Anaconda (or GitBash) terminal and type:

(base) C:\Users\Hoyt>anaconda --version
anaconda Command line client (version 1.7.2)

Others:

$ python --version
Python 3.7.1
$ bundle --version
Bundler version 2.0.2
$ ruby --version
ruby 2.5.7p206 (2019-10-01 revision 67816) [x64-mingw32]
$ jekyll --version
jekyll 4.0.0
$ git --version
git version 2.21.0.windows.1

R version 3.6.1 (2019-07-05) -- "Action of the Toes"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

Through Anaconda Navigator I have:
RStudio 1.1.456
Qt Console 4.4.3
jupyter Notebook 5.7.4
JupyterLab 0.35.3

@maxim-belkin
Copy link
Contributor

maxim-belkin commented Dec 9, 2019

By this time I had already run "python bin/lesson_initialize.py"
You sent me the curl link, and I downloaded the patch into my "data-cleanup" repo.
I entered git apply 446.patch and got many warnings similar to:
warning: bin/lesson_check.py has type 100644, expected 100755
but no "errors" or "failures"

Warnings are normal in this case because the curl command that I provided downloads the entire PR as a single patch file and one of the commits in this patch removes executable permission bits from python scripts.

Then entered make lesson-check and got the error

make: execvp: python3: Permission denied
make: *** [Makefile:112: lesson-check] Error 127

This is strange: it shouldn't list python3 but python because you're on Windows. Unless your shell has python3 command... what does which python3 show?

When I viewed my repo with ls -lart I remember seeing new python script files in the /bin directory. I tried to run the lesson_check.py directly but the response was:

$ python lesson_check.py   ## note underscore: this was "lesson_check" not "lesson-check"
Path to Markdown parser not provided

If you look at the Makefile, you'll see a line:

@${PYTHON} bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md

And PARSER is bin/markdown_ast.rb. If you look at that Ruby file, you'll see that it uses two Gems: json and kramdown, which you need to install with gem:

gem install json kramdown

After that you should be able to execute lesson checks manually like this (GitBash):

# cd to the root of your lesson repository
python bin/lesson_check.py -s . -p bin/markdown_ast.rb -r _includes/links.md

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

@maxim-belkin

This is strange: it shouldn't list python3 but python because you're on Windows. Unless your shell has python3 command... what does which python3 show?

$ which python3                                     
/c/Users/Hoyt/AppData/Local/Microsoft/WindowsApps/python3
$ gem install json kramdown
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed json-2.2.0
Parsing documentation for json-2.2.0
Done installing documentation for json after 1 seconds
Successfully installed kramdown-2.1.0
Parsing documentation for kramdown-2.1.0
Done installing documentation for kramdown after 1 seconds
2 gems installed
$ python bin/lesson_check.py -s . -p bin/markdown_ast.rb -r _includes/links.md
Traceback (most recent call last):
  File "bin/lesson_check.py", line 566, in <module>
    main()
  File "bin/lesson_check.py", line 115, in main
    check_config(args.reporter, args.source_dir)
  File "bin/lesson_check.py", line 176, in check_config
    config = load_yaml(config_file)
  File "C:\Users\Hoyt\git\Saved\data-cleanup\bin\util.py", line 164, in load_yaml
    return yaml.load(reader, Loader=yaml.FullLoader)
AttributeError: module 'yaml' has no attribute 'FullLoader'

@brownsarahm
Copy link
Contributor

the method it says is missing is new, via (https://stackoverflow.com/questions/55551191/module-yaml-has-no-attribute-fullloader), that issue shows how to check and update it if you use pip. There is a way to do it with conda too, if you prefer

since @hoytpr also has a python3 alias, maybe his install of anaconda was older than Joao's and anaconda changed how it sets the alias?

@maxim-belkin
Copy link
Contributor

$ python bin/lesson_check.py -s . -p bin/markdown_ast.rb -r _includes/links.md
Traceback (most recent call last):
  File "bin/lesson_check.py", line 566, in <module>
    main()
  File "bin/lesson_check.py", line 115, in main
    check_config(args.reporter, args.source_dir)
  File "bin/lesson_check.py", line 176, in check_config
    config = load_yaml(config_file)
  File "C:\Users\Hoyt\git\Saved\data-cleanup\bin\util.py", line 164, in load_yaml
    return yaml.load(reader, Loader=yaml.FullLoader)
AttributeError: module 'yaml' has no attribute 'FullLoader'

As Sarah explained, this error messages is caused by the outdated PyYAML module.
Because you're using Anaconda, I would suggest using conda command to update Python packages, though the end result should not depend on what tool you use. So, run

conda update

You might also want to clean up unused packages after this:

conda clean --all

since @hoytpr also has a python3 alias, maybe his install of anaconda was older than Joao's and anaconda changed how it sets the alias?

I think you're right.
Pete, try to update conda and Anaconda itself with:

conda update conda
conda update anaconda

You might need to restart GitBash after that. See if you still have python3. But note that even if you do -- it shouldn't be a problem and shouldn't cause any.

@JoaoRodrigues
Copy link
Contributor Author

Chiming in to add info on this issue of the python call. This answer on SO seems to explain why there is not python3.exe on Windows and provides an alternative: https://stackoverflow.com/a/34223417

In addition, would you be interested in setting up a CI like appveyor or Travis to check if the make commands pass on Linux, Win, and MacOS? I would be happy to work on that to improve testing/debugging these issues.

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

FYI: The alias appears to have been installed as part of a Windows update for "Zune" (including iHeartRadio) on Nov 5, 2019.
I went ahead and ran:

$ Python  
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>> yaml.__version__
'3.13'
quit()

$ conda update PyYAML
Solving environment: done

## Package Plan ##
  environment location: C:\Users\Hoyt\Anaconda3
  added / updated specs:
    - pyyaml
The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    conda-4.7.12               |           py37_0         3.0 MB
    conda-package-handling-1.3.11|           py37_0         280 KB
    ------------------------------------------------------------
                                           Total:         3.3 MB

The following NEW packages will be INSTALLED:
    conda-package-handling: 1.3.11-py37_0
The following packages will be UPDATED:
    conda:                  4.5.12-py37_0 --> 4.7.12-py37_0
Proceed ([y]/n)? y

Because this looked to only update PyYaml to 4.7, I ran conda update PyYAML again

$ conda update PyYAML
Collecting package metadata (repodata.json): done
Solving environment: /
The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency: 
  - defaults/win-64::anaconda==2018.12=py37_0
  - defaults/win-64::blaze==0.11.3=py37_0
  - defaults/win-64::numba==0.41.0=py37hf9181ef_0

Went ahead with resolving the inconsistencies, and the next thing I know I have 299
files being updated or installed, plus:

The following packages will be DOWNGRADED:

  anaconda                                   2018.12-py37_0 --> custom-py37_1
  jupyter_console                              6.0.0-py37_0 --> 5.2.0-py37_1

Went ahead with this and then:

$ Python
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>> yaml.__version__
'5.1.2'
>>>

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

Little advice please.
I ran conda clean --all and it removed a bunch of older files, but then it says:

...(etc)
Removed zstd-1.3.7-h508b16e_0.tar.bz2
Removed _anaconda_depends-2019.03-py37_0.tar.bz2
Removed _ipyw_jlab_nb_ext_conf-0.1.0-py37_0.tar.bz2
WARNING: C:\Users\Hoyt\.conda\pkgs does not exist
Cache location: C:\Users\Hoyt\Anaconda3\pkgs
Will remove the following packages:
C:\Users\Hoyt\Anaconda3\pkgs
----------------------------

anaconda-2018.12-py37_0                       59 KB
anaconda-custom-py37_1                         6 KB
anaconda-project-0.8.2-py37_0                2.8 MB
asn1crypto-0.24.0-py37_0                     867 KB
astroid-2.1.0-py37_0                         1.3 MB
astropy-3.1-py37he774522_0                  28.7 MB
(etc.)...
Proceed ([y]/n)?

Should I continue?
-p

@maxim-belkin
Copy link
Contributor

These are outdated packages, so it should be safe to remove them.

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

Okay, this is where I am now;

$ python
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>> yaml.__version__
'5.1.2'
quit()
$ python bin/lesson_check.py -s . -p bin/markdown_ast.rb -r _includes/links.md
.\README.md: Internally-defined links may be missing definitions: "issues"=>"FIXME"

@maxim-belkin
Copy link
Contributor

maxim-belkin commented Dec 9, 2019

Okay, this is where I am now;

$ python
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>> yaml.__version__
'5.1.2'
quit()
$ python bin/lesson_check.py -s . -p bin/markdown_ast.rb -r _includes/links.md
.\README.md: Internally-defined links may be missing definitions: "issues"=>"FIXME"

This is a successful test. The error message means that README.md has a link that is not defined, e.g. [text][issues]. To fix this, add a line to the bottom of the file:

issues: https://some.location

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

The page rendered using bundle exec jekyll serve:

First-render

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

Looks good. Adding

issues: https://some.location

to the bottom of README.md fixed the error during rendering.

$ bundle exec jekyll serve
C:/Ruby25-x64/lib/ruby/2.5.0/x64-mingw32/etc.so: warning: already initialized constant Struct::Passwd
Configuration file: C:/Users/Hoyt/git/Saved/data-cleanup/_config.yml
            Source: C:/Users/Hoyt/git/Saved/data-cleanup
       Destination: C:/Users/Hoyt/git/Saved/data-cleanup/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
                    done in 1.32 seconds.
 Auto-regeneration: enabled for 'C:/Users/Hoyt/git/Saved/data-cleanup'
    Server address: http://127.0.0.1:4000
  Server running... press ctrl-c to stop.

-p

@maxim-belkin
Copy link
Contributor

Looks good. Adding

issues: https://some.location

to the bottom of README.md fixed the error during rendering.

This is good news. Basically, you were able to detect and fix an issue in README.md using the lesson_check.py script directly. Does make lesson-check work? What does make --version report?

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

$ make --version
GNU Make 4.2.1
Built for i686-pc-msys
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

I still get an error about python3:

$ make lesson-check
index.md:6:FIXME: home page introduction
index.md:14:> FIXME
setup.md:4:FIXME
_episodes/01-introduction.md:6:- "Key question (FIXME)"
_episodes/01-introduction.md:8:- "First learning objective. (FIXME)"
_episodes/01-introduction.md:10:- "First key point. Brief Answer to questions. (FIXME)"
_episodes/01-introduction.md:12:FIXME
reference.md:7:FIXME
_extras/discuss.md:4:FIXME
_extras/guide.md:4:FIXME
make: execvp: python3: Permission denied
make: *** [Makefile:112: lesson-check] Error 127

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

$ which python
/c/Users/Hoyt/Anaconda3/python
$ which python3
/c/Users/Hoyt/AppData/Local/Microsoft/WindowsApps/python3

NOTE that I have "python3" environment variable set as C:\Users\Hoyt\Anaconda3\python.exe
but might need to restart my machine for this to work.

EDIT: No, restarting the machine still gives this error.

make: execvp: python3: Permission denied
make: *** [Makefile:112: lesson-check] Error 127

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

@maxim-belkin
Copy link
Contributor

Thanks, Pete. Yes, that python3 is a link to Microsoft Store to install Python 3. I'll have to work around this in the logic (in the Makefile) that determines which Python to use.

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

I turned off the aliases using the SO site suggestion, and re-ran make lesson-check getting only "Error 1":

$ make lesson-check
/usr/bin/which: no python3 in (/c/Users/Hoyt/bin:/mingw64/bin:/usr/local/bin:/usr/bin:MY_WHOLE_PATH_WAS_DISPLAYED_HERE)
index.md:6:FIXME: home page introduction
index.md:14:> FIXME
setup.md:4:FIXME
_episodes/01-introduction.md:6:- "Key question (FIXME)"
_episodes/01-introduction.md:8:- "First learning objective. (FIXME)"
_episodes/01-introduction.md:10:- "First key point. Brief Answer to questions. (FIXME)"
_episodes/01-introduction.md:12:FIXME
reference.md:7:FIXME
_extras/discuss.md:4:FIXME
_extras/guide.md:4:FIXME
.\README.md: Internally-defined links may be missing definitions: "issues"=>"FIXME"
make: *** [Makefile:112: lesson-check] Error 1

@maxim-belkin
Copy link
Contributor

Error 1 is what we want -- this is the code that lesson-check raises when encountering an issue.

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

So disabling the Windows aliases does work, although when the makefile asks which python3 it echos the entire PATH line to the screen. But, I am worried if we ask learners to disable those aliases, Windows will keep turning them back on after updates. I can test this as I have an update to install.

@maxim-belkin
Copy link
Contributor

I've added the logic that should deal with Python3 from the MS Store. Could you please test it, Pete? You should be able to "restore" your repository to the state before applying the patch with:

git checkout -- .
rm 446.patch

After that, you should be able to re-download the patch with curl and apply it again.

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

EDIT: I re-cloned my GitHub repo to be sure everything was clean:
git clone https://github.com/hoytpr/data-cleanup

Got the patch:

$ git apply 446.patch
warning: bin/lesson_check.py has type 100644, expected 100755
warning: bin/lesson_initialize.py has type 100644, expected 100755
warning: bin/repo_check.py has type 100644, expected 100755
warning: bin/test_lesson_check.py has type 100644, expected 100755
(etc.)

With a caveat it seemed to work:
CAVEAT: I ran

$ bin/lesson_initialize.py

without prepending the command with python and got:

bin/lesson_initialize.py: line 1: Initialize a newly-created repository.: command not found
bin/lesson_initialize.py: line 4: import: command not found
bin/lesson_initialize.py: line 5: import: command not found
bin/lesson_initialize.py: line 6: import: command not found
bin/lesson_initialize.py: line 8: syntax error near unexpected token `('
bin/lesson_initialize.py: line 8: `BOILERPLATE = ('

So I then ran:

$ python bin/lesson_initialize.py

And got no response at all. I assume this is good.

$ ls                                                                                  
 _config.yml    _includes  assets    code                fig         Makefile
_episodes      _layouts   AUTHORS   CODE_OF_CONDUCT.md  files       README.md
_episodes_rmd  446.patch  bin       CONTRIBUTING.md     index.md    reference.md
_extras        aio.md     CITATION  data                LICENSE.md  setup.md

So I then ran:

$ make lesson-check
index.md:6:FIXME: home page introduction
index.md:14:> FIXME
setup.md:4:FIXME
_episodes/01-introduction.md:6:- "Key question (FIXME)"
_episodes/01-introduction.md:8:- "First learning objective. (FIXME)"
_episodes/01-introduction.md:10:- "First key point. Brief Answer to questions. (FIXME)"
_episodes/01-introduction.md:12:FIXME
reference.md:7:FIXME
_extras/discuss.md:4:FIXME
_extras/guide.md:4:FIXME
.\README.md: Internally-defined links may be missing definitions: "issues"=>"FIXME"
make: *** [Makefile:120: lesson-check] Error 1

Looks good!

@hoytpr
Copy link

hoytpr commented Dec 9, 2019

Rendered fine.

$ bundle exec jekyll serve 
C:/Ruby25-x64/lib/ruby/2.5.0/x64-mingw32/etc.so
Configuration file: C:/Users/Hoyt/git/Saved/data-cleanup/_config.yml
            Source: C:/Users/Hoyt/git/Saved/data-cleanup
       Destination: C:/Users/Hoyt/git/Saved/data-cleanup/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
                    done in 1.996 seconds.
 Auto-regeneration: enabled for 'C:/Users/Hoyt/git/Saved/data-cleanup'
    Server address: http://127.0.0.1:4000
  Server running... press ctrl-c to stop.

second-render

@maxim-belkin
Copy link
Contributor

With a caveat it seemed to work:
CAVEAT: I ran

$ bin/lesson_initialize.py

without prepending the command with python and got:

bin/lesson_initialize.py: line 1: Initialize a newly-created repository.: command not found
bin/lesson_initialize.py: line 4: import: command not found
bin/lesson_initialize.py: line 5: import: command not found
bin/lesson_initialize.py: line 6: import: command not found
bin/lesson_initialize.py: line 8: syntax error near unexpected token `('
bin/lesson_initialize.py: line 8: `BOILERPLATE = ('

This is expected: when you applied the patch, Git informed you that it expected Python scripts to not have executable permission bits but found that your scripts still have them. Git applied the patch anyway but did not change their executable permission bits -- that's why you still can execute the scripts (e.g., ./bin/lesson_check.py). When this PR is merged, these scripts will lose their executable permission bits so people won't be able to execute them directly. You can see the effect of it by removing executable permission bits from the scripts manually:

chmod 0644 bin/*.py   # or:   chmod a-x bin/*.py

You will no longer be able to execute the scripts and Git Bash will tell you something like this:

-bash: ./bin/lesson_check.py: Permission denied

So I then ran:

$ python bin/lesson_initialize.py

And got no response at all. I assume this is good.

Yes, this is good. Notifying a user of a successful initialization is a reasonable thing to do but this is out of scope of this PR.

Rendered fine.

Wonderful!

@maxim-belkin maxim-belkin merged commit 8803fe5 into carpentries:gh-pages Dec 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants