• ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/BuildSpec.java
    skipped 951 lines
    952 952   }
    953 953   }
    954 954  
     955 + @SuppressWarnings("unused")
     956 + private void migrate8(VersionedYamlDoc doc, Stack<Integer> versions) {
     957 + for (NodeTuple specTuple: doc.getValue()) {
     958 + String specKey = ((ScalarNode)specTuple.getKeyNode()).getValue();
     959 + if (specKey.equals("jobs")) {
     960 + SequenceNode jobsNode = (SequenceNode) specTuple.getValueNode();
     961 + for (Node jobsNodeItem: jobsNode.getValue()) {
     962 + MappingNode jobNode = (MappingNode) jobsNodeItem;
     963 + for (NodeTuple jobTuple: jobNode.getValue()) {
     964 + String jobTupleKey = ((ScalarNode)jobTuple.getKeyNode()).getValue();
     965 + if (jobTupleKey.equals("projectDependencies")) {
     966 + SequenceNode projectDependenciesNode = (SequenceNode) jobTuple.getValueNode();
     967 + for (Node projectDependenciesNodeItem: projectDependenciesNode.getValue()) {
     968 + MappingNode projectDependencyNode = (MappingNode) projectDependenciesNodeItem;
     969 + String buildNumber = null;
     970 + for (Iterator<NodeTuple> itProjectDependencyTuple = projectDependencyNode.getValue().iterator(); itProjectDependencyTuple.hasNext();) {
     971 + NodeTuple projectDependencyTuple = itProjectDependencyTuple.next();
     972 + String projectDependencyTupleKey = ((ScalarNode)projectDependencyTuple.getKeyNode()).getValue();
     973 + if (projectDependencyTupleKey.equals("buildNumber")) {
     974 + buildNumber = ((ScalarNode)projectDependencyTuple.getValueNode()).getValue();
     975 + itProjectDependencyTuple.remove();
     976 + break;
     977 + }
     978 + }
     979 + Preconditions.checkNotNull(buildNumber);
     980 +
     981 + List<NodeTuple> buildProviderTuples = new ArrayList<>();
     982 + buildProviderTuples.add(new NodeTuple(
     983 + new ScalarNode(Tag.STR, "buildNumber"),
     984 + new ScalarNode(Tag.STR, buildNumber)));
     985 + Node buildProviderNode = new MappingNode(new Tag("!SpecifiedBuild"), buildProviderTuples, FlowStyle.BLOCK);
     986 + projectDependencyNode.getValue().add(new NodeTuple(new ScalarNode(Tag.STR, "buildProvider"), buildProviderNode));
     987 + }
     988 + }
     989 + }
     990 + }
     991 + }
     992 + }
     993 + }
     994 +
    955 995  }
    956 996   
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/job/DefaultJobManager.java
    skipped 66 lines
    67 67  import io.onedev.server.buildspec.job.action.PostBuildAction;
    68 68  import io.onedev.server.buildspec.job.action.condition.ActionCondition;
    69 69  import io.onedev.server.buildspec.job.log.LogManager;
     70 +import io.onedev.server.buildspec.job.projectdependency.ProjectDependency;
    70 71  import io.onedev.server.buildspec.job.retrycondition.RetryCondition;
    71 72  import io.onedev.server.buildspec.job.trigger.JobTrigger;
    72 73  import io.onedev.server.buildspec.job.trigger.ScheduleTrigger;
    skipped 271 lines
    344 345   } else {
    345 346   subject = SecurityUtils.asSubject(0L);
    346 347   }
    347  - String buildNumberStr = dependency.getBuildNumber();
    348  - if (buildNumberStr.startsWith("#"))
    349  - buildNumberStr = buildNumberStr.substring(1);
    350  - Long buildNumber = Long.parseLong(buildNumberStr);
    351  - Build dependencyBuild = buildManager.find(dependencyProject, buildNumber);
     348 +
     349 + Build dependencyBuild = dependency.getBuildProvider().getBuild(dependencyProject);
    352 350   if (dependencyBuild == null) {
    353  - String errorMessage = String.format("Unable to find dependency build (project: %s, build number: %d)",
    354  - dependency.getProjectName(), buildNumber);
     351 + String errorMessage = String.format("Unable to find dependency build in project '"
     352 + + dependencyProject.getName() + "'");
    355 353   throw new ExplicitException(errorMessage);
    356 354   }
    357 355  
    skipped 899 lines
  • ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/job/Job.java
    skipped 37 lines
    38 38  import io.onedev.server.buildspec.BuildSpecAware;
    39 39  import io.onedev.server.buildspec.NamedElement;
    40 40  import io.onedev.server.buildspec.job.action.PostBuildAction;
     41 +import io.onedev.server.buildspec.job.projectdependency.ProjectDependency;
    41 42  import io.onedev.server.buildspec.job.trigger.JobTrigger;
    42 43  import io.onedev.server.buildspec.param.ParamUtils;
    43 44  import io.onedev.server.buildspec.param.spec.ParamSpec;
    skipped 419 lines
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/job/projectdependency/BuildProvider.java
     1 +package io.onedev.server.buildspec.job.projectdependency;
     2 + 
     3 +import java.io.Serializable;
     4 + 
     5 +import javax.annotation.Nullable;
     6 + 
     7 +import io.onedev.server.model.Build;
     8 +import io.onedev.server.model.Project;
     9 +import io.onedev.server.web.editable.annotation.Editable;
     10 + 
     11 +@Editable
     12 +public interface BuildProvider extends Serializable {
     13 + 
     14 + @Nullable
     15 + Build getBuild(Project project);
     16 +
     17 + String getDescription();
     18 +}
     19 + 
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/job/projectdependency/LastFinishedBuild.java
     1 +package io.onedev.server.buildspec.job.projectdependency;
     2 + 
     3 +import java.util.ArrayList;
     4 +import java.util.List;
     5 + 
     6 +import org.hibernate.validator.constraints.NotEmpty;
     7 + 
     8 +import edu.emory.mathcs.backport.java.util.Collections;
     9 +import io.onedev.server.OneDev;
     10 +import io.onedev.server.entitymanager.BuildManager;
     11 +import io.onedev.server.model.Build;
     12 +import io.onedev.server.model.Project;
     13 +import io.onedev.server.util.EditContext;
     14 +import io.onedev.server.web.editable.annotation.ChoiceProvider;
     15 +import io.onedev.server.web.editable.annotation.Editable;
     16 +import io.onedev.server.web.editable.annotation.OmitName;
     17 + 
     18 +@Editable(order=100, name="Last Finished of Specified Job")
     19 +public class LastFinishedBuild implements BuildProvider {
     20 + 
     21 + private static final long serialVersionUID = 1L;
     22 +
     23 + private String jobName;
     24 +
     25 + @Editable
     26 + @OmitName
     27 + @ChoiceProvider("getJobChoices")
     28 + @NotEmpty
     29 + public String getJobName() {
     30 + return jobName;
     31 + }
     32 + 
     33 + public void setJobName(String jobName) {
     34 + this.jobName = jobName;
     35 + }
     36 + 
     37 + @SuppressWarnings("unused")
     38 + private static List<String> getJobChoices() {
     39 + Project project = ProjectDependency.getInputProject(EditContext.get(1));
     40 + List<String> jobNames = new ArrayList<>();
     41 + if (project != null) {
     42 + jobNames.addAll(OneDev.getInstance(BuildManager.class).getAccessibleJobNames(project));
     43 + Collections.sort(jobNames);
     44 + }
     45 + return jobNames;
     46 + }
     47 +
     48 + @Override
     49 + public Build getBuild(Project project) {
     50 + return OneDev.getInstance(BuildManager.class).findLastFinished(project, jobName);
     51 + }
     52 + 
     53 + @Override
     54 + public String getDescription() {
     55 + return "Last finished of job '" + jobName + "'";
     56 + }
     57 + 
     58 +}
     59 + 
  • ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/job/ProjectDependency.java server-core/src/main/java/io/onedev/server/buildspec/job/projectdependency/ProjectDependency.java
    1  -package io.onedev.server.buildspec.job;
     1 +package io.onedev.server.buildspec.job.projectdependency;
    2 2  
    3 3  import java.io.Serializable;
    4 4  import java.util.ArrayList;
    skipped 1 lines
    6 6  import java.util.stream.Collectors;
    7 7  
    8 8  import javax.annotation.Nullable;
     9 +import javax.validation.constraints.NotNull;
    9 10  
    10 11  import org.hibernate.validator.constraints.NotEmpty;
    11 12  
    skipped 1 lines
    13 14  import io.onedev.commons.codeassist.InputSuggestion;
    14 15  import io.onedev.server.OneDev;
    15 16  import io.onedev.server.buildspec.BuildSpec;
    16  -import io.onedev.server.entitymanager.BuildManager;
    17 17  import io.onedev.server.entitymanager.ProjectManager;
    18  -import io.onedev.server.model.Build;
    19 18  import io.onedev.server.model.Project;
    20 19  import io.onedev.server.security.SecurityUtils;
    21 20  import io.onedev.server.security.permission.AccessProject;
    22 21  import io.onedev.server.util.EditContext;
    23  -import io.onedev.server.util.interpolative.Interpolative.Segment;
    24  -import io.onedev.server.web.behavior.inputassist.InputAssistBehavior;
    25 22  import io.onedev.server.web.editable.annotation.ChoiceProvider;
    26 23  import io.onedev.server.web.editable.annotation.Editable;
    27 24  import io.onedev.server.web.editable.annotation.Interpolative;
    28 25  import io.onedev.server.web.editable.annotation.NameOfEmptyValue;
    29 26  import io.onedev.server.web.editable.annotation.Patterns;
    30 27  import io.onedev.server.web.page.project.ProjectPage;
    31  -import io.onedev.server.web.util.SuggestionUtils;
    32 28  import io.onedev.server.web.util.WicketUtils;
    33 29  
    34 30  @Editable
    skipped 3 lines
    38 34  
    39 35   private String projectName;
    40 36  
    41  - private String buildNumber;
     37 + private BuildProvider buildProvider = new LastFinishedBuild();
    42 38  
    43 39   private String artifacts = "**";
    44 40  
    skipped 25 lines
    70 66   return choices;
    71 67   }
    72 68  
    73  - @Editable(order=300, name="Build", description="Specify build to retrieve artifacts from")
    74  - @Interpolative(variableSuggester="suggestVariables", literalSuggester="suggestBuilds")
    75  - @NotEmpty
    76  - public String getBuildNumber() {
    77  - return buildNumber;
     69 + @Editable(order=300, name="Build")
     70 + @NotNull
     71 + public BuildProvider getBuildProvider() {
     72 + return buildProvider;
    78 73   }
    79 74  
    80  - public void setBuildNumber(String buildNumber) {
    81  - this.buildNumber = buildNumber;
     75 + public void setBuildProvider(BuildProvider buildProvider) {
     76 + this.buildProvider = buildProvider;
    82 77   }
    83 78  
    84 79   @Nullable
    85  - private static Project getInputProject() {
    86  - String projectName = (String) EditContext.get().getInputValue("projectName");
     80 + static Project getInputProject(EditContext editContext) {
     81 + String projectName = (String) editContext.getInputValue("projectName");
    87 82   if (projectName != null) {
    88 83   Project project = OneDev.getInstance(ProjectManager.class).find(projectName);
    89 84   if (project != null && SecurityUtils.canReadCode(project))
    skipped 2 lines
    92 87   return null;
    93 88   }
    94 89  
    95  - @SuppressWarnings("unused")
    96  - private static List<InputSuggestion> suggestBuilds(String matchWith) {
    97  - Project project = getInputProject();
    98  - if (project != null)
    99  - return SuggestionUtils.suggestBuilds(project, matchWith, InputAssistBehavior.MAX_SUGGESTIONS);
    100  - else
    101  - return new ArrayList<>();
    102  - }
    103  -
    104 90   @Editable(order=400, name="Artifacts to Retrieve", description="Specify artifacts to retrieve into <a href='$docRoot/pages/concepts.md#job-workspace'>job workspace</a>")
    105 91   @Interpolative(variableSuggester="suggestVariables")
    106  - @Patterns(suggester="suggestArtifacts", path=true)
     92 + @Patterns(path=true)
    107 93   @NotEmpty
    108 94   public String getArtifacts() {
    109 95   return artifacts;
    skipped 6 lines
    116 102   @SuppressWarnings("unused")
    117 103   private static List<InputSuggestion> suggestVariables(String matchWith) {
    118 104   return BuildSpec.suggestVariables(matchWith, false, false);
    119  - }
    120  -
    121  - @SuppressWarnings("unused")
    122  - private static List<InputSuggestion> suggestArtifacts(String matchWith) {
    123  - Project project = getInputProject();
    124  - String buildNumber = (String) EditContext.get().getInputValue("buildNumber");
    125  - if (project != null && buildNumber != null
    126  - && io.onedev.server.util.interpolative.Interpolative.parse(buildNumber).getSegments(Segment.Type.VARIABLE).isEmpty()) {
    127  - if (buildNumber.startsWith("#"))
    128  - buildNumber = buildNumber.substring(1);
    129  - Build build = OneDev.getInstance(BuildManager.class).find(project, Long.parseLong(buildNumber));
    130  - if (build != null)
    131  - return SuggestionUtils.suggestArtifacts(build, matchWith);
    132  - }
    133  - return new ArrayList<>();
    134 105   }
    135 106  
    136 107   @Editable(order=500, description="Specify a secret to be used as access token to retrieve artifacts "
    skipped 20 lines
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/buildspec/job/projectdependency/SpecifiedBuild.java
     1 +package io.onedev.server.buildspec.job.projectdependency;
     2 + 
     3 +import java.util.ArrayList;
     4 +import java.util.List;
     5 + 
     6 +import org.hibernate.validator.constraints.NotEmpty;
     7 + 
     8 +import io.onedev.commons.codeassist.InputSuggestion;
     9 +import io.onedev.server.OneDev;
     10 +import io.onedev.server.buildspec.BuildSpec;
     11 +import io.onedev.server.entitymanager.BuildManager;
     12 +import io.onedev.server.model.Build;
     13 +import io.onedev.server.model.Project;
     14 +import io.onedev.server.util.EditContext;
     15 +import io.onedev.server.web.behavior.inputassist.InputAssistBehavior;
     16 +import io.onedev.server.web.editable.annotation.Editable;
     17 +import io.onedev.server.web.editable.annotation.Interpolative;
     18 +import io.onedev.server.web.editable.annotation.OmitName;
     19 +import io.onedev.server.web.util.SuggestionUtils;
     20 + 
     21 +@Editable(order=200, name="Specify by Build Number")
     22 +public class SpecifiedBuild implements BuildProvider {
     23 + 
     24 + private static final long serialVersionUID = 1L;
     25 +
     26 + private String buildNumber;
     27 +
     28 + @Editable(order=300)
     29 + @OmitName
     30 + @Interpolative(variableSuggester="suggestVariables", literalSuggester="suggestBuilds")
     31 + @NotEmpty
     32 + public String getBuildNumber() {
     33 + return buildNumber;
     34 + }
     35 + 
     36 + public void setBuildNumber(String buildNumber) {
     37 + this.buildNumber = buildNumber;
     38 + }
     39 + 
     40 + @SuppressWarnings("unused")
     41 + private static List<InputSuggestion> suggestVariables(String matchWith) {
     42 + return BuildSpec.suggestVariables(matchWith, false, false);
     43 + }
     44 +
     45 + @SuppressWarnings("unused")
     46 + private static List<InputSuggestion> suggestBuilds(String matchWith) {
     47 + Project project = ProjectDependency.getInputProject(EditContext.get(1));
     48 + if (project != null)
     49 + return SuggestionUtils.suggestBuilds(project, matchWith, InputAssistBehavior.MAX_SUGGESTIONS);
     50 + else
     51 + return new ArrayList<>();
     52 + }
     53 + 
     54 + @Override
     55 + public Build getBuild(Project project) {
     56 + Long buildNumber;
     57 + if (this.buildNumber.startsWith("#"))
     58 + buildNumber = Long.parseLong(this.buildNumber.substring(1));
     59 + else
     60 + buildNumber = Long.parseLong(this.buildNumber);
     61 +
     62 + return OneDev.getInstance(BuildManager.class).find(project, buildNumber);
     63 + }
     64 + 
     65 + @Override
     66 + public String getDescription() {
     67 + return buildNumber;
     68 + }
     69 + 
     70 +}
     71 + 
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/entitymanager/BuildManager.java
    skipped 29 lines
    30 30   Build find(ProjectScopedNumber buildFQN);
    31 31  
    32 32   @Nullable
     33 + Build findLastFinished(Project project, String jobName);
     34 + 
     35 + @Nullable
    33 36   Build findStreamPrevious(Build build, @Nullable Build.Status status);
    34 37   
    35 38   Collection<Long> queryStreamPreviousNumbers(Build build, @Nullable Build.Status status, int limit);
    skipped 42 lines
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/entitymanager/impl/DefaultBuildManager.java
    skipped 167 lines
    168 168  
    169 169   @Sessional
    170 170   @Override
     171 + public Build findLastFinished(Project project, String jobName) {
     172 + EntityCriteria<Build> criteria = newCriteria();
     173 + criteria.add(Restrictions.eq(Build.PROP_PROJECT, project));
     174 + criteria.add(Restrictions.eq(Build.PROP_JOB, jobName));
     175 + criteria.add(Build.Status.ofFinished());
     176 + criteria.addOrder(Order.desc(Build.PROP_NUMBER));
     177 + criteria.setCacheable(true);
     178 + return find(criteria);
     179 + }
     180 +
     181 + @Sessional
     182 + @Override
    171 183   public Build find(String buildFQN) {
    172 184   return find(ProjectScopedNumber.from(buildFQN));
    173 185   }
    skipped 823 lines
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/model/Build.java
    skipped 47 lines
    48 48  import org.eclipse.jgit.lib.Repository;
    49 49  import org.eclipse.jgit.revwalk.RevCommit;
    50 50  import org.eclipse.jgit.revwalk.RevWalk;
     51 +import org.hibernate.criterion.Criterion;
     52 +import org.hibernate.criterion.Restrictions;
    51 53   
    52 54  import com.fasterxml.jackson.annotation.JsonIgnore;
    53 55  import com.google.common.base.Objects;
    skipped 195 lines
    249 251   return status;
    250 252   }
    251 253   return null;
     254 + }
     255 +
     256 + public static Criterion ofFinished() {
     257 + return Restrictions.or(
     258 + Restrictions.eq(PROP_STATUS, Status.FAILED),
     259 + Restrictions.eq(PROP_STATUS, Status.CANCELLED),
     260 + Restrictions.eq(PROP_STATUS, Status.TIMED_OUT),
     261 + Restrictions.eq(PROP_STATUS, Status.SUCCESSFUL));
    252 262   }
    253 263  
    254 264   };
    skipped 734 lines
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/web/OneUrlMapper.java
    skipped 99 lines
    100 100  import io.onedev.server.web.page.project.setting.build.DefaultFixedIssueFiltersPage;
    101 101  import io.onedev.server.web.page.project.setting.build.JobSecretsPage;
    102 102  import io.onedev.server.web.page.project.setting.general.GeneralProjectSettingPage;
     103 +import io.onedev.server.web.page.project.setting.pluginsettings.ContributedProjectSettingPage;
    103 104  import io.onedev.server.web.page.project.setting.tagprotection.TagProtectionsPage;
    104 105  import io.onedev.server.web.page.project.setting.webhook.WebHooksPage;
    105 106  import io.onedev.server.web.page.project.stats.ProjectContribsPage;
    skipped 177 lines
    283 284   add(new DynamicPathPageMapper("projects/${project}/settings/build/build-preserve-rules", BuildPreservationsPage.class));
    284 285   add(new DynamicPathPageMapper("projects/${project}/settings/build/default-fixed-issues-filter", DefaultFixedIssueFiltersPage.class));
    285 286   add(new DynamicPathPageMapper("projects/${project}/settings/web-hooks", WebHooksPage.class));
     287 + add(new DynamicPathPageMapper("projects/${project}/settings/${setting}", ContributedProjectSettingPage.class));
    286 288   }
    287 289   
    288 290  }
    skipped 1 lines
  • ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/web/editable/buildspec/job/projectdependency/ProjectDependencyEditPanel.java
    skipped 10 lines
    11 11  import org.apache.wicket.markup.html.panel.Panel;
    12 12  import org.apache.wicket.request.cycle.RequestCycle;
    13 13  
     14 +import io.onedev.server.buildspec.BuildSpecAware;
    14 15  import io.onedev.server.buildspec.job.JobAware;
    15  -import io.onedev.server.buildspec.job.ProjectDependency;
     16 +import io.onedev.server.buildspec.job.projectdependency.ProjectDependency;
    16 17  import io.onedev.server.util.Path;
    17 18  import io.onedev.server.util.PathNode;
    18 19  import io.onedev.server.web.ajaxlistener.ConfirmLeaveListener;
    skipped 1 lines
    20 21  import io.onedev.server.web.editable.BeanEditor;
    21 22  
    22 23  @SuppressWarnings("serial")
    23  -abstract class ProjectDependencyEditPanel extends Panel implements JobAware {
     24 +abstract class ProjectDependencyEditPanel extends Panel implements BuildSpecAware, JobAware {
    24 25  
    25 26   private final List<ProjectDependency> dependencies;
    26 27  
    skipped 112 lines
  • ■ ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/web/editable/buildspec/job/projectdependency/ProjectDependencyListEditPanel.java
    skipped 26 lines
    27 27  import org.apache.wicket.model.Model;
    28 28  import org.apache.wicket.util.convert.ConversionException;
    29 29  
     30 +import io.onedev.server.buildspec.BuildSpec;
     31 +import io.onedev.server.buildspec.BuildSpecAware;
    30 32  import io.onedev.server.buildspec.job.Job;
    31 33  import io.onedev.server.buildspec.job.JobAware;
    32  -import io.onedev.server.buildspec.job.ProjectDependency;
     34 +import io.onedev.server.buildspec.job.projectdependency.ProjectDependency;
    33 35  import io.onedev.server.buildspec.param.spec.ParamSpec;
    34 36  import io.onedev.server.web.behavior.NoRecordsBehavior;
    35 37  import io.onedev.server.web.behavior.sortable.SortBehavior;
    skipped 47 lines
    83 85   }
    84 86  
    85 87   @Override
     88 + public BuildSpec getBuildSpec() {
     89 + return ProjectDependencyListEditPanel.this.getBuildSpec();
     90 + }
     91 +
     92 + @Override
    86 93   public List<ParamSpec> getParamSpecs() {
    87 94   return getJob()!=null? getJob().getParamSpecs(): null;
    88 95   }
    skipped 41 lines
    130 137  
    131 138   @Override
    132 139   public void populateItem(Item<ICellPopulator<ProjectDependency>> cellItem, String componentId, IModel<ProjectDependency> rowModel) {
    133  - cellItem.add(new Label(componentId, rowModel.getObject().getBuildNumber()));
     140 + ProjectDependency dependency = rowModel.getObject();
     141 + cellItem.add(new Label(componentId, dependency.getBuildProvider().getDescription()));
    134 142   }
    135 143  
    136 144   });
    skipped 32 lines
    169 177   return getJob()!=null? getJob().getParamSpecs(): null;
    170 178   }
    171 179  
     180 + @Override
     181 + public BuildSpec getBuildSpec() {
     182 + return ProjectDependencyListEditPanel.this.getBuildSpec();
     183 + }
     184 +
    172 185   };
    173 186   }
    174 187  
    skipped 52 lines
    227 240   }
    228 241  
    229 242   }.sortable("tbody"));
     243 + }
     244 +
     245 + private BuildSpec getBuildSpec() {
     246 + BuildSpecAware buildSpecAware = findParent(BuildSpecAware.class);
     247 + if (buildSpecAware != null)
     248 + return buildSpecAware.getBuildSpec();
     249 + else
     250 + return null;
    230 251   }
    231 252  
    232 253   private Job getJob() {
    skipped 33 lines
  • ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/web/editable/buildspec/job/projectdependency/ProjectDependencyListEditSupport.java
    skipped 5 lines
    6 6  import org.apache.wicket.Component;
    7 7  import org.apache.wicket.model.IModel;
    8 8  
    9  -import io.onedev.server.buildspec.job.ProjectDependency;
     9 +import io.onedev.server.buildspec.job.projectdependency.ProjectDependency;
    10 10  import io.onedev.server.util.ReflectionUtils;
    11 11  import io.onedev.server.web.editable.EditSupport;
    12 12  import io.onedev.server.web.editable.EmptyValueLabel;
    skipped 48 lines
  • ■ ■ ■ ■ ■
    server-core/src/main/java/io/onedev/server/web/editable/buildspec/job/projectdependency/ProjectDependencyListViewPanel.java
    skipped 24 lines
    25 25  import org.apache.wicket.model.IModel;
    26 26  import org.apache.wicket.model.Model;
    27 27  
    28  -import io.onedev.server.buildspec.job.ProjectDependency;
     28 +import io.onedev.server.buildspec.job.projectdependency.ProjectDependency;
    29 29  import io.onedev.server.web.behavior.NoRecordsBehavior;
    30 30  import io.onedev.server.web.component.offcanvas.OffCanvasCardPanel;
    31 31  import io.onedev.server.web.component.offcanvas.OffCanvasPanel;
    skipped 30 lines
    62 62  
    63 63   @Override
    64 64   public void populateItem(Item<ICellPopulator<ProjectDependency>> cellItem, String componentId, IModel<ProjectDependency> rowModel) {
    65  - cellItem.add(new Label(componentId, rowModel.getObject().getBuildNumber()));
     65 + ProjectDependency dependency = rowModel.getObject();
     66 + cellItem.add(new Label(componentId, dependency.getBuildProvider().getDescription()));
    66 67   }
    67 68  
    68 69   });
    skipped 74 lines
Please wait...
Page is in error, reload to recover