{"push_id":748988755,"size":10,"distinct_size":10,"ref":"refs/heads/feature/file-guid-unification","head":"b4d2364e37c6620f0ee582c9ae133d4cd3cd9bab","before":"787cf5eb5e3ef6dd6fb3852b12c817e8ccaeffcf","commits":[{"sha":"299cb88ec06ae423bb64edaacd037462d73d3181","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Handle guid redirection/proxying better\n\n  * Guids no longer have to point to a subclass of GuidStoredObject\n    - They can point at anything with a deep_url attribute\n    - Sentry is notified whenever a guid resolves to something missing\n    deep_url\n  * deep_url is unquoted before being handed to proxy_url\n    - deep_url results in a percent encoded url; see flasks' url_for\n      - This works for redirects but not for proxying\n    - The view function now receives decoded url args just like wsgi\n    hands it\n    - This was unnoticed because most proxies did not contain special\n    characters\n  * Handle unicode in deep_url","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/299cb88ec06ae423bb64edaacd037462d73d3181"},{"sha":"112e15b87ce0d5c5b0066fb81612a1d73146218b","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Pull the Authorization header in waterbutler_url_for\n\n  waterbutler_url_for would attempt to pull auth from urls params, which\n  did not take into account that we now support OAuth.","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/112e15b87ce0d5c5b0066fb81612a1d73146218b"},{"sha":"f8d01d0c99cd483c7b662e913887e5a8d4bb244b","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Add website.files as a replacement for FileGuids and OsfStorage's FS\n\n  New models/collections:\n    * FileVersion\n    * StoredFileNode\n    * TrashedFileNode\n\n  New classes:\n    * File\n    * Folder\n    * FileNode\n    * FileNodeMeta\n\n  New exceptions:\n    * FileException\n    * VersionNotFound\n\n  FileVersion is effectively a carbon copy of OsfStorage's\n  OsfStorageFileVersion. With an additional field 'identifier'.\n\n  StoredFileNode hoped to be a drop-in for OsfStorageFileNode but had to\n  diverge for all required functionality.\n  StoredFileNode only has methods to wrap it into a FileNode subclass\n  The model's stored data are the same but:\n    * Osfstorage's kind was replaced with is_file for a binary\n    constraint\n    * A provider field was added to support multiple add-on\n    * node_settings was upgraded to node due to the change of scope\n\n  FileNode contains most of the methods that OsfStorageFileNode did.\n  FileNode is the base class for all things File or FS related and\n  contains many a helper function to go from StoredFileNode to the\n  correct baseclass\n\n  All classes added should be considered abstract.\n  ALWAY subclasses them.\n  NEVER make your own instance.","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/f8d01d0c99cd483c7b662e913887e5a8d4bb244b"},{"sha":"6a4589a893faddaa757cfedaf103b18405c28011","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Implement PathFollowingFileNode to accomodate for DropboxFile's behavior\n\n  DropboxFile would track files when the node setting's folder was moved\n  up or down a directory.\n  GuidFile.path -> /root/folder/file.png\n  node_settings.folder -> /root/  # Guid is created\n  node_settings.folder -> /root/folder  # Guid stays the same","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/6a4589a893faddaa757cfedaf103b18405c28011"},{"sha":"64469809034f70cfc2f310191a5bac00706f265f","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Create new File classes for all non-osfstorage add-ons\n\n  * GoogleDrive and Dropbox but inherit from PathFollowingFileNode\n  * Figshare and Dataverse have additional logic in touch to deal with\n  permissions issues\n  * Github and S3 translate ref and version, respectively, to revision\n  by overriding touch","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/64469809034f70cfc2f310191a5bac00706f265f"},{"sha":"d505dfe18cb3e301c57c28766e7dd896c07a4dc5","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Create FileNode subclasses for OsfStorage\n\n  * get, kind, meterialized_path are all defined for compatability with\n  old OsfstorageFileNode.\n  * create_version and touch are overriden because there's no need to\n  make any requests; we own all the data needed\n  * Save will update path and clear materialized path to play nice with\n  database constraints","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/d505dfe18cb3e301c57c28766e7dd896c07a4dc5"},{"sha":"79b093e4387b7069028e5ce4638e9a00a8acc058","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Swap out OsfStorage models for website.files models\n\n  * OsfStorageNodeSettings.root_node is now a OsfStorageFolder instance\n  * Old/unused fields have been removed from OsfStorageNodeSettings\n  * Uses of OsfStorageFileVersion have been changed to FileVersion","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/79b093e4387b7069028e5ce4638e9a00a8acc058"},{"sha":"3a99328fa37f1d7c507d7e1da038825c11a657fa","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Refactor and update addon_view_or_download_file\n\n  * Usage of node_addon.find_or_create_file_guid has been replaced with\n  FileNode.get_or_create.\n  * File versions are loaded immediately and return a FileVersion rather\n  mutating the original class\n  * Due to the previous reason, GUIDs will not be generated for files\n  that don't exist\n  * FileNodes don't implicitly have a GUID pointing at them, one must be\n  created via file_node.get_guid(create=True)\n    - This will only be called if the current URL is not a guid\n  * A version returned from file_node.touch may be a tuple(version,\n  string) in which case the string is treated as a HTML representation\n  of why the file/version cannot be rendered\n  * Order no longer matters for building the JSON return value\n  * external_url is no longer passed in\n    - It is pulled out of the extra field in javascript","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/3a99328fa37f1d7c507d7e1da038825c11a657fa"},{"sha":"fbfcfa257b976865ea427ce466e2bbdc4d0d0e78","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Add migration OsfStorageFileNode -> StoredFileNode","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/fbfcfa257b976865ea427ce466e2bbdc4d0d0e78"},{"sha":"b4d2364e37c6620f0ee582c9ae133d4cd3cd9bab","author":{"email":"a87bd3f83b957b5cd3f29a1a2c102fe50c2bf8df@gmail.com","name":"Chris Seto"},"message":"Add migration <ADDON>GuidFile -> StoredFileNode","distinct":true,"url":"https://api.github.com/repos/chrisseto/osf.io/commits/b4d2364e37c6620f0ee582c9ae133d4cd3cd9bab"}]}