๊ทธ๋ฆฌ๊ณ various changes
์ปค๋ฐ์ JSON์์ ์ฌ์ฉํ ์ ์์ต๋๋ค...
{
"data" : {
"repository" : {
"viewerCanAdminister" : true,
"mergeCommitAllowed" : true,
"squashMergeAllowed" : true,
"mentionableUsers" : {
"nodes" : [
{
"login" : "terhechte",
"avatarUrl" : "https://avatars2.githubusercontent.com/u/132234?v=4",
"__typename" : "User"
},
{
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
}
],
"__typename" : "UserConnection"
},
"defaultBranchRef" : {
"name" : "master",
"__typename" : "Ref"
},
"issueOrPullRequest" : {
"milestone" : null,
"locked" : false,
"labels" : {
"nodes" : [
],
"__typename" : "LabelConnection"
},
"title" : "[WIP] Parse show notes",
"__typename" : "PullRequest",
"viewerCanReact" : true,
"changedFiles" : 11,
"deletions" : 44,
"mergeStateStatus" : "CLEAN",
"commits" : {
"nodes" : [
{
"commit" : {
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjQ0ZTdhYWNjYjIzNzdjMzE1MGVhYWY4MzI5Y2ZhNTA4ODliMTJlMTM=",
"status" : null,
"__typename" : "Commit"
},
"__typename" : "PullRequestCommit"
}
],
"__typename" : "PullRequestCommitConnection"
},
"closed" : false,
"viewerCanUpdate" : true,
"createdAt" : "2018-09-28T11:16:41Z",
"baseRefName" : "master",
"mergeable" : "MERGEABLE",
"body" : "This adds a format for show notes that will parse them to HTML.\r\n\r\nThe following format is expected:\r\n\r\n```\r\n# title\r\n- description1: url1\r\n- description2: url2\r\n\r\n- description3: url3\r\n\r\n# anotherTitle\r\n- description4: url4\r\n```\r\n\r\nThis will generate:\r\n\r\n```html\r\n<div>\r\n <p>\r\n <h3>title</h3>\r\n <ul>\r\n <li><a href=\"url1\">description1</a></li>\r\n <li><a href=\"url2\">description2</a></li>\r\n </ul>\r\n <ul>\r\n <li><a href=\"url3\">description3</a></li>\r\n </ul>\r\n </p>\r\n <p>\r\n <h3>anotherTitle</h3>\r\n <ul>\r\n <li><a href=\"url4\">description4</a></li>\r\n </ul>\r\n </p>\r\n<div>\r\n```",
"timeline" : {
"pageInfo" : {
"hasPreviousPage" : false,
"startCursor" : "MQ",
"__typename" : "PageInfo"
},
"nodes" : [
{
"messageHeadline" : "Add .xcodeproj to gitignore",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjdiZTNiOWYxMjBkN2JkZGMzYjYxMTk2ZmRiZWFjNGJiOTNkNjY4MGQ=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "7be3b9f120d7bddc3b61196fdbeac4bb93d6680d"
},
{
"messageHeadline" : "Add a newline at the end of the generated script",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OmNlYWU0NThkOTlkZjNiZDRjNDFkMmQ5YTQ1MzQzNWZkYmFlYmMxZDY=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "ceae458d99df3bd4c41d2d9a453435fdbaebc1d6"
},
{
"messageHeadline" : "De-indent enum cases",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjQ2NDVjODQzOTQ0MzlkMzZhMzM0MGE5NWUyYzg5OTUzZGQ3ZDAxNTc=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "4645c84394439d36a3340a95e2c89953dd7d0157"
},
{
"messageHeadline" : "Remove unnecessary print statement",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjgyNGZhODI5OWI4OGQ1ZTE0Nzc0MjMwMjE2Y2M0MTQ1ODEzZDEzZTE=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "824fa8299b88d5e14774230216cc4145813d13e1"
},
{
"messageHeadline" : "Rename seperator to separator",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OmEwYTg3YmM4YjQxMGM0YzhiYjdiOTEyZmM2OWRiNzNjMWRjZWY0NDM=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "a0a87bc8b410c4c8bb7b912fc69db73c1dcef443"
},
{
"messageHeadline" : "Parse formatted notes to html",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjI2ZGU0MzNkOTdiOWYyMDdmODdiOWNjZTBhNGJkNzgxZjg2M2NhYzU=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "26de433d97b9f207f87b9cce0a4bd781f863cac5"
},
{
"messageHeadline" : "Generate masse.swift",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjMyMmRiMDhmOGMyZjQ1OGY5YWRkMDk1MzQzMmNmNGExMThiNGIzMzY=",
"author" : {
"user" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"__typename" : "GitActor"
},
"oid" : "322db08f8c2f458f9add0953432cf4a118b4b336"
},
{
"id" : "MDEyOklzc3VlQ29tbWVudDQ2NjM3NDA3Ng==",
"body" : "What happened to this? It still says [WIP]. Is it ready for review? :)",
"viewerCanUpdate" : true,
"author" : {
"login" : "terhechte",
"avatarUrl" : "https://avatars2.githubusercontent.com/u/132234?v=4",
"__typename" : "User"
},
"viewerDidAuthor" : false,
"reactionGroups" : [
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "THUMBS_UP"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "THUMBS_DOWN"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "LAUGH"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "HOORAY"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "CONFUSED"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "HEART"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "ROCKET"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "EYES"
}
],
"viewerCanReact" : true,
"viewerCanDelete" : true,
"editor" : null,
"__typename" : "IssueComment",
"lastEditedAt" : null,
"createdAt" : "2019-02-22T12:02:31Z"
},
{
"id" : "MDEyOklzc3VlQ29tbWVudDQ2NjUwMDk3Ng==",
"body" : "Yeah not super happy with the code. It works in theory, but want to take another look at making this a bit less error prone / easier to expand on later",
"viewerCanUpdate" : true,
"author" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"viewerDidAuthor" : true,
"reactionGroups" : [
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "THUMBS_UP"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "THUMBS_DOWN"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "LAUGH"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "HOORAY"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "CONFUSED"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "HEART"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "ROCKET"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "EYES"
}
],
"viewerCanReact" : true,
"viewerCanDelete" : true,
"editor" : null,
"__typename" : "IssueComment",
"lastEditedAt" : null,
"createdAt" : "2019-02-22T18:38:01Z"
},
{
"messageHeadline" : "Implemented a simplified markdown parser for notes",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjIyNTkxNTc5NTc3MDgwZmJiNjA3YzdjNmI0MGNmMGVmMWU1YTFmZGI=",
"author" : {
"user" : null,
"__typename" : "GitActor"
},
"oid" : "22591579577080fbb607c7c6b40cf0ef1e5a1fdb"
},
{
"author" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"editor" : {
"login" : "BasThomas",
"__typename" : "User"
},
"submittedAt" : "2019-03-08T20:23:29Z",
"id" : "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MjEyNDYxNzcz",
"comments" : {
"totalCount" : 7,
"__typename" : "PullRequestReviewCommentConnection"
},
"lastEditedAt" : "2019-03-08T20:23:39Z",
"viewerDidAuthor" : true,
"createdAt" : "2019-03-08T20:18:29Z",
"body" : "So cool! Hope to get some time during the weekend to take another look and play with it. Thanks @terhechte!",
"__typename" : "PullRequestReview",
"state" : "COMMENTED"
},
{
"messageHeadline" : "Various Changes",
"__typename" : "Commit",
"id" : "MDY6Q29tbWl0MTQ1MzIyMTc3OjQ0ZTdhYWNjYjIzNzdjMzE1MGVhYWY4MzI5Y2ZhNTA4ODliMTJlMTM=",
"author" : {
"user" : null,
"__typename" : "GitActor"
},
"oid" : "44e7aaccb2377c3150eaaf8329cfa50889b12e13"
}
],
"__typename" : "PullRequestTimelineConnection"
},
"viewerDidAuthor" : true,
"id" : "MDExOlB1bGxSZXF1ZXN0MjE4OTM0OTIz",
"number" : 1,
"reviewRequests" : {
"nodes" : [
],
"__typename" : "ReviewRequestConnection"
},
"reactionGroups" : [
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "THUMBS_UP"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "THUMBS_DOWN"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "LAUGH"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "HOORAY"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "CONFUSED"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "HEART"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "ROCKET"
},
{
"__typename" : "ReactionGroup",
"viewerHasReacted" : false,
"users" : {
"nodes" : [
],
"totalCount" : 0,
"__typename" : "ReactingUserConnection"
},
"content" : "EYES"
}
],
"additions" : 443,
"editor" : null,
"assignees" : {
"nodes" : [
],
"__typename" : "UserConnection"
},
"merged" : false,
"author" : {
"login" : "BasThomas",
"avatarUrl" : "https://avatars0.githubusercontent.com/u/4190298?v=4",
"__typename" : "User"
},
"lastEditedAt" : null
},
"hasIssuesEnabled" : true,
"rebaseMergeAllowed" : true,
"__typename" : "Repository",
"name" : "masse"
}
}
}
๋ฒ์ 1.27.1(1546622353) ์ฅ์น: iPhone X(iOS 12.1.4) TestFlight: ์ฌ์ค
GitHawk ์ ํจ๊ป
๊ทธ๋ ๊ทธ๋ ๊ฒ ์๊ฐํด! ์ปดํจํฐ์ ์ก์ธ์คํ ์ ์๊ฒ ๋๋ฉด ๋ค๋ฅธ ๋ฌธ์ ์ JSON์ ์ถ๊ฐํ๊ณ ๋์ค์ ๋ซ๊ฒ ์ต๋๋ค.
GitHawk ์ ํจ๊ป
๊ด์ฐฎ์ผ์๋ค๋ฉด ์ด ๋ถ๋ถ์ ํํค์ณ ๋ณด๊ฒ ์ต๋๋ค.
GitHawk ์ ํจ๊ป
@wayni208 ์ #2527์ ๋ณด๊ณ ๋ค๋ฅธ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค.
์ด๋ฌ๋ฉด ์์์๋ค
GitHawk ์ ํจ๊ป
์๋ฎฌ๋ ์ดํฐ์ ๊ฒ์ ํญ์์ ๊ฒ์ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น? ๊ทธ๊ฒ์ ๋จ์ง ๋๋ฅผ ์ํด ๊น๋ฐ์ด๋ฉฐ ํ ์คํธ ์ ๋ ฅ์ด๋ ๋ถ์ฌ ๋ฃ๊ธฐ๋ฅผ ๋ฐ์๋ค์ด๊ฑฐ๋ ์๋ฝํ์ง ์์ต๋๋ค. ํ์ฌ ๋ง์คํฐ์์ ์คํ ์ค์ด๋ฉฐ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์๋ํ์ต๋๋ค. ๋ด ์ฅ์น์์ ์์ง ์๋ํ์ง ์์์ต๋๋ค.
๋ฐ๋ถ์ฐ/์ง๋#1
GitHawk ์ ํจ๊ป
๋์๊ฒ๋ ๊ฐ์ ์ผ์ด ์ผ์ด๋๋ค. iPad sim์์ ์๋ํฉ๋๋ค. ๐
GitHawk ์ ํจ๊ป
์ด๊ฒ์ ์ด์ํ ๊ฒ์ด๋ฉฐ GitHub ์ธก์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. JSON์ ๋๋ฝ๋ ์ปค๋ฐ์ ์ฌ์ฉ์ ํ๋์ "null"์ ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์ด ๋ ๊ฐ์ง ๋ฌธ์ ์์ ๋ฐ์ํฉ๋๋ค. GitHawk๋ null์ ๊ฐ์ ธ์ค๊ณ AutoCompleteUser์์ ๊ฐ์ ธ์จ ์ ๋ณด๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฏ๋ก ํ์๋ผ์ธ์ ์๋ฌด ๊ฒ๋ ํ์๋์ง ์์ต๋๋ค. GitHub๋ null์ ๊ฐ์ ธ์ค๊ณ ํ์๋ผ์ธ์์ ๊ธฐ๋ณธ ์๋ฐํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.
#2527์์
์ด๊ฒ์ ์ด ํน์ ์ปค๋ฐ์ ๋ํ JSON์
๋๋ค.
์ด๊ฒ์ด GitHub์ ํ์๋๋ ๋ฐฉ์์
๋๋ค.
#2677์์
์ด๊ฒ์ ์ด ํน์ ์ปค๋ฐ์ ๋ํ JSON์
๋๋ค.
์ด๊ฒ์ด GitHub์ ํ์๋๋ ๋ฐฉ์์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์กฐ๊ธ ๋ ์์ธํ. ์ด ์ปค๋ฐ์ ํด๋ฆญํ๊ณ ํ์ผ์ ๋ณผ ๋๊น์ง "์ฌ์ฉ์"๋ฅผ ์ฐพ๊ฑฐ๋ ์๋ณํ ์ ์์ต๋๋ค.
๊ทธ๋์... ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์์ ๋ GitHub์ฒ๋ผ ๋ฏธ๋ฆฌ ์ค๋น๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋์ผํ ๋ฐฉ์์ผ๋ก ์ปค๋ฐ์ ๋ํ ๊ฐ์์ฑ์ ์ป์ ์ ์์ต๋๋ค.
์ข์ ์ ๊ทผ ๋ฐฉ์์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ์ปค๋ฐ ๊ฐ์ฒด(๋๋ ์ปค๋ฐ์ ํ์ํ๋ ๊ฐ์ฒด)์ ์ ํ์ ์ฌ์ฉ์๊ฐ ์์ด์ผ ํ๋์ง ํ์คํ์ง ์์ต๋๋ค. "์ ์๊ฐ ์๋ ์ปค๋ฐ"๊ณผ "์์ฑ์ ์ปค๋ฐ"์ด ๋ค๋ฅผ ์ ์์ต๋๊น?
@BasThomas๊ฐ ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํด ์ฃผ์ง๋ง ์๋ก์ด "๋น์์ฑ์ ์ปค๋ฐ" ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ ค๋ฉด IssueOrPullRequest.graphql ์ ์์ ํด์ผ ํฉ๋๋ค.
GitHawk ์ ํจ๊ป
ํ , ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ JSON์ ๊ทธ๋ฌํ ๊ฐ์ฒด๋ก ๋์ฝ๋ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
GitHawk ์ ํจ๊ป
๊ณ์๋ฅผ ๋ฐ์ ๊ฒ ๊ฐ์์. ๊ฐ์ฌํฉ๋๋ค.
GitHawk ์ ํจ๊ป
@BasThomas๋ ์ฌ์ ํ ์ด ์์ ์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋๋ ๋ง์ด ๋ฐ์ ํ์ง๋ ๋ชปํ์ง๋ง ๋ง์ด ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค. ๐ Contravariance ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์์ ํ ๋ ์ปค๋ฐ์ ์ํํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๋ณ๋์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๊น? ์๋ฅผ ๋ค์ด ์ด๋ค ์ฌ๋๋ค์๊ฒ๋ Xcode์ฒ๋ผ, ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ git ๋ช ๋ น์ค์ด ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๋๋ฝ๋ ์ปค๋ฐ์ ์ด๋ ๊ฒ์ ์ฌ์ฉํ๋์ง ๊ธฐ์ตํ ์ ์์ต๋๊น?
์ด์จ๋ ๋ก๊ทธ์ธ์ด ๊ถ๊ทน์ ์ผ๋ก ๋น์ด ์๊ฑฐ๋ null์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ปค๋ฐ์ด๋ผ๋ ์ฌ์ค์กฐ์ฐจ ๋์น์ฑ์ง ๋ชปํฉ๋๋ค. ๋๋ "์ด๋ฆ"์ ์ ๋ฌํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ ์ด๋ ๋ฌด์จ ์ผ์ด ์์ด๋ ๋ด์ฉ์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ๋ณผ ์ ์๋ ์ปค๋ฐ์์ ์ด๊ฒ์ ์ฑ๊ณต์ ์ผ๋ก ๋ณด๊ณ ์๋ ์ด์ ฏ๋ฐค(์ด๋ฆ, Mr. Bas Broek)์ ์ค๋จํ์ต๋๋ค. ์ด๋ฅผ ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ํจ๊ป ์ฌ๋ฐ๋ฅด๊ฒ ํ์ํ๋ ค๋ฉด ์ด์ ์๋ก์ด NonUser ์ปค๋ฐ ๋ชจ๋ธ, ์ ๋ฐ ์น์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ฉ๋ฉด ๋ด๊ฐ ์ฌ๊ธฐ์์ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๊น? ๋ด๊ฐ ์ ์ํ ๊ฒ๋ณด๋ค ๋ ์ฌ์ด ์์ ์ธ ๊ฒ์ฒ๋ผ ์ด๊ฒ์ ์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ก ํ์ํ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.
๊ต์ฅํฉ๋๋ค ๋น์ ์ ์์ง๋ ์ด๊ฒ์ ์กฐ์ฌํ๊ณ ์์ต๋๋ค!
๋๋ ๊ทธ๋ค์ด ์ ํํ ์ด๋ค ์ข ๋ฅ์ ์ปค๋ฐ์ธ์ง ๋ชจ๋ฆ ๋๋ค โ @terhechte ๊ฐ ๋ ๋ง์ด ์๊ณ ์์ต๋๋ค ๐
์ด์จ๋ ๋ก๊ทธ์ธ์ด ๊ถ๊ทน์ ์ผ๋ก ๋น์ด ์๊ฑฐ๋ null์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ปค๋ฐ์ด๋ผ๋ ์ฌ์ค์กฐ์ฐจ ๋์น์ฑ์ง ๋ชปํฉ๋๋ค. ๋๋ "์ด๋ฆ"์ ์ ๋ฌํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ ์ด๋ ๋ฌด์จ ์ผ์ด ์์ด๋ ๋ด์ฉ์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ์ํ ๋๋ก NonUser
-์ด๋ฆ/์ฌ์ฉ์๊ฐ ์๋ ์ปค๋ฐ ๋ชจ๋ธ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๊น? ๊ทธ๋ฅ ํธ์๋ ์ปค๋ฐ?
๋ด๊ฐ ์ ์ํ ๊ฒ๋ณด๋ค ๋ ์ฌ์ด ์์ ์ธ ๊ฒ์ฒ๋ผ ์ด๊ฒ์ ์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ก ํ์ํ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.
์ฃ์กํฉ๋๋ค. ๊ทธ๋ฐ ์๋๋ ์ ๋ ์๋์์ต๋๋ค! ์ฌ์ฉ ๊ฐ๋ฅํ ์ ๋ณด๊ฐ ์๋นํ ๋ง๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ ์ ํํด์ผ ํ ์ ์๋ค๊ณ ๋๊ผ์ต๋๋ค. ์ฆ, ์ฌ๋ฐ๋ฅธ ๊ธธ์ ๊ฐ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค! ๐ ๋ผ๋ฒจ์ ์ ๊ฑฐํ์ต๋๋ค.
๋์์ด ํ์ํ๋ฉด ํ์ฌ ์งํ ์ํฉ๊ณผ ํจ๊ป ์์ ๋กญ๊ฒ (์ด์) pull ์์ฒญ์ ์ด๊ฑฐ๋ ๋ค๋ฅธ ๊ฒ์ ์ ํํ๊ณ ์ถ๋ค๋ฉด ๊ฑฐ๊ธฐ์ ๋จ๊ฒจ ๋์ญ์์ค. :)
ใ ใ ใ ใ
๊ทธ๋์ ๋ด๊ฐ ์ธ๊ธํ๋ ์ปค๋ฐ์ "๋ค์ํ ๋ณ๊ฒฝ"๊ณผ ๋น์ ์ด ๋ง๋ ๋ฐ๋ก ์ง์ ์ ์ปค๋ฐ์ด ๋ ๊ฒ์ ๋๋ค. ์ด๋ฉ์ผ์ ๊ตฌ์ฑํ์ง ์๊ณ ์ปค๋ฐํ๋ฉด "์ฌ์ฉ์" ํ๋๊ฐ "null"์ ๋ฐํํ๊ณ "์ด๋ฆ"์ด "์ ์ ์์" ๋๋ ์ด๋ฆ์ ๋ฐํํด์ผ ํ๋ค๋ ์ ๋ณด๋ฅผ ์ฐพ์์ต๋๋ค. ๊ทธ๋์ ๋จ์ํ ๋ด ํธ๊ธฐ์ฌ์ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ํตํด ์ปค๋ฐ์ ํธ์ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๊ทธ๋ฅผ ์ ๊ฑฐํ ํ์๊ฐ ์์์ต๋๋ค. ์ด๋ณด์ ์ํ๋ ์ฌ์ ํ ์ ์ ํฉ๋๋ค! ๐ ํ์ง๋ง ๋๋ ๋น์ ์ ๊ด์ ์์ ํ๊ทธ ๋ค์ ์จ๊ฒจ์ง ์๋ฏธ์ ๋ํ ์ค๋ช ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ค๋ ๋ฐค์ ์ข ๋ ๊ณ ๋ฏผํด๋ณด๊ณ ์ ์ํ์ ๋๋ก ๋ค์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด์ ์ ์๋์ ์คํจํ์ง๋ง GraphQL์์ null ์ ํ์ ๋ํด ์ฝ๊ณ ์์๊ณ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋๋ ๋น์ ์ด ์ ์ํ ๋๋ก ํ๊ณ PR ์ด์๋ ์ ์ถํ ๊ฒ์ ๋๋ค.
๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค, Bas. ๋ฐฐ์ธ ๊ฒ๋ ๋ง๊ณ ์ฌ๋ฏธ์์ด์. ๋ด๊ฐ PITA๊ฐ ๋๋ค๋ฉด ์๋ ค์ฃผ์ธ์. ๐
GitHawk ์ ํจ๊ป
๊ต์ฅํฉ๋๋ค. ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค! ๋น์ ์ด ๊ทธ๊ฒ์ ์ฆ๊ธฐ๊ณ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐฐ์ฐ๊ณ ์๋ค๋ ์์์ ๋ค์ผ๋ ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฉ์ด๊ฐ ์ํ๋ค๊ณ ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค... ๋น์ ์ ๊ด์ฐฎ์ต๋๋ค!
๋น ๋ฅธ ์ ๋ณด @wayni208 @BasThomas : " https://github.com/Contravariance/masse/pull/1/commits "๋ฅผ ๋ณด๋ฉด ๋ด๊ฐ ์ํํ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ ํ์ ์ปค๋ฐ์ด ์์์ ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์ปค๋ฐ์ ๋์๊ธฐ git( git commit -m
๋ฑ)์ผ๋ก ์ํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋ค๋ฅธ ๊ธฐ๊ณ์์ ์ํ๋์์ต๋๋ค.
๋ด ์์ ์ปดํจํฐ์์ ์ด์ํ ์ปค๋ฐ์ด ์์ฑ๋์๊ณ ๋ด git ID๊ฐ ๋ด๋ถ ์ํฐํ๋ผ์ด์ฆ github์ ID์ด๋ฏ๋ก ๋ด ๊ณต๊ฐ github์ ID์ ์ผ์นํ์ง ์๋ ์ผ์ด ๋ฐ์ํ์ต๋๋ค. ๋๋ฅผ ํผ๋์ค๋ฝ๊ฒํ๋ ๊ฒ์ ์ด๊ฒ์ด ์ ๋๋ก ์๋ํ์ง๋ง ์ด๋ป๊ฒ ๋ ์ด๊ฒ์ ๊นจ๋จ๋ฆฐ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐฉ๊ธ ๋ช ๊ฐ์ง ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๋๋ฐ ๋ชจ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ID๊ฐ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ด ์์ ์ปดํจํฐ์์ ์ปค๋ฐ์ ์ํํ ์ ์์ต๋๋ค. ์ด ์ปคํ์ ๋ํด ์ฃ์กํฉ๋๋ค!
@BasThomas ์ @terhechte์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ฐ๋ผ๊ฑด๋ ๋ด๊ฐ ์ด๊ฒ์ผ๋ก ๋์๊ฐ์ ์ด๋ฒ ์ฃผ๋ง์ ๋น์ ์ด ๋ณผ ์ ์๋ ๊ฒ์ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋น ๋ฅธ ์ ๋ณด @wayni208 @BasThomas : " https://github.com/Contravariance/masse/pull/1/commits "๋ฅผ ๋ณด๋ฉด ๋ด๊ฐ ์ํํ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ ํ์ ์ปค๋ฐ์ด ์์์ ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์ปค๋ฐ์ ๋์๊ธฐ git(
git commit -m
๋ฑ)์ผ๋ก ์ํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋ค๋ฅธ ๊ธฐ๊ณ์์ ์ํ๋์์ต๋๋ค.๋ด ์์ ์ปดํจํฐ์์ ์ด์ํ ์ปค๋ฐ์ด ์์ฑ๋์๊ณ ๋ด git ID๊ฐ ๋ด๋ถ ์ํฐํ๋ผ์ด์ฆ github์ ID์ด๋ฏ๋ก ๋ด ๊ณต๊ฐ github์ ID์ ์ผ์นํ์ง ์๋ ์ผ์ด ๋ฐ์ํ์ต๋๋ค. ๋๋ฅผ ํผ๋์ค๋ฝ๊ฒํ๋ ๊ฒ์ ์ด๊ฒ์ด ์ ๋๋ก ์๋ํ์ง๋ง ์ด๋ป๊ฒ ๋ ์ด๊ฒ์ ๊นจ๋จ๋ฆฐ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐฉ๊ธ ๋ช ๊ฐ์ง ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๋๋ฐ ๋ชจ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ID๊ฐ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ด ์์ ์ปดํจํฐ์์ ์ปค๋ฐ์ ์ํํ ์ ์์ต๋๋ค. ์ด ์ปคํ์ ๋ํด ์ฃ์กํฉ๋๋ค!