Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
R
redmine-sync
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Gerhard Gonter
redmine-sync
Commits
46e72eda
Commit
46e72eda
authored
Dec 13, 2016
by
Gerhard Gonter
Browse files
Options
Downloads
Patches
Plain Diff
redesign id mapping and add ticket preparation
parent
73beadaa
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
lib/Redmine/CLI.pm
+68
-5
68 additions, 5 deletions
lib/Redmine/CLI.pm
lib/Redmine/Wrapper.pm
+76
-17
76 additions, 17 deletions
lib/Redmine/Wrapper.pm
with
144 additions
and
22 deletions
lib/Redmine/CLI.pm
+
68
−
5
View file @
46e72eda
...
...
@@ -73,7 +73,7 @@ EOPOD
my
$default_config_fnm
=
'
redmine.json
';
my
@default_home_dirs
=
('
etc
',
undef
,
'
bin
');
my
@env_vars
=
qw(project_name ticket_number out_csv)
;
my
@env_vars
=
qw(project_name
tracker_name
ticket_number out_csv
subject
)
;
my
%env_vars
=
map
{
$_
=>
1
}
@env_vars
;
sub
new
...
...
@@ -86,6 +86,7 @@ sub new
'
cfg_stanza
'
=>
'
Redmine
',
'
op_mode
'
=>
undef
,
# 'project_name' => undef,
'
tracker_name
'
=>
'
Task
',
};
my
@cfg_fnm
=
(
...
...
@@ -116,14 +117,14 @@ sub new
sub
set
{
my
$
obj
=
shift
;
my
$
self
=
shift
;
my
%par
=
@_
;
my
%res
;
foreach
my
$par
(
keys
%par
)
{
$res
{
$par
}
=
$
obj
->
{
$par
};
$
obj
->
{
$par
}
=
$par
{
$par
};
$res
{
$par
}
=
$
self
->
{
$par
};
$
self
->
{
$par
}
=
$par
{
$par
};
}
(
wantarray
)
?
%res
:
\
%res
;
...
...
@@ -207,6 +208,13 @@ sub init
(
$cfg
,
$mRM
);
}
sub
get_wrapper
{
my
$self
=
shift
;
my
$mRM
=
$self
->
{
_rm_wrapper
};
}
sub
main_part2
{
my
$self
=
shift
;
...
...
@@ -335,6 +343,15 @@ sub interpret
print
"
no parent issue found for
$ticket_number
\n
";
}
}
elsif
(
$op_mode
eq
'
prepare
')
{
my
$project_name
=
$self
->
{
project_name
};
my
$tracker_name
=
$self
->
{
tracker_name
};
my
$subject
=
$self
->
{
subject
};
my
$description
;
my
$t
=
prepare_ticket
(
$mRM
,
$project_name
,
$tracker_name
,
$subject
,
$description
);
}
=begin comment
...
...
@@ -382,12 +399,17 @@ sub interact
}
}
=head1 methods belonging WebService::Redmine
=cut
sub
show_issues
{
my
$rm
=
shift
;
my
$proj_name
=
shift
;
my
$save_as_tsv
=
shift
;
print
"
rm=[
$rm
]
\n
";
my
$proj
=
$rm
->
project
(
$proj_name
);
print
"
proj_name=[
$proj_name
] proj:
",
Dumper
(
$proj
);
...
...
@@ -461,6 +483,47 @@ sub filter1
(
\
@dx
,
\
%dy
);
}
=head1 methods belonging Redmine::Wrapper
=cut
sub
prepare_ticket
{
my
$mRM
=
shift
;
my
$project_name
=
shift
;
my
$tracker_name
=
shift
;
my
$subject
=
shift
;
my
$description
=
shift
;
my
$rm
=
$mRM
->
attach
();
# print "rm=[$rm]\n";
my
$proj_id
=
$mRM
->
get_project_id
(
$project_name
);
# my $proj_id= $proj->{'project'}->{'id'};
print
"
project_name=[
$project_name
] proj_id=[
$proj_id
]
\n
";
my
$tr_id
=
$mRM
->
get_tracker_id
(
$tracker_name
);
# print "tr: ", Dumper ($tr);
# my $tr_id= $tr->{'tracker'}->{'id'};
print
"
tracker_name=[Task] tr_id=[
$tr_id
]
\n
";
my
$ticket
=
{
issue
=>
my
$issue
=
{
'
project_id
'
=>
$proj_id
,
'
tracker_id
'
=>
$tr_id
,
'
subject
'
=>
$subject
,
'
description
'
=>
$description
,
}
};
# print "ticket: ", Dumper ($ticket);
$ticket
;
}
sub
show_issue
{
my
$rm
=
shift
;
...
...
@@ -509,7 +572,7 @@ __END__
=over 1
=item The
re
command line options need to be evolved
=item The command line options need to be evolved
=back
...
...
This diff is collapsed.
Click to expand it.
lib/Redmine/Wrapper.pm
+
76
−
17
View file @
46e72eda
...
...
@@ -5,9 +5,13 @@ use strict;
use
WebService::
Redmine
;
sub
get_project_info
;
sub
get_tracker_map
;
my
%automapping
=
(
'
project_ids
'
=>
1
,
'
project_ids
'
=>
{
automap
=>
1
,
object
=>
'
project
',
info
=>
\
&get_project_info
},
'
tracker_ids
'
=>
{
automap
=>
1
,
object
=>
'
tracker
',
map
=>
\
&get_tracker_map
},
);
my
%USER_NAMES
=
map
{
$_
=>
1
}
qw(assigned_to)
;
...
...
@@ -57,41 +61,73 @@ sub get_mapped_id
my
$map_name
=
shift
;
my
$name
=
shift
;
my
$c
=
$self
->
{'
cfg
'};
# print "cfg: ", main::Dumper ($c);
my
$c
fg
=
$self
->
{'
cfg
'};
# print "cfg: ", main::Dumper ($c
fg
);
$map_name
=
'
user
'
if
(
exists
(
$USER_NAMES
{
$map_name
}));
my
$m
=
$c
->
{
$map_name
.
'
_ids
'};
$map_name
=
'
user_ids
'
if
(
exists
(
$USER_NAMES
{
$map_name
}));
my
$m
=
$self
->
{
$map_name
};
if
(
!
defined
(
$m
)
&&
exists
(
$cfg
->
{
$map_name
}))
{
$m
=
$self
->
{
$map_name
}
=
{
%$m
};
# copy from config
}
# print "map_name=[$map_name] name=[$name] m=", main::Dumper ($m);
my
$id
;
my
$perform_lookup
=
0
;
my
$perform_lookup
=
1
;
if
(
exists
(
$m
->
{
$name
}))
{
$id
=
$m
->
{
$name
};
print
"
ATTN: no id known for
$map_name
=[
$name
]
\n
";
# print "ATTN: no id known for $map_name=[$name]\n";
=begin comment
if
(
exists
(
$
self
->
{
automapping
})
&&
$
self
->
{
automapping
}
>=
1
)
if (exists ($
cfg
->{automapping}) && $
cfg
->{automapping} >= 1)
{ # TODO: add an *optional* lookup ...
$perform_lookup= 1;
}
=end comment
=cut
}
else
{
print
"
ATTN: no *map* named [
$map_name
] available
\n
";
if
(
exists
(
$self
->
{
automapping
})
&&
$self
->
{
automapping
}
>=
2
&&
exists
(
$automapping
{
$map_name
}))
{
# TODO: allow dynamically fetched maps, when the map name is valied, e.g. project_ids etc..
if
(
$name
eq
'
project
')
# print "ATTN: no *map* named [$map_name] available\n";
=begin comment
if (exists ($cfg->{automapping}) && $cfg->{automapping} >= 2)
{
my
$pi
=
$self
->
get_project_info
(
$name
);
$perform_lookup
=
1
if
(
defined
(
$pi
));
}
$perform_lookup= 1;
}
=end comment
=cut
}
if
(
!
defined
(
$id
)
&&
$perform_lookup
)
{
# print "map_name=[$map_name] id not found, perform_lookup=[$perform_lookup]\n";
if
(
exists
(
$automapping
{
$map_name
}))
{
# TODO: allow dynamically fetched maps, when the map name is valid, e.g. project_ids etc..
my
$automap
=
$automapping
{
$map_name
};
# print "NOTE: checking automap: ", main::Dumper ($automap);
if
(
defined
(
my
$c_i
=
$automap
->
{
info
}))
{
my
$pi
=
&$c_i
(
$self
,
$name
);
# print "pi: ", main::Dumper ($pi);
$id
=
$pi
->
{
id
}
if
(
defined
(
$pi
));
}
elsif
(
defined
(
my
$c_m
=
$automap
->
{
map
}))
{
my
$map
=
&$c_m
(
$self
);
# print "map: ", main::Dumper ($map);
$id
=
$map
->
{
$name
}
if
(
defined
(
$map
));
}
}
}
$id
;
...
...
@@ -105,6 +141,25 @@ sub get_tracker_id
$self
->
get_mapped_id
('
tracker_ids
',
$tracker_name
);
}
# Note: for some reason, receiving info for one tracker is not possible
sub
get_tracker_map
{
my
$self
=
shift
;
my
$rm
=
$self
->
attach
();
my
$tracker_list
=
$rm
->
trackers
();
# print __LINE__, " tracker_list: ", main::Dumper ($tracker_list);
my
%trackers
;
if
(
defined
(
$tracker_list
))
{
%trackers
=
map
{
$_
->
{
name
}
=>
$_
->
{
id
}
}
@
{
$tracker_list
->
{
trackers
}};
$self
->
{
tracker_ids
}
=
\
%trackers
;
}
\
%trackers
;
}
sub
get_project_id
{
my
$self
=
shift
;
...
...
@@ -120,7 +175,11 @@ sub get_project_info
my
$rm
=
$self
->
attach
();
my
$proj
=
$rm
->
project
(
$name
);
print
__LINE__
,
"
get_project_info: name=[
$name
] proj:
",
main::
Dumper
(
$proj
);
return
undef
unless
(
defined
(
$proj
));
# print __LINE__, " get_project_info: name=[$name] proj: ", main::Dumper ($proj);
return
$proj
->
{'
project
'};
}
sub
fixup_issue
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment