|  | @@ -1,7 +1,6 @@
 | 
	
		
			
				|  |  |  import argparse
 | 
	
		
			
				|  |  |  from binascii import unhexlify, hexlify
 | 
	
		
			
				|  |  |  import functools
 | 
	
		
			
				|  |  | -import hashlib
 | 
	
		
			
				|  |  |  import json
 | 
	
		
			
				|  |  |  import textwrap
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -241,28 +240,36 @@ class DebugMixIn:
 | 
	
		
			
				|  |  |          hex_id = args.id
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              id = unhexlify(hex_id)
 | 
	
		
			
				|  |  | -        except ValueError:
 | 
	
		
			
				|  |  | -            print("object id %s is invalid." % hex_id)
 | 
	
		
			
				|  |  | -        else:
 | 
	
		
			
				|  |  | -            try:
 | 
	
		
			
				|  |  | -                data = repository.get(id)
 | 
	
		
			
				|  |  | -            except Repository.ObjectNotFound:
 | 
	
		
			
				|  |  | -                print("object %s not found." % hex_id)
 | 
	
		
			
				|  |  | -            else:
 | 
	
		
			
				|  |  | -                with open(args.path, "wb") as f:
 | 
	
		
			
				|  |  | -                    f.write(data)
 | 
	
		
			
				|  |  | -                print("object %s fetched." % hex_id)
 | 
	
		
			
				|  |  | +            if len(id) != 32:  # 256bit
 | 
	
		
			
				|  |  | +                raise ValueError("id must be 256bits or 64 hex digits")
 | 
	
		
			
				|  |  | +        except ValueError as err:
 | 
	
		
			
				|  |  | +            print("object id %s is invalid [%s]." % (hex_id, str(err)))
 | 
	
		
			
				|  |  | +            return EXIT_ERROR
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            data = repository.get(id)
 | 
	
		
			
				|  |  | +        except Repository.ObjectNotFound:
 | 
	
		
			
				|  |  | +            print("object %s not found." % hex_id)
 | 
	
		
			
				|  |  | +            return EXIT_ERROR
 | 
	
		
			
				|  |  | +        with open(args.path, "wb") as f:
 | 
	
		
			
				|  |  | +            f.write(data)
 | 
	
		
			
				|  |  | +        print("object %s fetched." % hex_id)
 | 
	
		
			
				|  |  |          return EXIT_SUCCESS
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @with_repository(manifest=False, exclusive=True)
 | 
	
		
			
				|  |  |      def do_debug_put_obj(self, args, repository):
 | 
	
		
			
				|  |  | -        """put file(s) contents into the repository"""
 | 
	
		
			
				|  |  | -        for path in args.paths:
 | 
	
		
			
				|  |  | -            with open(path, "rb") as f:
 | 
	
		
			
				|  |  | -                data = f.read()
 | 
	
		
			
				|  |  | -            h = hashlib.sha256(data)  # XXX hardcoded
 | 
	
		
			
				|  |  | -            repository.put(h.digest(), data)
 | 
	
		
			
				|  |  | -            print("object %s put." % h.hexdigest())
 | 
	
		
			
				|  |  | +        """put file contents into the repository"""
 | 
	
		
			
				|  |  | +        with open(args.path, "rb") as f:
 | 
	
		
			
				|  |  | +            data = f.read()
 | 
	
		
			
				|  |  | +        hex_id = args.id
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            id = unhexlify(hex_id)
 | 
	
		
			
				|  |  | +            if len(id) != 32:  # 256bit
 | 
	
		
			
				|  |  | +                raise ValueError("id must be 256bits or 64 hex digits")
 | 
	
		
			
				|  |  | +        except ValueError as err:
 | 
	
		
			
				|  |  | +            print("object id %s is invalid [%s]." % (hex_id, str(err)))
 | 
	
		
			
				|  |  | +            return EXIT_ERROR
 | 
	
		
			
				|  |  | +        repository.put(id, data)
 | 
	
		
			
				|  |  | +        print("object %s put." % hex_id)
 | 
	
		
			
				|  |  |          repository.commit(compact=False)
 | 
	
		
			
				|  |  |          return EXIT_SUCCESS
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -503,7 +510,7 @@ class DebugMixIn:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          debug_put_obj_epilog = process_epilog(
 | 
	
		
			
				|  |  |              """
 | 
	
		
			
				|  |  | -        This command puts objects into the repository.
 | 
	
		
			
				|  |  | +        This command puts an object into the repository.
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          subparser = debug_parsers.add_parser(
 | 
	
	
		
			
				|  | @@ -516,9 +523,8 @@ class DebugMixIn:
 | 
	
		
			
				|  |  |              help="put object to repository (debug)",
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          subparser.set_defaults(func=self.do_debug_put_obj)
 | 
	
		
			
				|  |  | -        subparser.add_argument(
 | 
	
		
			
				|  |  | -            "paths", metavar="PATH", nargs="+", type=str, help="file(s) to read and create object(s) from"
 | 
	
		
			
				|  |  | -        )
 | 
	
		
			
				|  |  | +        subparser.add_argument("id", metavar="ID", type=str, help="hex object ID to put into the repo")
 | 
	
		
			
				|  |  | +        subparser.add_argument("path", metavar="PATH", type=str, help="file to read and create object from")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          debug_delete_obj_epilog = process_epilog(
 | 
	
		
			
				|  |  |              """
 |