@@ -669,13 +669,82 @@ ApiResult api_call(const String &cmd, const Strings &args)
669669 return ApiResult::Error;
670670 }
671671
672- Api ().add_version (find_remote (remote), p, read_file (args[arg++]));
672+ auto f = args[arg++];
673+ if (fs::exists (f) && fs::is_regular_file (f))
674+ {
675+ Api ().add_version (find_remote (remote), p, read_file (f));
676+ return ApiResult::Handled;
677+ }
678+
679+ if (args.size () < arg + 1 )
680+ {
681+ Api ().add_version (find_remote (remote), p, Version (f));
682+ return ApiResult::Handled;
683+ }
684+
685+ auto vold = args[arg++];
686+ Api ().add_version (find_remote (remote), p, Version (f), vold);
687+
673688 return ApiResult::Handled;
674689 }
675690
676691 return ApiResult::Handled;
677692 }
678693
694+ if (cmd == " update" )
695+ {
696+ if (args.size () < 3 )
697+ {
698+ std::cout << " invalid number of arguments\n " ;
699+ std::cout << " usage: cppan update version [remote] name version\n " ;
700+ return ApiResult::Error;
701+ }
702+
703+ size_t arg = 2 ;
704+ String what = args[arg++];
705+
706+ if (what == " version" )
707+ {
708+ auto proj_usage = []
709+ {
710+ std::cout << " invalid number of arguments\n " ;
711+ std::cout << " usage: cppan update version [remote] name version\n " ;
712+ };
713+
714+ if (args.size () < arg + 1 )
715+ {
716+ proj_usage ();
717+ return ApiResult::Error;
718+ }
719+
720+ String remote = DEFAULT_REMOTE_NAME;
721+ ProjectPath p (args[arg++]);
722+ if (has_remote (remote) && p.is_relative () && p.size () == 1 )
723+ {
724+ remote = args[arg - 1 ];
725+
726+ if (args.size () < arg + 1 )
727+ {
728+ proj_usage ();
729+ return ApiResult::Error;
730+ }
731+
732+ p = ProjectPath (args[arg++]);
733+ }
734+
735+ if (args.size () < arg + 1 )
736+ {
737+ proj_usage ();
738+ return ApiResult::Error;
739+ }
740+
741+ Api ().update_version (find_remote (remote), p, String (args[arg++]));
742+ return ApiResult::Handled;
743+ }
744+
745+ return ApiResult::NotHandled;
746+ }
747+
679748 if (cmd == " remove" )
680749 {
681750 if (args.size () < 3 )
0 commit comments