From 5bac8a9772b5b04152610d5cceecf1185db48868 Mon Sep 17 00:00:00 2001 From: Bob E Moe Date: Tue, 25 Jun 2019 09:15:51 +0100 Subject: [PATCH] refactor --- bootstrap.php | 4 --- example_reopen_label.php | 8 ------ no_milestone.php | 27 +++++++++++++++++++ Gitea.php => src/Client.php | 52 ++++++------------------------------- src/Issue.php | 49 ++++++++++++++++++++++++++++++++++ src/Label.php | 17 ++++++++++++ src/Repo.php | 42 ++++++++++++++++++++++++++++++ 7 files changed, 143 insertions(+), 56 deletions(-) delete mode 100644 bootstrap.php delete mode 100644 example_reopen_label.php create mode 100644 no_milestone.php rename Gitea.php => src/Client.php (51%) create mode 100644 src/Issue.php create mode 100644 src/Label.php create mode 100644 src/Repo.php diff --git a/bootstrap.php b/bootstrap.php deleted file mode 100644 index 67c194f..0000000 --- a/bootstrap.php +++ /dev/null @@ -1,4 +0,0 @@ -editIssue( $issue, ['state'=>'open']); -}; - -$gitea->forIssues('james','rc',$reopen,['state'=>'closed','labels'=>'test']); diff --git a/no_milestone.php b/no_milestone.php new file mode 100644 index 0000000..fc1d805 --- /dev/null +++ b/no_milestone.php @@ -0,0 +1,27 @@ +getRepo('james','test'); + +$nolabelLabel=$repo->getLabelByName('no-label'); +if(!$nolabelLabel) die ("Can't find 'no-label' label in repo\n"); +$nomilestoneLabel=$repo->getLabelByName('no-milestone'); +if(!$nomilestoneLabel) die ("Can't find 'no-milestone' label in repo\n"); + +$callback=function($issue) use ($nomilestoneLabel){ + if( count($issue->getData()->milestone)==0 && !$issue->hasLabel($nomilestoneLabel) ){ + $issue->addLabel( $nomilestoneLabel ); + }elseif( count($issue->getData()->milestone)>0 && $issue->hasLabel($nomilestoneLabel) ){ + $issue->removeLabel( $nomilestoneLabel ); + } +}; + +$repo->forIssues($callback); diff --git a/Gitea.php b/src/Client.php similarity index 51% rename from Gitea.php rename to src/Client.php index 1bc723f..27061fc 100644 --- a/Gitea.php +++ b/src/Client.php @@ -1,60 +1,24 @@ url=$url; $this->user=$user; $this->pass=$pass; + $this->debug=$debug; } - public function forIssues($user,$repo,$callback,$args=null){ - $page=1; - while(1){ - $url="repos/$user/$repo/issues?page=$page"; - if($args){ - $url.='&'.http_build_query($args); - } - $issues=$this->request($url); - if(!$issues) break; - foreach($issues as $issue){ - call_user_func($callback,$issue); - } - $page++; - } - } - - public function editIssue($issue,$args){ - return $this->request($issue->url,'PATCH',$args); - } - - public function addLabelsToIssue($issue,$labels){ - $args=['labels'=>$labels]; - return $this->request($issue->url.'/labels','POST',$args); - } - - public function removeLabelFromIssue($issue,$id){ - return $this->request($issue->url."/labels/$id",'DELETE'); - } - - public function addComment($issue,$body){ - $args=['body'=>$body]; - return $this->request($issue->url.'/comments','POST',$args); - } - - public function issueHasLabel($issue,$id){ - foreach($issue->labels as $label){ - if($label->id==$id){ - return true; - } - } - return false; + public function getRepo($user,$repo){ + return new Repo($this,$user,$repo); } public function request($url, $type='GET', $postFields = null){ if(substr($url,0,4)!='http'){ $url=$this->url.$url; } - echo ">> $type $url ".json_encode($postFields)." <<\n"; + if($this->debug){ + echo ">> $type $url ".json_encode($postFields)." <<\n"; + } $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'james/GiteaBot'); curl_setopt($ch, CURLOPT_URL, $url); diff --git a/src/Issue.php b/src/Issue.php new file mode 100644 index 0000000..73c9d71 --- /dev/null +++ b/src/Issue.php @@ -0,0 +1,49 @@ +repo=$repo; + $this->data=$data; + } + + public function request($url, $type='GET', $postFields = null){ + return $this->repo->request($url, $type, $postFields); + } + + public function getData(){ + return $this->data; + } + + public function getRepo(){ + return $this->repo; + } + + public function save(){ + return $this->request($this->data->url,'PATCH',$this->data); + } + + public function addLabel($label){ + $args=['labels'=>[$label->getData()->id]]; + return $this->request($this->data->url.'/labels','POST',$args); + } + + public function removeLabel($label){ + $id=$label->getData()->id; + return $this->request($this->data->url."/labels/$id",'DELETE'); + } + + public function addComment($body){ + $args=['body'=>$body]; + return $this->request($this->data->url.'/comments','POST',$args); + } + + public function hasLabel($label){ + $id=$label->getData()->id; + foreach($this->data->labels as $label){ + if($label->id==$id){ + return true; + } + } + return false; + } +} diff --git a/src/Label.php b/src/Label.php new file mode 100644 index 0000000..27d4bf1 --- /dev/null +++ b/src/Label.php @@ -0,0 +1,17 @@ +repo=$repo; + $this->data=$data; + } + + public function getData(){ + return $this->data; + } + + public function getRepo(){ + return $this->repo; + } + +} diff --git a/src/Repo.php b/src/Repo.php new file mode 100644 index 0000000..7f72224 --- /dev/null +++ b/src/Repo.php @@ -0,0 +1,42 @@ +client=$client; + $this->user=$user; + $this->repo=$repo; + } + + public function request($url, $type='GET', $postFields = null){ + return $this->client->request($url, $type, $postFields); + } + + public function forIssues($callback,$args=null){ + $page=1; + while(1){ + $url="repos/{$this->user}/{$this->repo}/issues?page=$page"; + if($args){ + $url.='&'.http_build_query($args); + } + $issues=$this->client->request($url); + if(!$issues) break; + foreach($issues as $data){ + $issue=new Issue($this,$data); + call_user_func($callback,$issue); + } + $page++; + } + } + + public function getLabelByName($name){ + $url="repos/{$this->user}/{$this->repo}/labels"; + $data=$this->client->request($url); + foreach($data as $datum){ + if($datum->name==$name){ + return new Label($this,$datum); + } + } + return null; + } + +}