@@ -1286,34 +1286,41 @@ def prefix(self):
12861286 def prefix (self , value ):
12871287 self ._prefix = Prefix (value )
12881288
1289- def dag_hash (self , length = None , all_deps = False ):
1289+ def dag_hash (self , length = None ):
12901290 """Return a hash of the entire spec DAG, including connectivity."""
12911291 if not self .concrete :
1292- h = self ._dag_hash (all_deps = all_deps )
1292+ h = self ._dag_hash (all_deps = False )
12931293 # An upper bound of None is equivalent to len(h). An upper bound of
12941294 # 0 produces the empty string
12951295 return h [:length ]
12961296
12971297 if not self ._hash :
12981298 self ._hash = self ._dag_hash (all_deps = False )
12991299
1300+ return self ._hash [:length ]
1301+
1302+ def build_hash (self ):
1303+ if not self .concrete :
1304+ return self ._dag_hash (all_deps = True )
1305+
13001306 if not self ._build_hash :
13011307 self ._build_hash = self ._dag_hash (all_deps = True )
13021308
1303- h = self ._build_hash if all_deps else self ._hash
1304- return h [:length ]
1309+ return self ._build_hash
13051310
13061311 def _dag_hash (self , all_deps = False ):
13071312 yaml_text = syaml .dump (
13081313 self .to_node_dict (all_deps = all_deps ),
13091314 default_flow_style = True ,
13101315 width = maxint )
1311- sha = hashlib .sha1 (yaml_text .encode ('utf-8' ))
13121316
1317+ return self ._encode_hash_content (yaml_text .encode ('utf-8' ))
1318+
1319+ def _encode_hash_content (self , bytes ):
1320+ sha = hashlib .sha1 (bytes )
13131321 b32_hash = base64 .b32encode (sha .digest ()).lower ()
13141322 if sys .version_info [0 ] >= 3 :
13151323 b32_hash = b32_hash .decode ('utf-8' )
1316-
13171324 return b32_hash
13181325
13191326 def dag_hash_bit_prefix (self , bits ):
@@ -1329,13 +1336,8 @@ def full_hash(self, length=None):
13291336 self .to_node_dict (hash_function = lambda s : s .full_hash ()),
13301337 default_flow_style = True , width = maxint )
13311338 package_hash = self .package .content_hash ()
1332- sha = hashlib .sha1 (yaml_text .encode ('utf-8' ) + package_hash )
1333-
1334- b32_hash = base64 .b32encode (sha .digest ()).lower ()
1335- if sys .version_info [0 ] >= 3 :
1336- b32_hash = b32_hash .decode ('utf-8' )
1337-
1338- self ._full_hash = b32_hash
1339+ self ._full_hash = self ._encode_hash_content (
1340+ yaml_text .encode ('utf-8' ) + package_hash )
13391341
13401342 return self ._full_hash [:length ]
13411343
@@ -1387,7 +1389,10 @@ def to_node_dict(self, hash_function=None, all_deps=False):
13871389 deps = self .dependencies_dict (deptype = deptypes )
13881390 if deps :
13891391 if hash_function is None :
1390- hash_function = lambda s : s .dag_hash (all_deps = all_deps )
1392+ if all_deps :
1393+ hash_function = lambda s : s .build_hash ()
1394+ else :
1395+ hash_function = lambda s : s .dag_hash ()
13911396 d ['dependencies' ] = syaml_dict ([
13921397 (name ,
13931398 syaml_dict ([
@@ -1408,7 +1413,7 @@ def to_dict(self, all_deps=False):
14081413 node = s .to_node_dict (all_deps = all_deps )
14091414 node [s .name ]['hash' ] = s .dag_hash ()
14101415 if all_deps :
1411- node [s .name ]['build_hash' ] = s .dag_hash ( all_deps = True )
1416+ node [s .name ]['build_hash' ] = s .build_hash ( )
14121417 node_list .append (node )
14131418
14141419 return syaml_dict ([('spec' , node_list )])
0 commit comments