diff --git a/mercurial/commands.py b/mercurial/commands.py
index d773150d71f2d604ed3106a548aa4919ff2b746e_bWVyY3VyaWFsL2NvbW1hbmRzLnB5..e6003ecf325782c7124d6b87162543d4553c0320_bWVyY3VyaWFsL2NvbW1hbmRzLnB5 100644
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -5616,6 +5616,7 @@
         m = scmutil.match(wctx, pats, opts)
         ret = 0
         didwork = False
+        runconclude = False
 
         tocomplete = []
         for f in ms:
@@ -5624,7 +5625,8 @@
 
             didwork = True
 
-            # don't let driver-resolved files be marked
+            # don't let driver-resolved files be marked, and run the conclude
+            # step if asked to resolve
             if ms[f] == "d":
                 exact = m.exact(f)
                 if mark:
@@ -5635,6 +5637,8 @@
                     if exact:
                         ui.warn(_('not unmarking %s as it is driver-resolved\n')
                                 % f)
+                else:
+                    runconclude = True
                 continue
 
             if mark:
@@ -5680,6 +5684,17 @@
 
         if not didwork and pats:
             ui.warn(_("arguments do not match paths that need resolving\n"))
+        elif ms.mergedriver and ms.mdstate() != 's':
+            # run conclude step when either a driver-resolved file is requested
+            # or there are no driver-resolved files
+            # we can't use 'ret' to determine whether any files are unresolved
+            # because we might not have tried to resolve some
+            if ((runconclude or not list(ms.driverresolved()))
+                and not list(ms.unresolved())):
+                proceed = mergemod.driverconclude(repo, ms, wctx)
+                ms.commit()
+                if not proceed:
+                    return 1
 
     finally:
         wlock.release()