// runProjectPoll generates a description of changes that exist // remotely but do not exist locally. func runProjectPoll(env *cmdline.Env, args []string) error { ctx := tool.NewContextFromEnv(env) projectSet := map[string]struct{}{} if len(args) > 0 { config, err := util.LoadConfig(ctx) if err != nil { return err } // Compute a map from tests to projects that can change the // outcome of the test. testProjects := map[string][]string{} for _, project := range config.Projects() { for _, test := range config.ProjectTests([]string{project}) { testProjects[test] = append(testProjects[test], project) } } for _, arg := range args { projects, ok := testProjects[arg] if !ok { return fmt.Errorf("failed to find any projects for test %q", arg) } set.String.Union(projectSet, set.String.FromSlice(projects)) } } update, err := project.PollProjects(ctx, projectSet) if err != nil { return err } // Remove projects with empty changes. for project := range update { if changes := update[project]; len(changes) == 0 { delete(update, project) } } // Print update if it is not empty. if len(update) > 0 { bytes, err := json.MarshalIndent(update, "", " ") if err != nil { return fmt.Errorf("MarshalIndent() failed: %v", err) } fmt.Fprintf(env.Stdout, "%s\n", bytes) } return nil }
// NewConfigHelper creates a new config helper. If filename is of non-zero // length then that file will be read as a profiles manifest file, if not, the // existing, if any, in-memory profiles information will be used. If SkipProfiles // is specified for profilesMode, then no profiles are used. func NewConfigHelper(ctx *tool.Context, profilesMode ProfilesMode, filename string) (*ConfigHelper, error) { root, err := project.JiriRoot() if err != nil { return nil, err } config, err := util.LoadConfig(ctx) if err != nil { return nil, err } projects, tools, err := project.ReadManifest(ctx) if err != nil { return nil, err } if profilesMode == UseProfiles && len(filename) > 0 { if err := Read(ctx, filepath.Join(root, filename)); err != nil { return nil, err } } ch := &ConfigHelper{ ctx: ctx, root: root, config: config, projects: projects, tools: tools, profilesMode: bool(profilesMode), } ch.Vars = envvar.VarsFromOS() if profilesMode == SkipProfiles { return ch, nil } ch.legacyMode = (SchemaVersion() == Original) || (len(os.Getenv("JIRI_PROFILE")) > 0) if ch.legacyMode { vars, err := util.JiriLegacyEnvironment(ch.ctx) if err != nil { return nil, err } ch.Vars = vars } return ch, nil }