         exclude : []
         only  : undefined      # if given, *ONLY* migrate projects in this list.
         reverse : false
+        sort_by_time : true    # if true, stort by time (with newest first)
         loop  : 0              # if >=1; call it again with same inputs once it finishes
         cb    : undefined      # cb(err, {project_id:errors when migrating that project})
 

                else
                    return 0
            work = work.slice(opts.start, opts.end)
            async.mapLimit(work, opts.limit, f, cb)
    ], (err) -> opts.cb?(err))


                                    if tm < x.last_edited
                                        v.push(x)
                                        break
                        result = v
                        if opts.start? and opts.stop?
                            result = result.slice(opts.start, opts.stop)
                        else if opts.start?
                            result = result.slice(opts.start)
                        else if opts.stop?
                            result = result.slice(0, opts.stop)


                        projects = result
                        todo = projects.length
                        dbg("of these -- #{todo} in the range remain to be migrated")
                    cb(err)
