diff --git a/tools/buildman/control.py b/tools/buildman/control.py
index 3b41d7b..a9c5022 100644
--- a/tools/buildman/control.py
+++ b/tools/buildman/control.py
@@ -170,35 +170,6 @@
         print()
         return 0
 
-    # Work out how many commits to build. We want to build everything on the
-    # branch. We also build the upstream commit as a control so we can see
-    # problems introduced by the first commit on the branch.
-    count = options.count
-    has_range = options.branch and '..' in options.branch
-    if count == -1:
-        if not options.branch:
-            count = 1
-        else:
-            if has_range:
-                count, msg = gitutil.CountCommitsInRange(options.git_dir,
-                                                         options.branch)
-            else:
-                count, msg = gitutil.CountCommitsInBranch(options.git_dir,
-                                                          options.branch)
-            if count is None:
-                sys.exit(col.Color(col.RED, msg))
-            elif count == 0:
-                sys.exit(col.Color(col.RED, "Range '%s' has no commits" %
-                                   options.branch))
-            if msg:
-                print(col.Color(col.YELLOW, msg))
-            count += 1   # Build upstream commit also
-
-    if not count:
-        str = ("No commits found to process in branch '%s': "
-               "set branch's upstream or use -c flag" % options.branch)
-        sys.exit(col.Color(col.RED, str))
-
     # Work out what subset of the boards we are building
     if not boards:
         if not os.path.exists(options.output_dir):
@@ -217,7 +188,6 @@
         for arg in options.exclude:
             exclude += arg.split(',')
 
-
     if options.boards:
         requested_boards = []
         for b in options.boards:
@@ -230,6 +200,35 @@
     if not len(selected):
         sys.exit(col.Color(col.RED, 'No matching boards found'))
 
+    # Work out how many commits to build. We want to build everything on the
+    # branch. We also build the upstream commit as a control so we can see
+    # problems introduced by the first commit on the branch.
+    count = options.count
+    has_range = options.branch and '..' in options.branch
+    if count == -1:
+        if not options.branch:
+            count = 1
+        else:
+            if has_range:
+                count, msg = gitutil.CountCommitsInRange(options.git_dir,
+                                                         options.branch)
+            else:
+                count, msg = gitutil.CountCommitsInBranch(options.git_dir,
+                                                          options.branch)
+            if count is None:
+                sys.exit(col.Color(col.RED, msg))
+            elif count == 0:
+                sys.exit(col.Color(col.RED, "Range '%s' has no commits" %
+                                   options.branch))
+            if msg:
+                print(col.Color(col.YELLOW, msg))
+            count += 1   # Build upstream commit also
+
+    if not count:
+        str = ("No commits found to process in branch '%s': "
+               "set branch's upstream or use -c flag" % options.branch)
+        sys.exit(col.Color(col.RED, str))
+
     # Read the metadata from the commits. First look at the upstream commit,
     # then the ones in the branch. We would like to do something like
     # upstream/master~..branch but that isn't possible if upstream/master is
