Replace flag rebase-current with rebase-tracked

Deprecated -rebase-current flag in favour of -rebase-tracked as that is
symmetric with other flag

Change-Id: Id14207291cd264c842bf7711ca243b2e732eac51
diff --git a/cmd/jiri/update.go b/cmd/jiri/update.go
index 0c3b688..cbbf598 100644
--- a/cmd/jiri/update.go
+++ b/cmd/jiri/update.go
@@ -24,6 +24,7 @@
 	hookTimeoutFlag     uint
 	rebaseAllFlag       bool
 	rebaseCurrentFlag   bool
+	rebaseTrackedFlag   bool
 )
 
 func init() {
@@ -37,7 +38,8 @@
 	cmdUpdate.Flags.BoolVar(&rebaseUntrackedFlag, "rebase-untracked", false, "Rebase untracked branches onto HEAD.")
 	cmdUpdate.Flags.UintVar(&hookTimeoutFlag, "hook-timeout", project.DefaultHookTimeout, "Timeout in minutes for running the hooks operation.")
 	cmdUpdate.Flags.BoolVar(&rebaseAllFlag, "rebase-all", false, "Rebase all tracked branches. Also rebase all untracked bracnhes if -rebase-untracked is passed")
-	cmdUpdate.Flags.BoolVar(&rebaseCurrentFlag, "rebase-current", false, "Rebase current tracked branches instead of fast-forwarding them.")
+	cmdUpdate.Flags.BoolVar(&rebaseCurrentFlag, "rebase-current", false, "Deprecated. Implies -rebase-tracked. Would be removed in future.")
+	cmdUpdate.Flags.BoolVar(&rebaseTrackedFlag, "rebase-tracked", false, "Rebase current tracked branches instead of fast-forwarding them.")
 }
 
 // cmdUpdate represents the "jiri update" command.
@@ -68,6 +70,10 @@
 			fmt.Printf("warning: automatic update failed: %v\n", err)
 		}
 	}
+	if rebaseCurrentFlag {
+		jirix.Logger.Warningf("Flag -rebase-current has been deprecated, please use -rebase-tracked.\n\n")
+		rebaseTrackedFlag = true
+	}
 
 	// Update all projects to their latest version.
 	// Attempt <attemptsFlag> times before failing.
@@ -75,7 +81,7 @@
 		if len(args) > 0 {
 			return project.CheckoutSnapshot(jirix, args[0], gcFlag, hookTimeoutFlag)
 		} else {
-			return project.UpdateUniverse(jirix, gcFlag, localManifestFlag, rebaseCurrentFlag, rebaseUntrackedFlag, rebaseAllFlag, hookTimeoutFlag)
+			return project.UpdateUniverse(jirix, gcFlag, localManifestFlag, rebaseTrackedFlag, rebaseUntrackedFlag, rebaseAllFlag, hookTimeoutFlag)
 		}
 	}, retry.AttemptsOpt(attemptsFlag))
 
diff --git a/project/project.go b/project/project.go
index e9c5cfb..e668c12 100644
--- a/project/project.go
+++ b/project/project.go
@@ -786,7 +786,7 @@
 	if err != nil {
 		return err
 	}
-	if err := updateProjects(jirix, localProjects, remoteProjects, hooks, gc, runHookTimeout, false /*rebaseCurrent*/, false /*rebaseUntracked*/, false /*rebaseAll*/, true /*snapshot*/); err != nil {
+	if err := updateProjects(jirix, localProjects, remoteProjects, hooks, gc, runHookTimeout, false /*rebaseTracked*/, false /*rebaseUntracked*/, false /*rebaseAll*/, true /*snapshot*/); err != nil {
 		return err
 	}
 	return WriteUpdateHistorySnapshot(jirix, snapshot, false)
@@ -1016,7 +1016,7 @@
 // counterparts identified in the manifest. Optionally, the 'gc' flag can be
 // used to indicate that local projects that no longer exist remotely should be
 // removed.
-func UpdateUniverse(jirix *jiri.X, gc bool, localManifest bool, rebaseCurrent bool, rebaseUntracked bool, rebaseAll bool, runHookTimeout uint) (e error) {
+func UpdateUniverse(jirix *jiri.X, gc bool, localManifest bool, rebaseTracked bool, rebaseUntracked bool, rebaseAll bool, runHookTimeout uint) (e error) {
 	jirix.Logger.Infof("Updating all projects")
 
 	updateFn := func(scanMode ScanMode) error {
@@ -1043,7 +1043,7 @@
 		}
 
 		// Actually update the projects.
-		return updateProjects(jirix, localProjects, remoteProjects, hooks, gc, runHookTimeout, rebaseCurrent, rebaseUntracked, rebaseAll, false /*snapshot*/)
+		return updateProjects(jirix, localProjects, remoteProjects, hooks, gc, runHookTimeout, rebaseTracked, rebaseUntracked, rebaseAll, false /*snapshot*/)
 	}
 
 	// Specifying gc should always force a full filesystem scan.
@@ -1346,7 +1346,7 @@
 
 // syncProjectMaster checks out latest detached head if project is on one
 // else it rebases current branch onto its tracking branch
-func syncProjectMaster(jirix *jiri.X, project Project, state ProjectState, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot bool) error {
+func syncProjectMaster(jirix *jiri.X, project Project, state ProjectState, rebaseTracked, rebaseUntracked, rebaseAll, snapshot bool) error {
 	cwd, err := os.Getwd()
 	if err != nil {
 		return fmtError(err)
@@ -1407,7 +1407,7 @@
 	}
 
 	// if rebase flag is false, merge fast forward current branch
-	if !rebaseCurrent && !rebaseAll && state.CurrentBranch.Tracking != nil {
+	if !rebaseTracked && !rebaseAll && state.CurrentBranch.Tracking != nil {
 		tracking := state.CurrentBranch.Tracking
 		if tracking.Revision == state.CurrentBranch.Revision {
 			return nil
@@ -2122,7 +2122,7 @@
 	return nil
 }
 
-func updateProjects(jirix *jiri.X, localProjects, remoteProjects Projects, hooks Hooks, gc bool, runHookTimeout uint, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot bool) error {
+func updateProjects(jirix *jiri.X, localProjects, remoteProjects Projects, hooks Hooks, gc bool, runHookTimeout uint, rebaseTracked, rebaseUntracked, rebaseAll, snapshot bool) error {
 	jirix.TimerPush("update projects")
 	defer jirix.TimerPop()
 
@@ -2169,7 +2169,7 @@
 	if len(multiErr) != 0 {
 		return multiErr
 	}
-	ops := computeOperations(localProjects, ps, states, gc, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot)
+	ops := computeOperations(localProjects, ps, states, gc, rebaseTracked, rebaseUntracked, rebaseAll, snapshot)
 	moveOperations := []moveOperation{}
 	deleteOperations := []deleteOperation{}
 	updateOperations := operations{}
@@ -2679,7 +2679,7 @@
 // moveOperation represents the relocation of a project.
 type moveOperation struct {
 	commonOperation
-	rebaseCurrent   bool
+	rebaseTracked   bool
 	rebaseUntracked bool
 	rebaseAll       bool
 	snapshot        bool
@@ -2704,7 +2704,7 @@
 			return fmtError(err)
 		}
 	}
-	if err := syncProjectMaster(jirix, op.project, op.state, op.rebaseCurrent, op.rebaseUntracked, op.rebaseAll, op.snapshot); err != nil {
+	if err := syncProjectMaster(jirix, op.project, op.state, op.rebaseTracked, op.rebaseUntracked, op.rebaseAll, op.snapshot); err != nil {
 		return err
 	}
 	return writeMetadata(jirix, op.project, op.project.Path)
@@ -2735,7 +2735,7 @@
 // updateOperation represents the update of a project.
 type updateOperation struct {
 	commonOperation
-	rebaseCurrent   bool
+	rebaseTracked   bool
 	rebaseUntracked bool
 	rebaseAll       bool
 	snapshot        bool
@@ -2746,7 +2746,7 @@
 }
 
 func (op updateOperation) Run(jirix *jiri.X) error {
-	if err := syncProjectMaster(jirix, op.project, op.state, op.rebaseCurrent, op.rebaseUntracked, op.rebaseAll, op.snapshot); err != nil {
+	if err := syncProjectMaster(jirix, op.project, op.state, op.rebaseTracked, op.rebaseUntracked, op.rebaseAll, op.snapshot); err != nil {
 		return err
 	}
 	return writeMetadata(jirix, op.project, op.project.Path)
@@ -2836,7 +2836,7 @@
 // system and manifest file respectively) and outputs a collection of
 // operations that describe the actions needed to update the target
 // projects.
-func computeOperations(localProjects, remoteProjects Projects, states map[ProjectKey]*ProjectState, gc, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot bool) operations {
+func computeOperations(localProjects, remoteProjects Projects, states map[ProjectKey]*ProjectState, gc, rebaseTracked, rebaseUntracked, rebaseAll, snapshot bool) operations {
 	result := operations{}
 	allProjects := map[ProjectKey]bool{}
 	for _, p := range localProjects {
@@ -2857,13 +2857,13 @@
 		if s, ok := states[key]; ok {
 			state = s
 		}
-		result = append(result, computeOp(local, remote, state, gc, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot))
+		result = append(result, computeOp(local, remote, state, gc, rebaseTracked, rebaseUntracked, rebaseAll, snapshot))
 	}
 	sort.Sort(result)
 	return result
 }
 
-func computeOp(local, remote *Project, state *ProjectState, gc, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot bool) operation {
+func computeOp(local, remote *Project, state *ProjectState, gc, rebaseTracked, rebaseUntracked, rebaseAll, snapshot bool) operation {
 	switch {
 	case local == nil && remote != nil:
 		return createOperation{commonOperation{
@@ -2908,28 +2908,28 @@
 				project:     *remote,
 				source:      local.Path,
 				state:       *state,
-			}, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot}
+			}, rebaseTracked, rebaseUntracked, rebaseAll, snapshot}
 		case snapshot && local.Revision != remote.Revision:
 			return updateOperation{commonOperation{
 				destination: remote.Path,
 				project:     *remote,
 				source:      local.Path,
 				state:       *state,
-			}, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot}
+			}, rebaseTracked, rebaseUntracked, rebaseAll, snapshot}
 		case localBranchesNeedUpdating || (state.CurrentBranch.Name == "" && local.Revision != remote.Revision):
 			return updateOperation{commonOperation{
 				destination: remote.Path,
 				project:     *remote,
 				source:      local.Path,
 				state:       *state,
-			}, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot}
+			}, rebaseTracked, rebaseUntracked, rebaseAll, snapshot}
 		case state.CurrentBranch.Tracking == nil && local.Revision != remote.Revision:
 			return updateOperation{commonOperation{
 				destination: remote.Path,
 				project:     *remote,
 				source:      local.Path,
 				state:       *state,
-			}, rebaseCurrent, rebaseUntracked, rebaseAll, snapshot}
+			}, rebaseTracked, rebaseUntracked, rebaseAll, snapshot}
 		default:
 			return nullOperation{commonOperation{
 				destination: remote.Path,
diff --git a/project/project_test.go b/project/project_test.go
index 8f547b2..e51fee0 100644
--- a/project/project_test.go
+++ b/project/project_test.go
@@ -1130,7 +1130,7 @@
 		t.Fatal(err)
 	}
 
-	if err := project.UpdateUniverse(fake.X, false, false, true /*rebaseCurrent*/, false, false, project.DefaultHookTimeout); err != nil {
+	if err := project.UpdateUniverse(fake.X, false, false, true /*rebaseTracked*/, false, false, project.DefaultHookTimeout); err != nil {
 		t.Fatal(err)
 	}