)]}'
{"freezer/common/config.py":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":353,"context_line":"    cfg.BoolOpt(\u0027consistency_check\u0027,"},{"line_number":354,"context_line":"                dest\u003d\u0027consistency_check\u0027,"},{"line_number":355,"context_line":"                help\u003d\"When true will checksum the files before backup. \""},{"line_number":356,"context_line":"                     \"The comuted checksum is stored as bakcup metadata\""},{"line_number":357,"context_line":"                     \" and can be retrieved through freezer-api. \""},{"line_number":358,"context_line":"                     \"On restore it is possible to check for consistency. \""},{"line_number":359,"context_line":"                     \"Please note this option is currently only available \""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_243737e4","line":356,"range":{"start_line":356,"start_character":71,"end_line":356,"end_character":72},"updated":"2016-05-05 16:07:12.000000000","message":"spelling.\n\ncomuted -\u003e commuted\nbakcup -\u003e backup","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                dest\u003d\u0027consistency_check\u0027,"},{"line_number":355,"context_line":"                help\u003d\"When true will checksum the files before backup. \""},{"line_number":356,"context_line":"                     \"The comuted checksum is stored as bakcup metadata\""},{"line_number":357,"context_line":"                     \" and can be retrieved through freezer-api. \""},{"line_number":358,"context_line":"                     \"On restore it is possible to check for consistency. \""},{"line_number":359,"context_line":"                     \"Please note this option is currently only available \""},{"line_number":360,"context_line":"                     \"for file system backups. \""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_c473e3b2","line":357,"range":{"start_line":357,"start_character":52,"end_line":357,"end_character":59},"updated":"2016-05-05 16:07:12.000000000","message":"\u0027through the feezer-api\u0027","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":364,"context_line":"               dest\u003d\u0027consistency_checksum\u0027,"},{"line_number":365,"context_line":"               help\u003d\"Checksum the restored file(s) and compares to the \""},{"line_number":366,"context_line":"                    \"backup consistency_checksum provided. \""},{"line_number":367,"context_line":"                    \"Allows to verify that the restored file(s) matches \""},{"line_number":368,"context_line":"                    \"to the original file(s) before backup. \"),"},{"line_number":369,"context_line":"]"},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_c48e4326","line":367,"range":{"start_line":367,"start_character":31,"end_line":367,"end_character":37},"updated":"2016-05-05 16:07:12.000000000","message":"\u0027Allows verification that\u0027","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":365,"context_line":"               help\u003d\"Checksum the restored file(s) and compares to the \""},{"line_number":366,"context_line":"                    \"backup consistency_checksum provided. \""},{"line_number":367,"context_line":"                    \"Allows to verify that the restored file(s) matches \""},{"line_number":368,"context_line":"                    \"to the original file(s) before backup. \"),"},{"line_number":369,"context_line":"]"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_a4e187d2","line":368,"range":{"start_line":368,"start_character":23,"end_line":368,"end_character":24},"updated":"2016-05-05 16:07:12.000000000","message":"remove \u0027to\u0027","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"freezer/job.py":[{"author":{"_account_id":14159,"name":"Fabrizio Vanni","email":"fabrizio.vanni@hpe.com","username":"fabrizio.vanni"},"change_message_id":"158e3f798fc3164716e812fe39095e686b7f59df","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            \u0027client_os\u0027: sys.platform,"},{"line_number":101,"context_line":"            \u0027client_version\u0027: self.conf.__version__,"},{"line_number":102,"context_line":"            \u0027time_stamp\u0027: self.conf.time_stamp,"},{"line_number":103,"context_line":"            \u0027consistency_checksum\u0027: self.conf.consistency_checksum"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"        fields \u003d [\u0027action\u0027, \u0027always_level\u0027, \u0027backup_media\u0027, \u0027backup_name\u0027,"},{"line_number":106,"context_line":"                  \u0027container\u0027, \u0027container_segments\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_5ff9a47f","line":103,"range":{"start_line":103,"start_character":46,"end_line":103,"end_character":66},"updated":"2016-04-05 17:05:22.000000000","message":"values listed in \"fields\" are already copied from configuration to medatada.","commit_id":"4baa6aebbe0c2188c75d21b0e2515896c88114f8"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"860ce441c3dabfeed691be9fdcf255c3d95aa613","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"                #Checksum for Backup Consistency"},{"line_number":138,"context_line":"                if self.conf.consistency_check:"},{"line_number":139,"context_line":"                    consistency_checksum \u003d CheckSum(chdir_path).compute()"},{"line_number":140,"context_line":"                    logging.debug(\u0027[*] Computed checksum for consistency %s\u0027 % consistency_checksum)"},{"line_number":141,"context_line":"                    self.conf.consistency_checksum \u003d consistency_checksum"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_e39b8664","line":139,"range":{"start_line":139,"start_character":20,"end_line":139,"end_character":40},"updated":"2016-04-06 17:22:19.000000000","message":"how to exclud_file or dirs","commit_id":"92e600bbeb5344e4933ef0b902bf2921b80fc3bc"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"860ce441c3dabfeed691be9fdcf255c3d95aa613","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                    if restore_checksum.compare(backup_checksum):"},{"line_number":206,"context_line":"                        logging.info(\u0027[*] Consistency check success.\u0027)"},{"line_number":207,"context_line":"                    else:"},{"line_number":208,"context_line":"                        raise ConsistencyCheckException(\"Backup Consistency Check failed: backup checksum (%s) and restore checksum (%s) did not match.\" % (backup_checksum, restore_checksum.checksum) )"},{"line_number":209,"context_line":"            except OSError as e:"},{"line_number":210,"context_line":"                raise ConsistencyCheckException(\"Backup Consistency Check failed: could not checksum file %s (%s)\" % (e.filename, e.strerror))"},{"line_number":211,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_c3900246","line":208,"range":{"start_line":208,"start_character":30,"end_line":208,"end_character":55},"updated":"2016-04-06 17:22:19.000000000","message":"this is a too long line .","commit_id":"92e600bbeb5344e4933ef0b902bf2921b80fc3bc"},{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"82fbfa831c50a82b02fd0b68160faefe6b90ef50","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"                #Checksum for Backup Consistency"},{"line_number":145,"context_line":"                if self.conf.consistency_check:"},{"line_number":146,"context_line":"                    ignorelinks \u003d (self.conf.dereference_symlink \u003d\u003d \u0027none\u0027 or self.conf.dereference_symlink \u003d\u003d \u0027hard\u0027)"},{"line_number":147,"context_line":"                    consistency_checksum \u003d CheckSum(filepath,ignorelinks\u003dignorelinks).compute()"},{"line_number":148,"context_line":"                    logging.info(\u0027[*] Computed checksum for consistency %s\u0027 % consistency_checksum)"},{"line_number":149,"context_line":"                    self.conf.consistency_checksum \u003d consistency_checksum"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_81fe3d03","line":146,"range":{"start_line":146,"start_character":0,"end_line":146,"end_character":118},"updated":"2016-05-04 13:15:51.000000000","message":"This is not pep8 compliant (80 Char)","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"},{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"82fbfa831c50a82b02fd0b68160faefe6b90ef50","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                    if restore_checksum.compare(backup_checksum):"},{"line_number":209,"context_line":"                        logging.info(\u0027[*] Consistency check success.\u0027)"},{"line_number":210,"context_line":"                    else:"},{"line_number":211,"context_line":"                        raise ConsistencyCheckException(\"Backup Consistency Check failed: backup checksum (%s) and restore checksum (%s) did not match.\" % (backup_checksum, restore_checksum.checksum) )"},{"line_number":212,"context_line":"            except OSError as e:"},{"line_number":213,"context_line":"                raise ConsistencyCheckException(\"Backup Consistency Check failed: could not checksum file %s (%s)\" % (e.filename, e.strerror))"},{"line_number":214,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_c108352b","line":211,"range":{"start_line":211,"start_character":0,"end_line":211,"end_character":201},"updated":"2016-05-04 13:15:51.000000000","message":"idem","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"},{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"82fbfa831c50a82b02fd0b68160faefe6b90ef50","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                    else:"},{"line_number":211,"context_line":"                        raise ConsistencyCheckException(\"Backup Consistency Check failed: backup checksum (%s) and restore checksum (%s) did not match.\" % (backup_checksum, restore_checksum.checksum) )"},{"line_number":212,"context_line":"            except OSError as e:"},{"line_number":213,"context_line":"                raise ConsistencyCheckException(\"Backup Consistency Check failed: could not checksum file %s (%s)\" % (e.filename, e.strerror))"},{"line_number":214,"context_line":"            return {}"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        res \u003d restore.RestoreOs(conf.client_manager, conf.container)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_e10d7136","line":213,"range":{"start_line":213,"start_character":0,"end_line":213,"end_character":142},"updated":"2016-05-04 13:15:51.000000000","message":"idem","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":36,"context_line":"logging \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class Job:"},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    :type storage: freezer.storage.base.Storage"},{"line_number":42,"context_line":"    :type engine: freezer.engine.engine.BackupEngine"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_a4cb471d","line":39,"range":{"start_line":39,"start_character":9,"end_line":39,"end_character":10},"updated":"2016-05-05 16:07:12.000000000","message":"While this class is being edited, can we change it to use the new style classes?","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            \u0027client_version\u0027: self.conf.__version__,"},{"line_number":103,"context_line":"            \u0027time_stamp\u0027: self.conf.time_stamp,"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"        fields \u003d [\u0027action\u0027, \u0027always_level\u0027, \u0027backup_media\u0027, \u0027backup_name\u0027,"},{"line_number":106,"context_line":"                  \u0027container\u0027, \u0027container_segments\u0027,"},{"line_number":107,"context_line":"                  \u0027dry_run\u0027, \u0027hostname\u0027, \u0027path_to_backup\u0027, \u0027max_level\u0027,"},{"line_number":108,"context_line":"                  \u0027mode\u0027, \u0027backup_name\u0027, \u0027hostname\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_24ff3735","line":105,"range":{"start_line":105,"start_character":72,"end_line":105,"end_character":74},"updated":"2016-05-05 16:07:12.000000000","message":"The format would be cleaner if each element were on a separate line.","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"freezer/tests/freezer_tempest_plugin/tests/api/test_swift_backup.py":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"7faa0418d5b7f258fe09fbe92346c5e42fc9a151","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        output, error \u003d process.communicate()"},{"line_number":111,"context_line":"        self.assertEqual(0, len(output.strip()),"},{"line_number":112,"context_line":"                         \"Test backup to swift and restore. Output: {0}. \""},{"line_number":113,"context_line":"                         \"Error: {1} \".format(output, error))"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_498435d2","line":113,"range":{"start_line":113,"start_character":0,"end_line":113,"end_character":61},"updated":"2016-05-04 20:06:00.000000000","message":"I think that this will always pass regardless of the output.\n\n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027ls\u0027, \u0027foo\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE, shell\u003dFalse)\n\u003e\u003e\u003e o, e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027\u0027\n\u003e\u003e\u003e e\n\u0027ls: foo: No such file or directory\\n\u0027\n\u003e\u003e\u003e if 0 \u003d\u003d len(o):\n...   print \"False negative!\"\n... \nFalse negative!","commit_id":"74b8c209a3ebb23e0571f798ad41d143e7127596"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"bfe8bce01f3acf5c99b966afb60aea5aa82ecedd","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        output, error \u003d process.communicate()"},{"line_number":111,"context_line":"        self.assertEqual(0, len(output.strip()),"},{"line_number":112,"context_line":"                         \"Test backup to swift and restore. Output: {0}. \""},{"line_number":113,"context_line":"                         \"Error: {1} \".format(output, error))"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_17a094f3","line":113,"range":{"start_line":113,"start_character":0,"end_line":113,"end_character":61},"in_reply_to":"1a122d0e_498435d2","updated":"2016-05-04 20:47:52.000000000","message":"Did some more testing and it looks like it will work with diff.\n\n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027diff\u0027, \u0027dir1\u0027, \u0027dir3\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE, shell\u003dFalse)\n\u003e\u003e\u003e o,e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027Only in dir3: foo\\n\u0027\n\u003e\u003e\u003e e\n\u0027\u0027\n\u003e\u003e\u003e if 0 \u003d\u003d len(o.strip()):\n...   print \"False negative!\"\n... \n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027diff\u0027, \u0027dir1\u0027, \u0027dir2\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE, shell\u003dFalse)\n\u003e\u003e\u003e o,e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027\u0027\n\u003e\u003e\u003e e\n\u0027\u0027\n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027diff\u0027, \u0027dir1\u0027, \u0027dir3\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE, shell\u003dFalse)\n\u003e\u003e\u003e o,e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027Only in dir3: foo\\n\u0027\n\u003e\u003e\u003e e\n\u0027\u0027\n\u003e\u003e\u003e if 0 !\u003d len(o.strip()):\n...   print \u0027Failed test!\u0027\n... \nFailed test!","commit_id":"74b8c209a3ebb23e0571f798ad41d143e7127596"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                         \"Error: {1} \".format(output, error))"},{"line_number":117,"context_line":"        self.assertEqual(0, len(error.strip()),"},{"line_number":118,"context_line":"                         \"Test backup to swift and restore. Output: {0}. \""},{"line_number":119,"context_line":"                         \"Error: {1} \".format(output, error))"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_49288c97","line":119,"range":{"start_line":119,"start_character":59,"end_line":119,"end_character":61},"updated":"2016-05-05 16:07:12.000000000","message":"This all looks good to me. It looks like all cases are covered.\n\nCase 1 (no difference):\n\n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027diff\u0027, \u0027dir1\u0027, \u0027dir4\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE) \n\u003e\u003e\u003e o, e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027\u0027\n\u003e\u003e\u003e e\n\u0027\u0027\n\u003e\u003e\u003e p.returncode\n0\n\n\nCase 2 (difference):\n\n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027diff\u0027, \u0027dir1\u0027, \u0027dir3\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE) \n\u003e\u003e\u003e o, e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027diff dir1/foo dir3/foo\\n1d0\\n\u003c xxx\\n\u0027\n\u003e\u003e\u003e e\n\u0027\u0027\n\u003e\u003e\u003e p.returncode\n1\n\nCase 3 (dir0 does not exist, so error):\n\n\u003e\u003e\u003e p \u003d subprocess.Popen([\u0027diff\u0027, \u0027dir0\u0027, \u0027dir3\u0027], stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE) \n\u003e\u003e\u003e o, e \u003d p.communicate()\n\u003e\u003e\u003e o\n\u0027\u0027\n\u003e\u003e\u003e e\n\u0027diff: dir0: No such file or directory\\n\u0027\n\u003e\u003e\u003e p.returncode\n2","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"freezer/utils/checksum.py":[{"author":{"_account_id":14159,"name":"Fabrizio Vanni","email":"fabrizio.vanni@hpe.com","username":"fabrizio.vanni"},"change_message_id":"bcb54940c779642df9309689d795707b4faffe75","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        :param exclude_dirs: directories to be excluded for checksum "},{"line_number":20,"context_line":"        :type exclude_dirs: list"},{"line_number":21,"context_line":"        :param exclude_files: files to be excluded for checksum"},{"line_number":22,"context_line":"        :type exclude_files: list"},{"line_number":23,"context_line":"        :param checksum: final result for checksum computing"},{"line_number":24,"context_line":"        :type checksum: string"},{"line_number":25,"context_line":"        :param real_checksum: checksum without file name appended if unique file"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_844ad5aa","line":22,"updated":"2016-04-05 16:58:32.000000000","message":"exclude_files needs to be a tuple. may be worthwhile to accept lists and convert to tuple ?","commit_id":"4baa6aebbe0c2188c75d21b0e2515896c88114f8"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"9a213cc00e92671f305291b46672e6b130387b11","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    \"\"\""},{"line_number":6,"context_line":"    Checksum a file or directory with sha256 or md5 alogrithms."},{"line_number":7,"context_line":"    "},{"line_number":8,"context_line":"    This is used by backup and restore jobs to check for backup consistency."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    - **parameters**::"},{"line_number":11,"context_line":"        :param path: the path to the file or directory to checksum"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_9f55cefb","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":4},"updated":"2016-04-06 13:05:31.000000000","message":"The blank space","commit_id":"2d2b08602ac04b66b8f6938a898eebdc406f81cb"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"9a213cc00e92671f305291b46672e6b130387b11","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        :param hasher_type: the hasher algorithm to use for checksum"},{"line_number":14,"context_line":"        :type hasher_type: string"},{"line_number":15,"context_line":"        :param hasher: hasher object for the specified hasher_type"},{"line_number":16,"context_line":"        :type hasher: hashlib oject        "},{"line_number":17,"context_line":"        :param blocksize: the size of blocks to read when checksuming"},{"line_number":18,"context_line":"        :type blocksize: integer"},{"line_number":19,"context_line":"        :param exclude_dirs: directories to be excluded for checksum "}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_dfb10649","line":16,"range":{"start_line":16,"start_character":35,"end_line":16,"end_character":43},"updated":"2016-04-06 13:05:31.000000000","message":"Same as above","commit_id":"2d2b08602ac04b66b8f6938a898eebdc406f81cb"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"9a213cc00e92671f305291b46672e6b130387b11","unresolved":false,"context_lines":[{"line_number":16,"context_line":"        :type hasher: hashlib oject        "},{"line_number":17,"context_line":"        :param blocksize: the size of blocks to read when checksuming"},{"line_number":18,"context_line":"        :type blocksize: integer"},{"line_number":19,"context_line":"        :param exclude_dirs: directories to be excluded for checksum "},{"line_number":20,"context_line":"        :type exclude_dirs: list"},{"line_number":21,"context_line":"        :param exclude_files: files to be excluded for checksum"},{"line_number":22,"context_line":"        :type exclude_files: list"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_5f84d65c","line":19,"range":{"start_line":19,"start_character":68,"end_line":19,"end_character":69},"updated":"2016-04-06 13:05:31.000000000","message":"Same as above","commit_id":"2d2b08602ac04b66b8f6938a898eebdc406f81cb"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"9a213cc00e92671f305291b46672e6b130387b11","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Returns a list of the checksum for each file in the given list."},{"line_number":88,"context_line":"        :param files:"},{"line_number":89,"context_line":"        :type files: list"},{"line_number":90,"context_line":"        :return: list "},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        hashes \u003d [(self.hashfile(open(fname, \u0027rb\u0027)))"},{"line_number":93,"context_line":"                 for fname in files]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_df98e6c2","line":90,"range":{"start_line":90,"start_character":21,"end_line":90,"end_character":22},"updated":"2016-04-06 13:05:31.000000000","message":"Same as above","commit_id":"2d2b08602ac04b66b8f6938a898eebdc406f81cb"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from freezer.utils import utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class CheckSum:"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    Checksum a file or directory with sha256 or md5 alogrithms."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_84a60b52","line":23,"range":{"start_line":23,"start_character":14,"end_line":23,"end_character":15},"updated":"2016-05-05 16:07:12.000000000","message":"Use new style classes?","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"freezer/utils/utils.py":[{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"aa0c199e3d2728ce8e3d80de9755527edf530bd5","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    except Exception:"},{"line_number":364,"context_line":"        logging.warning(\"Error deleting file {0}\".format(path_to_file))"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"def walk_path(path,exclude,callback,*kargs,**kwargs):"},{"line_number":367,"context_line":"    \"\"\""},{"line_number":368,"context_line":"    Walk a directory to find a list of all files on it."},{"line_number":369,"context_line":"    If path to a single file is given, returns a list with the path to this"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_639260a1","line":366,"range":{"start_line":366,"start_character":4,"end_line":366,"end_character":13},"updated":"2016-04-08 13:28:18.000000000","message":"does this name make sense?","commit_id":"65aa2efa8646d3dc36d953a2965ba597d96a82ec"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"c1623de0687578329edbaa3fe449d478bb60bb65","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    if os.path.isfile(path):"},{"line_number":375,"context_line":"        return count"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    for root, dirs, files in os.walk(path, topdown\u003dTrue):"},{"line_number":378,"context_line":"        if not exclude_path(root,exclude):"},{"line_number":379,"context_line":"            for fname in files:"},{"line_number":380,"context_line":"                f \u003d os.path.join(root,fname)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_63fee039","line":377,"range":{"start_line":377,"start_character":32,"end_line":377,"end_character":36},"updated":"2016-04-08 13:36:32.000000000","message":"I was thinking about using os.scan, what do you think?\n\n- https://www.python.org/dev/peps/pep-0471/","commit_id":"65aa2efa8646d3dc36d953a2965ba597d96a82ec"},{"author":{"_account_id":14101,"name":"yapeng Yang","email":"a394954369@gmail.com","username":"yapeng"},"change_message_id":"df81892aa476c5bf3fd10e56b2715ed814b47c91","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    if os.path.isfile(path):"},{"line_number":375,"context_line":"        return count"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    for root, dirs, files in os.walk(path, topdown\u003dTrue):"},{"line_number":378,"context_line":"        if not exclude_path(root,exclude):"},{"line_number":379,"context_line":"            for fname in files:"},{"line_number":380,"context_line":"                f \u003d os.path.join(root,fname)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_a8af302a","line":377,"range":{"start_line":377,"start_character":32,"end_line":377,"end_character":36},"in_reply_to":"9a061dce_63fee039","updated":"2016-04-08 14:40:29.000000000","message":"Done","commit_id":"65aa2efa8646d3dc36d953a2965ba597d96a82ec"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"aa0c199e3d2728ce8e3d80de9755527edf530bd5","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            for fname in files:"},{"line_number":380,"context_line":"                f \u003d os.path.join(root,fname)"},{"line_number":381,"context_line":"                if not exclude_path(f,exclude):"},{"line_number":382,"context_line":"                    kwargs[\"filepath\"] \u003d f"},{"line_number":383,"context_line":"                    callback(*kargs,**kwargs)"},{"line_number":384,"context_line":"                    count \u003d count + 1"},{"line_number":385,"context_line":"    return count"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_23cea8b4","line":382,"range":{"start_line":382,"start_character":20,"end_line":382,"end_character":26},"updated":"2016-04-08 13:28:18.000000000","message":"is it not better to ask for this dict explicitly?","commit_id":"65aa2efa8646d3dc36d953a2965ba597d96a82ec"},{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"20cc187fd0a1735406ef59ca4d1b77d013ae557c","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    The callback is also executed and counted for an empty directory."},{"line_number":376,"context_line":"    :return: int with the number of files walked"},{"line_number":377,"context_line":"    \"\"\""},{"line_number":378,"context_line":"    count \u003d 0 "},{"line_number":379,"context_line":"    "},{"line_number":380,"context_line":"    if os.path.isfile(path):"},{"line_number":381,"context_line":"        return execute_walk_callback(count, path, callback, *kargs, **kwargs)"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_6184c15c","line":379,"range":{"start_line":378,"start_character":0,"end_line":379,"end_character":4},"updated":"2016-05-04 13:18:43.000000000","message":"trailing spaces","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    Walk a directory and execute a callback function for each file found."},{"line_number":374,"context_line":"    If path to a single file is given, the callback is excuted for this file."},{"line_number":375,"context_line":"    The callback is also executed and counted for an empty directory."},{"line_number":376,"context_line":"    :return: int with the number of files walked"},{"line_number":377,"context_line":"    \"\"\""},{"line_number":378,"context_line":"    count \u003d 0"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_1f3ec2b7","line":376,"range":{"start_line":376,"start_character":42,"end_line":376,"end_character":48},"updated":"2016-05-05 16:07:12.000000000","message":"Is this a depth-first or breadth-first walk? Please describe the algorithm.","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"def execute_walk_callback(count, filepath, callback, *kargs, **kwargs):"},{"line_number":401,"context_line":"    \"\"\""},{"line_number":402,"context_line":"    Execute the callback funcion adding the file path to its argument list."},{"line_number":403,"context_line":"    Increments the file counter and returns it."},{"line_number":404,"context_line":"    NB: the callback function must be defined with the filepath argument."},{"line_number":405,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a122d0e_440cf341","line":402,"range":{"start_line":402,"start_character":25,"end_line":402,"end_character":32},"updated":"2016-05-05 16:07:12.000000000","message":"spelling: funcion -\u003e function","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"tests/benchmark/utils/bench_checksum.py":[{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"20cc187fd0a1735406ef59ca4d1b77d013ae557c","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"final_tab \u003d [[\"blocksize\", \"average\", \"best exec\", \"worst exec\"]]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"exec_times \u003d 10 "},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def test_per_blocksize():"},{"line_number":45,"context_line":"    for i in range(exec_times):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_218be969","line":42,"range":{"start_line":42,"start_character":14,"end_line":42,"end_character":16},"updated":"2016-05-04 13:18:43.000000000","message":"trailing space","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"},{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"20cc187fd0a1735406ef59ca4d1b77d013ae557c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    print(\"For %s file checksummed %s times :\"%(filesize,exec_times))"},{"line_number":77,"context_line":"    print(\"blocksize\\taverage(s)\\tbest exec\\tworse exec:\")"},{"line_number":78,"context_line":"    for key,value in results.iteritems():"},{"line_number":79,"context_line":"        print(\"%s\\t\\t%s\\t%s\\t%s\"%(key, "},{"line_number":80,"context_line":"            str(sum(value)/len(value)),str(min(value)),str(max(value))))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_81e8fd17","line":79,"range":{"start_line":79,"start_character":26,"end_line":79,"end_character":39},"updated":"2016-05-04 13:18:43.000000000","message":"trailing space","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"1a122d0e_df0f2ade","updated":"2016-05-05 16:07:12.000000000","message":"Some general description of what each of the functions is doing would be helpful to readers of this code.","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"tests/unit/utils/test_checksum.py":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"e48756973d2f35a5be53892de01fc66d3e70ae30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"1a122d0e_ff214650","updated":"2016-05-05 16:07:12.000000000","message":"Again, need to describe what is being tested and how.","commit_id":"91a88317465b29ba6db9d3d7319320811eb954cd"}],"tests/unit/utils/test_utils.py":[{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"20cc187fd0a1735406ef59ca4d1b77d013ae557c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        mock_isfile.return_value \u003d True"},{"line_number":150,"context_line":"        count \u003d utils.walk_path(\u0027root\u0027,\u0027\u0027,False,self.callback)"},{"line_number":151,"context_line":"        assert count is 1"},{"line_number":152,"context_line":"    "},{"line_number":153,"context_line":"    def callback(self,filepath\u003d\u0027\u0027, files\u003d[]):"},{"line_number":154,"context_line":"        files.append(filepath)"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_c1f2f505","line":152,"range":{"start_line":152,"start_character":0,"end_line":152,"end_character":4},"updated":"2016-05-04 13:18:43.000000000","message":"trailing space","commit_id":"15ef35f2c5cc94289868fecdd20e95f5a9d53958"}]}
