diff --git a/no_label_milestone.php b/no_label_milestone.php index 3029fd5..28cfdef 100644 --- a/no_label_milestone.php +++ b/no_label_milestone.php @@ -5,6 +5,8 @@ //2b. Also removes the label if present on an issue with a label (excluding the no-label and no-milestone) require("src/Client.php"); +require("src/GiteaData.php"); +require("src/GiteaRepoData.php"); require("src/Issue.php"); require("src/Label.php"); require("src/Repo.php"); @@ -30,7 +32,7 @@ if(!$nomilestoneLabel) die ("Can't find 'no-milestone' label in repo\n"); //define the function to process each issue $callback=function($issue) use ($nolabelLabel,$nomilestoneLabel){ // do the no-label thing - $labelCount=count($issue->getData()->labels); + $labelCount=count($issue->labels); if($issue->hasLabel($nolabelLabel)) $labelCount--; //dont count the no-label label if($nomilestoneLabel && $issue->hasLabel($nomilestoneLabel)) $labelCount--; //dont count the no-milestone label if($labelCount==0 && !$issue->hasLabel($nolabelLabel) ){ @@ -39,9 +41,9 @@ $callback=function($issue) use ($nolabelLabel,$nomilestoneLabel){ $issue->removeLabel( $nolabelLabel ); } //do the no-milestone thing - if( !$issue->getData()->milestone && !$issue->hasLabel($nomilestoneLabel) ){ + if( !$issue->milestone && !$issue->hasLabel($nomilestoneLabel) ){ $issue->addLabel( $nomilestoneLabel ); - }elseif( $issue->getData()->milestone && $issue->hasLabel($nomilestoneLabel) ){ + }elseif( $issue->milestone && $issue->hasLabel($nomilestoneLabel) ){ $issue->removeLabel( $nomilestoneLabel ); } }; diff --git a/repeat.php b/repeat.php new file mode 100644 index 0000000..d4edfbf --- /dev/null +++ b/repeat.php @@ -0,0 +1,56 @@ + [debug]\n"); +} +$debug = ($argc==4 && $argv[3]=='debug'); + +//open connection and repo +$client=new Client($config['url'],$config['user'],$config['pass'],$debug); +$repo=$client->getRepo($argv[1],$argv[2]); + +$terms=[ + 'months'=>['janurary','feburary','march','april','may','june','july','august','september','october','november','december'], + 'days'=>['monday','tuesday','wednesday','thursday','friday','saturday','sunday'], + 'generic'=>['daily','weekly','fortnightly','monthly','yearly'] +]; + +/* create the labels */ +/* +foreach($terms as $k=>$vs){ + foreach($vs as $v){ + $label=$repo->getLabelByName($v); + if(!$label){ + $label=$repo->createLabel(['name'=>$new_name,'color'=>'#ffff00','description'=>'Reopen this issue with the given frequency']); + } + } +} +*/ + +//define the function to process each issue +$daily=function($issue){ + //$hours_ago=(time()-strtotime($issue->closed_at))/60/60; + $day_closed=date('z',strtotime($issue->closed_at)); + $day_today=date('z'); + echo $issue->title." ".$issue->closed_at." ($day_closed, $day_today) \n"; + if($day_closed!=$day_today){ + $issue->state='open'; + $issue->save(); + } +}; + +//loop through issues and call the callback +$repo->forIssues($daily,['state'=>'closed','labels'=>'daily/repeat']); diff --git a/src/GiteaData.php b/src/GiteaData.php index 7c95ba0..19f521b 100644 --- a/src/GiteaData.php +++ b/src/GiteaData.php @@ -1,25 +1,15 @@ repo=$repo; - $this->data=$data; + public function __construct($data=null){ + if(!$data){ + $data=new stdClass(); + } + $this->data=$data; } - public function save(){ - return $this->request($this->data->url,'PATCH',$this->data); - } - - public function getData(){ - return $this->data; - } - - public function getRepo(){ - return $this->repo; - } - public function __set($k,$v){ $this->data->$k=$v; } diff --git a/src/GiteaRepoData.php b/src/GiteaRepoData.php new file mode 100644 index 0000000..6766aa3 --- /dev/null +++ b/src/GiteaRepoData.php @@ -0,0 +1,19 @@ +repo=$repo; + parent::__construct($data); + } + + public function getRepo(){ + return $this->repo; + } + + public function save(){ + return $this->repo->request($this->url,'PATCH',$this->data); + } + +} diff --git a/src/Issue.php b/src/Issue.php index 73c9d71..fce3225 100644 --- a/src/Issue.php +++ b/src/Issue.php @@ -1,45 +1,32 @@ repo=$repo; - $this->data=$data; + parent::__construct($repo,$data); } public function request($url, $type='GET', $postFields = null){ - return $this->repo->request($url, $type, $postFields); + return $this->getRepo()->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); + $args=['labels'=>[$label->id]]; + return $this->request($this->url.'/labels','POST',$args); } public function removeLabel($label){ - $id=$label->getData()->id; - return $this->request($this->data->url."/labels/$id",'DELETE'); + $id=$label->id; + return $this->request($this->url."/labels/$id",'DELETE'); } public function addComment($body){ $args=['body'=>$body]; - return $this->request($this->data->url.'/comments','POST',$args); + return $this->request($this->url.'/comments','POST',$args); } public function hasLabel($label){ - $id=$label->getData()->id; - foreach($this->data->labels as $label){ + $id=$label->id; + foreach($this->labels as $label){ if($label->id==$id){ return true; } diff --git a/src/Label.php b/src/Label.php index 27d4bf1..72aa97c 100644 --- a/src/Label.php +++ b/src/Label.php @@ -1,17 +1,4 @@ repo=$repo; - $this->data=$data; - } - - public function getData(){ - return $this->data; - } - - public function getRepo(){ - return $this->repo; - } +class Label extends GiteaRepoData{ } diff --git a/src/Repo.php b/src/Repo.php index 7f72224..5441e62 100644 --- a/src/Repo.php +++ b/src/Repo.php @@ -33,10 +33,18 @@ class Repo{ $data=$this->client->request($url); foreach($data as $datum){ if($datum->name==$name){ + $datum->url=$url."/".$datum->id; // not set by api for some reason (bug?) return new Label($this,$datum); } } return null; } + public function createLabel($args){ + $url="repos/{$this->user}/{$this->repo}/labels"; + $data=$this->client->request($url,'POST',$args); + $data->url=$url."/".$data->id; // not set by api for some reason (bug?) + return new Label($this,$data); + } + }