{"action":"created","comment":{"url":"https://api.github.com/repos/cyverse/DE/pulls/comments/54133464","id":54133464,"diff_hunk":"@@ -710,3 +719,28 @@\n                            {:u.username username})\n                        {:aca.app_id (uuidify app-id)\n                         :l.id       [not= (user-favorite-subselect :w.root_category_id faves-idx)]})))))\n+\n+(defn- list-duplicate-apps*\n+  [app-name app-id category-id-set]\n+  (select [:apps :a]\n+          (fields :a.id :a.name :a.description)\n+          (join [:app_category_app :aca] {:a.id :aca.app_id})\n+          (where {(raw \"trim(both from a.name)\") (string/trim app-name)","path":"services/apps/src/apps/persistence/app_metadata.clj","position":33,"original_position":33,"commit_id":"8cfb90aa454673a1d9cc73c74f14eb2db96ceb7e","original_commit_id":"8cfb90aa454673a1d9cc73c74f14eb2db96ceb7e","user":{"login":"psarando","id":996408,"avatar_url":"https://avatars.githubusercontent.com/u/996408?v=3","gravatar_id":"","url":"https://api.github.com/users/psarando","html_url":"https://github.com/psarando","followers_url":"https://api.github.com/users/psarando/followers","following_url":"https://api.github.com/users/psarando/following{/other_user}","gists_url":"https://api.github.com/users/psarando/gists{/gist_id}","starred_url":"https://api.github.com/users/psarando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psarando/subscriptions","organizations_url":"https://api.github.com/users/psarando/orgs","repos_url":"https://api.github.com/users/psarando/repos","events_url":"https://api.github.com/users/psarando/events{/privacy}","received_events_url":"https://api.github.com/users/psarando/received_events","type":"User","site_admin":false},"body":"That's a good point about collapsing the extra whitespace down to one space, especially since multiple spaces will only be displayed as 1 space to the user in the browser.","created_at":"2016-02-25T17:40:55Z","updated_at":"2016-02-25T17:40:55Z","html_url":"https://github.com/cyverse/DE/pull/103#discussion_r54133464","pull_request_url":"https://api.github.com/repos/cyverse/DE/pulls/103","_links":{"self":{"href":"https://api.github.com/repos/cyverse/DE/pulls/comments/54133464"},"html":{"href":"https://github.com/cyverse/DE/pull/103#discussion_r54133464"},"pull_request":{"href":"https://api.github.com/repos/cyverse/DE/pulls/103"}}},"pull_request":{"url":"https://api.github.com/repos/cyverse/DE/pulls/103","id":60614250,"html_url":"https://github.com/cyverse/DE/pull/103","diff_url":"https://github.com/cyverse/DE/pull/103.diff","patch_url":"https://github.com/cyverse/DE/pull/103.patch","issue_url":"https://api.github.com/repos/cyverse/DE/issues/103","number":103,"state":"open","locked":false,"title":"CORE-3358","user":{"login":"dennisroberts71","id":415143,"avatar_url":"https://avatars.githubusercontent.com/u/415143?v=3","gravatar_id":"","url":"https://api.github.com/users/dennisroberts71","html_url":"https://github.com/dennisroberts71","followers_url":"https://api.github.com/users/dennisroberts71/followers","following_url":"https://api.github.com/users/dennisroberts71/following{/other_user}","gists_url":"https://api.github.com/users/dennisroberts71/gists{/gist_id}","starred_url":"https://api.github.com/users/dennisroberts71/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dennisroberts71/subscriptions","organizations_url":"https://api.github.com/users/dennisroberts71/orgs","repos_url":"https://api.github.com/users/dennisroberts71/repos","events_url":"https://api.github.com/users/dennisroberts71/events{/privacy}","received_events_url":"https://api.github.com/users/dennisroberts71/received_events","type":"User","site_admin":false},"body":"This change adds duplicate app name checking to the apps services. Two apps that are in the same category and are not marked as deleted should not be allowed to have the same name in order to avoid confusion. The `Beta` category is treated as an exception because it's intended to be a staging area for newly published apps. It is left to the app administrator to determine if an app in the `Beta` category needs to be renamed before it can be placed in its destination category.\r\n","created_at":"2016-02-25T02:16:36Z","updated_at":"2016-02-25T17:40:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"74e6d0cfc69be158617aac6af0acd77bd725328f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/cyverse/DE/pulls/103/commits","review_comments_url":"https://api.github.com/repos/cyverse/DE/pulls/103/comments","review_comment_url":"https://api.github.com/repos/cyverse/DE/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cyverse/DE/issues/103/comments","statuses_url":"https://api.github.com/repos/cyverse/DE/statuses/8cfb90aa454673a1d9cc73c74f14eb2db96ceb7e","head":{"label":"cyverse:CORE-3358","ref":"CORE-3358","sha":"8cfb90aa454673a1d9cc73c74f14eb2db96ceb7e","user":{"login":"cyverse","id":15638129,"avatar_url":"https://avatars.githubusercontent.com/u/15638129?v=3","gravatar_id":"","url":"https://api.github.com/users/cyverse","html_url":"https://github.com/cyverse","followers_url":"https://api.github.com/users/cyverse/followers","following_url":"https://api.github.com/users/cyverse/following{/other_user}","gists_url":"https://api.github.com/users/cyverse/gists{/gist_id}","starred_url":"https://api.github.com/users/cyverse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cyverse/subscriptions","organizations_url":"https://api.github.com/users/cyverse/orgs","repos_url":"https://api.github.com/users/cyverse/repos","events_url":"https://api.github.com/users/cyverse/events{/privacy}","received_events_url":"https://api.github.com/users/cyverse/received_events","type":"Organization","site_admin":false},"repo":{"id":45433519,"name":"DE","full_name":"cyverse/DE","owner":{"login":"cyverse","id":15638129,"avatar_url":"https://avatars.githubusercontent.com/u/15638129?v=3","gravatar_id":"","url":"https://api.github.com/users/cyverse","html_url":"https://github.com/cyverse","followers_url":"https://api.github.com/users/cyverse/followers","following_url":"https://api.github.com/users/cyverse/following{/other_user}","gists_url":"https://api.github.com/users/cyverse/gists{/gist_id}","starred_url":"https://api.github.com/users/cyverse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cyverse/subscriptions","organizations_url":"https://api.github.com/users/cyverse/orgs","repos_url":"https://api.github.com/users/cyverse/repos","events_url":"https://api.github.com/users/cyverse/events{/privacy}","received_events_url":"https://api.github.com/users/cyverse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cyverse/DE","description":"The CyVerse Discovery Environment","fork":false,"url":"https://api.github.com/repos/cyverse/DE","forks_url":"https://api.github.com/repos/cyverse/DE/forks","keys_url":"https://api.github.com/repos/cyverse/DE/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cyverse/DE/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cyverse/DE/teams","hooks_url":"https://api.github.com/repos/cyverse/DE/hooks","issue_events_url":"https://api.github.com/repos/cyverse/DE/issues/events{/number}","events_url":"https://api.github.com/repos/cyverse/DE/events","assignees_url":"https://api.github.com/repos/cyverse/DE/assignees{/user}","branches_url":"https://api.github.com/repos/cyverse/DE/branches{/branch}","tags_url":"https://api.github.com/repos/cyverse/DE/tags","blobs_url":"https://api.github.com/repos/cyverse/DE/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cyverse/DE/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cyverse/DE/git/refs{/sha}","trees_url":"https://api.github.com/repos/cyverse/DE/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cyverse/DE/statuses/{sha}","languages_url":"https://api.github.com/repos/cyverse/DE/languages","stargazers_url":"https://api.github.com/repos/cyverse/DE/stargazers","contributors_url":"https://api.github.com/repos/cyverse/DE/contributors","subscribers_url":"https://api.github.com/repos/cyverse/DE/subscribers","subscription_url":"https://api.github.com/repos/cyverse/DE/subscription","commits_url":"https://api.github.com/repos/cyverse/DE/commits{/sha}","git_commits_url":"https://api.github.com/repos/cyverse/DE/git/commits{/sha}","comments_url":"https://api.github.com/repos/cyverse/DE/comments{/number}","issue_comment_url":"https://api.github.com/repos/cyverse/DE/issues/comments{/number}","contents_url":"https://api.github.com/repos/cyverse/DE/contents/{+path}","compare_url":"https://api.github.com/repos/cyverse/DE/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cyverse/DE/merges","archive_url":"https://api.github.com/repos/cyverse/DE/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cyverse/DE/downloads","issues_url":"https://api.github.com/repos/cyverse/DE/issues{/number}","pulls_url":"https://api.github.com/repos/cyverse/DE/pulls{/number}","milestones_url":"https://api.github.com/repos/cyverse/DE/milestones{/number}","notifications_url":"https://api.github.com/repos/cyverse/DE/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cyverse/DE/labels{/name}","releases_url":"https://api.github.com/repos/cyverse/DE/releases{/id}","deployments_url":"https://api.github.com/repos/cyverse/DE/deployments","created_at":"2015-11-03T01:27:41Z","updated_at":"2016-02-23T18:07:11Z","pushed_at":"2016-02-25T17:30:34Z","git_url":"git://github.com/cyverse/DE.git","ssh_url":"git@github.com:cyverse/DE.git","clone_url":"https://github.com/cyverse/DE.git","svn_url":"https://github.com/cyverse/DE","homepage":"https://de.iplantcollaborative.org/de/","size":38999,"stargazers_count":3,"watchers_count":3,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":3,"forks":3,"open_issues":3,"watchers":3,"default_branch":"master"}},"base":{"label":"cyverse:dev","ref":"dev","sha":"04bda6f8295c88dae5f18f5e656ffafcef400e64","user":{"login":"cyverse","id":15638129,"avatar_url":"https://avatars.githubusercontent.com/u/15638129?v=3","gravatar_id":"","url":"https://api.github.com/users/cyverse","html_url":"https://github.com/cyverse","followers_url":"https://api.github.com/users/cyverse/followers","following_url":"https://api.github.com/users/cyverse/following{/other_user}","gists_url":"https://api.github.com/users/cyverse/gists{/gist_id}","starred_url":"https://api.github.com/users/cyverse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cyverse/subscriptions","organizations_url":"https://api.github.com/users/cyverse/orgs","repos_url":"https://api.github.com/users/cyverse/repos","events_url":"https://api.github.com/users/cyverse/events{/privacy}","received_events_url":"https://api.github.com/users/cyverse/received_events","type":"Organization","site_admin":false},"repo":{"id":45433519,"name":"DE","full_name":"cyverse/DE","owner":{"login":"cyverse","id":15638129,"avatar_url":"https://avatars.githubusercontent.com/u/15638129?v=3","gravatar_id":"","url":"https://api.github.com/users/cyverse","html_url":"https://github.com/cyverse","followers_url":"https://api.github.com/users/cyverse/followers","following_url":"https://api.github.com/users/cyverse/following{/other_user}","gists_url":"https://api.github.com/users/cyverse/gists{/gist_id}","starred_url":"https://api.github.com/users/cyverse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cyverse/subscriptions","organizations_url":"https://api.github.com/users/cyverse/orgs","repos_url":"https://api.github.com/users/cyverse/repos","events_url":"https://api.github.com/users/cyverse/events{/privacy}","received_events_url":"https://api.github.com/users/cyverse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cyverse/DE","description":"The CyVerse Discovery Environment","fork":false,"url":"https://api.github.com/repos/cyverse/DE","forks_url":"https://api.github.com/repos/cyverse/DE/forks","keys_url":"https://api.github.com/repos/cyverse/DE/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cyverse/DE/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cyverse/DE/teams","hooks_url":"https://api.github.com/repos/cyverse/DE/hooks","issue_events_url":"https://api.github.com/repos/cyverse/DE/issues/events{/number}","events_url":"https://api.github.com/repos/cyverse/DE/events","assignees_url":"https://api.github.com/repos/cyverse/DE/assignees{/user}","branches_url":"https://api.github.com/repos/cyverse/DE/branches{/branch}","tags_url":"https://api.github.com/repos/cyverse/DE/tags","blobs_url":"https://api.github.com/repos/cyverse/DE/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cyverse/DE/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cyverse/DE/git/refs{/sha}","trees_url":"https://api.github.com/repos/cyverse/DE/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cyverse/DE/statuses/{sha}","languages_url":"https://api.github.com/repos/cyverse/DE/languages","stargazers_url":"https://api.github.com/repos/cyverse/DE/stargazers","contributors_url":"https://api.github.com/repos/cyverse/DE/contributors","subscribers_url":"https://api.github.com/repos/cyverse/DE/subscribers","subscription_url":"https://api.github.com/repos/cyverse/DE/subscription","commits_url":"https://api.github.com/repos/cyverse/DE/commits{/sha}","git_commits_url":"https://api.github.com/repos/cyverse/DE/git/commits{/sha}","comments_url":"https://api.github.com/repos/cyverse/DE/comments{/number}","issue_comment_url":"https://api.github.com/repos/cyverse/DE/issues/comments{/number}","contents_url":"https://api.github.com/repos/cyverse/DE/contents/{+path}","compare_url":"https://api.github.com/repos/cyverse/DE/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cyverse/DE/merges","archive_url":"https://api.github.com/repos/cyverse/DE/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cyverse/DE/downloads","issues_url":"https://api.github.com/repos/cyverse/DE/issues{/number}","pulls_url":"https://api.github.com/repos/cyverse/DE/pulls{/number}","milestones_url":"https://api.github.com/repos/cyverse/DE/milestones{/number}","notifications_url":"https://api.github.com/repos/cyverse/DE/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cyverse/DE/labels{/name}","releases_url":"https://api.github.com/repos/cyverse/DE/releases{/id}","deployments_url":"https://api.github.com/repos/cyverse/DE/deployments","created_at":"2015-11-03T01:27:41Z","updated_at":"2016-02-23T18:07:11Z","pushed_at":"2016-02-25T17:30:34Z","git_url":"git://github.com/cyverse/DE.git","ssh_url":"git@github.com:cyverse/DE.git","clone_url":"https://github.com/cyverse/DE.git","svn_url":"https://github.com/cyverse/DE","homepage":"https://de.iplantcollaborative.org/de/","size":38999,"stargazers_count":3,"watchers_count":3,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":3,"forks":3,"open_issues":3,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cyverse/DE/pulls/103"},"html":{"href":"https://github.com/cyverse/DE/pull/103"},"issue":{"href":"https://api.github.com/repos/cyverse/DE/issues/103"},"comments":{"href":"https://api.github.com/repos/cyverse/DE/issues/103/comments"},"review_comments":{"href":"https://api.github.com/repos/cyverse/DE/pulls/103/comments"},"review_comment":{"href":"https://api.github.com/repos/cyverse/DE/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cyverse/DE/pulls/103/commits"},"statuses":{"href":"https://api.github.com/repos/cyverse/DE/statuses/8cfb90aa454673a1d9cc73c74f14eb2db96ceb7e"}}}}