Repository: conan-io/conan

Issue:
TypeError: 'str' object is not callable
https://github.com/conan-io/conan/blob/862c76acb71e8ab80a36d8ec4f3381224125e1ac/conans/client/graph/graph_binaries.py#L106
```
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/conans/model/ref.py", line 111, in loads
    _, name, version, user, channel, revision, _ = ConanFileReference.sep_pattern.split(text)
ValueError: not enough values to unpack (expected 7, got 1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/conans/client/command.py", line 376, in install
    ref = ConanFileReference.loads(args.path_or_reference)
  File "/usr/local/lib/python3.6/dist-packages/conans/model/ref.py", line 114, in loads
    "OpenCV/1.0.6@user/stable" % text)
conans.errors.ConanException: Wrong package recipe reference /home/karagon/Documents/Projects/framework-cpp/arcturus/conanfile.py
Write something like OpenCV/1.0.6@user/stable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/conans/client/command.py", line 1570, in run
    method(args[0][1:])
  File "/usr/local/lib/python3.6/dist-packages/conans/client/command.py", line 389, in install
    install_folder=args.install_folder)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/conan_api.py", line 93, in wrapper
    return f(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/conan_api.py", line 572, in install
    no_imports=no_imports)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/manager.py", line 60, in install
    self._recorder)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/graph/graph_manager.py", line 148, in load_graph
    processed_profile=processed_profile)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/graph/graph_manager.py", line 238, in _load_graph
    profile_build_requires, recorder, processed_profile)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/graph/graph_manager.py", line 178, in _recurse_build_requires
    binaries_analyzer.evaluate_graph(graph, build_mode, update, remote_name)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/graph/graph_binaries.py", line 213, in evaluate_graph
    self._evaluate_node(node, build_mode, update, evaluated, remote_name)
  File "/usr/local/lib/python3.6/dist-packages/conans/client/graph/graph_binaries.py", line 106, in _evaluate_node
    package_hash = info.recipe_hash()
TypeError: 'str' object is not callable
```
I'm not sure what the right fix is here. Whether it's fixing some local state from older versions of conan or just use this as a non-function. I modified my local conan python files to use just :
```
package_hash = info.recipe_hash
```
And that was enough the problem was solved. This happened simply by running:
```
conan install -u -b outdated -s xxx -o xxx path/to/my/conan/package/conanfile.py
````


Discussion:
This is a bug. Thanks for reporting.

Resolving patch:
diff --git a/conans/client/graph/graph_binaries.py b/conans/client/graph/graph_binaries.py
--- a/conans/client/graph/graph_binaries.py
+++ b/conans/client/graph/graph_binaries.py
@@ -103,7 +103,7 @@ def _evaluate_node(self, node, build_mode, update, evaluated_nodes, remote_name)
                             node.prev = pref.revision  # With revision
                             if build_mode.outdated:
                                 info, pref = self._remote_manager.get_package_info(pref, remote)
-                                package_hash = info.recipe_hash()
+                                package_hash = info.recipe_hash
                 elif remotes:
                     pass
                 else:


Test patch:
diff --git a/conans/test/integration/install_outdated_test.py b/conans/test/integration/install_outdated_test.py
--- a/conans/test/integration/install_outdated_test.py
+++ b/conans/test/integration/install_outdated_test.py
@@ -1,8 +1,10 @@
+import time
 import unittest
+from collections import OrderedDict
 
 from conans.model.ref import ConanFileReference
 from conans.test.utils.cpp_test_files import cpp_hello_conan_files
-from conans.test.utils.tools import TestClient, TestServer
+from conans.test.utils.tools import TestClient, TestServer, TurboTestClient, GenConanfile
 from conans.util.env_reader import get_env
 from conans.util.files import rmdir
 
@@ -126,3 +128,23 @@ def install_outdated_and_dep_test(self):
         self.assertIn("Downloading conan_package.tgz", new_client.user_io.out)
         self.assertIn("Hello1/0.1@lasote/stable: WARN: Forced build from source",
                       new_client.user_io.out)
+
+    def install_outdated_checking_updates_test(self):
+        server = TestServer()
+        servers = OrderedDict([("default", server)])
+        client = TurboTestClient(servers=servers)
+        client2 = TurboTestClient(servers=servers)
+
+        ref = ConanFileReference.loads("lib/1.0@conan/testing")
+        client.create(ref)
+        client.upload_all(ref)
+
+        # Generate a new recipe, the binary becomes outdated
+        time.sleep(1)
+        client2.create(ref, conanfile=GenConanfile().with_build_msg("Some modified stuff"))
+        client2.run("upload {} -r default".format(ref))
+
+        # Update, building the outdated
+        client.run("install -u -b outdated {}".format(ref))
+        # The outdated is built
+        self.assertIn("Some modified stuff", client.out)