From ca6b2aed9e87dcdb968abf7172603b65781af682 Mon Sep 17 00:00:00 2001 From: Dominik Meyer Date: Sun, 16 Sep 2018 00:06:52 +0200 Subject: [PATCH] ADD: support close commit id when closing issue --- lib/Git/IssueManager.pm | 51 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/lib/Git/IssueManager.pm b/lib/Git/IssueManager.pm index 3e660c4..c61c393 100644 --- a/lib/Git/IssueManager.pm +++ b/lib/Git/IssueManager.pm @@ -6,6 +6,7 @@ use DateTime; use DateTime::TimeZone; use Data::Dumper; use Git::LowLevel; +use Git::IssueManager::Issue; =head1 DESCRIPTION @@ -569,10 +570,54 @@ sub assign =cut sub close { - my $self = shift; - my $id = shift; + my $self = shift; + my $id = shift; + my $commit = shift || ""; + my $status = "closed"; + my @statusse = ("open","assigned","inprogress","closed"); - $self->changeStatus($id, "closed"); + die("IssueManager not initialized") unless $self->ready(); + my $ref = $self->repository->getReference('refs/heads/issues'); + my $tag = $ref->find(".tag")->content(); + my $root = $ref->getTree(); + + + for my $s (@statusse) + { + next unless $s ne $status; + for my $stat ($root->find($s)) + { + for my $i ($stat->get()) + { + if (ref($i) eq "Git::LowLevel::Tree") + { + my $subject = $i->find("subject"); + my $mytag = $tag . "-" . substr($subject->hash(),0,8); + if ($id eq $mytag) + { + my $base=$root->find($status); + $stat->del($i); + my $issue = $self->parseIssue($i, $tag, $s); + $issue->status($status); + $issue->close_commit($commit); + + my $issueTree=$issue->createIssue($self->repository); + + if (!defined($base)) + { + $base = $root->newTree(); + $base->path($status); + $root->add($base); + } + $base->add($issueTree); + $ref->commit("closed issue " . $i->mypath); + return; + } + } + } + } + } + die("issue " . $id . " not found\n"); } =method open