)]}'
{
  "commit": "48897b368b46fd74dd679991fe3f103ffbf6c425",
  "tree": "a260545c13d473465582d1be2fce71672c7d9a51",
  "parents": [
    "1d8aab087767ab2a8b3647366f75e121b9667af1"
  ],
  "author": {
    "name": "James D. Lin",
    "email": "jamesderlin@users.noreply.github.com",
    "time": "Tue Jun 23 15:28:56 2020 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Jun 23 15:28:56 2020 -0700"
  },
  "message": "Try to fix flaky timestamp tests (#153)\n\n* Try to fix flaky timestamp tests\r\n\r\nThere seems to be an underlying Dart issue that causes access and\r\nmodification times to files to sometimes be 1 second before the\r\ncurrent time.\r\n\r\nAdjust `package:file`\u0027s access and modification time tests to\r\ntolerate this.  Previously they verified that the access and\r\nmodification times always were within a 1 second interval, starting\r\nfrom the current second and ending at the next second.  This change\r\nadjusts the interval to start at the previous second and end at the\r\ncurrent time rounded up to the nearest second.  This means that the\r\ninterval will be 1 second if the current time happens to be an exact\r\nsecond or will be up to 2 seconds otherwise.\r\n\r\nWith this change, I\u0027ve run one of the modification time tests in a\r\ncontinuous loop for 10s (\u003e300K iterations) without failure.\r\n\r\nBonus: Make some additional changes related to time handling:\r\n\r\n* Change `ceil()` to be a mathematical ceiling.  Previously if the\r\n  current time happened to be an exact second, `ceil()` would return\r\n  the next second, which is a bit misleading.\r\n\r\n* Change `expect(before, isSameOrBefore(timestamp))` to\r\n  `expect(timestamp, isSameOrAfter(before))` since we\u0027re verifying\r\n  that the timestamp is correct, not that the `before` reference time\r\n  is.  Otherwise output from a test failure mixes up the notion of\r\n  \"Actual\" and \"Expected\" values.\r\n\r\n* Update CHANGELOG.md",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b2c3ae7cc0a2fa7c31441cdca90fd30a3ed44697",
      "old_mode": 33188,
      "old_path": "packages/file/CHANGELOG.md",
      "new_id": "cc5c3051c8ced41729d286fd2253b1615906aaf1",
      "new_mode": 33188,
      "new_path": "packages/file/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "b99f3aa33708a4724cfd2088388d514415bfe71c",
      "old_mode": 33188,
      "old_path": "packages/file/test/common_tests.dart",
      "new_id": "b5ad1888ba038613a4dbfbe15463d1c5ba44b958",
      "new_mode": 33188,
      "new_path": "packages/file/test/common_tests.dart"
    },
    {
      "type": "modify",
      "old_id": "2d7a6db66147e97b4108a9d869d3a66609c38984",
      "old_mode": 33188,
      "old_path": "packages/file/test/utils.dart",
      "new_id": "aebad3efe4e5b23e71e030cc130a6bd2561a813d",
      "new_mode": 33188,
      "new_path": "packages/file/test/utils.dart"
    },
    {
      "type": "modify",
      "old_id": "2e458964b7d481b6e7f4b48eaa52a2f77fdd41c4",
      "old_mode": 33188,
      "old_path": "packages/file/test/utils_test.dart",
      "new_id": "75293bf3cc1beca352b8295270b6af28c5ffa79b",
      "new_mode": 33188,
      "new_path": "packages/file/test/utils_test.dart"
    }
  ]
}
