)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"fc92f039d91eac5a3aab395827789dac2ad871f6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mark Seger \u003cMark.Seger@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-05-23 11:33:42 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add -l and -lh switches to swift list command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Icf38de9bab6d387a9a1deed444a91f68b4389cfe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAPH%2F%2FmK8%3D","line":7,"updated":"2013-05-29 17:00:17.000000000","message":"This doesn\u0027t reflect the functionality implemented. You implemented --lh","commit_id":"d007c58223c29688a3f6bb5fb9e5c3685cd40b7f"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mark Seger \u003cMark.Seger@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-06-06 21:37:19 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add -l and --lh switches to swift list command"},{"line_number":8,"context_line":"added to man page and include an example in swift help"},{"line_number":9,"context_line":"use strftime to format date/time strings"},{"line_number":10,"context_line":"replaced reference to cloudfiles in help to openstack url"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPX%2F%2F4GY%3D","line":7,"updated":"2013-06-06 22:23:13.000000000","message":"You should have one short summary line, a blank line, then one or more paragraphs with details.\n\nSomething like this maybe?\n\n  Add -l and --lh switches to swift \"list\" command.\n  \n  Also updated man page and added an example in the \"list\" command usage message.\n\nIMO, the other bits about using strftime and the cloudfiles vs. openstack URL don\u0027t need to be mentioned in the commit message as they were just changed in response to reviews.","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"}],"bin/swift":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"b5fc6aabc3c0336a2eea7537133056a9ca90d2df","unresolved":false,"context_lines":[{"line_number":617,"context_line":"                        date \u003d \u0027%s-%02d-%02d\u0027 % (pieces[4], m, int(pieces[2]))"},{"line_number":618,"context_line":"                        xtime \u003d pieces[3]"},{"line_number":619,"context_line":"                    except ClientException, err:"},{"line_number":620,"context_line":"                        #print \"couldn\u0027t read head data for \u0027%s\" % cname"},{"line_number":621,"context_line":"                        date \u003d \u0027????-??-??\u0027"},{"line_number":622,"context_line":"                        xtime \u003d \u0027??:??:??\u0027"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-swift","patch_set":2,"id":"AAAAPH%2F%2FicY%3D","line":620,"updated":"2013-05-30 23:27:27.000000000","message":"Would you remove this commented-out code?","commit_id":"324a1412d2fb0201468fcea1be0b506b000d497e"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"eb649fe4410ccd110c226c7729a5f0db06773dd0","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                        (basename(argv[0]), st_list_help))"},{"line_number":548,"context_line":"        return"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    months \u003d \u0027JanFebMarAprMayJunJulAugSepOctNovDec\u0027"},{"line_number":551,"context_line":"    conn \u003d get_conn(options)"},{"line_number":552,"context_line":"    try:"},{"line_number":553,"context_line":"        marker \u003d \u0027\u0027"}],"source_content_type":"text/x-swift","patch_set":4,"id":"AAAAPX%2F%2F4Yc%3D","line":550,"updated":"2013-06-06 20:10:22.000000000","message":"Let\u0027s not reinvent the standard library. time.strftime is what you\u0027re after here.\n\nAdemás, esto no funciona en locales como es_MX.","commit_id":"77cbf274405e75606acc86a6fdf69d3bc8538269"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"8db549fe4c00d08e0421c6540e20d8774d499403","unresolved":false,"context_lines":[{"line_number":537,"context_line":"    parser.add_option("},{"line_number":538,"context_line":"        \u0027-d\u0027, \u0027--delimiter\u0027, dest\u003d\u0027delimiter\u0027,"},{"line_number":539,"context_line":"        help\u003d\u0027Will roll up items with the given delimiter\u0027"},{"line_number":540,"context_line":"        \u0027 (see Cloud Files general documentation for what this means)\u0027)"},{"line_number":541,"context_line":"    (options, args) \u003d parse_args(parser, args)"},{"line_number":542,"context_line":"    args \u003d args[1:]"},{"line_number":543,"context_line":"    if options.delimiter and not args:"}],"source_content_type":"text/x-swift","patch_set":5,"id":"AAAAPX%2F%2F4NM%3D","line":540,"updated":"2013-06-06 21:26:22.000000000","message":"I know this isn\u0027t directly related to this patch, but I noticed it because you edited this line.\n\nCan you please replace the Cloud Files reference with a reference to \u003chttp://docs.openstack.org/api/openstack-object-storage/1.0/content/list-objects.html\u003e?","commit_id":"f170bd415e92687999b9140bda47fcdc142180d4"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":503,"context_line":"\u0027\u0027\u0027.strip(\u0027\\n\u0027)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"def st_list_human(bytes):"},{"line_number":507,"context_line":"    \"\"\""},{"line_number":508,"context_line":"    convert a number \u003e 1024 to -h format as with ls -lh"},{"line_number":509,"context_line":"    \"\"\""}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4Kk%3D","line":506,"updated":"2013-06-06 22:23:13.000000000","message":"The leading \"st_\" is only for dispatching commands, so you can name this better like just \"human_bytes\" or something.","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"955d0bdcf8cf99fae981ffcbb42a5a1c6dc79948","unresolved":false,"context_lines":[{"line_number":503,"context_line":"\u0027\u0027\u0027.strip(\u0027\\n\u0027)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"def st_list_human(bytes):"},{"line_number":507,"context_line":"    \"\"\""},{"line_number":508,"context_line":"    convert a number \u003e 1024 to -h format as with ls -lh"},{"line_number":509,"context_line":"    \"\"\""}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4GE%3D","line":506,"updated":"2013-06-06 22:09:43.000000000","message":"This is a bit oversimplified for small values, e.g. 1M. The ls(1) is a bit smarter, it does 1.9M for small division results (fits in the same space for prettiness).\n\nAlso, if an ungodly wrong size (Exabytes) is ever returned, it is plain wrong.","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            if not items:"},{"line_number":562,"context_line":"                break"},{"line_number":563,"context_line":"            for item in items:"},{"line_number":564,"context_line":"                cname \u003d item.get(\u0027name\u0027)"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"                if not options.long and not options.human:"},{"line_number":567,"context_line":"                    print_queue.put(item.get(\u0027name\u0027, item.get(\u0027subdir\u0027)))"}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4KI%3D","line":564,"updated":"2013-06-06 22:23:13.000000000","message":"How about \"item_name\" instead of \"cname\" since it could be an object name?","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"955d0bdcf8cf99fae981ffcbb42a5a1c6dc79948","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            if not items:"},{"line_number":562,"context_line":"                break"},{"line_number":563,"context_line":"            for item in items:"},{"line_number":564,"context_line":"                cname \u003d item.get(\u0027name\u0027)"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"                if not options.long and not options.human:"},{"line_number":567,"context_line":"                    print_queue.put(item.get(\u0027name\u0027, item.get(\u0027subdir\u0027)))"}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4Gk%3D","line":564,"updated":"2013-06-06 22:09:43.000000000","message":"Two lines down, we have item.get(\u0027name\u0027, xxxxx). Can a version of Swift return an item without \u0027name\u0027, and if it does, what happens? A KeyError exception?","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                    print_queue.put(item.get(\u0027name\u0027, item.get(\u0027subdir\u0027)))"},{"line_number":568,"context_line":"                elif len(args) \u003d\u003d 0:    # listing containers"},{"line_number":569,"context_line":"                    count \u003d item.get(\u0027count\u0027)"},{"line_number":570,"context_line":"                    bytes \u003d \u0027%10s\u0027 % item.get(\u0027bytes\u0027)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"                    try:"},{"line_number":573,"context_line":"                        meta \u003d conn.head_container(cname)"}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4I8%3D","line":570,"updated":"2013-06-06 22:23:13.000000000","message":"Can you move the human-bytes-formatting code up here as a single if/else?","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                    try:"},{"line_number":573,"context_line":"                        meta \u003d conn.head_container(cname)"},{"line_number":574,"context_line":"                        utc \u003d gmtime(float(meta.get(\u0027x-timestamp\u0027)))"},{"line_number":575,"context_line":"                        datestamp \u003d \u0027%s\u0027 % (strftime(\u0027%Y-%m-%d %H:%M:%S\u0027, utc))"},{"line_number":576,"context_line":"                    except ClientException, err:"},{"line_number":577,"context_line":"                        datestamp \u003d \u0027????-??-?? ??:??:??\u0027"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4J0%3D","line":575,"updated":"2013-06-06 22:23:13.000000000","message":"This could just be\n\n  datestamp \u003d strftime(...)","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                        meta \u003d conn.head_container(cname)"},{"line_number":574,"context_line":"                        utc \u003d gmtime(float(meta.get(\u0027x-timestamp\u0027)))"},{"line_number":575,"context_line":"                        datestamp \u003d \u0027%s\u0027 % (strftime(\u0027%Y-%m-%d %H:%M:%S\u0027, utc))"},{"line_number":576,"context_line":"                    except ClientException, err:"},{"line_number":577,"context_line":"                        datestamp \u003d \u0027????-??-?? ??:??:??\u0027"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"                    if options.human:"}],"source_content_type":"text/x-swift","patch_set":6,"id":"AAAAPX%2F%2F4KA%3D","line":576,"updated":"2013-06-06 22:23:13.000000000","message":"If you\u0027re not doing anything with \"err\", I think you can just get rid of it; e.g.\n\n  except ClientException:\n      ...","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"21114727c6181ba285cc8642f75b2212bf816ef2","unresolved":false,"context_lines":[{"line_number":514,"context_line":"    temp \u003d int(bytes)"},{"line_number":515,"context_line":"    if temp \u003e 0:"},{"line_number":516,"context_line":"        while (temp \u003e 1023):"},{"line_number":517,"context_line":"            temp \u003d float(temp / 1024)"},{"line_number":518,"context_line":"            suffix \u003d mods[0]"},{"line_number":519,"context_line":"            mods \u003d mods[1:]"},{"line_number":520,"context_line":"            if temp \u003e 9:"}],"source_content_type":"text/x-swift","patch_set":8,"id":"AAAAPX%2F%2F34o%3D","line":517,"updated":"2013-06-06 23:58:04.000000000","message":"I don\u0027t think this cast works when temp is an int:\n\n  \u003e\u003e\u003e float(8 / 7)\n  1.0\n  \u003e\u003e\u003e 8 / 7.0\n  1.1428571428571428\n\nProbably better written as\n\n  temp \u003d temp / 1024.0\n\nAlternatively, you could just say \"temp \u003d float(bytes)\" above instead and then have this line read:\n\n  temp \u003d temp / 1024\n\nWhich would work fine since temp would already be a float and a float divided by an int will be a float.","commit_id":"b98d4012097db5147fd156e3ebb6ad3b44036eb9"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"21114727c6181ba285cc8642f75b2212bf816ef2","unresolved":false,"context_lines":[{"line_number":564,"context_line":"            if not items:"},{"line_number":565,"context_line":"                break"},{"line_number":566,"context_line":"            for item in items:"},{"line_number":567,"context_line":"                item_name \u003d item.get(\u0027name\u0027)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                if not options.long and not options.human:"},{"line_number":570,"context_line":"                    print_queue.put(item.get(\u0027name\u0027, item.get(\u0027subdir\u0027)))"}],"source_content_type":"text/x-swift","patch_set":8,"id":"AAAAPX%2F%2F34E%3D","line":567,"updated":"2013-06-06 23:58:04.000000000","message":"Any reason this shouldn\u0027t be\n\n  item_name \u003d item.get(\u0027name\u0027, item.get(\u0027subdir\u0027))\n\nAnd then have the (old, non-long) print_queue put look like this?\n\n  print_queue.put(item_name)","commit_id":"b98d4012097db5147fd156e3ebb6ad3b44036eb9"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"21114727c6181ba285cc8642f75b2212bf816ef2","unresolved":false,"context_lines":[{"line_number":566,"context_line":"            for item in items:"},{"line_number":567,"context_line":"                item_name \u003d item.get(\u0027name\u0027)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                if not options.long and not options.human:"},{"line_number":570,"context_line":"                    print_queue.put(item.get(\u0027name\u0027, item.get(\u0027subdir\u0027)))"},{"line_number":571,"context_line":"                elif len(args) \u003d\u003d 0:    # listing containers"},{"line_number":572,"context_line":"                    count \u003d item.get(\u0027count\u0027)"}],"source_content_type":"text/x-swift","patch_set":8,"id":"AAAAPX%2F%2F33Y%3D","line":569,"updated":"2013-06-06 23:58:04.000000000","message":"This would be cleaner and have less duplicated code (the bytes string formatting) if it were like\n\n  ...\n  if not options.long and not options.human:\n    ...\n  else:\n    print_queue.put(long_line(item_name, item, options.human, args))\n\nand elsewhere\n\n  def long_line(item_name, item, use_human, listing_objects):\n    [assign to bytes]\n    if listing_objects:\n      [extract date/xtme and return formatted string for obj]\n    else:  # listing containers\n      [try/except and return the formatted string for container]\n\nHopefully that makes sense?","commit_id":"b98d4012097db5147fd156e3ebb6ad3b44036eb9"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"633d5bf6c6085a62852273c898369f1cd6646f9d","unresolved":false,"context_lines":[{"line_number":503,"context_line":"\u0027\u0027\u0027.strip(\u0027\\n\u0027)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"def printable_bytes(bytes, human_flag):"},{"line_number":507,"context_line":"    \"\"\""},{"line_number":508,"context_line":"    convert a number \u003e 1024 to printable format, either in 4 char -h format as"},{"line_number":509,"context_line":"    with ls -lh or return as 12 char right justified string (up to 999GB)"}],"source_content_type":"text/x-swift","patch_set":10,"id":"AAAAPX%2F%2FzAE%3D","line":506,"updated":"2013-06-10 14:24:36.000000000","message":"Can you move this function so that the st_list_help variable and the definition of the st_list() function are next to each other?  That\u0027ll help them stay in sync better during future edits.  Maybe put printable_bytes just after st_list().","commit_id":"2066572d428d0e5491956f0cc06ea46b56c246cb"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"633d5bf6c6085a62852273c898369f1cd6646f9d","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                suffix \u003d mods[0]"},{"line_number":520,"context_line":"                mods \u003d mods[1:]"},{"line_number":521,"context_line":"            if temp \u003e 9:"},{"line_number":522,"context_line":"                bytes \u003d \u0027%3d%s\u0027 % (temp, suffix)"},{"line_number":523,"context_line":"            else:"},{"line_number":524,"context_line":"                bytes \u003d \u0027%.1f%s\u0027 % (temp, suffix)"},{"line_number":525,"context_line":"        else:"}],"source_content_type":"text/x-swift","patch_set":10,"id":"AAAAPX%2F%2Fy%2BE%3D","line":522,"updated":"2013-06-10 14:24:36.000000000","message":"Output can still look a bit jagged in the --lh case:\n\n  $ swift list ss-swift3 --lh\n   48 2013-06-10 14:08:56 ss-swift3/swift3/CHANGELOG\n   11K 2013-06-10 14:08:56 ss-swift3/swift3/LICENSE\n  1.2K 2013-06-10 14:08:56 ss-swift3/swift3/README.md\n  6.3K 2013-06-10 14:08:56 ss-swift3/swift3/doc/source/conf.py\n  860 2013-06-10 14:08:56 ss-swift3/swift3/doc/source/index.rst\n  261 2013-06-10 14:08:56 ss-swift3/swift3/doc/source/swift3.rst\n  1.0K 2013-06-10 14:08:56 ss-swift3/swift3/setup.py\n  204 2013-06-10 14:08:56 ss-swift3/swift3/stdeb.cfg\n\nSuffix should probably be initialized to \u0027 \u0027 (a single space) to maintain the width in this case.","commit_id":"2066572d428d0e5491956f0cc06ea46b56c246cb"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"633d5bf6c6085a62852273c898369f1cd6646f9d","unresolved":false,"context_lines":[{"line_number":585,"context_line":"                        print_queue.put(\"%5s %s %s %s\" %"},{"line_number":586,"context_line":"                                        (count, bytes, datestamp, item_name))"},{"line_number":587,"context_line":"                    else:    # list container contents"},{"line_number":588,"context_line":"                        date, xtime \u003d item.get(\u0027last_modified\u0027).split(\u0027T\u0027)"},{"line_number":589,"context_line":"                        xtime \u003d xtime.split(\u0027.\u0027)[0]"},{"line_number":590,"context_line":"                        print_queue.put(\"%s %10s %8s %s\" %"},{"line_number":591,"context_line":"                                        (bytes, date, xtime, item_name))"}],"source_content_type":"text/x-swift","patch_set":10,"id":"AAAAPX%2F%2Fy8s%3D","line":588,"updated":"2013-06-10 14:24:36.000000000","message":"As mentioned in email, this can break like so:\n\n  $ swift list -d / -l t\n  Traceback (most recent call last):\n    File \"/Users/darrell/.virtualenvs/ssdev/bin/swift\", line 7, in \u003cmodule\u003e\n      execfile(__file__)\n    File \"/Users/darrell/Documents/SwiftStack/python-swiftclient/bin/swift\", line 1375, in \u003cmodule\u003e\n      error_queue)\n    File \"/Users/darrell/Documents/SwiftStack/python-swiftclient/bin/swift\", line 593, in st_list\n      date, xtime \u003d item.get(\u0027last_modified\u0027).split(\u0027T\u0027)\n  AttributeError: \u0027NoneType\u0027 object has no attribute \u0027split\u0027","commit_id":"2066572d428d0e5491956f0cc06ea46b56c246cb"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"31e8b8361ef05ff91726e0ca803101b814aef3bb","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                if temp \u003e 9:"},{"line_number":512,"context_line":"                    bytes \u003d \u0027%3d%s\u0027 % (temp, suffix)"},{"line_number":513,"context_line":"                else:"},{"line_number":514,"context_line":"                    bytes \u003d \u0027%.1f%s\u0027 % (temp, suffix)"},{"line_number":515,"context_line":"        if suffix \u003d\u003d \u0027\u0027:    # must be \u003c 1024"},{"line_number":516,"context_line":"            bytes \u003d \u0027%4s\u0027 % bytes"},{"line_number":517,"context_line":"    else:"}],"source_content_type":"text/x-swift","patch_set":12,"id":"AAAAPX%2F%2FvPM%3D","line":514,"updated":"2013-06-11 17:08:11.000000000","message":"Rounding still seems off...  \"ls -lh\" formats 1059 bytes as \"1.1K\" but this code produces \"1.0K\".\n\nOddly enough, \"ls -lh\" formats 1230 bytes as \"1.3K\", which seems wrong to me.  This code formats it as \"1.2K\" which seems more correct.\n\nFWIW, here\u0027s how I did something similar (I strongly feel \"powers of 2\" like KiB, MiB, etc should both be labeled correctly and not used for anything other than something associated with RAM, so I hard-coded \"powers of 10\" and units of kB, MB, etc.): https://github.com/swiftstack/ssbench/blob/master/ssbench/reporter.py#L196\n\nI also had to write plenty of unit tests to get the formatting correct:  https://github.com/swiftstack/ssbench/blob/master/ssbench/tests/test_reporter.py#L119","commit_id":"17bb3fa7794b7b00798a5debe79d497e5ee725a6"}],"doc/manpages/swift.1":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"2207efb7fe6a35fe84c6b6e9c19158fd45056298","unresolved":false,"context_lines":[{"line_number":54,"context_line":"The -l and --lh options provide more detail, similar to ls -l and ls -lh, the latter"},{"line_number":55,"context_line":"providing sizes in human readable format (eg 3K, 12M, etc). These latter 2 switches"},{"line_number":56,"context_line":"use more overhead to get those details, which is directly proportional to the number"},{"line_number":57,"context_line":"of container or objects being listed."},{"line_number":58,"context_line":".RE"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"\\fBupload\\fR [\\fIcommand-options\\fR] container file_or_directory [\\fIfile_or_directory\\fR] [...]"}],"source_content_type":"text/troff","patch_set":6,"id":"AAAAPX%2F%2F4Hw%3D","line":57,"updated":"2013-06-06 22:23:13.000000000","message":"should be \"containers\"","commit_id":"8a0cd88373a2bab95a691880431199375a60e89c"}]}
