pydoit / doit

CLI task management & automation tool
http://pydoit.org
MIT License
1.87k stars 175 forks source link

doit dumpdb fails when non default db name is used #126

Open ebak opened 8 years ago

ebak commented 8 years ago

dumpdb does not take dep_file configuration into account because it does not read (or require a dodo.py). It would be better to use dep_file information if available.

Original report:



.doit.delayed.db file exists.

$ ./delayed.py dumpdb
DBM type is 'None'
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/doit-0.29.0-py2.7.egg/doit/doit_cmd.py", line 168, in run
    return command.parse_execute(args)
  File "/usr/lib/python2.7/site-packages/doit-0.29.0-py2.7.egg/doit/cmd_base.py", line 122, in parse_execute
    return self.execute(params, args)
  File "/usr/lib/python2.7/site-packages/doit-0.29.0-py2.7.egg/doit/cmd_dumpdb.py", line 51, in execute
    data = dbm.open(dep_file)
  File "/usr/lib64/python2.7/anydbm.py", line 79, in open
    raise error, "need 'c' or 'n' flag to open new db"
error: need 'c' or 'n' flag to open new db

[delayed.py.txt](https://github.com/pydoit/doit/files/159206/delayed.py.txt)

<!-- POLAR PLEDGE BADGE START -->
<a href="https://dashboard.polar.sh/pydoit/doit/issues/126">
<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://dashboard.polar.sh/api/github/pydoit/doit/issues/126/pledge.svg?darkmode=1">
  <img alt="Fund with Polar" src="https://dashboard.polar.sh/api/github/pydoit/doit/issues/126/pledge.svg">
</picture>
</a>
<!-- POLAR PLEDGE BADGE END -->
schettino72 commented 8 years ago

I see. the problem is that dumpdb doesnt read dodo.py at all.

I like the fact that you can see the dump even without a dodo.py. Do you know you can specify the name of the DB file from the command line?

ebak commented 8 years ago

Hi,

I don't know currently the command line argument for the DB file name. In my case I don't use dodo.py. I execute the engine directly with "doit.run(globals())" in this case the engine gets the DOIT_CONFIG dict, which contains the DB file name. I guess for my case I could make a work-around. In delayed.py I could add the DB file name command line argument to "sys.argv" than execute "doit.run(globals())".

goerz commented 7 years ago

When running in an IPython (notebook) context as %doit dumpdb, a custom dep_file in a DOIT_CONFIG dictionary I might define does not seem to be taken into account. I find this highly confusing, especially because in the notebook context, it's not quite clear where the database is stored. The dumpdb commands seems to report on ~/.ipython/profile_default/db/.doit.db, but I'm not sure that's the file that is actually being used when running tasks. The dumpdb should print the name of the database file that it's reading from, not just the type of the database.

schettino72 commented 7 years ago

The dumpdb should print the name of the database file that it's reading from, not just the type of the database.

So maybe you should create another ticket for this.

I would accept a patch where dumpdb reads a dodo.py and get the value of file_dep, but it must still be able to work without a dodo.py file.

goerz commented 7 years ago

Done (#183). If I have some time at some point in the near future, I might look into making such a pull request.