[reagent] use entropy lock to ensure that there always be at most one instance running

This commit is contained in:
Fabio Erculiani
2010-11-18 10:01:36 +01:00
parent 374238b566
commit 649f6786ac
+77 -61
View File
@@ -20,10 +20,10 @@ sys.path.insert(5, '/usr/lib/entropy/server')
from entropy.i18n import _
import entropy.tools
from entropy.output import red, print_error, print_generic, \
is_stdout_a_tty, nocolor, etpUi
is_stdout_a_tty, nocolor, etpUi, darkgreen
from entropy.const import etpConst, const_kill_threads
from entropy.server.interfaces import Server
from text_tools import print_menu
from text_tools import print_menu, acquire_entropy_locks, release_entropy_locks
# Check if we need to disable colors
if not is_stdout_a_tty():
@@ -195,75 +195,91 @@ if not entropy.tools.is_root():
install_exception_handler()
main_cmd = options.pop(0)
if main_cmd == "update":
import server_reagent
rc = server_reagent.update(options)
get_entropy_server().close_repositories()
elif main_cmd == "inject":
import server_reagent
rc = server_reagent.inject(options)
get_entropy_server().close_repositories()
elif main_cmd == "query":
import server_query
rc = server_query.query(options)
elif main_cmd == "repo":
if "switchbranch" in options:
etpUi['warn'] = False
import server_reagent
rc = server_reagent.repositories(options)
get_entropy_server().close_repositories()
elif main_cmd == "status":
import server_reagent
server_reagent.status()
get_entropy_server().close_repositories()
rc = 0
elif main_cmd == "key":
import server_key
rc = server_key.key(options)
elif main_cmd == "deptest":
acquired = False
server = None
try:
server = get_entropy_server()
server.dependencies_test()
server.close_repositories()
rc = 0
acquired = acquire_entropy_locks(server)
elif main_cmd == "pkgtest":
server = get_entropy_server()
server.verify_local_packages([], ask = etpUi['ask'])
server.close_repositories()
rc = 0
if not acquired:
print_error(darkgreen(_("Another Entropy is currently running.")))
rc = 1
elif main_cmd == "libtest":
server = get_entropy_server()
dump = "--dump" in options
rc, pkgs = server.test_shared_objects(
dump_results_to_file = dump)
x = server.close_repositories()
elif main_cmd == "update":
import server_reagent
rc = server_reagent.update(options)
get_entropy_server().close_repositories()
elif main_cmd == "revdeps":
server = get_entropy_server()
rc = server.generate_reverse_dependencies_metadata()
server.close_repositories()
elif main_cmd == "inject":
import server_reagent
rc = server_reagent.inject(options)
get_entropy_server().close_repositories()
# cleanup
elif main_cmd == "cleanup":
import text_tools
rc = text_tools.cleanup([etpConst['packagestmpdir'], etpConst['logdir']])
elif main_cmd == "query":
import server_query
rc = server_query.query(options)
# deptest tool
elif main_cmd == "spm":
import server_reagent
rc = server_reagent.spm(options)
get_entropy_server().close_repositories()
elif main_cmd == "repo":
if "switchbranch" in options:
etpUi['warn'] = False
import server_reagent
rc = server_reagent.repositories(options)
get_entropy_server().close_repositories()
elif main_cmd == "status":
import server_reagent
server_reagent.status()
get_entropy_server().close_repositories()
rc = 0
elif main_cmd == "key":
import server_key
rc = server_key.key(options)
elif main_cmd == "deptest":
server = get_entropy_server()
server.dependencies_test()
server.close_repositories()
rc = 0
elif main_cmd == "pkgtest":
server = get_entropy_server()
server.verify_local_packages([], ask = etpUi['ask'])
server.close_repositories()
rc = 0
elif main_cmd == "libtest":
server = get_entropy_server()
dump = "--dump" in options
rc, pkgs = server.test_shared_objects(
dump_results_to_file = dump)
x = server.close_repositories()
elif main_cmd == "revdeps":
server = get_entropy_server()
rc = server.generate_reverse_dependencies_metadata()
server.close_repositories()
# cleanup
elif main_cmd == "cleanup":
import text_tools
rc = text_tools.cleanup([etpConst['packagestmpdir'], etpConst['logdir']])
# deptest tool
elif main_cmd == "spm":
import server_reagent
rc = server_reagent.spm(options)
get_entropy_server().close_repositories()
finally:
if server is not None:
if acquired:
release_entropy_locks(server)
server.shutdown()
if rc == -10:
print_menu(help_opts)
print_error(red(" %s." % (_("Wrong parameters"),) ))
rc = 10
uninstall_exception_handler()
entropy.tools.kill_threads()