Changeset 15415 for trunk/ippTools/src/difftool.c
- Timestamp:
- Oct 29, 2007, 2:08:17 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/difftool.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/difftool.c
r15376 r15415 39 39 static bool diffskyfileMode(pxConfig *config); 40 40 static bool revertdiffskyfileMode(pxConfig *config); 41 static bool definepoprunMode(pxConfig *config); 41 42 42 43 static bool setdiffRunState(pxConfig *config, const char *diff_id, const char *state); … … 62 63 MODECASE(DIFFTOOL_MODE_DEFINERUN, definerunMode); 63 64 MODECASE(DIFFTOOL_MODE_UPDATERUN, updaterunMode); 64 MODECASE(DIFFTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileMode); 65 MODECASE(DIFFTOOL_MODE_INPUTSKYFILE, inputskyfileMode); 66 MODECASE(DIFFTOOL_MODE_TODIFFSKYFILE, todiffskyfileMode); 67 MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE, adddiffskyfileMode); 68 MODECASE(DIFFTOOL_MODE_DIFFSKYFILE, diffskyfileMode); 69 MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileMode); 65 MODECASE(DIFFTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileMode); 66 MODECASE(DIFFTOOL_MODE_INPUTSKYFILE, inputskyfileMode); 67 MODECASE(DIFFTOOL_MODE_TODIFFSKYFILE, todiffskyfileMode); 68 MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE, adddiffskyfileMode); 69 MODECASE(DIFFTOOL_MODE_DIFFSKYFILE, diffskyfileMode); 70 MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileMode); 71 MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN, definepoprunMode); 70 72 default: 71 73 psAbort("invalid option (this should not happen)"); … … 787 789 return true; 788 790 } 791 792 793 794 795 796 static bool definepoprunMode(pxConfig *config) 797 { 798 PS_ASSERT_PTR_NON_NULL(config, false); 799 800 // required options 801 bool status = false; 802 psString workdir = psMetadataLookupStr(&status, config->args, "-workdir"); 803 if (!status) { 804 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir"); 805 return false; 806 } 807 if (!workdir) { 808 psError(PS_ERR_UNKNOWN, true, "-workdir is required"); 809 return false; 810 } 811 812 psString skycell_id = psMetadataLookupStr(&status, config->args, "-skycell_id"); 813 if (!status) { 814 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -skycell_id"); 815 return false; 816 } 817 if (!skycell_id) { 818 psError(PS_ERR_UNKNOWN, true, "-skycell_id is required"); 819 return false; 820 } 821 822 psString tess_id = psMetadataLookupStr(&status, config->args, "-tess_id"); 823 if (!status) { 824 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -tess_id"); 825 return false; 826 } 827 if (!tess_id) { 828 psError(PS_ERR_UNKNOWN, true, "-tess_id is required"); 829 return false; 830 } 831 832 psString template_stack_id = psMetadataLookupStr(&status, config->args, "-template_stack_id"); 833 if (!status) { 834 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -template_stack_id"); 835 return false; 836 } 837 psString template_warp_id = psMetadataLookupStr(&status, config->args, "-template_warp_id"); 838 if (!status) { 839 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -template_warp_id"); 840 return false; 841 } 842 if (template_stack_id && template_warp_id) { 843 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one template can be defined."); 844 return false; 845 } 846 if (!template_stack_id && !template_warp_id) { 847 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 848 "No template has been defined (-template_stack_id or -template_warp_id)"); 849 return false; 850 } 851 852 psString input_stack_id = psMetadataLookupStr(&status, config->args, "-input_stack_id"); 853 if (!status) { 854 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -input_stack_id"); 855 return false; 856 } 857 psString input_warp_id = psMetadataLookupStr(&status, config->args, "-input_warp_id"); 858 if (!status) { 859 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -input_warp_id"); 860 return false; 861 } 862 if (input_stack_id && input_warp_id) { 863 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one input can be defined."); 864 return false; 865 } 866 if (!input_stack_id && !input_warp_id) { 867 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 868 "No input has been defined (-input_stack_id or -input_warp_id)"); 869 return false; 870 } 871 872 psString kind = NULL; 873 874 psTime *registered = NULL; 875 { 876 psString registeredStr = psMetadataLookupStr(&status, config->args, "-registered"); 877 if (!status) { 878 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -registered"); 879 return false; 880 } 881 // pass through NULL as this is an optional field 882 if (registeredStr) { 883 registered = psTimeFromISO(registeredStr, PS_TIME_UTC); 884 } else { 885 registered = NULL; 886 } 887 } 888 889 bool simple = false; 890 { 891 bool status = false; 892 simple = psMetadataLookupBool(&status, config->args, "-simple"); 893 if (!status) { 894 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple"); 895 return false; 896 } 897 } 898 899 diffRunRow *run = diffRunRowAlloc( 900 0, // ID 901 "reg", // state 902 workdir, 903 NULL, // dvodb 904 registered, 905 skycell_id, 906 tess_id 907 ); 908 psFree(registered); 909 910 if (!run) { 911 psError(PS_ERR_UNKNOWN, false, "failed to alloc diffRun object"); 912 return true; 913 } 914 915 916 if (!psDBTransaction(config->dbh)) { 917 psError(PS_ERR_UNKNOWN, false, "database error"); 918 return false; 919 } 920 921 if (!diffRunInsertObject(config->dbh, run)) { 922 psError(PS_ERR_UNKNOWN, false, "database error"); 923 psFree(run); 924 return true; 925 } 926 927 // get the assigned diff_id 928 run->diff_id = psDBLastInsertID(config->dbh); 929 930 // Template 931 if (!diffInputSkyfileInsert(config->dbh, 932 run->diff_id, 933 true, 934 template_stack_id ? (psS64)atoll(template_stack_id) : PS_MAX_S64, // defined or NULL 935 template_warp_id ? (psS64)atoll(template_warp_id) : PS_MAX_S64, // defined or NULL 936 skycell_id, 937 tess_id, 938 kind 939 )) { 940 if (!psDBRollback(config->dbh)) { 941 psError(PS_ERR_UNKNOWN, false, "database error"); 942 } 943 psError(PS_ERR_UNKNOWN, false, "database error"); 944 return false; 945 } 946 947 // Input 948 if (!diffInputSkyfileInsert(config->dbh, 949 run->diff_id, 950 false, 951 input_stack_id ? (psS64)atoll(input_stack_id) : PS_MAX_S64, // defined or NULL 952 input_warp_id ? (psS64)atoll(input_warp_id) : PS_MAX_S64, // defined or NULL 953 skycell_id, 954 tess_id, 955 kind 956 )) { 957 if (!psDBRollback(config->dbh)) { 958 psError(PS_ERR_UNKNOWN, false, "database error"); 959 } 960 psError(PS_ERR_UNKNOWN, false, "database error"); 961 return false; 962 } 963 964 char *query = "UPDATE diffRun SET state = 'run' WHERE diff_id = '%" PRId64 "'"; 965 if (!p_psDBRunQuery(config->dbh, query, run->diff_id)) { 966 if (!psDBRollback(config->dbh)) { 967 psError(PS_ERR_UNKNOWN, false, "database error"); 968 } 969 psError(PS_ERR_UNKNOWN, false, 970 "failed to set state to run for diff_id %" PRId64, run->diff_id); 971 return false; 972 } 973 974 // point of no return 975 if (!psDBCommit(config->dbh)) { 976 psError(PS_ERR_UNKNOWN, false, "database error"); 977 return false; 978 } 979 980 if (!diffRunPrintObject(stdout, run, !simple)) { 981 psError(PS_ERR_UNKNOWN, false, "failed to print object"); 982 psFree(run); 983 return false; 984 } 985 986 psFree(run); 987 988 return true; 989 }
Note:
See TracChangeset
for help on using the changeset viewer.
