{"action":"created","issue":{"url":"https://api.github.com/repos/github/git-lfs/issues/233","labels_url":"https://api.github.com/repos/github/git-lfs/issues/233/labels{/name}","comments_url":"https://api.github.com/repos/github/git-lfs/issues/233/comments","events_url":"https://api.github.com/repos/github/git-lfs/issues/233/events","html_url":"https://github.com/github/git-lfs/issues/233","id":68549281,"number":233,"title":"Feedback on pointer file spec","user":{"login":"swisspol","id":627915,"avatar_url":"https://avatars.githubusercontent.com/u/627915?v=3","gravatar_id":"","url":"https://api.github.com/users/swisspol","html_url":"https://github.com/swisspol","followers_url":"https://api.github.com/users/swisspol/followers","following_url":"https://api.github.com/users/swisspol/following{/other_user}","gists_url":"https://api.github.com/users/swisspol/gists{/gist_id}","starred_url":"https://api.github.com/users/swisspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swisspol/subscriptions","organizations_url":"https://api.github.com/users/swisspol/orgs","repos_url":"https://api.github.com/users/swisspol/repos","events_url":"https://api.github.com/users/swisspol/events{/privacy}","received_events_url":"https://api.github.com/users/swisspol/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":28,"created_at":"2015-04-15T02:07:25Z","updated_at":"2015-04-20T15:07:58Z","closed_at":null,"body":"1) It doesn’t indicate if the pointer file contents is case-sensitive or not: I think it should *not* be, to follow established patterns with Git config files and CLI arguments which are only case-sensitive where it makes sense\r\n\r\n2) Saying \"The pointer file should be small (less than 200 bytes), and consist of only ASCII characters” doesn’t appear to add anything since it’s impossible not to comply considering the pointer file format, so it’s adding confusion IMO (implying this that something that cannot happen could happen)\r\n\r\n3) \"Libraries that generate this should write the file identically”: should -> MUST\r\n\r\n4) The sample has \"(ending \\n)” at the end but the spec doesn’t say if required or not, so is it or not? IMO it should be, so each line is clearly `{key} {value}\\n`\r\n\r\n5) \"Use properties \"version\", \"oid\", and \"size\" in that order.” seems a really bad idea for what is clearly a list of key-value pairs without any meaningful ordering: it’s adding constraints which are guaranteed to create issues in the future if/when new keys are added / deprecated / made optional\r\n\r\n6) It doesn’t address how clients could add private key-value pairs to this file - related to 5\r\n\r\n7) I think the version field should be like `1:https://git-lfs.github.com/spec/v1` as this makes parsing trivial (version = what’s before the column) and it avoids any ambiguity comparing URLs e.g. what if someone put in there `http://git-lfs.github.com/spec/v1`? Should you fail? pass? What kind of fuzzy logic is needed?\r\n\r\n8) Considering the pointer files are clearly structured data vs just a list of one SHA1 per line for instance, I’m curious as to why the decision was made to create a new file format vs using the Git config one which is well known, extensible, and people have parser for (YAML or JSON would be nice, but they’re not used anywhere in Git).\r\n"},"comment":{"url":"https://api.github.com/repos/github/git-lfs/issues/comments/94478479","html_url":"https://github.com/github/git-lfs/issues/233#issuecomment-94478479","issue_url":"https://api.github.com/repos/github/git-lfs/issues/233","id":94478479,"user":{"login":"technoweenie","id":21,"avatar_url":"https://avatars.githubusercontent.com/u/21?v=3","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":true},"created_at":"2015-04-20T15:07:58Z","updated_at":"2015-04-20T15:07:58Z","body":"YAML and TOML were considered.  The pointer format was designed to look like the format Git uses to store commit/tree/tag objects."}}