Coder Social home page Coder Social logo

Comments (8)

kba avatar kba commented on September 27, 2024

Makefile could check whether that virtual environment was active outside of make and skip the removal then.

Sounds reasonable 👍 @bertsky any consequences we're not seeing?

from ocrd_all.

bertsky avatar bertsky commented on September 27, 2024

make clean removes venv directory in source path unconditionally
Ideally it would only remove files created by the build process.

If the user has created the venv directory manually and added own content, removing that directory might be bad.

In the current rule definition, clean only cleanes the path ocrd_all uses by default to create a new venv of its own. It does not use VIRTUAL_ENV from the environment (which might be user-defined).

If both coincide, then it is removed. So you want to back out of that decision?

Makefile could check whether that virtual environment was active outside of make and skip the removal then.

What do you propose? Replace the VIRTUAL_ENV ?= with some form of ifdef?

from ocrd_all.

stweil avatar stweil commented on September 27, 2024

What do you propose?

--- a/Makefile
+++ b/Makefile
@@ -69,7 +69,7 @@ check:
 
 clean: # add more prerequisites for clean below
        $(RM) -r $(SUB_VENV)/*
-       $(RM) -r $(CURDIR)/venv # deliberately not using VIRTUAL_ENV here
+       if ! command -v activate; then $(RM) -r $(VIRTUAL_ENV; fi
        $(RM) -r $(HOME)/.parallel/semaphores/id-ocrd_all_git/
 
 define HELP

Maybe a comment can also be added: "Remove virtual environment only if it was not active outside of the make context.".

from ocrd_all.

kba avatar kba commented on September 27, 2024
  •   if ! command -v activate; then $(RM) -r $(VIRTUAL_ENV; fi
    

I don't think activate will be detected as a command because while in $PATH if $VIRTUAL_ENV is activated it is not executable.

Wrong, it does work, should have checked.

from ocrd_all.

stweil avatar stweil commented on September 27, 2024

Improved version:

diff --git a/Makefile b/Makefile
index d10e36a..cd7751c 100644
--- a/Makefile
+++ b/Makefile
@@ -69,7 +69,8 @@ check:
 
 clean: # add more prerequisites for clean below
        $(RM) -r $(SUB_VENV)/*
-       $(RM) -r $(CURDIR)/venv # deliberately not using VIRTUAL_ENV here
+       # Remove virtual environment only if it was not active outside of the make context.
+       command -v activate >/dev/null || $(RM) -r $(VIRTUAL_ENV)
        $(RM) -r $(HOME)/.parallel/semaphores/id-ocrd_all_git/
 
 define HELP

from ocrd_all.

stweil avatar stweil commented on September 27, 2024

Wrong, it does work, should have checked.

I was also surprised about that.

from ocrd_all.

bertsky avatar bertsky commented on September 27, 2024
-       $(RM) -r $(CURDIR)/venv # deliberately not using VIRTUAL_ENV here
+       # Remove virtual environment only if it was not active outside of the make context.
+       command -v activate >/dev/null || $(RM) -r $(VIRTUAL_ENV)

That's not correct. This would even snatch away an externally controlled venv passed in via VIRTUAL_ENV (either from shell variable or by make argument or in local.mk). You should at least use $(CURDIR)/venv. But a better criterion than activate (which could be anything) is the ifdef approach suggested above.

from ocrd_all.

stweil avatar stweil commented on September 27, 2024

Well, it does not snatch if the external VIRTUAL_ENV was active when make clean was called.

But I agree that using macros which come from outside with $(RM) -r can be dangerous, so feel free to use $(CURDIR)/venv to avoid trouble coming from someone running make clean VIRTUAL_ENV=/.

from ocrd_all.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.