home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume27 / aegis-2.1 / part16 < prev    next >
Encoding:
Text File  |  1993-09-24  |  104.3 KB  |  4,257 lines

  1. Newsgroups: comp.sources.unix
  2. From: pmiller@bmr.gov.au (Peter Miller)
  3. Subject: v27i051: aegis - project change supervisor (V2.1), Part16/19
  4. References: <1.748951883.12788@gw.home.vix.com>
  5. Sender: unix-sources-moderator@gw.home.vix.com
  6. Approved: vixie@gw.home.vix.com
  7.  
  8. Submitted-By: pmiller@bmr.gov.au (Peter Miller)
  9. Posting-Number: Volume 27, Issue 51
  10. Archive-Name: aegis-2.1/part16
  11.  
  12. #! /bin/sh
  13. # This is a shell archive.  Remove anything before this line, then unpack
  14. # it by saving it into a file and typing "sh file".  To overwrite existing
  15. # files, type "sh file -c".  You can also feed this as standard input via
  16. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  17. # will see the following message at the end:
  18. #        "End of archive 16 (of 19)."
  19. # Contents:  aegis/change.c aux/CHANGES.2.0
  20. # Wrapped by vixie@gw.home.vix.com on Sat Sep 25 03:00:53 1993
  21. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  22. if test -f 'aegis/change.c' -a "${1}" != "-c" ; then 
  23.   echo shar: Will not clobber existing file \"'aegis/change.c'\"
  24. else
  25. echo shar: Extracting \"'aegis/change.c'\" \(47426 characters\)
  26. sed "s/^X//" >'aegis/change.c' <<'END_OF_FILE'
  27. X/*
  28. X *    aegis - project change supervisor
  29. X *    Copyright (C) 1991, 1992, 1993 Peter Miller.
  30. X *    All rights reserved.
  31. X *
  32. X *    This program is free software; you can redistribute it and/or modify
  33. X *    it under the terms of the GNU General Public License as published by
  34. X *    the Free Software Foundation; either version 2 of the License, or
  35. X *    (at your option) any later version.
  36. X *
  37. X *    This program is distributed in the hope that it will be useful,
  38. X *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  39. X *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  40. X *    GNU General Public License for more details.
  41. X *
  42. X *    You should have received a copy of the GNU General Public License
  43. X *    along with this program; if not, write to the Free Software
  44. X *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  45. X *
  46. X * MANIFEST: functions to manipulate change state data
  47. X */
  48. X
  49. X#include <string.h>
  50. X#include <stdlib.h>
  51. X#include <time.h>
  52. X#include <stdio.h>
  53. X
  54. X#include <change.h>
  55. X#include <commit.h>
  56. X#include <error.h>
  57. X#include <lock.h>
  58. X#include <mem.h>
  59. X#include <option.h>
  60. X#include <os.h>
  61. X#include <project.h>
  62. X#include <s-v-arg.h>
  63. X#include <sub.h>
  64. X#include <trace.h>
  65. X#include <undo.h>
  66. X#include <user.h>
  67. X#include <word.h>
  68. X
  69. X
  70. Xchange_ty *
  71. Xchange_alloc(pp, number)
  72. X    project_ty    *pp;
  73. X    long        number;
  74. X{
  75. X    change_ty    *cp;
  76. X
  77. X    trace(("change_alloc(pp = %08lX, number = %ld)\n{\n"/*}*/, pp, number));
  78. X    assert(number >= 1);
  79. X    cp = (change_ty *)mem_alloc_clear(sizeof(change_ty));
  80. X    cp->reference_count = 1;
  81. X    cp->pp = project_copy(pp);
  82. X    cp->number = number;
  83. X    cp->filename = project_change_path_get(pp, number);
  84. X    trace(("return %08lX;\n", cp));
  85. X    trace((/*{*/"}\n"));
  86. X    return cp;
  87. X}
  88. X
  89. X
  90. Xvoid
  91. Xchange_free(cp)
  92. X    change_ty    *cp;
  93. X{
  94. X    trace(("change_free(cp = %08lX)\n{\n"/*}*/, cp));
  95. X    assert(cp->reference_count >= 1);
  96. X    cp->reference_count--;
  97. X    if (cp->reference_count <= 0)
  98. X    {
  99. X        assert(cp->pp);
  100. X        project_free(cp->pp);
  101. X        assert(cp->filename);
  102. X        str_free(cp->filename);
  103. X        if (cp->cstate_data)
  104. X            cstate_type.free(cp->cstate_data);
  105. X        if (cp->development_directory)
  106. X            str_free(cp->development_directory);
  107. X        if (cp->integration_directory)
  108. X            str_free(cp->integration_directory);
  109. X        if (cp->logfile)
  110. X            str_free(cp->logfile);
  111. X        if (cp->pconf_path)
  112. X            str_free(cp->pconf_path);
  113. X        if (cp->pconf_data)
  114. X            pconf_type.free(cp->pconf_data);
  115. X        mem_free((char *)cp);
  116. X    }
  117. X    trace((/*{*/"}\n"));
  118. X}
  119. X
  120. X
  121. Xchange_ty *
  122. Xchange_copy(cp)
  123. X    change_ty    *cp;
  124. X{
  125. X    trace(("change_copy(cp = %08lX)\n{\n"/*}*/, cp));
  126. X    assert(cp->reference_count >= 1);
  127. X    cp->reference_count++;
  128. X    trace(("return %08lX;\n", cp));
  129. X    trace((/*{*/"}\n"));
  130. X    return cp;
  131. X}
  132. X
  133. X
  134. Xstatic void improve _((cstate));
  135. X
  136. Xstatic void
  137. Ximprove(d)
  138. X    cstate        d;
  139. X{
  140. X    trace(("improve(d = %08lX)\n{\n"/*}*/, (long)d));
  141. X    if (!d->history)
  142. X        d->history =
  143. X            (cstate_history_list)
  144. X            cstate_history_list_type.alloc();
  145. X    if (!d->src)
  146. X        d->src =
  147. X            (cstate_src_list)
  148. X            cstate_src_list_type.alloc();
  149. X    if (!(d->mask & cstate_regression_test_exempt_mask))
  150. X    {
  151. X        d->regression_test_exempt =
  152. X            (
  153. X                d->cause != change_cause_internal_improvement
  154. X            &&
  155. X                d->cause != change_cause_external_improvement
  156. X            );
  157. X    }
  158. X    trace((/*{*/"}\n"));
  159. X}
  160. X
  161. X
  162. Xstatic void lock_sync _((change_ty *));
  163. X
  164. Xstatic void
  165. Xlock_sync(cp)
  166. X    change_ty    *cp;
  167. X{
  168. X    long        n;
  169. X
  170. X    n = lock_magic();
  171. X    if (cp->lock_magic == n)
  172. X        return;
  173. X    cp->lock_magic = n;
  174. X
  175. X    if (cp->cstate_data && !cp->is_a_new_file)
  176. X    {
  177. X        cstate_type.free(cp->cstate_data);
  178. X        cp->cstate_data = 0;
  179. X    }
  180. X    if (cp->pconf_path)
  181. X    {
  182. X        str_free(cp->pconf_path);
  183. X        cp->pconf_data = 0;
  184. X    }
  185. X}
  186. X
  187. X
  188. Xcstate
  189. Xchange_cstate_get(cp)
  190. X    change_ty    *cp;
  191. X{
  192. X    trace(("change_cstate_get(cp = %08lX)\n{\n"/*}*/, cp));
  193. X    lock_sync(cp);
  194. X    if (!cp->cstate_data)
  195. X    {
  196. X        assert(cp->filename);
  197. X        change_become(cp);
  198. X        cp->cstate_data = cstate_read_file(cp->filename->str_text);
  199. X        change_become_undo();
  200. X        if (!cp->cstate_data->brief_description)
  201. X        {
  202. X            change_fatal
  203. X            (
  204. X                cp,
  205. X                "%S: corrupted brief_description field",
  206. X                cp->filename
  207. X            );
  208. X        }
  209. X        if (!cp->cstate_data->description)
  210. X        {
  211. X            change_fatal
  212. X            (
  213. X                cp,
  214. X                "%S: corrupted description field",
  215. X                cp->filename
  216. X            );
  217. X        }
  218. X        if (!(cp->cstate_data->mask & cstate_state_mask))
  219. X        {
  220. X            change_fatal
  221. X            (
  222. X                cp,
  223. X                "%S: corrupted state field",
  224. X                cp->filename
  225. X            );
  226. X        }
  227. X        if
  228. X        (
  229. X            cp->cstate_data->state >= cstate_state_being_developed
  230. X        &&
  231. X            cp->cstate_data->state <= cstate_state_being_integrated
  232. X        &&
  233. X            !cp->cstate_data->development_directory
  234. X        )
  235. X        {
  236. X            change_fatal
  237. X            (
  238. X                cp,
  239. X                "%S: no development_directory field",
  240. X                cp->filename
  241. X            );
  242. X        }
  243. X        if
  244. X        (
  245. X            cp->cstate_data->state == cstate_state_being_integrated
  246. X        &&
  247. X            !cp->cstate_data->integration_directory
  248. X        )
  249. X        {
  250. X            change_fatal
  251. X            (
  252. X                cp,
  253. X                "%S: no integration_directory field",
  254. X                cp->filename
  255. X            );
  256. X        }
  257. X        if
  258. X        (
  259. X            cp->cstate_data->state == cstate_state_completed
  260. X        &&
  261. X            !cp->cstate_data->delta_number
  262. X        )
  263. X        {
  264. X            change_fatal
  265. X            (
  266. X                cp,
  267. X                "%S: no delta_number field",
  268. X                cp->filename
  269. X            );
  270. X        }
  271. X        improve(cp->cstate_data);
  272. X        if (cp->cstate_data->state == cstate_state_completed)
  273. X        {
  274. X            long    j;
  275. X
  276. X            for (j = 0; j < cp->cstate_data->src->length; ++j)
  277. X            {
  278. X                static long mask =
  279. X                    (
  280. X                        cstate_src_file_name_mask
  281. X                    |
  282. X                        cstate_src_action_mask
  283. X                    |
  284. X                        cstate_src_edit_number_mask
  285. X                    |
  286. X                        cstate_src_usage_mask
  287. X                    );
  288. X
  289. X                if ((cp->cstate_data->src->list[j]->mask & mask) != mask)
  290. X                {
  291. X                    change_fatal
  292. X                    (
  293. X                        cp,
  294. X                        "%S: corrupted src field",
  295. X                        cp->filename
  296. X                    );
  297. X                }
  298. X            }
  299. X        }
  300. X    }
  301. X    trace(("return %08lX;\n", cp->cstate_data));
  302. X    trace((/*{*/"}\n"));
  303. X    return cp->cstate_data;
  304. X}
  305. X
  306. X
  307. Xvoid
  308. Xchange_bind_new(cp)
  309. X    change_ty    *cp;
  310. X{
  311. X    trace(("change_bind_new(cp = %08lX)\n{\n"/*}*/, cp));
  312. X    assert(!cp->cstate_data);
  313. X    cp->is_a_new_file = 1;
  314. X    cp->cstate_data = (cstate)cstate_type.alloc();
  315. X    improve(cp->cstate_data);
  316. X    trace((/*{*/"}\n"));
  317. X}
  318. X
  319. X
  320. Xstatic int src_cmp _((const void *, const void *));
  321. X
  322. Xstatic int
  323. Xsrc_cmp(s1p, s2p)
  324. X    const void    *s1p;
  325. X    const void    *s2p;
  326. X{
  327. X    cstate_src    s1;
  328. X    cstate_src    s2;
  329. X
  330. X    s1 = *(cstate_src *)s1p;
  331. X    s2 = *(cstate_src *)s2p;
  332. X    return strcmp(s1->file_name->str_text, s2->file_name->str_text);
  333. X}
  334. X
  335. X
  336. Xvoid
  337. Xchange_cstate_write(cp)
  338. X    change_ty    *cp;
  339. X{
  340. X    string_ty    *filename_new;
  341. X    string_ty    *filename_old;
  342. X    pstate        pstate_data;
  343. X    static int    count;
  344. X
  345. X    trace(("change_cstate_write(cp = %08lX)\n{\n"/*}*/, cp));
  346. X    assert(cp->pp);
  347. X    assert(cp->cstate_data);
  348. X    assert(cp->filename);
  349. X    if (!cp->cstate_data->brief_description)
  350. X        cp->cstate_data->brief_description = str_from_c("");
  351. X    if (!cp->cstate_data->description)
  352. X        cp->cstate_data->description =
  353. X            str_copy(cp->cstate_data->brief_description);
  354. X
  355. X    /*
  356. X     * sort the files by name
  357. X     */
  358. X    assert(cp->cstate_data->src);
  359. X    if (cp->cstate_data->src->length >= 2)
  360. X    {
  361. X        assert(cp->cstate_data->src->list);
  362. X        qsort
  363. X        (
  364. X            cp->cstate_data->src->list,
  365. X            cp->cstate_data->src->length,
  366. X            sizeof(*cp->cstate_data->src->list),
  367. X            src_cmp
  368. X        );
  369. X    }
  370. X
  371. X    /*
  372. X     * write out the file
  373. X     */
  374. X    pstate_data = project_pstate_get(cp->pp);
  375. X    filename_new = str_format("%S,%d", cp->filename, ++count);
  376. X    filename_old = str_format("%S,%d", cp->filename, ++count);
  377. X    change_become(cp);
  378. X    if (cp->is_a_new_file)
  379. X    {
  380. X        string_ty    *s1;
  381. X        string_ty    *s2;
  382. X
  383. X        s1 = project_home_path_get(cp->pp);
  384. X        s2 = os_below_dir(s1, cp->filename);
  385. X        os_mkdir_between(s1, s2, 02755);
  386. X        str_free(s2);
  387. X        undo_unlink_errok(filename_new);
  388. X        cstate_write_file(filename_new->str_text, cp->cstate_data);
  389. X        commit_rename(filename_new, cp->filename);
  390. X    }
  391. X    else
  392. X    {
  393. X        undo_unlink_errok(filename_new);
  394. X        cstate_write_file(filename_new->str_text, cp->cstate_data);
  395. X        commit_rename(cp->filename, filename_old);
  396. X        commit_rename(filename_new, cp->filename);
  397. X        commit_unlink_errok(filename_old);
  398. X    }
  399. X
  400. X    /*
  401. X     * Change the file mode as appropriate.
  402. X     * (Only need to do this for new files, but be paranoid.)
  403. X     */
  404. X    os_chmod(filename_new, 0644 & ~change_umask(cp));
  405. X    change_become_undo();
  406. X    str_free(filename_new);
  407. X    str_free(filename_old);
  408. X    trace((/*{*/"}\n"));
  409. X}
  410. X
  411. X
  412. Xcstate_src
  413. Xchange_src_find(cp, file_name)
  414. X    change_ty    *cp;
  415. X    string_ty    *file_name;
  416. X{
  417. X    cstate        cstate_data;
  418. X    int        j;
  419. X    cstate_src    result;
  420. X
  421. X    trace(("change_src_find(cp = %08lX, file_name = \"%s\")\n{\n"/*}*/, cp, file_name->str_text));
  422. X    cstate_data = change_cstate_get(cp);
  423. X    assert(cstate_data->src);
  424. X    result = 0;
  425. X    for (j = 0; j < cstate_data->src->length; ++j)
  426. X    {
  427. X        cstate_src    src_data;
  428. X
  429. X        src_data = cstate_data->src->list[j];
  430. X        if (str_equal(src_data->file_name, file_name))
  431. X        {
  432. X            result = src_data;
  433. X            break;
  434. X        }
  435. X    }
  436. X    trace(("return %08lX;\n", result));
  437. X    trace((/*{*/"}\n"));
  438. X    return result;
  439. X}
  440. X
  441. X
  442. Xvoid
  443. Xchange_src_remove(cp, file_name)
  444. X    change_ty    *cp;
  445. X    string_ty    *file_name;
  446. X{
  447. X    cstate        cstate_data;
  448. X    int        j;
  449. X    cstate_src    src_data;
  450. X
  451. X    trace(("change_src_remove(cp = %08lX, file_name = \"%s\")\n{\n"/*}*/, cp, file_name->str_text));
  452. X    cstate_data = change_cstate_get(cp);
  453. X    assert(cstate_data->src);
  454. X    for (j = 0; j < cstate_data->src->length; ++j)
  455. X    {
  456. X        src_data = cstate_data->src->list[j];
  457. X        if (!str_equal(src_data->file_name, file_name))
  458. X            continue;
  459. X        cstate_src_type.free(src_data);
  460. X        cstate_data->src->list[j] =
  461. X            cstate_data->src->list[--cstate_data->src->length];
  462. X        break;
  463. X    }
  464. X    trace((/*{*/"}\n"));
  465. X}
  466. X
  467. X
  468. Xcstate_src
  469. Xchange_src_new(cp)
  470. X    change_ty    *cp;
  471. X{
  472. X    cstate        cstate_data;
  473. X    cstate_src    src_data;
  474. X    cstate_src    *src_data_p;
  475. X    type_ty        *type_p;
  476. X
  477. X    trace(("change_src_new(cp = %08lX)\n{\n"/*}*/, cp));
  478. X    cstate_data = change_cstate_get(cp);
  479. X    assert(cstate_data->src);
  480. X    cstate_src_list_type.list_parse
  481. X    (
  482. X        cstate_data->src,
  483. X        &type_p,
  484. X        (void **)&src_data_p
  485. X    );
  486. X    src_data = (cstate_src)cstate_src_type.alloc();
  487. X    *src_data_p = src_data;
  488. X    trace(("return %08lX;\n", src_data));
  489. X    trace((/*{*/"}\n"));
  490. X    return src_data;
  491. X}
  492. X
  493. X
  494. Xcstate_history
  495. Xchange_history_new(cp, up)
  496. X    change_ty    *cp;
  497. X    user_ty        *up;
  498. X{
  499. X    cstate        cstate_data;
  500. X    cstate_history    history_data;
  501. X    cstate_history    *history_data_p;
  502. X    type_ty        *type_p;
  503. X
  504. X    trace(("change_history_new(cp = %08lX)\n{\n"/*}*/, cp));
  505. X    cstate_data = change_cstate_get(cp);
  506. X    assert(cstate_data->history);
  507. X    cstate_history_list_type.list_parse
  508. X    (
  509. X        cstate_data->history,
  510. X        &type_p,
  511. X        (void **)&history_data_p
  512. X    );
  513. X    history_data = (cstate_history)cstate_history_type.alloc();
  514. X    *history_data_p = history_data;
  515. X    time(&history_data->when);
  516. X    history_data->who = str_copy(user_name(up));
  517. X    trace(("return %08lX;\n", history_data));
  518. X    trace((/*{*/"}\n"));
  519. X    return history_data;
  520. X}
  521. X
  522. X
  523. Xstring_ty *
  524. Xchange_developer_name(cp)
  525. X    change_ty    *cp;
  526. X{
  527. X    cstate        cstate_data;
  528. X    cstate_history    history_data;
  529. X    long        pos;
  530. X
  531. X    trace(("change_developer_name(cp = %08lX)\n{\n"/*}*/, cp));
  532. X    cstate_data = change_cstate_get(cp);
  533. X    assert(cstate_data->history);
  534. X    history_data = 0;
  535. X    for (pos = cstate_data->history->length - 1; pos >= 0 ; --pos)
  536. X    {
  537. X        history_data = cstate_data->history->list[pos];
  538. X        switch (history_data->what)
  539. X        {
  540. X        default:
  541. X            history_data = 0;
  542. X            continue;
  543. X
  544. X        case cstate_history_what_develop_begin:
  545. X        case cstate_history_what_develop_begin_undo:
  546. X        case cstate_history_what_develop_end:
  547. X        case cstate_history_what_develop_end_undo:
  548. X            break;
  549. X        }
  550. X        break;
  551. X    }
  552. X    trace(("return \"%s\";\n",
  553. X        history_data ? history_data->who->str_text : ""));
  554. X    trace((/*{*/"}\n"));
  555. X    return (history_data ? history_data->who : 0);
  556. X}
  557. X
  558. X
  559. Xstring_ty *
  560. Xchange_reviewer_name(cp)
  561. X    change_ty    *cp;
  562. X{
  563. X    cstate        cstate_data;
  564. X    cstate_history    history_data;
  565. X    long        pos;
  566. X
  567. X    trace(("change_reviewer_name(cp = %08lX)\n{\n"/*}*/, cp));
  568. X    cstate_data = change_cstate_get(cp);
  569. X    assert(cstate_data->history);
  570. X    assert(cstate_data->state >= cstate_state_awaiting_integration);
  571. X    history_data = 0;
  572. X    for (pos = cstate_data->history->length - 1; pos >= 0 ; --pos)
  573. X    {
  574. X        history_data = cstate_data->history->list[pos];
  575. X        switch (history_data->what)
  576. X        {
  577. X        default:
  578. X            history_data = 0;
  579. X            continue;
  580. X
  581. X        case cstate_history_what_review_pass:
  582. X        case cstate_history_what_review_pass_undo:
  583. X            break;
  584. X        }
  585. X        break;
  586. X    }
  587. X    trace(("return \"%s\";\n",
  588. X        history_data ? history_data->who->str_text : ""));
  589. X    trace((/*{*/"}\n"));
  590. X    return (history_data ? history_data->who : 0);
  591. X}
  592. X
  593. X
  594. Xstring_ty *
  595. Xchange_integrator_name(cp)
  596. X    change_ty    *cp;
  597. X{
  598. X    cstate        cstate_data;
  599. X    cstate_history    history_data;
  600. X    long        pos;
  601. X
  602. X    trace(("change_integrator_name(cp = %08lX)\n{\n"/*}*/, cp));
  603. X    cstate_data = change_cstate_get(cp);
  604. X    assert(cstate_data->history);
  605. X    history_data = 0;
  606. X    for (pos = cstate_data->history->length - 1; pos >= 0 ; --pos)
  607. X    {
  608. X        history_data = cstate_data->history->list[pos];
  609. X        switch (history_data->what)
  610. X        {
  611. X        default:
  612. X            history_data = 0;
  613. X            continue;
  614. X
  615. X        case cstate_history_what_integrate_pass:
  616. X        case cstate_history_what_integrate_fail:
  617. X        case cstate_history_what_integrate_begin:
  618. X        case cstate_history_what_integrate_begin_undo:
  619. X            break;
  620. X        }
  621. X        break;
  622. X    }
  623. X    trace(("return \"%s\";\n",
  624. X        history_data ? history_data->who->str_text : ""));
  625. X    trace((/*{*/"}\n"));
  626. X    return (history_data ? history_data->who : 0);
  627. X}
  628. X
  629. X
  630. Xvoid
  631. Xchange_bind_existing(cp)
  632. X    change_ty    *cp;
  633. X{
  634. X    pstate        pstate_data;
  635. X    int        j;
  636. X
  637. X    /*
  638. X     * verify the change number given on the command line
  639. X     */
  640. X    trace(("change_bind_existing(cp = %08lX)\n{\n"/*}*/, cp));
  641. X    pstate_data = project_pstate_get(cp->pp);
  642. X    assert(!cp->cstate_data);
  643. X    assert(pstate_data->change);
  644. X    for (j = 0; j < pstate_data->change->length; ++j)
  645. X    {
  646. X        if (pstate_data->change->list[j] == cp->number)
  647. X            break;
  648. X    }
  649. X    if (j >= pstate_data->change->length)
  650. X        change_fatal(cp, "unknown");
  651. X    trace((/*{*/"}\n"));
  652. X}
  653. X
  654. X
  655. Xvoid
  656. Xchange_development_directory_set(cp, s)
  657. X    change_ty    *cp;
  658. X    string_ty    *s;
  659. X{
  660. X    cstate        cstate_data;
  661. X
  662. X    /*
  663. X     * To cope with automounters, directories are stored as given,
  664. X     * or are derived from the home directory in the passwd file.
  665. X     * Within aegis, pathnames have their symbolic links resolved,
  666. X     * and any comparison of paths is done on this "system idea"
  667. X     * of the pathname.
  668. X     */
  669. X    trace(("change_development_directory_set(cp = %08lX, s = \"%s\")\n{\n"/*}*/, cp, s->str_text));
  670. X    if (cp->development_directory)
  671. X        fatal("duplicate -DIRectory option");
  672. X    assert(s->str_text[0] == '/');
  673. X    change_become(cp);
  674. X    cp->development_directory = os_pathname(s, 1);
  675. X    change_become_undo();
  676. X    cstate_data = change_cstate_get(cp);
  677. X    if (!cstate_data->development_directory)
  678. X        cstate_data->development_directory = str_copy(s);
  679. X    trace((/*{*/"}\n"));
  680. X}
  681. X
  682. X
  683. Xstring_ty *
  684. Xchange_development_directory_get(cp, resolve)
  685. X    change_ty    *cp;
  686. X    int        resolve;
  687. X{
  688. X    string_ty    *result;
  689. X    cstate        cstate_data;
  690. X
  691. X    /*
  692. X     * To cope with automounters, directories are stored as given,
  693. X     * or are derived from the home directory in the passwd file.
  694. X     * Within aegis, pathnames have their symbolic links resolved,
  695. X     * and any comparison of paths is done on this "system idea"
  696. X     * of the pathname.
  697. X     */
  698. X    trace(("change_development_directory_get(cp = %08lX)\n{\n"/*}*/, cp));
  699. X    if (!resolve)
  700. X    {
  701. X        cstate_data = change_cstate_get(cp);
  702. X        result = cstate_data->development_directory;
  703. X    }
  704. X    else
  705. X    {
  706. X        if (!cp->development_directory)
  707. X        {
  708. X            cstate_data = change_cstate_get(cp);
  709. X            if (!cstate_data->development_directory)
  710. X            {
  711. X                change_fatal
  712. X                (
  713. X                    cp,
  714. X        "this change is in the %s state, there is no development directory",
  715. X                    cstate_state_ename(cstate_data->state)
  716. X                );
  717. X            }
  718. X            change_become(cp);
  719. X            cp->development_directory =
  720. X                os_pathname
  721. X                (
  722. X                    cstate_data->development_directory,
  723. X                    1
  724. X                );
  725. X            change_become_undo();
  726. X        }
  727. X        result = cp->development_directory;
  728. X    }
  729. X    trace_string(result->str_text);
  730. X    trace((/*{*/"}\n"));
  731. X    return result;
  732. X}
  733. X
  734. X
  735. Xvoid
  736. Xchange_integration_directory_set(cp, s)
  737. X    change_ty    *cp;
  738. X    string_ty    *s;
  739. X{
  740. X    cstate        cstate_data;
  741. X
  742. X    /*
  743. X     * To cope with automounters, directories are stored as given,
  744. X     * or are derived from the home directory in the passwd file.
  745. X     * Within aegis, pathnames have their symbolic links resolved,
  746. X     * and any comparison of paths is done on this "system idea"
  747. X     * of the pathname.
  748. X     */
  749. X    trace(("change_integration_directory_set(cp = %08lX, s = \"%s\")\n{\n"/*}*/, cp, s->str_text));
  750. X    if (cp->integration_directory)
  751. X        fatal("duplicate -DIRectory option");
  752. X    change_become(cp);
  753. X    cp->integration_directory = os_pathname(s, 1);
  754. X    change_become_undo();
  755. X    cstate_data = change_cstate_get(cp);
  756. X    if (!cstate_data->integration_directory)
  757. X        cstate_data->integration_directory = str_copy(s);
  758. X    trace((/*{*/"}\n"));
  759. X}
  760. X
  761. X
  762. Xstring_ty *
  763. Xchange_integration_directory_get(cp, resolve)
  764. X    change_ty    *cp;
  765. X    int        resolve;
  766. X{
  767. X    string_ty    *result;
  768. X    cstate        cstate_data;
  769. X
  770. X    /*
  771. X     * To cope with automounters, directories are stored as given,
  772. X     * or are derived from the home directory in the passwd file.
  773. X     * Within aegis, pathnames have their symbolic links resolved,
  774. X     * and any comparison of paths is done on this "system idea"
  775. X     * of the pathname.
  776. X     */
  777. X    trace(("change_integration_directory_get(cp = %08lX)\n{\n"/*}*/, cp));
  778. X    if (!resolve)
  779. X    {
  780. X        cstate_data = change_cstate_get(cp);
  781. X        result = cstate_data->integration_directory;
  782. X    }
  783. X    else
  784. X    {
  785. X        if (!cp->integration_directory)
  786. X        {
  787. X            cstate_data = change_cstate_get(cp);
  788. X            if (!cstate_data->integration_directory)
  789. X            {
  790. X                change_fatal
  791. X                (
  792. X                    cp,
  793. X        "this change is in the %s state, there is no integration directory",
  794. X                    cstate_state_ename(cstate_data->state)
  795. X                );
  796. X            }
  797. X            change_become(cp);
  798. X            cp->integration_directory =
  799. X                os_pathname
  800. X                (
  801. X                    cstate_data->integration_directory,
  802. X                    1
  803. X                );
  804. X            change_become_undo();
  805. X        }
  806. X        result = cp->integration_directory;
  807. X    }
  808. X    trace_string(result->str_text);
  809. X    trace((/*{*/"}\n"));
  810. X    return result;
  811. X}
  812. X
  813. X
  814. Xstring_ty *
  815. Xchange_logfile_get(cp)
  816. X    change_ty    *cp;
  817. X{
  818. X    string_ty    *s1;
  819. X    cstate        cstate_data;
  820. X
  821. X    trace(("change_logfile_get(cp = %08lX)\n{\n"/*}*/, cp));
  822. X    if (!cp->logfile)
  823. X    {
  824. X        cstate_data = change_cstate_get(cp);
  825. X        switch (cstate_data->state)
  826. X        {
  827. X        default:
  828. X            change_fatal(cp, "no log file");
  829. X    
  830. X        case cstate_state_being_integrated:
  831. X            s1 = change_integration_directory_get(cp, 0);
  832. X            break;
  833. X    
  834. X        case cstate_state_being_developed:
  835. X            s1 = change_development_directory_get(cp, 0);
  836. X            break;
  837. X        }
  838. X    
  839. X        cp->logfile =
  840. X            str_format("%S/%s.log", s1, option_progname_get());
  841. X    }
  842. X    trace(("return \"%s\";\n", cp->logfile->str_text));
  843. X    trace((/*{*/"}\n"));
  844. X    return cp->logfile;
  845. X}
  846. X
  847. X
  848. Xvoid
  849. Xchange_cstate_lock_prepare(cp)
  850. X    change_ty    *cp;
  851. X{
  852. X    trace(("change_cstate_lock_prepare(cp = %08lX)\n{\n"/*}*/, cp));
  853. X    lock_prepare_cstate(project_name_get(cp->pp), cp->number);
  854. X    trace((/*{*/"}\n"));
  855. X}
  856. X
  857. X
  858. Xvoid
  859. Xchange_error(cp, s sva_last)
  860. X    change_ty    *cp;
  861. X    char        *s;
  862. X    sva_last_decl
  863. X{
  864. X    va_list        ap;
  865. X    string_ty    *msg;
  866. X
  867. X    sva_init(ap, s);
  868. X    msg = str_vformat(s, ap);
  869. X    va_end(ap);
  870. X    project_error(cp->pp, "change %ld: %S", cp->number, msg);
  871. X}
  872. X
  873. X
  874. Xvoid
  875. Xchange_fatal(cp, s sva_last)
  876. X    change_ty    *cp;
  877. X    char        *s;
  878. X    sva_last_decl
  879. X{
  880. X    va_list        ap;
  881. X    string_ty    *msg;
  882. X
  883. X    sva_init(ap, s);
  884. X    msg = str_vformat(s, ap);
  885. X    va_end(ap);
  886. X    project_fatal(cp->pp, "change %ld: %S", cp->number, msg);
  887. X}
  888. X
  889. X
  890. Xvoid
  891. Xchange_verbose(cp, s sva_last)
  892. X    change_ty    *cp;
  893. X    char        *s;
  894. X    sva_last_decl
  895. X{
  896. X    va_list        ap;
  897. X    string_ty    *msg;
  898. X
  899. X    sva_init(ap, s);
  900. X    msg = str_vformat(s, ap);
  901. X    va_end(ap);
  902. X    project_verbose(cp->pp, "change %ld: %S", cp->number, msg);
  903. X}
  904. X
  905. X
  906. Xstring_ty *
  907. Xchange_pconf_path_get(cp)
  908. X    change_ty    *cp;
  909. X{
  910. X    cstate        cstate_data;
  911. X    pstate_src    p_src_data;
  912. X    cstate_src    c_src_data;
  913. X    static string_ty *file_name;
  914. X
  915. X    trace(("change_pconf_path_get(cp = %08lX)\n{\n"/*}*/, cp));
  916. X    if (cp->pconf_path)
  917. X        goto ret;
  918. X    if (!file_name)
  919. X        file_name = str_from_c(THE_CONFIG_FILE);
  920. X    cstate_data = change_cstate_get(cp);
  921. X    assert(cstate_data->src);
  922. X    switch (cstate_data->state)
  923. X    {
  924. X    case cstate_state_being_integrated:
  925. X        cp->pconf_path =
  926. X            str_format
  927. X            (
  928. X                "%S/%S",
  929. X                change_integration_directory_get(cp, 1),
  930. X                file_name
  931. X            );
  932. X        goto ret;
  933. X
  934. X    case cstate_state_being_developed:
  935. X    case cstate_state_being_reviewed:
  936. X    case cstate_state_awaiting_integration:
  937. X        break;
  938. X
  939. X    default:
  940. X        change_fatal
  941. X        (
  942. X            cp,
  943. X            "hunting '%S' file from weird state (bug)",
  944. X            file_name
  945. X        );
  946. X    }
  947. X    c_src_data = change_src_find(cp, file_name);
  948. X    if (c_src_data || cp->number == 1)
  949. X    {
  950. X        cp->pconf_path =
  951. X            str_format
  952. X            (
  953. X                "%S/%S",
  954. X                change_development_directory_get(cp, 1),
  955. X                file_name
  956. X            );
  957. X        goto ret;
  958. X    }
  959. X    p_src_data = project_src_find(cp->pp, file_name);
  960. X    if (p_src_data)
  961. X    {
  962. X        cp->pconf_path =
  963. X            str_format
  964. X            (
  965. X                "%S/%S",
  966. X                project_baseline_path_get(cp->pp, 1),
  967. X                file_name
  968. X            );
  969. X        goto ret;
  970. X    }
  971. X    change_fatal(cp, "has no '%S' file (bug)", file_name);
  972. X    ret:
  973. X    trace(("return \"%s\";\n", cp->pconf_path->str_text));
  974. X    trace((/*{*/"}\n"));
  975. X    return cp->pconf_path;
  976. X}
  977. X
  978. X
  979. Xpconf
  980. Xchange_pconf_get(cp)
  981. X    change_ty    *cp;
  982. X{
  983. X    trace(("change_pconf_get(cp = %08lX)\n{\n"/*}*/, cp));
  984. X    lock_sync(cp);
  985. X    if (!cp->pconf_data)
  986. X    {
  987. X        string_ty    *filename;
  988. X
  989. X        filename = change_pconf_path_get(cp);
  990. X        change_become(cp);
  991. X        if (!os_exists(filename))
  992. X            cp->pconf_data = (pconf)pconf_type.alloc();
  993. X        else
  994. X        {
  995. X            cp->pconf_data = pconf_read_file(filename->str_text);
  996. X            if (!cp->pconf_data->build_command)
  997. X            {
  998. X                change_fatal
  999. X                (
  1000. X                    cp,
  1001. X                    "%S: no build_command field",
  1002. X                    filename
  1003. X                );
  1004. X            }
  1005. X            if (!cp->pconf_data->development_build_command)
  1006. X                cp->pconf_data->development_build_command =
  1007. X                    str_copy(cp->pconf_data->build_command);
  1008. X            if (!cp->pconf_data->history_create_command)
  1009. X            {
  1010. X                change_fatal
  1011. X                (
  1012. X                    cp,
  1013. X                    "%S: no history_create_command field",
  1014. X                    filename
  1015. X                );
  1016. X            }
  1017. X            if (!cp->pconf_data->history_get_command)
  1018. X            {
  1019. X                change_fatal
  1020. X                (
  1021. X                    cp,
  1022. X                    "%S: no history_get_command field",
  1023. X                    filename
  1024. X                );
  1025. X            }
  1026. X            if (!cp->pconf_data->history_put_command)
  1027. X            {
  1028. X                change_fatal
  1029. X                (
  1030. X                    cp,
  1031. X                    "%S: no history_put_command field",
  1032. X                    filename
  1033. X                );
  1034. X            }
  1035. X            if (!cp->pconf_data->history_query_command)
  1036. X            {
  1037. X                change_fatal
  1038. X                (
  1039. X                    cp,
  1040. X                    "%S: no history_query_command field",
  1041. X                    filename
  1042. X                );
  1043. X            }
  1044. X            if (!cp->pconf_data->diff_command)
  1045. X            {
  1046. X                change_fatal
  1047. X                (
  1048. X                    cp,
  1049. X                    "%S: no diff_command field",
  1050. X                    filename
  1051. X                );
  1052. X            }
  1053. X            if (!cp->pconf_data->diff3_command)
  1054. X            {
  1055. X                change_fatal
  1056. X                (
  1057. X                    cp,
  1058. X                    "%S: no diff3_command field",
  1059. X                    filename
  1060. X                );
  1061. X            }
  1062. X        }
  1063. X        change_become_undo();
  1064. X    }
  1065. X    trace(("return %08lX;\n", cp->pconf_data));
  1066. X    trace((/*{*/"}\n"));
  1067. X    return cp->pconf_data;
  1068. X}
  1069. X
  1070. X
  1071. Xvoid
  1072. Xchange_run_change_file_command(cp, wlp, up)
  1073. X    change_ty    *cp;
  1074. X    wlist        *wlp;
  1075. X    user_ty        *up;
  1076. X{
  1077. X    pconf        pconf_data;
  1078. X    string_ty    *the_command;
  1079. X    string_ty    *the_files;
  1080. X    pstate        pstate_data;
  1081. X    string_ty    *dd;
  1082. X
  1083. X    trace(("change_run_change_file_command(cp = %08lX)\n{\n"/*}*/, cp));
  1084. X    pconf_data = change_pconf_get(cp);
  1085. X    if (!pconf_data->change_file_command)
  1086. X        goto ret;
  1087. X    pstate_data = project_pstate_get(cp->pp);
  1088. X
  1089. X    the_files = wl2str(wlp, 0, 32767);
  1090. X    sub_var_set("File_List", "%S", the_files);
  1091. X    str_free(the_files);
  1092. X    sub_var_set("1", "${project}");
  1093. X    sub_var_set("2", "${change}");
  1094. X    sub_var_set("3", "${version}");
  1095. X    sub_var_set("4", "${baseline}");
  1096. X    sub_var_set("5", "${file_list}");
  1097. X    the_command = pconf_data->change_file_command;
  1098. X    the_command = substitute(cp, the_command);
  1099. X    dd = change_development_directory_get(cp, 0);
  1100. X    user_become(up);
  1101. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, dd);
  1102. X    user_become_undo();
  1103. X    str_free(the_command);
  1104. X    ret:
  1105. X    trace((/*{*/"}\n"));
  1106. X}
  1107. X
  1108. X
  1109. Xvoid
  1110. Xchange_run_project_file_command(cp)
  1111. X    change_ty    *cp;
  1112. X{
  1113. X    cstate        cstate_data;
  1114. X    pconf        pconf_data;
  1115. X    string_ty    *the_command;
  1116. X    string_ty    *dd;
  1117. X
  1118. X    /*
  1119. X     * make sure are sync'ed with project
  1120. X     */
  1121. X    trace(("change_run_project_file_command(cp = %08lX)\n{\n"/*}*/, cp));
  1122. X    cstate_data = change_cstate_get(cp);
  1123. X    if
  1124. X    (
  1125. X        cstate_data->project_file_command_sync
  1126. X    ==
  1127. X        project_last_change_integrated(cp->pp)
  1128. X    )
  1129. X        goto done;
  1130. X    cstate_data->project_file_command_sync =
  1131. X        project_last_change_integrated(cp->pp);
  1132. X
  1133. X    /*
  1134. X     * make sure there is a project_file command
  1135. X     */
  1136. X    pconf_data = change_pconf_get(cp);
  1137. X    if (!pconf_data->project_file_command)
  1138. X        goto done;
  1139. X
  1140. X    /*
  1141. X     * All of the substitutions described in aesub(5) are available.
  1142. X     */
  1143. X    sub_var_set("1", "${project}");
  1144. X    sub_var_set("2", "${change}");
  1145. X    sub_var_set("3", "${version}");
  1146. X    sub_var_set("4", "${baseline}");
  1147. X    the_command = pconf_data->project_file_command;
  1148. X    the_command = substitute(cp, the_command);
  1149. X
  1150. X    /*
  1151. X     * execute the command
  1152. X     */
  1153. X    dd = change_development_directory_get(cp, 0);
  1154. X    change_become(cp);
  1155. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, dd);
  1156. X    change_become_undo();
  1157. X    str_free(the_command);
  1158. X
  1159. X    /*
  1160. X     * here for all exits
  1161. X     */
  1162. X    done:
  1163. X    trace((/*{*/"}\n"));
  1164. X}
  1165. X
  1166. X
  1167. X/*
  1168. X * NAME
  1169. X *    gmatch - match entryname pattern
  1170. X *
  1171. X * SYNOPSIS
  1172. X *    int gmatch(char *formal, char *actual);
  1173. X *
  1174. X * DESCRIPTION
  1175. X *    The formal strings is used as a template to match the given actual
  1176. X *    string against.
  1177. X *
  1178. X *    The pattern elements understood are
  1179. X *        *    match zero or more of any character
  1180. X *        ?    match any single character
  1181. X *        [^xxx]    match any single character not in the set given.
  1182. X *        [xxx]    match any single character in the set given.
  1183. X *            The - character is understood to be a range indicator.
  1184. X *            If the ] character is the first of the set it is
  1185. X *            considered as part of the set, not the terminator.
  1186. X *
  1187. X * RETURNS
  1188. X *    the gmatch function returns zero if they do not match,
  1189. X *    and nonzero if they do.  Returns -1 on error.
  1190. X *
  1191. X * CAVEAT
  1192. X *    This is a limited set of the sh(1) patterns.
  1193. X *    Assumes that the `original' global variable has been initialized,
  1194. X *    it is used for error reporting.
  1195. X */
  1196. X
  1197. Xstatic int gmatch _((char *, char *));
  1198. X
  1199. Xstatic int
  1200. Xgmatch(formal, actual)
  1201. X    char    *formal;
  1202. X    char    *actual;
  1203. X{
  1204. X    char    *cp;
  1205. X    int     result;
  1206. X
  1207. X    trace(("gmatch(formal = %08lX, actual = %08lX)\n{\n"/*}*/,
  1208. X        formal, actual));
  1209. X    while (*formal)
  1210. X    {
  1211. X        trace(("formal == \"%s\";\n", formal));
  1212. X        trace(("actual = \"%s\";\n", actual));
  1213. X        switch (*formal)
  1214. X        {
  1215. X        default:
  1216. X            if (*actual++ != *formal++)
  1217. X            {
  1218. X                result = 0;
  1219. X                goto ret;
  1220. X            }
  1221. X            break;
  1222. X
  1223. X        case '?':
  1224. X            if (!*actual++)
  1225. X            {
  1226. X                result = 0;
  1227. X                goto ret;
  1228. X            }
  1229. X            ++formal;
  1230. X            break;
  1231. X
  1232. X        case '*':
  1233. X            cp = actual + strlen(actual);
  1234. X            ++formal;
  1235. X            for (;;)
  1236. X            {
  1237. X                result = gmatch(formal, cp);
  1238. X                if (result)
  1239. X                {
  1240. X                    result = 1;
  1241. X                    goto ret;
  1242. X                }
  1243. X                --cp;
  1244. X                if (cp < actual)
  1245. X                {
  1246. X                    result = 0;
  1247. X                    goto ret;
  1248. X                }
  1249. X            }
  1250. X
  1251. X        case '['/*]*/:
  1252. X            ++formal;
  1253. X            if (*formal == '^')
  1254. X            {
  1255. X                ++formal;
  1256. X                for (;;)
  1257. X                {
  1258. X                    if (!*formal)
  1259. X                    {
  1260. X                        no_close:
  1261. X                        result = -1;
  1262. X                        goto ret;
  1263. X                    }
  1264. X
  1265. X                    /*
  1266. X                     * note: this allows leading close
  1267. X                     * square bracket elegantly
  1268. X                     */
  1269. X                    if
  1270. X                    (
  1271. X                        formal[1] == '-'
  1272. X                    &&
  1273. X                        formal[2]
  1274. X                    &&
  1275. X                        formal[2] != /*[*/']'
  1276. X                    &&
  1277. X                        formal[3]
  1278. X                    )
  1279. X                    {
  1280. X                        char    c1;
  1281. X                        char    c2;
  1282. X
  1283. X                        c1 = formal[0];
  1284. X                        c2 = formal[2];
  1285. X                        formal += 3;
  1286. X                        if
  1287. X                        (
  1288. X                            c1 <= c2
  1289. X                        ?
  1290. X                            (c1 <= *actual && *actual <= c2)
  1291. X                        :
  1292. X                            (c2 <= *actual && *actual <= c1)
  1293. X                        )
  1294. X                        {
  1295. X                            result = 0;
  1296. X                            goto ret;
  1297. X                        }
  1298. X                    }
  1299. X                    else
  1300. X                    if (*actual == *formal++)
  1301. X                    {
  1302. X                        result = 0;
  1303. X                        goto ret;
  1304. X                    }
  1305. X                    if (*formal == /*[*/']')
  1306. X                        break;
  1307. X                }
  1308. X                ++formal;
  1309. X            }
  1310. X            else
  1311. X            {
  1312. X                for (;;)
  1313. X                {
  1314. X                    if (!*formal)
  1315. X                        goto no_close;
  1316. X
  1317. X                    /*
  1318. X                     * note: this allows leading close
  1319. X                     * square bracket elegantly
  1320. X                     */
  1321. X                    trace(("formal == \"%s\";\n", formal));
  1322. X                    trace(("actual = \"%s\";\n", actual));
  1323. X                    if
  1324. X                    (
  1325. X                        formal[1] == '-'
  1326. X                    &&
  1327. X                        formal[2]
  1328. X                    &&
  1329. X                        formal[2] != /*[*/']'
  1330. X                    &&
  1331. X                        formal[3]
  1332. X                    )
  1333. X                    {
  1334. X                        char    c1;
  1335. X                        char    c2;
  1336. X
  1337. X                        c1 = formal[0];
  1338. X                        c2 = formal[2];
  1339. X                        formal += 3;
  1340. X                        if
  1341. X                        (
  1342. X                            c1 <= c2
  1343. X                        ?
  1344. X                            (c1 <= *actual && *actual <= c2)
  1345. X                        :
  1346. X                            (c2 <= *actual && *actual <= c1)
  1347. X                        )
  1348. X                            break;
  1349. X                    }
  1350. X                    else
  1351. X                    if (*actual == *formal++)
  1352. X                        break;
  1353. X                    if (*formal == /*[*/']')
  1354. X                    {
  1355. X                        result = 0;
  1356. X                        goto ret;
  1357. X                    }
  1358. X                }
  1359. X                for (;;)
  1360. X                {
  1361. X                    if (!*formal)
  1362. X                        goto no_close;
  1363. X                    trace(("formal == \"%s\";\n", formal));
  1364. X                    trace(("actual = \"%s\";\n", actual));
  1365. X                    if (*formal++ == /*[*/']')
  1366. X                        break;
  1367. X                }
  1368. X            }
  1369. X            ++actual;
  1370. X            break;
  1371. X        }
  1372. X    }
  1373. X    result = (*actual == 0);
  1374. X
  1375. X    /*
  1376. X     * here for all exits
  1377. X     */
  1378. X    ret:
  1379. X    trace(("return %d;\n", result));
  1380. X    trace((/*{*/"}\n"));
  1381. X    return result;
  1382. X}
  1383. X
  1384. X
  1385. Xstring_ty *
  1386. Xchange_file_template(cp, name)
  1387. X    change_ty    *cp;
  1388. X    string_ty    *name;
  1389. X{
  1390. X    string_ty    *result;
  1391. X    size_t        j, k;
  1392. X    pconf        pconf_data;
  1393. X
  1394. X    trace(("change_file_template(name = \"%s\")\n{\n"/*}*/, name->str_text));
  1395. X    result = 0;
  1396. X    pconf_data = change_pconf_get(cp);
  1397. X    if (!pconf_data->file_template)
  1398. X        goto done;
  1399. X    for (j = 0; j < pconf_data->file_template->length; ++j)
  1400. X    {
  1401. X        pconf_file_template ftp;
  1402. X
  1403. X        ftp = pconf_data->file_template->list[j];
  1404. X        if (!ftp->pattern)
  1405. X            continue;
  1406. X        for (k = 0; k < ftp->pattern->length; ++k)
  1407. X        {
  1408. X            int        m;
  1409. X            string_ty    *s;
  1410. X
  1411. X            s = ftp->pattern->list[k];
  1412. X            m = gmatch(s->str_text, name->str_text);
  1413. X            if (m < 0)
  1414. X            {
  1415. X                change_fatal
  1416. X                (
  1417. X                    cp,
  1418. X                    "filename pattern \"%S\" is illegal",
  1419. X                    s
  1420. X                );
  1421. X            }
  1422. X            if (m)
  1423. X                break;
  1424. X        }
  1425. X        if (k < ftp->pattern->length)
  1426. X        {
  1427. X            result = str_copy(ftp->body);
  1428. X            break;
  1429. X        }
  1430. X    }
  1431. X
  1432. X    /*
  1433. X     * here for all exits
  1434. X     */
  1435. X    done:
  1436. X    if (result)
  1437. X    {
  1438. X        string_ty    *s;
  1439. X
  1440. X        sub_var_set("File_Name", "%S", name);
  1441. X        s = substitute(cp, result);
  1442. X        str_free(result);
  1443. X        result = s;
  1444. X    }
  1445. X    trace((/*{*/"}\n"));
  1446. X    return result;
  1447. X}
  1448. X
  1449. X
  1450. Xvoid
  1451. Xchange_become(cp)
  1452. X    change_ty    *cp;
  1453. X{
  1454. X    trace(("change_become(cp = %08lX)\n{\n"/*}*/, cp));
  1455. X    project_become(cp->pp);
  1456. X    trace((/*{*/"}\n"));
  1457. X}
  1458. X
  1459. X
  1460. Xvoid
  1461. Xchange_become_undo()
  1462. X{
  1463. X    trace(("change_become_undo()\n{\n"/*}*/));
  1464. X    project_become_undo();
  1465. X    trace((/*{*/"}\n"));
  1466. X}
  1467. X
  1468. X
  1469. Xint
  1470. Xchange_umask(cp)
  1471. X    change_ty    *cp;
  1472. X{
  1473. X    return project_umask(cp->pp);
  1474. X}
  1475. X
  1476. X
  1477. Xvoid
  1478. Xchange_run_develop_end_notify_command(cp)
  1479. X    change_ty    *cp;
  1480. X{
  1481. X    pstate        pstate_data;
  1482. X    string_ty    *the_command;
  1483. X    string_ty    *dd;
  1484. X
  1485. X    /*
  1486. X     * make sure there is one
  1487. X     */
  1488. X    trace(("change_run_develop_end_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1489. X    pstate_data = project_pstate_get(cp->pp);
  1490. X    if (!pstate_data->develop_end_notify_command)
  1491. X        goto done;
  1492. X
  1493. X    /*
  1494. X     * notify the change is ready for review
  1495. X     *    (it could be mail, or an internal bulletin board, etc)
  1496. X     * it happens after the data is written and the locks are released,
  1497. X     * so we don't much care if the command fails!
  1498. X     *
  1499. X     * All of the substitutions described in aesub(5) are available.
  1500. X     */
  1501. X    sub_var_set("1", "${project}");
  1502. X    sub_var_set("2", "${change}");
  1503. X    sub_var_set("3", "${developer}");
  1504. X    the_command = pstate_data->develop_end_notify_command;
  1505. X    the_command = substitute(cp, the_command);
  1506. X
  1507. X    /*
  1508. X     * execute the command
  1509. X     */
  1510. X    dd = change_development_directory_get(cp, 0);
  1511. X    change_become(cp);
  1512. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, dd);
  1513. X    change_become_undo();
  1514. X    str_free(the_command);
  1515. X
  1516. X    /*
  1517. X     * here for all exits
  1518. X     */
  1519. X    done:
  1520. X    trace((/*{*/"}\n"));
  1521. X}
  1522. X
  1523. X
  1524. Xvoid
  1525. Xchange_run_develop_end_undo_notify_command(cp)
  1526. X    change_ty    *cp;
  1527. X{
  1528. X    pstate        pstate_data;
  1529. X    string_ty    *the_command;
  1530. X    string_ty    *dd;
  1531. X
  1532. X    /*
  1533. X     * make sure there is one
  1534. X     */
  1535. X    trace(("change_run_develop_end_undo_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1536. X    pstate_data = project_pstate_get(cp->pp);
  1537. X    if (!pstate_data->develop_end_undo_notify_command)
  1538. X        goto done;
  1539. X
  1540. X    /*
  1541. X     * notify the change is ready for review
  1542. X     *    (it could be mail, or an internal bulletin board, etc)
  1543. X     * it happens after the data is written and the locks are released,
  1544. X     * so we don't much care if the command fails!
  1545. X     *
  1546. X     * All of the substitutions described in aesub(5) are available.
  1547. X     */
  1548. X    sub_var_set("1", "${project}");
  1549. X    sub_var_set("2", "${change}");
  1550. X    sub_var_set("3", "${developer}");
  1551. X    the_command = pstate_data->develop_end_undo_notify_command;
  1552. X    the_command = substitute(cp, the_command);
  1553. X
  1554. X    /*
  1555. X     * execute the command
  1556. X     */
  1557. X    dd = change_development_directory_get(cp, 0);
  1558. X    change_become(cp);
  1559. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, dd);
  1560. X    change_become_undo();
  1561. X    str_free(the_command);
  1562. X
  1563. X    /*
  1564. X     * here for all exits
  1565. X     */
  1566. X    done:
  1567. X    trace((/*{*/"}\n"));
  1568. X}
  1569. X
  1570. X
  1571. Xvoid
  1572. Xchange_run_integrate_fail_notify_command(cp)
  1573. X    change_ty    *cp;
  1574. X{
  1575. X    pstate        pstate_data;
  1576. X    string_ty    *the_command;
  1577. X    string_ty    *dd;
  1578. X
  1579. X    /*
  1580. X     * make sure there is one
  1581. X     */
  1582. X    trace(("change_run_integrate_fail_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1583. X    pstate_data = project_pstate_get(cp->pp);
  1584. X    if (!pstate_data->integrate_fail_notify_command)
  1585. X        goto done;
  1586. X
  1587. X    /*
  1588. X     * notify the integrate has failed
  1589. X     *    (it could be mail, or an internal bulletin board, etc)
  1590. X     * it happens after the data is written and the locks are released,
  1591. X     * so we don't much care it the command fails!
  1592. X     *
  1593. X     * In doing it after the locks are released,
  1594. X     * the lists will be accurate (e.g. list of files in change).
  1595. X     *
  1596. X     * All of the substitutions described in aesub(5) are available.
  1597. X     */
  1598. X    sub_var_set("1", "${project}");
  1599. X    sub_var_set("2", "${change}");
  1600. X    sub_var_set("3", "${developer}");
  1601. X    sub_var_set("4", "${reviewer}");
  1602. X    sub_var_set("5", "${integrator}");
  1603. X    the_command = pstate_data->integrate_fail_notify_command;
  1604. X    the_command = substitute(cp, the_command);
  1605. X
  1606. X    /*
  1607. X     * execute the command
  1608. X     */
  1609. X    dd = change_development_directory_get(cp, 0);
  1610. X    change_become(cp);
  1611. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, dd);
  1612. X    change_become_undo();
  1613. X    str_free(the_command);
  1614. X
  1615. X    /*
  1616. X     * here for all exits
  1617. X     */
  1618. X    done:
  1619. X    trace((/*{*/"}\n"));
  1620. X}
  1621. X
  1622. X
  1623. Xvoid
  1624. Xchange_run_integrate_pass_notify_command(cp)
  1625. X    change_ty    *cp;
  1626. X{
  1627. X    pstate        pstate_data;
  1628. X    string_ty    *the_command;
  1629. X    string_ty    *bl;
  1630. X
  1631. X    /*
  1632. X     * make sure there is one
  1633. X     */
  1634. X    trace(("change_run_integrate_pass_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1635. X    pstate_data = project_pstate_get(cp->pp);
  1636. X    if (!pstate_data->integrate_pass_notify_command)
  1637. X        goto done;
  1638. X
  1639. X    /*
  1640. X     * notify the integrate has passed
  1641. X     *    (it could be mail, or an internal bulletin board, etc)
  1642. X     * it happens after the data is written and the locks are released,
  1643. X     * so we don't much care it the command fails!
  1644. X     *
  1645. X     * In doing it after the locks are released,
  1646. X     * the lists will be accurate (e.g. list of files in change).
  1647. X     *
  1648. X     * All of the substitutions described in aesub(5) are available.
  1649. X     */
  1650. X    sub_var_set("1", "${project}");
  1651. X    sub_var_set("2", "${change}");
  1652. X    sub_var_set("3", "${developer}");
  1653. X    sub_var_set("4", "${reviewer}");
  1654. X    sub_var_set("5", "${integrator}");
  1655. X    the_command = pstate_data->integrate_pass_notify_command;
  1656. X    the_command = substitute(cp, the_command);
  1657. X
  1658. X    /*
  1659. X     * execute the command
  1660. X     */
  1661. X    bl = project_baseline_path_get(cp->pp, 0);
  1662. X    project_become(cp->pp);
  1663. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, bl);
  1664. X    project_become_undo();
  1665. X    str_free(the_command);
  1666. X
  1667. X    /*
  1668. X     * here for all exits
  1669. X     */
  1670. X    done:
  1671. X    trace((/*{*/"}\n"));
  1672. X}
  1673. X
  1674. X
  1675. Xvoid
  1676. Xchange_run_review_pass_notify_command(cp)
  1677. X    change_ty    *cp;
  1678. X{
  1679. X    pstate        pstate_data;
  1680. X    string_ty    *the_command;
  1681. X    string_ty    *dd;
  1682. X
  1683. X    /*
  1684. X     * make sure there is one
  1685. X     */
  1686. X    trace(("change_run_review_pass_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1687. X    pstate_data = project_pstate_get(cp->pp);
  1688. X    if (!pstate_data->review_pass_notify_command)
  1689. X        goto done;
  1690. X
  1691. X    /*
  1692. X     * notify the review has passed
  1693. X     *    (it could be mail, or an internal bulletin board, etc)
  1694. X     * it happens after the data is written and the locks are released,
  1695. X     * so we don't much care if the command fails!
  1696. X     *
  1697. X     * All of the substitutions described in aesub(5) are available.
  1698. X     */
  1699. X    sub_var_set("1", "${project}");
  1700. X    sub_var_set("2", "${change}");
  1701. X    sub_var_set("3", "${developer}");
  1702. X    sub_var_set("4", "${reviewer}");
  1703. X    the_command = pstate_data->review_pass_notify_command;
  1704. X    the_command = substitute(cp, the_command);
  1705. X
  1706. X    /*
  1707. X     * execute the command
  1708. X     */
  1709. X    dd = change_development_directory_get(cp, 0);
  1710. X    change_become(cp);
  1711. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, dd);
  1712. X    str_free(the_command);
  1713. X    change_become_undo();
  1714. X
  1715. X    /*
  1716. X     * here for all exits
  1717. X     */
  1718. X    done:
  1719. X    trace((/*{*/"}\n"));
  1720. X}
  1721. X
  1722. X
  1723. Xvoid
  1724. Xchange_run_review_pass_undo_notify_command(cp)
  1725. X    change_ty    *cp;
  1726. X{
  1727. X    pstate        pstate_data;
  1728. X    string_ty    *the_command;
  1729. X    string_ty    *dd;
  1730. X    string_ty    *notify;
  1731. X
  1732. X    /*
  1733. X     * make sure there is one
  1734. X     */
  1735. X    trace(("change_run_review_pass_undo_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1736. X    pstate_data = project_pstate_get(cp->pp);
  1737. X    notify = pstate_data->review_pass_notify_command;
  1738. X    if (!notify)
  1739. X        notify = pstate_data->develop_end_undo_notify_command;
  1740. X    if (!notify)
  1741. X        goto done;
  1742. X
  1743. X    /*
  1744. X     * notify the review has had the pass rescinded
  1745. X     *    (it could be mail, or an internal bulletin board, etc)
  1746. X     * it happens after the data is written and the locks are released,
  1747. X     * so we don't much care if the command fails!
  1748. X     *
  1749. X     * All of the substitutions described in aesub(5) are available.
  1750. X     */
  1751. X    sub_var_set("1", "${project}");
  1752. X    sub_var_set("2", "${change}");
  1753. X    sub_var_set("3", "${developer}");
  1754. X    sub_var_set("4", "${reviewer}");
  1755. X    the_command = substitute(cp, notify);
  1756. X
  1757. X    /*
  1758. X     * execute the command
  1759. X     */
  1760. X    dd = change_development_directory_get(cp, 0);
  1761. X    change_become(cp);
  1762. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, dd);
  1763. X    str_free(the_command);
  1764. X    change_become_undo();
  1765. X
  1766. X    /*
  1767. X     * here for all exits
  1768. X     */
  1769. X    done:
  1770. X    trace((/*{*/"}\n"));
  1771. X}
  1772. X
  1773. X
  1774. Xvoid
  1775. Xchange_run_review_fail_notify_command(cp)
  1776. X    change_ty    *cp;
  1777. X{
  1778. X    pstate        pstate_data;
  1779. X    string_ty    *the_command;
  1780. X    string_ty    *dd;
  1781. X
  1782. X    /*
  1783. X     * make sure there is one
  1784. X     */
  1785. X    trace(("change_run_review_fail_notify_command(cp = %08lX)\n{\n"/*}*/, cp));
  1786. X    pstate_data = project_pstate_get(cp->pp);
  1787. X    if (!pstate_data->review_fail_notify_command)
  1788. X        goto done;
  1789. X
  1790. X    /*
  1791. X     * notify the review has failed
  1792. X     *    (it could be mail, or an internal bulletin board, etc)
  1793. X     * it happens after the data is written and the locks are released,
  1794. X     * so we don't much care it the command fails!
  1795. X     *
  1796. X     * In doing it after the locks are released,
  1797. X     * the lists will be accurate (e.g. list of files in change).
  1798. X     *
  1799. X     * All of the substitutions described in aesub(5) are available.
  1800. X     */
  1801. X    sub_var_set("1", "${project}");
  1802. X    sub_var_set("2", "${change}");
  1803. X    sub_var_set("3", "${developer}");
  1804. X    sub_var_set("4", "${reviewer}");
  1805. X    the_command = pstate_data->review_fail_notify_command;
  1806. X    the_command = substitute(cp, the_command);
  1807. X
  1808. X    /*
  1809. X     * execute the command
  1810. X     */
  1811. X    dd = change_development_directory_get(cp, 0);
  1812. X    change_become(cp);
  1813. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK, dd);
  1814. X    str_free(the_command);
  1815. X    change_become_undo();
  1816. X
  1817. X    /*
  1818. X     * here for all exits
  1819. X     */
  1820. X    done:
  1821. X    trace((/*{*/"}\n"));
  1822. X}
  1823. X
  1824. X
  1825. Xvoid
  1826. Xchange_run_history_get_command(cp, file_name, edit_number, output_file, up)
  1827. X    change_ty    *cp;
  1828. X    string_ty    *file_name;
  1829. X    string_ty    *edit_number;
  1830. X    string_ty    *output_file;
  1831. X    user_ty        *up;
  1832. X{
  1833. X    string_ty    *dir;
  1834. X    cstate        cstate_data;
  1835. X    string_ty    *the_command;
  1836. X    pconf        pconf_data;
  1837. X
  1838. X    /*
  1839. X     * If the edit numbers differ, extract the
  1840. X     * appropriate edit from the baseline (use the
  1841. X     * history-get-command) into a file in /tmp
  1842. X     *
  1843. X     * All of the substitutions described in aesub(5) are available;
  1844. X     * in addition
  1845. X     *
  1846. X     * ${History}
  1847. X     *    history file
  1848. X     *
  1849. X     * ${Edit}
  1850. X     *    edit number
  1851. X     *
  1852. X     * ${Output}
  1853. X     *    output file
  1854. X     */
  1855. X    trace(("change_run_history_get_command(cp = %08lX)\n{\n"/*}*/, cp));
  1856. X    sub_var_set
  1857. X    (
  1858. X        "History",
  1859. X        "%S/%S",
  1860. X        project_history_path_get(cp->pp),
  1861. X        file_name
  1862. X    );
  1863. X    sub_var_set("Edit", "%S", edit_number);
  1864. X    sub_var_set("Output", "%S", output_file);
  1865. X    sub_var_set("1", "${history}");
  1866. X    sub_var_set("2", "${edit}");
  1867. X    sub_var_set("3", "${output}");
  1868. X    pconf_data = change_pconf_get(cp);
  1869. X    the_command = pconf_data->history_get_command;
  1870. X    the_command = substitute(cp, the_command);
  1871. X
  1872. X    /*
  1873. X     * run the command as the current user
  1874. X     * (always output is to /tmp)
  1875. X     */
  1876. X    cstate_data = change_cstate_get(cp);
  1877. X    if (cstate_data->state == cstate_state_being_integrated)
  1878. X        dir = change_integration_directory_get(cp, 0);
  1879. X    else
  1880. X        dir = change_development_directory_get(cp, 0);
  1881. X    user_become(up);
  1882. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, dir);
  1883. X    user_become_undo();
  1884. X    str_free(the_command);
  1885. X    trace((/*{*/"}\n"));
  1886. X}
  1887. X
  1888. X
  1889. Xvoid
  1890. Xchange_development_directory_clear(cp)
  1891. X    change_ty    *cp;
  1892. X{
  1893. X    cstate        cstate_data;
  1894. X
  1895. X    cstate_data = change_cstate_get(cp);
  1896. X    assert(cstate_data->development_directory);
  1897. X    if (cstate_data->development_directory)
  1898. X    {
  1899. X        str_free(cstate_data->development_directory);
  1900. X        cstate_data->development_directory = 0;
  1901. X    }
  1902. X}
  1903. X
  1904. X
  1905. Xvoid
  1906. Xchange_integration_directory_clear(cp)
  1907. X    change_ty    *cp;
  1908. X{
  1909. X    cstate        cstate_data;
  1910. X
  1911. X    cstate_data = change_cstate_get(cp);
  1912. X    assert(cstate_data->integration_directory);
  1913. X    if (cstate_data->integration_directory)
  1914. X    {
  1915. X        str_free(cstate_data->integration_directory);
  1916. X        cstate_data->integration_directory = 0;
  1917. X    }
  1918. X}
  1919. X
  1920. X
  1921. Xvoid
  1922. Xchange_run_history_create_command(cp, filename)
  1923. X    change_ty    *cp;
  1924. X    string_ty    *filename;
  1925. X{
  1926. X    string_ty    *hp;
  1927. X    string_ty    *id;
  1928. X    pconf        pconf_data;
  1929. X    string_ty    *the_command;
  1930. X
  1931. X    /*
  1932. X     * create a new history
  1933. X     * All of the substitutions described in aesub(5) are avaliable.
  1934. X     * In addition:
  1935. X     *
  1936. X     * ${Input}
  1937. X     *    absolute path of source file
  1938. X     *
  1939. X     * ${History}
  1940. X     *    absolute path of history file
  1941. X     */
  1942. X    trace(("change_run_history_create_command(cp = %08lX, \
  1943. Xfilename = \"%s\")\n{\n"/*}*/, (long)cp, filename->str_text));
  1944. X    pconf_data = change_pconf_get(cp);
  1945. X    hp = project_history_path_get(cp->pp);
  1946. X    id = change_integration_directory_get(cp, 0);
  1947. X    sub_var_set("Input", "%S/%S", id, filename);
  1948. X    sub_var_set("History", "%S/%S", hp, filename);
  1949. X    sub_var_set("1", "${input}");
  1950. X    sub_var_set("2", "${history}");
  1951. X    the_command = pconf_data->history_create_command;
  1952. X    the_command = substitute(cp, the_command);
  1953. X    project_become(cp->pp);
  1954. X    os_mkdir_between(hp, filename, 02755);
  1955. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, id);
  1956. X    project_become_undo();
  1957. X    str_free(the_command);
  1958. X    trace((/*{*/"}\n"));
  1959. X}
  1960. X
  1961. X
  1962. Xvoid
  1963. Xchange_run_history_put_command(cp, filename)
  1964. X    change_ty    *cp;
  1965. X    string_ty    *filename;
  1966. X{
  1967. X    string_ty    *hp;
  1968. X    string_ty    *id;
  1969. X    pconf        pconf_data;
  1970. X    string_ty    *the_command;
  1971. X
  1972. X    /*
  1973. X     * Update and existing history.
  1974. X     * All of the substitutions described in aesub(5) are avaliable.
  1975. X     * In addition:
  1976. X     *
  1977. X     * ${Input}
  1978. X     *    absolute path of source file
  1979. X     *
  1980. X     * ${History}
  1981. X     *    absolute path of history file
  1982. X     */
  1983. X    trace(("change_run_history_put_command(cp = %08lX, \
  1984. Xfilename = \"%s\")\n{\n"/*}*/, (long)cp, filename->str_text));
  1985. X    pconf_data = change_pconf_get(cp);
  1986. X    hp = project_history_path_get(cp->pp);
  1987. X    id = change_integration_directory_get(cp, 0);
  1988. X    sub_var_set("Input", "%S/%S", id, filename);
  1989. X    sub_var_set("History", "%S/%S", hp, filename);
  1990. X    sub_var_set("1", "${input}");
  1991. X    sub_var_set("2", "${history}");
  1992. X    the_command = pconf_data->history_put_command;
  1993. X    the_command = substitute(cp, the_command);
  1994. X    project_become(cp->pp);
  1995. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, id);
  1996. X    project_become_undo();
  1997. X    str_free(the_command);
  1998. X    trace((/*{*/"}\n"));
  1999. X}
  2000. X
  2001. X
  2002. Xstring_ty *
  2003. Xchange_run_history_query_command(cp, filename)
  2004. X    change_ty    *cp;
  2005. X    string_ty    *filename;
  2006. X{
  2007. X    string_ty    *hp;
  2008. X    string_ty    *bl;
  2009. X    pconf        pconf_data;
  2010. X    string_ty    *the_command;
  2011. X    string_ty    *result;
  2012. X
  2013. X    /*
  2014. X     * Ask the history file what its edit number is.
  2015. X     * We use this method because the string
  2016. X     * returned is essentially random,
  2017. X     * between different history programs.
  2018. X     * All of the substitutions described in aesub(5) are available.
  2019. X     * In addition
  2020. X     *
  2021. X     * ${History}
  2022. X     *    absolute path of history file
  2023. X     */
  2024. X    trace(("change_run_history_query_command(cp = %08lX, \
  2025. Xfilename = \"%s\")\n{\n"/*}*/, (long)cp, filename->str_text));
  2026. X    pconf_data = change_pconf_get(cp);
  2027. X    hp = project_history_path_get(cp->pp);
  2028. X    bl = project_baseline_path_get(cp->pp, 0);
  2029. X    sub_var_set("History", "%S/%S", hp, filename);
  2030. X    sub_var_set("1", "${history}");
  2031. X    the_command = pconf_data->history_query_command;
  2032. X    the_command = substitute(cp, the_command);
  2033. X    project_become(cp->pp);
  2034. X    result =
  2035. X        os_execute_slurp
  2036. X        (
  2037. X            the_command,
  2038. X            OS_EXEC_FLAG_NO_INPUT,
  2039. X            bl
  2040. X        );
  2041. X    project_become_undo();
  2042. X    str_free(the_command);
  2043. X    if (!result->str_length)
  2044. X    {
  2045. X        fatal
  2046. X        (
  2047. X      "the history_query_command returned the empty string, this is invalid"
  2048. X        );
  2049. X    }
  2050. X    trace(("return \"%s\";\n", result->str_text));
  2051. X    trace((/*{*/"}\n"));
  2052. X    return result;
  2053. X}
  2054. X
  2055. X
  2056. Xvoid
  2057. Xchange_run_diff_command(cp, up, original, input, output)
  2058. X    change_ty    *cp;
  2059. X    user_ty        *up;
  2060. X    string_ty    *original;
  2061. X    string_ty    *input;
  2062. X    string_ty    *output;
  2063. X{
  2064. X    pconf        pconf_data;
  2065. X    string_ty    *dd;
  2066. X    string_ty    *the_command;
  2067. X
  2068. X    /*
  2069. X     * Run the diff_command.
  2070. X     * All of the substitutions described in aesub(5) are available.
  2071. X     * In addition
  2072. X     *
  2073. X     * ${Original}
  2074. X     *    absolute path of original file copied from the baseline
  2075. X     *    usually, but not always
  2076. X     *
  2077. X     * ${Input}
  2078. X     *    absolute path of current file in the development directory
  2079. X     *    usually, but not always
  2080. X     *
  2081. X     * ${Output}
  2082. X     *    absolute path of file in which to write the difference listing
  2083. X     *    usually in the development diretcory
  2084. X     */
  2085. X    trace
  2086. X    ((
  2087. X        "change_run_diff_command(cp = %08lX, up = %08lX, \
  2088. Xoriginal = \"%s\", input = \"%s\", output = \"%s\")\n{\n"/*}*/,
  2089. X        (long)cp,
  2090. X        (long)up,
  2091. X        original->str_text,
  2092. X        input->str_text,
  2093. X        output->str_text
  2094. X    ));
  2095. X    pconf_data = change_pconf_get(cp);
  2096. X    dd = change_development_directory_get(cp, 0);
  2097. X    sub_var_set("ORiginal", "%S", original);
  2098. X    sub_var_set("Input", "%S", input);
  2099. X    sub_var_set("Output", "%S", output);
  2100. X    sub_var_set("1", "${original}");
  2101. X    sub_var_set("2", "${input}");
  2102. X    sub_var_set("3", "${output}");
  2103. X    the_command = pconf_data->diff_command;
  2104. X    the_command = substitute(cp, the_command);
  2105. X    trace_string(the_command->str_text);
  2106. X    user_become(up);
  2107. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, dd);
  2108. X    user_become_undo();
  2109. X    str_free(the_command);
  2110. X    trace((/*{*/"}\n"));
  2111. X}
  2112. X
  2113. X
  2114. Xvoid
  2115. Xchange_run_diff3_command(cp, up, original, most_recent, input, output)
  2116. X    change_ty    *cp;
  2117. X    user_ty        *up;
  2118. X    string_ty    *original;
  2119. X    string_ty    *most_recent;
  2120. X    string_ty    *input;
  2121. X    string_ty    *output;
  2122. X{
  2123. X    pconf        pconf_data;
  2124. X    string_ty    *the_command;
  2125. X    string_ty    *dd;
  2126. X
  2127. X    /*
  2128. X     * Run the diff3_command.
  2129. X     * All of the substitutions described in aesub(5) are available.
  2130. X     * In addition
  2131. X     *
  2132. X     * ${Original}
  2133. X     *    absolute path of original file copied from the baseline
  2134. X     *    usually somewhere in /tmp
  2135. X     *
  2136. X     * ${Most_Recent}
  2137. X     *    absolute path of original file currently in the baseline
  2138. X     *    usually, but not always
  2139. X     *
  2140. X     * ${Input}
  2141. X     *    absolute path of current file in the development directory
  2142. X     *    usually, but not always
  2143. X     *
  2144. X     * ${Output}
  2145. X     *    absolute path of file in which to write the difference listing
  2146. X     *    usually in the development diretcory
  2147. X     */
  2148. X    trace
  2149. X    ((
  2150. X        "change_run_diff3_command(cp = %08lX, up = %08lX, original = \
  2151. X\"%s\", most_recent = \"%s\", input = \"%s\", output = \"%s\")\n{\n"/*}*/,
  2152. X        (long)cp,
  2153. X        (long)up,
  2154. X        original->str_text,
  2155. X        most_recent->str_text,
  2156. X        input->str_text,
  2157. X        output->str_text
  2158. X    ));
  2159. X    pconf_data = change_pconf_get(cp);
  2160. X    dd = change_development_directory_get(cp, 0);
  2161. X    sub_var_set("ORiginal", "%S", original);
  2162. X    sub_var_set("Most_Recent", "%S", most_recent);
  2163. X    sub_var_set("Input", "%S", input);
  2164. X    sub_var_set("Output", "%S", output);
  2165. X    sub_var_set("1", "${original}");
  2166. X    sub_var_set("2", "${most_recent}");
  2167. X    sub_var_set("3", "${input}");
  2168. X    sub_var_set("4", "${output}");
  2169. X    the_command = pconf_data->diff3_command;
  2170. X    the_command = substitute(cp, the_command);
  2171. X    user_become(up);
  2172. X    os_execute(the_command, OS_EXEC_FLAG_NO_INPUT, dd);
  2173. X    user_become_undo();
  2174. X    str_free(the_command);
  2175. X    trace((/*{*/"}\n"));
  2176. X}
  2177. X
  2178. X
  2179. Xvoid
  2180. Xchange_run_develop_begin_command(cp, up)
  2181. X    change_ty    *cp;
  2182. X    user_ty        *up;
  2183. X{
  2184. X    pconf        pconf_data;
  2185. X    string_ty    *the_command;
  2186. X    string_ty    *dir;
  2187. X
  2188. X    pconf_data = change_pconf_get(cp);
  2189. X    if (!pconf_data->develop_begin_command)
  2190. X        return;
  2191. X
  2192. X    the_command = pconf_data->develop_begin_command;
  2193. X    the_command = substitute(cp, the_command);
  2194. X    dir = change_development_directory_get(cp, 1);
  2195. X    user_become(up);
  2196. X    os_execute
  2197. X    (
  2198. X        the_command,
  2199. X        OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK,
  2200. X        dir
  2201. X    );
  2202. X    user_become_undo();
  2203. X    str_free(the_command);
  2204. X}
  2205. X
  2206. X
  2207. Xvoid
  2208. Xchange_run_integrate_begin_command(cp)
  2209. X    change_ty    *cp;
  2210. X{
  2211. X    pconf        pconf_data;
  2212. X    string_ty    *the_command;
  2213. X    string_ty    *dir;
  2214. X
  2215. X    pconf_data = change_pconf_get(cp);
  2216. X    if (!pconf_data->integrate_begin_command)
  2217. X        return;
  2218. X    sub_var_set("1", "${project}");
  2219. X    sub_var_set("2", "${change}");
  2220. X    sub_var_set("3", "${version}");
  2221. X    the_command = pconf_data->integrate_begin_command;
  2222. X    the_command = substitute(cp, the_command);
  2223. X    dir = change_integration_directory_get(cp, 1);
  2224. X    change_become(cp);
  2225. X    os_execute
  2226. X    (
  2227. X        the_command,
  2228. X        OS_EXEC_FLAG_NO_INPUT + OS_EXEC_FLAG_ERROK,
  2229. X        dir
  2230. X    );
  2231. X    change_become_undo();
  2232. X    str_free(the_command);
  2233. X}
  2234. END_OF_FILE
  2235. if test 47426 -ne `wc -c <'aegis/change.c'`; then
  2236.     echo shar: \"'aegis/change.c'\" unpacked with wrong size!
  2237. fi
  2238. # end of 'aegis/change.c'
  2239. fi
  2240. if test -f 'aux/CHANGES.2.0' -a "${1}" != "-c" ; then 
  2241.   echo shar: Will not clobber existing file \"'aux/CHANGES.2.0'\"
  2242. else
  2243. echo shar: Extracting \"'aux/CHANGES.2.0'\" \(52993 characters\)
  2244. sed "s/^X//" >'aux/CHANGES.2.0' <<'END_OF_FILE'
  2245. X
  2246. X
  2247. X
  2248. XProject "aegis.2.0"                         Page 1
  2249. XList of Changes                       Tue Aug 17 23:24:16 1993
  2250. X
  2251. XChange    State        Description
  2252. X------- -------        -------------
  2253. X   1    completed    New release derived from aegis.1.4.
  2254. X   2    completed    change references to 'alpha' to talk about
  2255. X            'beta'
  2256. X   3    completed    correct spelling errors
  2257. X   4    completed    improve default page width behaviour
  2258. X   5    completed    fix the csh command aliases
  2259. X   6    completed    add the develop_begin command
  2260. X   7    completed    Emphasize tests as part of source in user guide
  2261. X   8    completed    Typo in HP support
  2262. X   9    completed    add Linux config
  2263. X  10    completed    fix problem in glue
  2264. X  11    completed    add list locks functionality
  2265. X  12    completed    cope with absent config file
  2266. X  13    completed    add the aemv command
  2267. X  14    completed    make log files behave more usefully
  2268. X  15    completed    guess the default project and/or change from
  2269. X            the pathname of the current directory
  2270. X  16    completed    add new cause - internal_improvement
  2271. X  17    completed    clean up, in preparation for release
  2272. X  18    completed    add -edit options to aeca aenc and aepa
  2273. X            commands
  2274. X  19    completed    fix 'enum boolean' problem
  2275. X  20    completed    add -MAJor and -MINOr options to aenpr
  2276. X  21    completed    add the -ANticipate option to aed
  2277. X  22    completed    project attributes could be edited by anyone
  2278. X  23    completed    additional terse listings
  2279. X  24    completed    fix bug in pattr_ed
  2280. X  25    completed    add list outstanding changes
  2281. X  26    completed    interface improvements
  2282. X  27    being_        documentation example fails on convex
  2283. X    integrated
  2284. X
  2285. X
  2286. X
  2287. XProject "aegis.2.0", Change 1                     Page 1
  2288. XChange Details                       Tue Aug 17 23:24:20 1993
  2289. X
  2290. XNAME
  2291. X    Project "aegis.2.0", Delta 1, Change 1.
  2292. X
  2293. XSUMMARY
  2294. X    New release derived from aegis.1.4.
  2295. X
  2296. XDESCRIPTION
  2297. X    New release derived from aegis.1.4.
  2298. X
  2299. X    This change is exempt from testing against the development
  2300. X    directory.  This change is exempt from testing against the
  2301. X    baseline.
  2302. X
  2303. XCAUSE
  2304. X    This change was caused by internal_enhancement.
  2305. X
  2306. XFILES
  2307. X    Type    Action    Edit    File Name
  2308. X    ------- ------- ------- -----------
  2309. X    source    create    1    LICENSE
  2310. X    source    create    1    aegis/administ.c
  2311. X    source    create    1    aegis/administ.h
  2312. X    source    create    1    aegis/arglex2.h
  2313. X    source    create    1    aegis/build.c
  2314. X    source    create    1    aegis/build.h
  2315. X    source    create    1    aegis/cattr.def
  2316. X    source    create    1    aegis/cattr_ed.c
  2317. X    source    create    1    aegis/cattr_ed.h
  2318. X    source    create    1    aegis/change.c
  2319. X    source    create    1    aegis/change.h
  2320. X    source    create    1    aegis/chdir.c
  2321. X    source    create    1    aegis/chdir.h
  2322. X    source    create    1    aegis/col.c
  2323. X    source    create    1    aegis/col.h
  2324. X    source    create    1    aegis/commit.c
  2325. X    source    create    1    aegis/commit.h
  2326. X    source    create    1    aegis/common.def
  2327. X    source    create    1    aegis/copyfile.c
  2328. X    source    create    1    aegis/copyfile.h
  2329. X    source    create    1    aegis/cstate.def
  2330. X    source    create    1    aegis/develop1.c
  2331. X    source    create    1    aegis/develop1.h
  2332. X    source    create    1    aegis/develop2.c
  2333. X    source    create    1    aegis/develop2.h
  2334. X    source    create    1    aegis/diff.c
  2335. X    source    create    1    aegis/diff.h
  2336. X    source    create    1    aegis/dir.c
  2337. X    source    create    1    aegis/dir.h
  2338. X    source    create    1    aegis/file.c
  2339. X    source    create    1    aegis/file.h
  2340. X    source    create    1    aegis/glue.c
  2341. X    source    create    1    aegis/glue.h
  2342. X    source    create    1    aegis/gonzo.c
  2343. X    source    create    1    aegis/gonzo.h
  2344. X    source    create    1    aegis/gram.h
  2345. X    source    create    1    aegis/gram.y
  2346. X    source    create    1    aegis/gstate.def
  2347. X
  2348. X
  2349. X
  2350. XProject "aegis.2.0", Change 1                     Page 2
  2351. XChange Details                       Tue Aug 17 23:24:20 1993
  2352. X
  2353. X    Type    Action    Edit    File Name
  2354. X    ------- ------- ------- -----------
  2355. X    source    create    1    aegis/help.c
  2356. X    source    create    1    aegis/help.h
  2357. X    source    create    1    aegis/indent.c
  2358. X    source    create    1    aegis/indent.h
  2359. X    source    create    1    aegis/integra1.c
  2360. X    source    create    1    aegis/integra1.h
  2361. X    source    create    1    aegis/integra2.c
  2362. X    source    create    1    aegis/integra2.h
  2363. X    source    create    1    aegis/io.c
  2364. X    source    create    1    aegis/io.h
  2365. X    source    create    1    aegis/lex.c
  2366. X    source    create    1    aegis/lex.h
  2367. X    source    create    1    aegis/list.c
  2368. X    source    create    1    aegis/list.h
  2369. X    source    create    1    aegis/lock.c
  2370. X    source    create    1    aegis/lock.h
  2371. X    source    create    1    aegis/log.c
  2372. X    source    create    1    aegis/log.h
  2373. X    source    create    1    aegis/main.c
  2374. X    source    create    1    aegis/new_chan.c
  2375. X    source    create    1    aegis/new_chan.h
  2376. X    source    create    1    aegis/new_file.c
  2377. X    source    create    1    aegis/new_file.h
  2378. X    source    create    1    aegis/new_proj.c
  2379. X    source    create    1    aegis/new_proj.h
  2380. X    source    create    1    aegis/new_rele.c
  2381. X    source    create    1    aegis/new_rele.h
  2382. X    source    create    1    aegis/new_test.c
  2383. X    source    create    1    aegis/new_test.h
  2384. X    source    create    1    aegis/os.c
  2385. X    source    create    1    aegis/os.h
  2386. X    source    create    1    aegis/pager.c
  2387. X    source    create    1    aegis/pager.h
  2388. X    source    create    1    aegis/parse.c
  2389. X    source    create    1    aegis/parse.h
  2390. X    source    create    1    aegis/pattr.def
  2391. X    source    create    1    aegis/pattr_ed.c
  2392. X    source    create    1    aegis/pattr_ed.h
  2393. X    source    create    1    aegis/pconf.def
  2394. X    source    create    1    aegis/project.c
  2395. X    source    create    1    aegis/project.h
  2396. X    source    create    1    aegis/pstate.def
  2397. X    source    create    1    aegis/rem_file.c
  2398. X    source    create    1    aegis/rem_file.h
  2399. X    source    create    1    aegis/rem_proj.c
  2400. X    source    create    1    aegis/rem_proj.h
  2401. X    source    create    1    aegis/review.c
  2402. X    source    create    1    aegis/review.h
  2403. X    source    create    1    aegis/reviewer.c
  2404. X    source    create    1    aegis/reviewer.h
  2405. X    source    create    1    aegis/sub.c
  2406. X    source    create    1    aegis/sub.h
  2407. X    source    create    1    aegis/test.c
  2408. X    source    create    1    aegis/test.h
  2409. X    source    create    1    aegis/type.c
  2410. X
  2411. X
  2412. X
  2413. XProject "aegis.2.0", Change 1                     Page 3
  2414. XChange Details                       Tue Aug 17 23:24:20 1993
  2415. X
  2416. X    Type    Action    Edit    File Name
  2417. X    ------- ------- ------- -----------
  2418. X    source    create    1    aegis/type.h
  2419. X    source    create    1    aegis/uconf.def
  2420. X    source    create    1    aegis/undo.c
  2421. X    source    create    1    aegis/undo.h
  2422. X    source    create    1    aegis/user.c
  2423. X    source    create    1    aegis/user.h
  2424. X    source    create    1    aegis/ustate.def
  2425. X    source    create    1    aegis/version.c
  2426. X    source    create    1    aegis/version.h
  2427. X    source    create    1    aux/ALPHA.man
  2428. X    source    create    1    aux/BUILDING.man
  2429. X    source    create    1    aux/BUILDpyr.man
  2430. X    source    create    1    aux/CHANGES.sh
  2431. X    source    create    1    aux/Howto.cook
  2432. X    source    create    1    aux/MANIFEST.sh
  2433. X    source    create    1    aux/Makefile.awk
  2434. X    source    create    1    aux/Makefile.sh
  2435. X    source    create    1    aux/README.man
  2436. X    source    create    1    aux/patches.sh
  2437. X    source    create    1    common/ansi.c
  2438. X    source    create    1    common/arglex.c
  2439. X    source    create    1    common/arglex.h
  2440. X    source    create    1    common/error.c
  2441. X    source    create    1    common/error.h
  2442. X    source    create    1    common/main.h
  2443. X    source    create    1    common/mem.c
  2444. X    source    create    1    common/mem.h
  2445. X    source    create    1    common/option.c
  2446. X    source    create    1    common/option.h
  2447. X    source    create    1    common/s-v-arg.h
  2448. X    source    create    1    common/str.c
  2449. X    source    create    1    common/str.h
  2450. X    source    create    1    common/trace.c
  2451. X    source    create    1    common/trace.h
  2452. X    source    create    1    common/word.c
  2453. X    source    create    1    common/word.h
  2454. X    source    create    1    conf/AIX-3.2
  2455. X    source    create    1    conf/ConvexOS-10
  2456. X    source    create    1    conf/SCO-2.4
  2457. X    source    create    1    conf/SunOS-4.1.1
  2458. X    source    create    1    conf/SunOS-4.1.2
  2459. X    source    create    1    conf/SunOS-4.1.3
  2460. X    source    create    1    conf/SysV-4.0
  2461. X    source    create    1    conf/ULTRIX-4.2
  2462. X    source    create    1    conf/apollo
  2463. X    source    create    1    conf/dcosx
  2464. X    source    create    1    conf/dgux-5.4.1
  2465. X    source    create    1    conf/hpux-8.07
  2466. X    source    create    1    config
  2467. X    source    create    1    doc/aegis.ms
  2468. X    source    create    1    doc/c1.0.so
  2469. X    source    create    1    doc/c1.1.so
  2470. X    source    create    1    doc/c1.2.so
  2471. X    source    create    1    doc/c1.3.so
  2472. X    source    create    1    doc/c1.4.so
  2473. X
  2474. X
  2475. X
  2476. XProject "aegis.2.0", Change 1                     Page 4
  2477. XChange Details                       Tue Aug 17 23:24:20 1993
  2478. X
  2479. X    Type    Action    Edit    File Name
  2480. X    ------- ------- ------- -----------
  2481. X    source    create    1    doc/c2.0.so
  2482. X    source    create    1    doc/c2.1.so
  2483. X    source    create    1    doc/c2.2.so
  2484. X    source    create    1    doc/c2.3.so
  2485. X    source    create    1    doc/c2.4.so
  2486. X    source    create    1    doc/c2.5.so
  2487. X    source    create    1    doc/c3.0.so
  2488. X    source    create    1    doc/c3.1.so
  2489. X    source    create    1    doc/c3.2.so
  2490. X    source    create    1    doc/c3.3.so
  2491. X    source    create    1    doc/c4.0.so
  2492. X    source    create    1    doc/c4.1.so
  2493. X    source    create    1    doc/c4.2.so
  2494. X    source    create    1    doc/c4.3.so
  2495. X    source    create    1    doc/c5.0.so
  2496. X    source    create    1    doc/c6.0.so
  2497. X    source    create    1    doc/c7.0.so
  2498. X    source    create    1    doc/c7.1.so
  2499. X    source    create    1    doc/c7.2.so
  2500. X    source    create    1    doc/c7.4.so
  2501. X    source    create    1    doc/c7.5.so
  2502. X    source    create    1    doc/c8.0.so
  2503. X    source    create    1    doc/c8.1.so
  2504. X    source    create    1    doc/c8.2.so
  2505. X    source    create    1    doc/c8.3.so
  2506. X    source    create    1    doc/cA.0.so
  2507. X    source    create    1    doc/cB.0.so
  2508. X    source    create    1    doc/cC.0.so
  2509. X    source    create    1    fmtgen/id.c
  2510. X    source    create    1    fmtgen/id.h
  2511. X    source    create    1    fmtgen/indent.c
  2512. X    source    create    1    fmtgen/indent.h
  2513. X    source    create    1    fmtgen/lex.c
  2514. X    source    create    1    fmtgen/lex.h
  2515. X    source    create    1    fmtgen/main.c
  2516. X    source    create    1    fmtgen/parse.h
  2517. X    source    create    1    fmtgen/parse.y
  2518. X    source    create    1    fmtgen/type.c
  2519. X    source    create    1    fmtgen/type.h
  2520. X    source    create    1    fmtgen/type_enum.c
  2521. X    source    create    1    fmtgen/type_integ.c
  2522. X    source    create    1    fmtgen/type_list.c
  2523. X    source    create    1    fmtgen/type_ref.c
  2524. X    source    create    1    fmtgen/type_strin.c
  2525. X    source    create    1    fmtgen/type_struc.c
  2526. X    source    create    1    h/dirent.h
  2527. X    source    create    1    h/stdarg.h-min
  2528. X    source    create    1    h/stddef.h
  2529. X    source    create    1    h/stdlib.h
  2530. X    source    create    1    h/unistd.h
  2531. X    source    create    1    h/utime.h
  2532. X    source    create    1    lib/cshrc
  2533. X    source    create    1    lib/de.inews.sh
  2534. X    source    create    1    lib/de.sh
  2535. X    source    create    1    lib/deu.inews.sh
  2536. X
  2537. X
  2538. X
  2539. XProject "aegis.2.0", Change 1                     Page 5
  2540. XChange Details                       Tue Aug 17 23:24:20 1993
  2541. X
  2542. X    Type    Action    Edit    File Name
  2543. X    ------- ------- ------- -----------
  2544. X    source    create    1    lib/deu.sh
  2545. X    source    create    1    lib/if.inews.sh
  2546. X    source    create    1    lib/if.sh
  2547. X    source    create    1    lib/ip.inews.sh
  2548. X    source    create    1    lib/ip.sh
  2549. X    source    create    1    lib/profile
  2550. X    source    create    1    lib/rf.inews.sh
  2551. X    source    create    1    lib/rf.sh
  2552. X    source    create    1    lib/rp.inews.sh
  2553. X    source    create    1    lib/rp.sh
  2554. X    source    create    1    lib/rpu.inews.sh
  2555. X    source    create    1    lib/rpu.sh
  2556. X    source    create    1    man1/aeb.1
  2557. X    source    create    1    man1/aeca.1
  2558. X    source    create    1    man1/aecd.1
  2559. X    source    create    1    man1/aecp.1
  2560. X    source    create    1    man1/aecpu.1
  2561. X    source    create    1    man1/aed.1
  2562. X    source    create    1    man1/aedb.1
  2563. X    source    create    1    man1/aedbu.1
  2564. X    source    create    1    man1/aede.1
  2565. X    source    create    1    man1/aedeu.1
  2566. X    source    create    1    man1/aegis.1
  2567. X    source    create    1    man1/aeib.1
  2568. X    source    create    1    man1/aeibu.1
  2569. X    source    create    1    man1/aeif.1
  2570. X    source    create    1    man1/aeip.1
  2571. X    source    create    1    man1/ael.1
  2572. X    source    create    1    man1/aena.1
  2573. X    source    create    1    man1/aenc.1
  2574. X    source    create    1    man1/aencu.1
  2575. X    source    create    1    man1/aend.1
  2576. X    source    create    1    man1/aenf.1
  2577. X    source    create    1    man1/aenfu.1
  2578. X    source    create    1    man1/aeni.1
  2579. X    source    create    1    man1/aenpr.1
  2580. X    source    create    1    man1/aenrls.1
  2581. X    source    create    1    man1/aenrv.1
  2582. X    source    create    1    man1/aent.1
  2583. X    source    create    1    man1/aentu.1
  2584. X    source    create    1    man1/aepa.1
  2585. X    source    create    1    man1/aera.1
  2586. X    source    create    1    man1/aerd.1
  2587. X    source    create    1    man1/aerf.1
  2588. X    source    create    1    man1/aeri.1
  2589. X    source    create    1    man1/aerm.1
  2590. X    source    create    1    man1/aermpr.1
  2591. X    source    create    1    man1/aermu.1
  2592. X    source    create    1    man1/aerp.1
  2593. X    source    create    1    man1/aerpu.1
  2594. X    source    create    1    man1/aerrv.1
  2595. X    source    create    1    man1/aet.1
  2596. X    source    create    1    man1/aev.1
  2597. X    source    create    1    man1/install.sh
  2598. X    source    create    1    man1/o__rules.so
  2599. X
  2600. X
  2601. X
  2602. XProject "aegis.2.0", Change 1                     Page 6
  2603. XChange Details                       Tue Aug 17 23:24:20 1993
  2604. X
  2605. X    Type    Action    Edit    File Name
  2606. X    ------- ------- ------- -----------
  2607. X    source    create    1    man1/o_anticip.so
  2608. X    source    create    1    man1/o_auto.so
  2609. X    source    create    1    man1/o_baselin.so
  2610. X    source    create    1    man1/o_bld_lk.so
  2611. X    source    create    1    man1/o_change.so
  2612. X    source    create    1    man1/o_devdir.so
  2613. X    source    create    1    man1/o_dir.so
  2614. X    source    create    1    man1/o_help.so
  2615. X    source    create    1    man1/o_indep.so
  2616. X    source    create    1    man1/o_keep.so
  2617. X    source    create    1    man1/o_lib.so
  2618. X    source    create    1    man1/o_list.so
  2619. X    source    create    1    man1/o_major.so
  2620. X    source    create    1    man1/o_manual.so
  2621. X    source    create    1    man1/o_min.so
  2622. X    source    create    1    man1/o_minor.so
  2623. X    source    create    1    man1/o_nolog.so
  2624. X    source    create    1    man1/o_overw.so
  2625. X    source    create    1    man1/o_page.so
  2626. X    source    create    1    man1/o_project.so
  2627. X    source    create    1    man1/o_terse.so
  2628. X    source    create    1    man1/o_verbose.so
  2629. X    source    create    1    man1/z_cr.so
  2630. X    source    create    1    man1/z_exit.so
  2631. X    source    create    1    man1/z_intuit.so
  2632. X    source    create    1    man1/z_name.so
  2633. X    source    create    1    man5/aecattr.5
  2634. X    source    create    1    man5/aecattr.so
  2635. X    source    create    1    man5/aecstate.5
  2636. X    source    create    1    man5/aedir.5
  2637. X    source    create    1    man5/aegis.5
  2638. X    source    create    1    man5/aegstate.5
  2639. X    source    create    1    man5/aepattr.5
  2640. X    source    create    1    man5/aepattr.so
  2641. X    source    create    1    man5/aepconf.5
  2642. X    source    create    1    man5/aepstate.5
  2643. X    source    create    1    man5/aesub.5
  2644. X    source    create    1    man5/aeuconf.5
  2645. X    source    create    1    man5/aeustate.5
  2646. X    source    create    1    man5/install.sh
  2647. X    source    create    1    man5/z_cr.so
  2648. X    source    create    1    man5/z_name.so
  2649. X    test    create    1    test/00/t0001a.sh
  2650. X    test    create    1    test/00/t0002a.sh
  2651. X    test    create    1    test/00/t0003a.sh
  2652. X    test    create    1    test/00/t0004a.sh
  2653. X    test    create    1    test/00/t0005a.sh
  2654. X    test    create    1    test/00/t0006a.sh
  2655. X    test    create    1    test/00/t0007a.sh
  2656. X    test    create    1    test/00/t0008a.sh
  2657. X    test    create    1    test/00/t0009a.sh
  2658. X    test    create    1    test/00/t0010a.sh
  2659. X    test    create    1    test/00/t0011a.sh
  2660. X    test    create    1    test/00/t0012a.sh
  2661. X    test    create    1    test/00/t0013a.sh
  2662. X
  2663. X
  2664. X
  2665. XProject "aegis.2.0", Change 1                     Page 7
  2666. XChange Details                       Tue Aug 17 23:24:20 1993
  2667. X
  2668. X    Type    Action    Edit    File Name
  2669. X    ------- ------- ------- -----------
  2670. X    test    create    1    test/00/t0014a.sh
  2671. X    test    create    1    test/00/t0015a.sh
  2672. X
  2673. XHISTORY
  2674. X    What        When        Who    Comment
  2675. X    ------        ------        -----    ---------
  2676. X    new_change    Wed Mar 31    pmiller
  2677. X            21:55:41 1993
  2678. X    develop_begin    Wed Mar 31    pmiller
  2679. X            21:55:41 1993
  2680. X    develop_end    Wed Mar 31    pmiller
  2681. X            21:55:41 1993
  2682. X    review_pass    Wed Mar 31    pmiller
  2683. X            21:55:41 1993
  2684. X    integrate_begin Wed Mar 31    pmiller
  2685. X            21:55:41 1993
  2686. X    integrate_pass    Wed Mar 31    pmiller
  2687. X            22:05:11 1993
  2688. X
  2689. X
  2690. X
  2691. XProject "aegis.2.0", Change 2                     Page 1
  2692. XChange Details                       Tue Aug 17 23:24:21 1993
  2693. X
  2694. XNAME
  2695. X    Project "aegis.2.0", Delta 2, Change 2.
  2696. X
  2697. XSUMMARY
  2698. X    change references to 'alpha' to talk about 'beta'
  2699. X
  2700. XDESCRIPTION
  2701. X    change references to 'alpha' to talk about 'beta'
  2702. X
  2703. X    This change is exempt from testing against the development
  2704. X    directory.  This change is exempt from testing against the
  2705. X    baseline.
  2706. X
  2707. XCAUSE
  2708. X    This change was caused by internal_enhancement.
  2709. X
  2710. XFILES
  2711. X    Type    Action    Edit    File Name
  2712. X    ------- ------- ------- -----------
  2713. X    source    remove    1    aux/ALPHA.man
  2714. X    source    create    1    aux/BETA.man
  2715. X    source    modify    2    aux/README.man
  2716. X
  2717. XHISTORY
  2718. X    What        When        Who    Comment
  2719. X    ------        ------        -----    ---------
  2720. X    new_change    Sat Apr     3    pmiller
  2721. X            22:13:18 1993
  2722. X    develop_begin    Sat Apr     3    pmiller Elapsed time: 0.000
  2723. X            22:13:24 1993        days.
  2724. X    develop_end    Mon Apr     5    pmiller
  2725. X            10:52:29 1993
  2726. X    review_pass    Mon Apr     5    pmiller
  2727. X            10:52:45 1993
  2728. X    integrate_begin Mon Apr     5    pmiller Elapsed time: 0.169
  2729. X            10:53:34 1993        days.
  2730. X    integrate_pass    Mon Apr     5    pmiller
  2731. X            12:09:49 1993
  2732. X
  2733. X
  2734. X
  2735. XProject "aegis.2.0", Change 3                     Page 1
  2736. XChange Details                       Tue Aug 17 23:24:22 1993
  2737. X
  2738. XNAME
  2739. X    Project "aegis.2.0", Delta 3, Change 3.
  2740. X
  2741. XSUMMARY
  2742. X    correct spelling errors
  2743. X
  2744. XDESCRIPTION
  2745. X    Correct spelling errors in the User Guide and the manual
  2746. X    entries.
  2747. X
  2748. X    This change is exempt from testing against the development
  2749. X    directory.  This change is exempt from testing against the
  2750. X    baseline.
  2751. X
  2752. XCAUSE
  2753. X    This change was caused by internal_enhancement.
  2754. X
  2755. XFILES
  2756. X    Type    Action    Edit    File Name
  2757. X    ------- ------- ------- -----------
  2758. X    source    modify    2    aux/BETA.man
  2759. X    source    modify    2    aux/BUILDING.man
  2760. X    source    modify    2    aux/BUILDpyr.man
  2761. X    source    modify    3    aux/README.man
  2762. X    source    modify    2    doc/c1.0.so
  2763. X    source    modify    2    doc/c1.2.so
  2764. X    source    modify    2    doc/c1.3.so
  2765. X    source    modify    2    doc/c1.4.so
  2766. X    source    modify    2    doc/c2.1.so
  2767. X    source    modify    2    doc/c2.2.so
  2768. X    source    modify    2    doc/c2.3.so
  2769. X    source    modify    2    doc/c2.4.so
  2770. X    source    modify    2    doc/c2.5.so
  2771. X    source    modify    2    doc/c3.1.so
  2772. X    source    modify    2    doc/c3.2.so
  2773. X    source    modify    2    doc/c4.1.so
  2774. X    source    modify    2    doc/c4.2.so
  2775. X    source    modify    2    doc/c4.3.so
  2776. X    source    modify    2    doc/c5.0.so
  2777. X    source    modify    2    doc/c6.0.so
  2778. X    source    modify    2    doc/c7.1.so
  2779. X    source    modify    2    doc/c7.2.so
  2780. X    source    modify    2    doc/c7.4.so
  2781. X    source    modify    2    doc/c7.5.so
  2782. X    source    modify    2    doc/c8.0.so
  2783. X    source    modify    2    doc/c8.1.so
  2784. X    source    modify    2    doc/c8.2.so
  2785. X    source    modify    2    doc/c8.3.so
  2786. X    source    modify    2    doc/cA.0.so
  2787. X    source    modify    2    doc/cB.0.so
  2788. X    source    modify    2    doc/cC.0.so
  2789. X    source    modify    2    man1/aeb.1
  2790. X    source    modify    2    man1/aecd.1
  2791. X    source    modify    2    man1/aecp.1
  2792. X    source    modify    2    man1/aed.1
  2793. X    source    modify    2    man1/aegis.1
  2794. X    source    modify    2    man1/aeib.1
  2795. X
  2796. X
  2797. X
  2798. XProject "aegis.2.0", Change 3                     Page 2
  2799. XChange Details                       Tue Aug 17 23:24:22 1993
  2800. X
  2801. X    Type    Action    Edit    File Name
  2802. X    ------- ------- ------- -----------
  2803. X    source    modify    2    man1/aencu.1
  2804. X    source    modify    2    man1/aenfu.1
  2805. X    source    modify    2    man1/aenpr.1
  2806. X    source    modify    2    man1/aenrls.1
  2807. X    source    modify    2    man1/aentu.1
  2808. X    source    modify    2    man1/aerf.1
  2809. X    source    modify    2    man1/aeri.1
  2810. X    source    modify    2    man1/aerm.1
  2811. X    source    modify    2    man1/aermu.1
  2812. X    source    modify    2    man1/aerp.1
  2813. X    source    modify    2    man1/o_auto.so
  2814. X    source    modify    2    man1/o_devdir.so
  2815. X    source    modify    2    man1/o_lib.so
  2816. X    source    modify    2    man1/o_major.so
  2817. X    source    modify    2    man1/o_minor.so
  2818. X    source    modify    2    man1/o_overw.so
  2819. X    source    modify    2    man5/aecattr.5
  2820. X    source    modify    2    man5/aecstate.5
  2821. X    source    modify    2    man5/aedir.5
  2822. X    source    modify    2    man5/aegis.5
  2823. X    source    modify    2    man5/aepattr.so
  2824. X    source    modify    2    man5/aepconf.5
  2825. X    source    modify    2    man5/aepstate.5
  2826. X    source    modify    2    man5/aesub.5
  2827. X    source    modify    2    man5/aeuconf.5
  2828. X
  2829. XHISTORY
  2830. X    What        When        Who    Comment
  2831. X    ------        ------        -----    ---------
  2832. X    new_change    Mon Apr     5    pmiller
  2833. X            12:11:59 1993
  2834. X    develop_begin    Mon Apr     5    pmiller Elapsed time: 0.426
  2835. X            12:12:04 1993        days.
  2836. X    develop_end    Mon Apr     5    pmiller
  2837. X            15:23:43 1993
  2838. X    review_pass    Mon Apr     5    pmiller
  2839. X            15:24:21 1993
  2840. X    integrate_begin Mon Apr     5    pmiller Elapsed time: 0.225
  2841. X            15:25:23 1993        days.
  2842. X    integrate_pass    Mon Apr     5    pmiller
  2843. X            17:06:47 1993
  2844. X
  2845. X
  2846. X
  2847. XProject "aegis.2.0", Change 4                     Page 1
  2848. XChange Details                       Tue Aug 17 23:24:23 1993
  2849. X
  2850. XNAME
  2851. X    Project "aegis.2.0", Delta 4, Change 4.
  2852. X
  2853. XSUMMARY
  2854. X    improve default page width behaviour
  2855. X
  2856. XDESCRIPTION
  2857. X    1. Improve default page width behaviour, many users were
  2858. X    seeing strangely narrow listings and error messages
  2859. X    2. Set the umask in the tests.    Some people has very
  2860. X    restrictive umasks, and this caused the tests to fail.
  2861. X    3. Change the names of the functions in the option.c file, to
  2862. X    be consistent with naming scheme used elsewhere.
  2863. X    4. Make aegis more robust about where the /tmp directory is
  2864. X    placed, and cope with /tmp as a symlink.
  2865. X
  2866. X    My thanks to Bob Hollinger <bob@david.wheaton.edu> for
  2867. X    bringing these problems to my attention.
  2868. X
  2869. X    This change is exempt from testing against the baseline.
  2870. X
  2871. XCAUSE
  2872. X    This change was caused by internal_enhancement.
  2873. X
  2874. XFILES
  2875. X    Type    Action    Edit    File Name
  2876. X    ------- ------- ------- -----------
  2877. X    source    modify    2    aegis/administ.c
  2878. X    source    modify    2    aegis/build.c
  2879. X    source    modify    2    aegis/cattr_ed.c
  2880. X    source    modify    2    aegis/change.c
  2881. X    source    modify    2    aegis/chdir.c
  2882. X    source    modify    2    aegis/col.c
  2883. X    source    modify    2    aegis/copyfile.c
  2884. X    source    modify    2    aegis/develop1.c
  2885. X    source    modify    2    aegis/develop2.c
  2886. X    source    modify    2    aegis/diff.c
  2887. X    source    modify    2    aegis/gonzo.c
  2888. X    source    modify    2    aegis/help.c
  2889. X    source    modify    2    aegis/integra1.c
  2890. X    source    modify    2    aegis/integra2.c
  2891. X    source    modify    2    aegis/list.c
  2892. X    source    modify    2    aegis/main.c
  2893. X    source    modify    2    aegis/new_chan.c
  2894. X    source    modify    2    aegis/new_file.c
  2895. X    source    modify    2    aegis/new_proj.c
  2896. X    source    modify    2    aegis/new_rele.c
  2897. X    source    modify    2    aegis/new_test.c
  2898. X    source    modify    2    aegis/os.c
  2899. X    source    modify    2    aegis/pattr_ed.c
  2900. X    source    modify    2    aegis/rem_file.c
  2901. X    source    modify    2    aegis/rem_proj.c
  2902. X    source    modify    2    aegis/review.c
  2903. X    source    modify    2    aegis/reviewer.c
  2904. X    source    modify    2    aegis/test.c
  2905. X    source    modify    2    aegis/undo.c
  2906. X    source    modify    2    aegis/user.c
  2907. X
  2908. X
  2909. X
  2910. XProject "aegis.2.0", Change 4                     Page 2
  2911. XChange Details                       Tue Aug 17 23:24:23 1993
  2912. X
  2913. X    Type    Action    Edit    File Name
  2914. X    ------- ------- ------- -----------
  2915. X    source    modify    2    aegis/version.c
  2916. X    source    modify    2    common/arglex.c
  2917. X    source    modify    2    common/error.c
  2918. X    source    modify    2    common/option.c
  2919. X    source    modify    2    common/option.h
  2920. X    source    modify    2    common/trace.c
  2921. X    source    modify    2    config
  2922. X    source    modify    2    fmtgen/main.c
  2923. X    test    modify    2    test/00/t0001a.sh
  2924. X    test    modify    2    test/00/t0002a.sh
  2925. X    test    modify    2    test/00/t0003a.sh
  2926. X    test    modify    2    test/00/t0004a.sh
  2927. X    test    modify    2    test/00/t0005a.sh
  2928. X    test    modify    2    test/00/t0006a.sh
  2929. X    test    modify    2    test/00/t0007a.sh
  2930. X    test    modify    2    test/00/t0008a.sh
  2931. X    test    modify    2    test/00/t0009a.sh
  2932. X    test    modify    2    test/00/t0010a.sh
  2933. X    test    modify    2    test/00/t0011a.sh
  2934. X    test    modify    2    test/00/t0012a.sh
  2935. X    test    modify    2    test/00/t0013a.sh
  2936. X    test    modify    2    test/00/t0014a.sh
  2937. X    test    modify    2    test/00/t0015a.sh
  2938. X
  2939. XHISTORY
  2940. X    What        When        Who    Comment
  2941. X    ------        ------        -----    ---------
  2942. X    new_change    Mon Apr     5    pmiller
  2943. X            21:37:53 1993
  2944. X    develop_begin    Mon Apr     5    pmiller Elapsed time: 0.000
  2945. X            21:38:03 1993        days.
  2946. X    develop_end    Tue Apr     6    pmiller
  2947. X            11:35:39 1993
  2948. X    review_pass    Tue Apr     6    pmiller
  2949. X            11:36:02 1993
  2950. X    integrate_begin Tue Apr     6    pmiller Elapsed time: 0.294
  2951. X            11:37:12 1993        days.
  2952. X    integrate_pass    Tue Apr     6    pmiller
  2953. X            13:49:29 1993
  2954. X
  2955. X
  2956. X
  2957. XProject "aegis.2.0", Change 5                     Page 1
  2958. XChange Details                       Tue Aug 17 23:24:24 1993
  2959. X
  2960. XNAME
  2961. X    Project "aegis.2.0", Delta 5, Change 5.
  2962. X
  2963. XSUMMARY
  2964. X    fix the csh command aliases
  2965. X
  2966. XDESCRIPTION
  2967. X    1. The cshrc file distributed with aegis failed to isolate two
  2968. X    of the aliases inside quotes.
  2969. X
  2970. X    My thanks to Brian Decker <brian@arthur.melpar.esys.com> for
  2971. X    reporting this problem.
  2972. X
  2973. X    2. On very fast machines, the tests can fail complaining of no
  2974. X    current build.    This is because the last-time-modified
  2975. X    granularity is limited to one second.  Put strategic sleeps
  2976. X    before builds in the tests.
  2977. X
  2978. X    My thanks to Philip Peake <philip@wv.mentorg.com> for
  2979. X    reporting this problem.
  2980. X
  2981. X    This change is exempt from testing against the development
  2982. X    directory.  This change is exempt from testing against the
  2983. X    baseline.
  2984. X
  2985. XCAUSE
  2986. X    This change was caused by external_bug.
  2987. X
  2988. XFILES
  2989. X    Type    Action    Edit    File Name
  2990. X    ------- ------- ------- -----------
  2991. X    source    modify    3    aux/BUILDING.man
  2992. X    source    modify    2    aux/MANIFEST.sh
  2993. X    source    create    1    conf/SunOS-5.1
  2994. X    source    modify    2    lib/cshrc
  2995. X    test    modify    3    test/00/t0002a.sh
  2996. X    test    modify    3    test/00/t0004a.sh
  2997. X    test    modify    3    test/00/t0005a.sh
  2998. X    test    modify    3    test/00/t0006a.sh
  2999. X    test    modify    3    test/00/t0007a.sh
  3000. X    test    modify    3    test/00/t0008a.sh
  3001. X    test    modify    3    test/00/t0009a.sh
  3002. X
  3003. XHISTORY
  3004. X    What        When        Who    Comment
  3005. X    ------        ------        -----    ---------
  3006. X    new_change    Tue Apr 13    pmiller
  3007. X            22:56:11 1993
  3008. X    develop_begin    Tue Apr 13    pmiller Elapsed time: 0.000
  3009. X            22:59:45 1993        days.
  3010. X    develop_end    Wed Apr 14    pmiller
  3011. X            08:54:47 1993
  3012. X    review_pass    Wed Apr 14    pmiller
  3013. X            08:54:57 1993
  3014. X    integrate_begin Wed Apr 14    pmiller Elapsed time: 0.093
  3015. X            08:55:55 1993        days.
  3016. X    integrate_pass    Wed Apr 14    pmiller
  3017. X
  3018. X
  3019. X
  3020. XProject "aegis.2.0", Change 5                     Page 2
  3021. XChange Details                       Tue Aug 17 23:24:24 1993
  3022. X
  3023. X    What        When        Who    Comment
  3024. X    ------        ------        -----    ---------
  3025. X            09:37:44 1993
  3026. X
  3027. X
  3028. X
  3029. XProject "aegis.2.0", Change 6                     Page 1
  3030. XChange Details                       Tue Aug 17 23:24:24 1993
  3031. X
  3032. XNAME
  3033. X    Project "aegis.2.0", Delta 13, Change 6.
  3034. X
  3035. XSUMMARY
  3036. X    add the develop_begin command
  3037. X
  3038. XDESCRIPTION
  3039. X    Add a command that is executed within the development
  3040. X    directory at develop begin time
  3041. X
  3042. X    This change is exempt from testing against the development
  3043. X    directory.  This change is exempt from testing against the
  3044. X    baseline.
  3045. X
  3046. XCAUSE
  3047. X    This change was caused by internal_enhancement.
  3048. X
  3049. XFILES
  3050. X    Type    Action    Edit    File Name
  3051. X    ------- ------- ------- -----------
  3052. X    source    modify    4    aegis/change.c
  3053. X    source    modify    3    aegis/change.h
  3054. X    source    modify    3    aegis/develop2.c
  3055. X    source    modify    3    aegis/integra2.c
  3056. X    source    modify    5    aegis/list.c
  3057. X    source    modify    2    aegis/pconf.def
  3058. X    source    modify    3    doc/c6.0.so
  3059. X
  3060. XHISTORY
  3061. X    What        When        Who    Comment
  3062. X    ------        ------        -----    ---------
  3063. X    new_change    Tue Apr 13    pmiller Elapsed time: 41.351
  3064. X            22:59:39 1993        days.
  3065. X    develop_begin    Fri Jun 11    pmiller Elapsed time: 0.320
  3066. X            10:37:34 1993        days.
  3067. X    develop_end    Fri Jun 11    pmiller
  3068. X            13:01:43 1993
  3069. X    review_pass    Fri Jun 11    pmiller
  3070. X            13:01:56 1993
  3071. X    integrate_begin Fri Jun 11    pmiller Elapsed time: 0.160
  3072. X            13:03:04 1993        days.
  3073. X    integrate_pass    Fri Jun 11    pmiller
  3074. X            14:15:16 1993
  3075. X
  3076. X
  3077. X
  3078. XProject "aegis.2.0", Change 7                     Page 1
  3079. XChange Details                       Tue Aug 17 23:24:25 1993
  3080. X
  3081. XNAME
  3082. X    Project "aegis.2.0", Delta 6, Change 7.
  3083. X
  3084. XSUMMARY
  3085. X    Emphasize tests as part of source in user guide
  3086. X
  3087. XDESCRIPTION
  3088. X    Feedback frequently contained the misconception that tests
  3089. X    were not editable after they are created.  Add items in manual
  3090. X    entries and the User Guide to make it clear that tests are
  3091. X    source files, and subject to all of the same process.
  3092. X
  3093. X    This change is exempt from testing against the development
  3094. X    directory.  This change is exempt from testing against the
  3095. X    baseline.
  3096. X
  3097. XCAUSE
  3098. X    This change was caused by internal_enhancement.
  3099. X
  3100. XFILES
  3101. X    Type    Action    Edit    File Name
  3102. X    ------- ------- ------- -----------
  3103. X    source    modify    3    aegis/copyfile.c
  3104. X    source    modify    3    aegis/new_test.c
  3105. X    source    modify    3    doc/c2.1.so
  3106. X    source    modify    3    doc/c2.5.so
  3107. X    source    modify    3    doc/c7.1.so
  3108. X    source    modify    3    man1/aecp.1
  3109. X    source    modify    2    man1/aent.1
  3110. X
  3111. XHISTORY
  3112. X    What        When        Who    Comment
  3113. X    ------        ------        -----    ---------
  3114. X    new_change    Tue Apr 20    pmiller
  3115. X            11:39:15 1993
  3116. X    develop_begin    Tue Apr 20    pmiller Elapsed time: 10.252
  3117. X            11:39:30 1993        days.
  3118. X    develop_end    Tue May     4    pmiller
  3119. X            13:32:50 1993
  3120. X    develop_end_    Tue May     4    pmiller Elapsed time: 0.033
  3121. X    undo        13:33:39 1993        days.
  3122. X    develop_end    Tue May     4    pmiller
  3123. X            13:48:41 1993
  3124. X    review_pass    Tue May     4    pmiller
  3125. X            13:49:43 1993
  3126. X    integrate_begin Tue May     4    pmiller Elapsed time: 0.375
  3127. X            13:50:38 1993        days.
  3128. X    integrate_pass    Tue May     4    pmiller
  3129. X            16:39:26 1993
  3130. X
  3131. X
  3132. X
  3133. XProject "aegis.2.0", Change 8                     Page 1
  3134. XChange Details                       Tue Aug 17 23:24:26 1993
  3135. X
  3136. XNAME
  3137. X    Project "aegis.2.0", Delta 7, Change 8.
  3138. X
  3139. XSUMMARY
  3140. X    Typo in HP support
  3141. X
  3142. XDESCRIPTION
  3143. X    Typo in HP support in the common/ansi.c file resulted in
  3144. X    confusion about correct configuration.
  3145. X
  3146. X    My thanks to <andy@pic.melco.co.jp> for reporting this problem.
  3147. X
  3148. X    This change is exempt from testing against the development
  3149. X    directory.  This change is exempt from testing against the
  3150. X    baseline.
  3151. X
  3152. XCAUSE
  3153. X    This change was caused by external_bug.
  3154. X
  3155. XFILES
  3156. X    Type    Action    Edit    File Name
  3157. X    ------- ------- ------- -----------
  3158. X    source    modify    2    common/ansi.c
  3159. X    source    modify    2    conf/hpux-8.07
  3160. X
  3161. XHISTORY
  3162. X    What        When        Who    Comment
  3163. X    ------        ------        -----    ---------
  3164. X    new_change    Mon May 10    pmiller
  3165. X            09:37:51 1993
  3166. X    develop_begin    Mon May 10    pmiller Elapsed time: 0.055
  3167. X            09:38:07 1993        days.
  3168. X    develop_end    Mon May 10    pmiller
  3169. X            10:02:39 1993
  3170. X    review_pass    Mon May 10    pmiller
  3171. X            10:04:12 1993
  3172. X    integrate_begin Mon May 10    pmiller Elapsed time: 0.174
  3173. X            10:05:17 1993        days.
  3174. X    integrate_pass    Mon May 10    pmiller
  3175. X            11:23:27 1993
  3176. X
  3177. X
  3178. X
  3179. XProject "aegis.2.0", Change 9                     Page 1
  3180. XChange Details                       Tue Aug 17 23:24:27 1993
  3181. X
  3182. XNAME
  3183. X    Project "aegis.2.0", Delta 9, Change 9.
  3184. X
  3185. XSUMMARY
  3186. X    add Linux config
  3187. X
  3188. XDESCRIPTION
  3189. X    Add configuration for Linux 0.99
  3190. X
  3191. X    My thanks to Pat Eyler <pate@cpu.us.dynix.com> for providing
  3192. X    this information.
  3193. X
  3194. X    This change is exempt from testing against the baseline.
  3195. X
  3196. XCAUSE
  3197. X    This change was caused by external_enhancement.
  3198. X
  3199. XFILES
  3200. X    Type    Action    Edit    File Name
  3201. X    ------- ------- ------- -----------
  3202. X    source    modify    4    aux/BUILDING.man
  3203. X    source    modify    4    aux/README.man
  3204. X    source    modify    3    common/ansi.c
  3205. X    source    modify    2    conf/AIX-3.2
  3206. X    source    modify    2    conf/ConvexOS-10
  3207. X    source    create    1    conf/Linux-0.99
  3208. X    source    modify    2    conf/SCO-2.4
  3209. X    source    modify    2    conf/SunOS-4.1.1
  3210. X    source    modify    2    conf/SunOS-4.1.2
  3211. X    source    modify    2    conf/SunOS-4.1.3
  3212. X    source    modify    2    conf/SunOS-5.1
  3213. X    source    modify    2    conf/SysV-4.0
  3214. X    source    modify    2    conf/ULTRIX-4.2
  3215. X    source    modify    2    conf/apollo
  3216. X    source    modify    2    conf/dcosx
  3217. X    source    modify    2    conf/dgux-5.4.1
  3218. X    source    modify    4    conf/hpux-8.07
  3219. X    source    modify    3    config
  3220. X    test    modify    3    test/00/t0001a.sh
  3221. X    test    modify    4    test/00/t0002a.sh
  3222. X    test    modify    3    test/00/t0003a.sh
  3223. X    test    modify    4    test/00/t0004a.sh
  3224. X    test    modify    4    test/00/t0005a.sh
  3225. X    test    modify    4    test/00/t0006a.sh
  3226. X    test    modify    4    test/00/t0007a.sh
  3227. X    test    modify    4    test/00/t0008a.sh
  3228. X    test    modify    4    test/00/t0009a.sh
  3229. X    test    modify    3    test/00/t0010a.sh
  3230. X    test    modify    3    test/00/t0011a.sh
  3231. X    test    modify    3    test/00/t0012a.sh
  3232. X    test    modify    3    test/00/t0013a.sh
  3233. X    test    modify    3    test/00/t0014a.sh
  3234. X    test    modify    3    test/00/t0015a.sh
  3235. X
  3236. X
  3237. X
  3238. XProject "aegis.2.0", Change 9                     Page 2
  3239. XChange Details                       Tue Aug 17 23:24:27 1993
  3240. X
  3241. XHISTORY
  3242. X    What        When        Who    Comment
  3243. X    ------        ------        -----    ---------
  3244. X    new_change    Wed May 19    pmiller
  3245. X            12:05:49 1993
  3246. X    develop_begin    Wed May 19    pmiller Elapsed time: 0.099
  3247. X            12:06:39 1993        days.
  3248. X    develop_end    Wed May 19    pmiller Elapsed time: 0.594
  3249. X            12:51:01 1993        days.
  3250. X    develop_end_    Thu May 20    pmiller Elapsed time: 3.676
  3251. X    undo        09:48:12 1993        days.
  3252. X    develop_end    Tue May 25    pmiller
  3253. X            14:52:11 1993
  3254. X    review_pass    Tue May 25    pmiller
  3255. X            14:52:23 1993
  3256. X    integrate_begin Tue May 25    pmiller Elapsed time: 0.243
  3257. X            14:53:47 1993        days.
  3258. X    integrate_pass    Tue May 25    pmiller
  3259. X            16:43:01 1993
  3260. X
  3261. X
  3262. X
  3263. XProject "aegis.2.0", Change 10                     Page 1
  3264. XChange Details                       Tue Aug 17 23:24:27 1993
  3265. X
  3266. XNAME
  3267. X    Project "aegis.2.0", Delta 8, Change 10.
  3268. X
  3269. XSUMMARY
  3270. X    fix problem in glue
  3271. X
  3272. XDESCRIPTION
  3273. X    Missing variable declarations prevented the glue from
  3274. X    compiling correctly.
  3275. X
  3276. X    My thanks to Thierry Excoffier <exco@ligiahp.univ-lyon1.fr>
  3277. X    for reporting this problem.
  3278. X
  3279. X    This change is exempt from testing against the development
  3280. X    directory.  This change is exempt from testing against the
  3281. X    baseline.
  3282. X
  3283. XCAUSE
  3284. X    This change was caused by external_bug.
  3285. X
  3286. XFILES
  3287. X    Type    Action    Edit    File Name
  3288. X    ------- ------- ------- -----------
  3289. X    source    modify    2    aegis/glue.c
  3290. X    source    modify    3    conf/hpux-8.07
  3291. X
  3292. XHISTORY
  3293. X    What        When        Who    Comment
  3294. X    ------        ------        -----    ---------
  3295. X    new_change    Tue May 25    pmiller
  3296. X            09:06:33 1993
  3297. X    develop_begin    Tue May 25    pmiller Elapsed time: 0.104
  3298. X            09:06:41 1993        days.
  3299. X    develop_end    Tue May 25    pmiller
  3300. X            09:53:25 1993
  3301. X    review_pass    Tue May 25    pmiller
  3302. X            09:59:41 1993
  3303. X    integrate_begin Tue May 25    pmiller Elapsed time: 0.577
  3304. X            10:01:08 1993        days.
  3305. X    integrate_pass    Tue May 25    pmiller
  3306. X            14:20:59 1993
  3307. X
  3308. X
  3309. X
  3310. XProject "aegis.2.0", Change 11                     Page 1
  3311. XChange Details                       Tue Aug 17 23:24:28 1993
  3312. X
  3313. XNAME
  3314. X    Project "aegis.2.0", Delta 10, Change 11.
  3315. X
  3316. XSUMMARY
  3317. X    add list locks functionality
  3318. X
  3319. XDESCRIPTION
  3320. X    add list locks functionality
  3321. X
  3322. X    This change is exempt from testing against the development
  3323. X    directory.  This change is exempt from testing against the
  3324. X    baseline.
  3325. X
  3326. XCAUSE
  3327. X    This change was caused by internal_enhancement.
  3328. X
  3329. XFILES
  3330. X    Type    Action    Edit    File Name
  3331. X    ------- ------- ------- -----------
  3332. X    source    modify    3    aegis/glue.c
  3333. X    source    modify    3    aegis/list.c
  3334. X    source    modify    2    aegis/list.h
  3335. X    source    modify    2    aegis/lock.c
  3336. X    source    modify    2    aegis/lock.h
  3337. X    source    modify    2    man1/ael.1
  3338. X
  3339. XHISTORY
  3340. X    What        When        Who    Comment
  3341. X    ------        ------        -----    ---------
  3342. X    new_change    Thu May 27    pmiller
  3343. X            09:42:36 1993
  3344. X    develop_begin    Thu May 27    pmiller Elapsed time: 0.689
  3345. X            09:42:50 1993        days.
  3346. X    develop_end    Thu May 27    pmiller
  3347. X            14:53:00 1993
  3348. X    review_pass    Thu May 27    pmiller
  3349. X            14:53:16 1993
  3350. X    integrate_begin Thu May 27    pmiller Elapsed time: 0.788
  3351. X            14:54:45 1993        days.
  3352. X    integrate_pass    Thu May 27    pmiller
  3353. X            20:49:14 1993
  3354. X
  3355. X
  3356. X
  3357. XProject "aegis.2.0", Change 12                     Page 1
  3358. XChange Details                       Tue Aug 17 23:24:29 1993
  3359. X
  3360. XNAME
  3361. X    Project "aegis.2.0", Delta 11, Change 12.
  3362. X
  3363. XSUMMARY
  3364. X    cope with absent config file
  3365. X
  3366. XDESCRIPTION
  3367. X    When a project does not have a ``config'' file, the aegis -
  3368. X    build command dumps core.  This was because a (false)
  3369. X    assumption was made about the presence of this file.
  3370. X
  3371. X    My thanks to Ian Darwin <ian@sq.com> for reporting this
  3372. X    problem.
  3373. X
  3374. X    This change is exempt from testing against the development
  3375. X    directory.  This change is exempt from testing against the
  3376. X    baseline.
  3377. X
  3378. XCAUSE
  3379. X    This change was caused by external_bug.
  3380. X
  3381. XFILES
  3382. X    Type    Action    Edit    File Name
  3383. X    ------- ------- ------- -----------
  3384. X    source    modify    3    aegis/build.c
  3385. X    source    modify    3    aegis/change.c
  3386. X    source    modify    2    aegis/change.h
  3387. X    source    modify    4    aegis/copyfile.c
  3388. X
  3389. XHISTORY
  3390. X    What        When        Who    Comment
  3391. X    ------        ------        -----    ---------
  3392. X    new_change    Sun Jun     6    pmiller
  3393. X            00:25:38 1993
  3394. X    develop_begin    Sun Jun     6    pmiller Elapsed time: 0.786
  3395. X            00:25:43 1993        days.
  3396. X    develop_end    Mon Jun     7    pmiller Elapsed time: 0.108
  3397. X            15:19:37 1993        days.
  3398. X    review_pass    Mon Jun     7    pmiller
  3399. X            16:08:04 1993
  3400. X    integrate_begin Mon Jun     7    pmiller Elapsed time: 0.309
  3401. X            16:10:01 1993        days.
  3402. X    integrate_pass    Tue Jun     8    pmiller
  3403. X            10:58:54 1993
  3404. X
  3405. X
  3406. X
  3407. XProject "aegis.2.0", Change 13                     Page 1
  3408. XChange Details                       Tue Aug 17 23:24:30 1993
  3409. X
  3410. XNAME
  3411. X    Project "aegis.2.0", Delta 12, Change 13.
  3412. X
  3413. XSUMMARY
  3414. X    add the aemv command
  3415. X
  3416. XDESCRIPTION
  3417. X    add the aemv command
  3418. X
  3419. XCAUSE
  3420. X    This change was caused by internal_enhancement.
  3421. X
  3422. XFILES
  3423. X    Type    Action    Edit    File Name
  3424. X    ------- ------- ------- -----------
  3425. X    source    modify    2    aegis/arglex2.h
  3426. X    source    modify    2    aegis/cstate.def
  3427. X    source    modify    3    aegis/diff.c
  3428. X    source    modify    4    aegis/list.c
  3429. X    source    modify    3    aegis/main.c
  3430. X    source    create    1    aegis/mv.c
  3431. X    source    create    1    aegis/mv.h
  3432. X    source    modify    2    aux/Howto.cook
  3433. X    source    modify    5    aux/README.man
  3434. X    source    create    1    aux/new.1.4.so
  3435. X    source    create    1    aux/new.2.0.so
  3436. X    source    modify    3    lib/cshrc
  3437. X    source    modify    2    lib/profile
  3438. X    source    modify    3    man1/aegis.1
  3439. X    source    create    1    man1/aemv.1
  3440. X    source    modify    3    man5/aecstate.5
  3441. X    test    create    1    test/00/t0016a.sh
  3442. X
  3443. XHISTORY
  3444. X    What        When        Who    Comment
  3445. X    ------        ------        -----    ---------
  3446. X    new_change    Thu Jun 10    pmiller
  3447. X            12:13:38 1993
  3448. X    develop_begin    Thu Jun 10    pmiller Elapsed time: 0.682
  3449. X            12:13:55 1993        days.
  3450. X    develop_end    Fri Jun 11    pmiller
  3451. X            09:50:57 1993
  3452. X    review_pass    Fri Jun 11    pmiller
  3453. X            09:51:24 1993
  3454. X    integrate_begin Fri Jun 11    pmiller Elapsed time: 0.141
  3455. X            09:52:28 1993        days.
  3456. X    integrate_pass    Fri Jun 11    pmiller
  3457. X            10:56:04 1993
  3458. X
  3459. X
  3460. X
  3461. XProject "aegis.2.0", Change 14                     Page 1
  3462. XChange Details                       Tue Aug 17 23:24:31 1993
  3463. X
  3464. XNAME
  3465. X    Project "aegis.2.0", Delta 14, Change 14.
  3466. X
  3467. XSUMMARY
  3468. X    make log files behave more usefully
  3469. X
  3470. XDESCRIPTION
  3471. X    Change log files so that if they have been modified "recently"
  3472. X    then the log will append, rather than replace.     This means
  3473. X    that patterns of use like "aeb && aet; vi aegis.log" will not
  3474. X    wipe out the compilation messages.
  3475. X
  3476. X    This change is exempt from testing against the development
  3477. X    directory.  This change is exempt from testing against the
  3478. X    baseline.
  3479. X
  3480. XCAUSE
  3481. X    This change was caused by internal_enhancement.
  3482. X
  3483. XFILES
  3484. X    Type    Action    Edit    File Name
  3485. X    ------- ------- ------- -----------
  3486. X    source    modify    2    aegis/log.c
  3487. X    source    modify    4    config
  3488. X
  3489. XHISTORY
  3490. X    What        When        Who    Comment
  3491. X    ------        ------        -----    ---------
  3492. X    new_change    Fri Jun 11    pmiller
  3493. X            14:29:44 1993
  3494. X    develop_begin    Fri Jun 11    pmiller Elapsed time: 0.234
  3495. X            14:29:51 1993        days.
  3496. X    develop_end    Fri Jun 11    pmiller
  3497. X            16:15:22 1993
  3498. X    review_pass    Fri Jun 11    pmiller
  3499. X            16:15:54 1993
  3500. X    integrate_begin Fri Jun 11    pmiller Elapsed time: 0.000
  3501. X            16:17:04 1993        days.
  3502. X    integrate_pass    Sat Jun 12    pmiller
  3503. X            00:03:22 1993
  3504. X
  3505. X
  3506. X
  3507. XProject "aegis.2.0", Change 15                     Page 1
  3508. XChange Details                       Tue Aug 17 23:24:31 1993
  3509. X
  3510. XNAME
  3511. X    Project "aegis.2.0", Delta 15, Change 15.
  3512. X
  3513. XSUMMARY
  3514. X    guess the default project and/or change from the pathname of
  3515. X    the current directory
  3516. X
  3517. XDESCRIPTION
  3518. X    In many cases the project and/or change can be guessed by
  3519. X    exmining the pathname of the current directory.
  3520. X
  3521. X    My thanks to Rick Duff <beta@edfub3.ctis.af.mil> for this
  3522. X    suggestion.
  3523. X
  3524. X    This change is exempt from testing against the development
  3525. X    directory.  This change is exempt from testing against the
  3526. X    baseline.
  3527. X
  3528. XCAUSE
  3529. X    This change was caused by external_enhancement.
  3530. X
  3531. XFILES
  3532. X    Type    Action    Edit    File Name
  3533. X    ------- ------- ------- -----------
  3534. X    source    modify    3    aegis/user.c
  3535. X    source    modify    3    aux/Howto.cook
  3536. X    source    modify    2    aux/new.2.0.so
  3537. X
  3538. XHISTORY
  3539. X    What        When        Who    Comment
  3540. X    ------        ------        -----    ---------
  3541. X    new_change    Wed Jul 21    pmiller
  3542. X            14:54:26 1993
  3543. X    develop_begin    Wed Jul 21    pmiller Elapsed time: 0.178
  3544. X            14:54:34 1993        days.
  3545. X    develop_end    Wed Jul 21    pmiller
  3546. X            16:14:44 1993
  3547. X    review_pass    Wed Jul 21    pmiller
  3548. X            16:16:19 1993
  3549. X    integrate_begin Wed Jul 21    pmiller Elapsed time: 0.084
  3550. X            16:17:38 1993        days.
  3551. X    integrate_pass    Wed Jul 21    pmiller
  3552. X            16:55:18 1993
  3553. X
  3554. X
  3555. X
  3556. XProject "aegis.2.0", Change 16                     Page 1
  3557. XChange Details                       Tue Aug 17 23:24:32 1993
  3558. X
  3559. XNAME
  3560. X    Project "aegis.2.0", Delta 16, Change 16.
  3561. X
  3562. XSUMMARY
  3563. X    add new cause - internal_improvement
  3564. X
  3565. XDESCRIPTION
  3566. X    Two new causes for changes have been created, internal_
  3567. X    improvement and external_improvement.  These are for cases
  3568. X    where existing functionality has been improved, rather than
  3569. X    new functionality added.  Using these causes, the change must
  3570. X    pass the entire existing regression test suite, unless the
  3571. X    change attributes are altered to relax this.
  3572. X
  3573. X    My thanks to Rick Duff <beta@edfub3.ctis.af.mil> for this
  3574. X    suggestion.
  3575. X
  3576. X    This change is exempt from testing against the development
  3577. X    directory.  This change is exempt from testing against the
  3578. X    baseline.
  3579. X
  3580. XCAUSE
  3581. X    This change was caused by external_enhancement.
  3582. X
  3583. XFILES
  3584. X    Type    Action    Edit    File Name
  3585. X    ------- ------- ------- -----------
  3586. X    source    modify    4    aegis/build.c
  3587. X    source    modify    2    aegis/cattr.def
  3588. X    source    modify    3    aegis/cattr_ed.c
  3589. X    source    modify    5    aegis/change.c
  3590. X    source    modify    2    aegis/common.def
  3591. X    source    modify    5    aegis/copyfile.c
  3592. X    source    modify    3    aegis/cstate.def
  3593. X    source    modify    4    aegis/develop2.c
  3594. X    source    modify    4    aegis/integra2.c
  3595. X    source    modify    6    aegis/list.c
  3596. X    source    modify    2    aegis/mv.c
  3597. X    source    modify    3    aegis/new_chan.c
  3598. X    source    modify    3    aegis/new_file.c
  3599. X    source    modify    4    aegis/new_test.c
  3600. X    source    modify    3    aegis/rem_file.c
  3601. X    source    modify    3    aegis/review.c
  3602. X    source    modify    3    aegis/test.c
  3603. X    source    modify    2    man5/aecattr.so
  3604. X
  3605. XHISTORY
  3606. X    What        When        Who    Comment
  3607. X    ------        ------        -----    ---------
  3608. X    new_change    Wed Jul 21    pmiller Elapsed time: 0.031
  3609. X            16:26:29 1993        days.
  3610. X    develop_begin    Wed Jul 21    pmiller Elapsed time: 0.362
  3611. X            16:40:24 1993        days.
  3612. X    develop_end    Thu Jul 22    pmiller
  3613. X            11:53:10 1993
  3614. X    review_pass    Thu Jul 22    pmiller
  3615. X            11:57:17 1993
  3616. X
  3617. X
  3618. X
  3619. XProject "aegis.2.0", Change 16                     Page 2
  3620. XChange Details                       Tue Aug 17 23:24:32 1993
  3621. X
  3622. X    What        When        Who    Comment
  3623. X    ------        ------        -----    ---------
  3624. X    integrate_begin Thu Jul 22    pmiller Elapsed time: 0.149
  3625. X            11:58:58 1993        days.
  3626. X    integrate_pass    Thu Jul 22    pmiller
  3627. X            13:05:58 1993
  3628. X
  3629. X
  3630. X
  3631. XProject "aegis.2.0", Change 17                     Page 1
  3632. XChange Details                       Tue Aug 17 23:24:33 1993
  3633. X
  3634. XNAME
  3635. X    Project "aegis.2.0", Delta 18, Change 17.
  3636. X
  3637. XSUMMARY
  3638. X    clean up, in preparation for release
  3639. X
  3640. XDESCRIPTION
  3641. X    clean up, in preparation for release
  3642. X
  3643. X    This change is exempt from testing against the development
  3644. X    directory.  This change is exempt from testing against the
  3645. X    baseline.
  3646. X
  3647. XCAUSE
  3648. X    This change was caused by internal_enhancement.
  3649. X
  3650. XFILES
  3651. X    Type    Action    Edit    File Name
  3652. X    ------- ------- ------- -----------
  3653. X    source    modify    2    aegis/mv.h
  3654. X    source    remove    2    aux/BETA.man
  3655. X    source    modify    5    aux/BUILDING.man
  3656. X    source    modify    3    aux/MANIFEST.sh
  3657. X    source    modify    6    aux/README.man
  3658. X    source    modify    2    aux/patches.sh
  3659. X
  3660. XHISTORY
  3661. X    What        When        Who    Comment
  3662. X    ------        ------        -----    ---------
  3663. X    new_change    Thu Jul 22    pmiller
  3664. X            10:44:25 1993
  3665. X    develop_begin    Thu Jul 22    pmiller Elapsed time: 0.554
  3666. X            10:45:07 1993        days.
  3667. X    develop_end    Thu Jul 22    pmiller
  3668. X            14:54:37 1993
  3669. X    review_pass    Thu Jul 22    pmiller
  3670. X            14:59:11 1993
  3671. X    integrate_begin Thu Jul 22    pmiller Elapsed time: 0.967
  3672. X            15:08:12 1993        days.
  3673. X    integrate_fail    Fri Jul 23    pmiller abuild problems on non-
  3674. X            14:53:15 1993        ansi compilers
  3675. X                        Elapsed time: 0.124
  3676. X                        days.
  3677. X    develop_end    Fri Jul 23    pmiller
  3678. X            15:49:04 1993
  3679. X    review_pass    Fri Jul 23    pmiller
  3680. X            15:49:33 1993
  3681. X    integrate_begin Fri Jul 23    pmiller Elapsed time: 1.690
  3682. X            15:50:48 1993        days.
  3683. X    integrate_pass    Sat Jul 24    pmiller
  3684. X            21:01:25 1993
  3685. X
  3686. X
  3687. X
  3688. XProject "aegis.2.0", Change 18                     Page 1
  3689. XChange Details                       Tue Aug 17 23:24:33 1993
  3690. X
  3691. XNAME
  3692. X    Project "aegis.2.0", Delta 19, Change 18.
  3693. X
  3694. XSUMMARY
  3695. X    add -edit options to aeca aenc and aepa commands
  3696. X
  3697. XDESCRIPTION
  3698. X    The previous method of listing the options into a file then
  3699. X    editing the listing and the feeding this back into aegis was
  3700. X    clumsy and anoying.
  3701. X
  3702. X    This change must pass a full regression test.  This change is
  3703. X    exempt from testing against the development directory.    This
  3704. X    change is exempt from testing against the baseline.
  3705. X
  3706. XCAUSE
  3707. X    This change was caused by internal_enhancement.
  3708. X
  3709. XFILES
  3710. X    Type    Action    Edit    File Name
  3711. X    ------- ------- ------- -----------
  3712. X    source    modify    3    aegis/arglex2.h
  3713. X    source    modify    4    aegis/cattr_ed.c
  3714. X    source    modify    2    aegis/cattr_ed.h
  3715. X    source    modify    5    aegis/integra2.c
  3716. X    source    modify    4    aegis/main.c
  3717. X    source    modify    4    aegis/new_chan.c
  3718. X    source    modify    3    aegis/os.c
  3719. X    source    modify    2    aegis/os.h
  3720. X    source    modify    3    aegis/pattr_ed.c
  3721. X    source    modify    4    aegis/review.c
  3722. X    source    modify    3    aux/new.2.0.so
  3723. X    source    modify    4    doc/c2.1.so
  3724. X    source    modify    3    doc/c2.4.so
  3725. X    source    modify    3    doc/c5.0.so
  3726. X    source    modify    2    man1/aeca.1
  3727. X    source    modify    2    man1/aeif.1
  3728. X    source    modify    2    man1/aenc.1
  3729. X    source    modify    2    man1/aepa.1
  3730. X    source    modify    3    man1/aerf.1
  3731. X    source    create    1    man1/o_edit.so
  3732. X
  3733. XHISTORY
  3734. X    What        When        Who    Comment
  3735. X    ------        ------        -----    ---------
  3736. X    new_change    Sat Jul 24    pmiller
  3737. X            21:11:07 1993
  3738. X    develop_begin    Sat Jul 24    pmiller Elapsed time: 1.121
  3739. X            21:11:19 1993        days.
  3740. X    develop_end    Sun Jul 25    pmiller Elapsed time: 0.033
  3741. X            22:05:43 1993        days.
  3742. X    review_fail    Sun Jul 25    pmiller (a) change user guide
  3743. X            22:20:29 1993        to use new features
  3744. X                        (b) forgot the aerfail
  3745. X                        and aeifail commands
  3746. X                        Elapsed time: 0.309
  3747. X                        days.
  3748. X
  3749. X
  3750. X
  3751. XProject "aegis.2.0", Change 18                     Page 2
  3752. XChange Details                       Tue Aug 17 23:24:33 1993
  3753. X
  3754. X    What        When        Who    Comment
  3755. X    ------        ------        -----    ---------
  3756. X    develop_end    Tue Jul 27    pmiller
  3757. X            09:39:34 1993
  3758. X    review_pass    Tue Jul 27    pmiller
  3759. X            09:46:32 1993
  3760. X    integrate_begin Tue Jul 27    pmiller Elapsed time: 0.419
  3761. X            09:47:44 1993        days.
  3762. X    integrate_pass    Tue Jul 27    pmiller
  3763. X            12:56:06 1993
  3764. X
  3765. X
  3766. X
  3767. XProject "aegis.2.0", Change 19                     Page 1
  3768. XChange Details                       Tue Aug 17 23:24:34 1993
  3769. X
  3770. XNAME
  3771. X    Project "aegis.2.0", Delta 20, Change 19.
  3772. X
  3773. XSUMMARY
  3774. X    fix 'enum boolean' problem
  3775. X
  3776. XDESCRIPTION
  3777. X    Many SVR4 flavours of unix have a bug in sys/types.h where
  3778. X    they define an enum tag of ``boolean'', clearly breaking the
  3779. X    ANSI C rules (adopted by POSIX) which say that system names
  3780. X    must be _* or *_t and no others.     Sigh.
  3781. X
  3782. X    Change all fmtgen generated enum tags to have a _ty suffix, to
  3783. X    avoid this problem.
  3784. X
  3785. X    This change must pass a full regression test.  This change is
  3786. X    exempt from testing against the development directory.    This
  3787. X    change is exempt from testing against the baseline.
  3788. X
  3789. XCAUSE
  3790. X    This change was caused by internal_improvement.
  3791. X
  3792. XFILES
  3793. X    Type    Action    Edit    File Name
  3794. X    ------- ------- ------- -----------
  3795. X    source    modify    5    aegis/new_chan.c
  3796. X    source    modify    6    aux/BUILDING.man
  3797. X    source    remove    2    aux/BUILDpyr.man
  3798. X    source    modify    2    aux/Makefile.sh
  3799. X    source    modify    2    fmtgen/type_enum.c
  3800. X
  3801. XHISTORY
  3802. X    What        When        Who    Comment
  3803. X    ------        ------        -----    ---------
  3804. X    new_change    Sun Aug     1    pmiller
  3805. X            22:55:52 1993
  3806. X    develop_begin    Sun Aug     1    pmiller Elapsed time: 0.876
  3807. X            22:56:06 1993        days.
  3808. X    develop_end    Mon Aug     2    pmiller
  3809. X            22:00:13 1993
  3810. X    review_pass    Mon Aug     2    pmiller
  3811. X            22:02:45 1993
  3812. X    integrate_begin Mon Aug     2    pmiller Elapsed time: 0.170
  3813. X            22:04:02 1993        days.
  3814. X    integrate_pass    Mon Aug     2    pmiller
  3815. X            23:20:19 1993
  3816. X
  3817. X
  3818. X
  3819. XProject "aegis.2.0", Change 20                     Page 1
  3820. XChange Details                       Tue Aug 17 23:24:35 1993
  3821. X
  3822. XNAME
  3823. X    Project "aegis.2.0", Delta 21, Change 20.
  3824. X
  3825. XSUMMARY
  3826. X    add -MAJor and -MINOr options to aenpr
  3827. X
  3828. XDESCRIPTION
  3829. X    add -MAJor and -MINOr options to aenpr
  3830. X
  3831. X    This change is exempt from testing against the development
  3832. X    directory.  This change is exempt from testing against the
  3833. X    baseline.
  3834. X
  3835. XCAUSE
  3836. X    This change was caused by internal_enhancement.
  3837. X
  3838. XFILES
  3839. X    Type    Action    Edit    File Name
  3840. X    ------- ------- ------- -----------
  3841. X    source    modify    3    aegis/new_proj.c
  3842. X    source    modify    4    aux/new.2.0.so
  3843. X    source    modify    3    man1/aenpr.1
  3844. X
  3845. XHISTORY
  3846. X    What        When        Who    Comment
  3847. X    ------        ------        -----    ---------
  3848. X    new_change    Mon Aug     2    pmiller
  3849. X            22:13:10 1993
  3850. X    develop_begin    Mon Aug     2    pmiller Elapsed time: 0.112
  3851. X            22:13:17 1993        days.
  3852. X    develop_end    Mon Aug     2    pmiller
  3853. X            23:03:45 1993
  3854. X    review_pass    Mon Aug     2    pmiller Elapsed time: 0.041
  3855. X            23:06:38 1993        days.
  3856. X    integrate_begin Mon Aug     2    pmiller Elapsed time: 0.745
  3857. X            23:25:11 1993        days.
  3858. X    integrate_pass    Tue Aug     3    pmiller
  3859. X            21:30:37 1993
  3860. X
  3861. X
  3862. X
  3863. XProject "aegis.2.0", Change 21                     Page 1
  3864. XChange Details                       Tue Aug 17 23:24:36 1993
  3865. X
  3866. XNAME
  3867. X    Project "aegis.2.0", Delta 22, Change 21.
  3868. X
  3869. XSUMMARY
  3870. X    add the -ANticipate option to aed
  3871. X
  3872. XDESCRIPTION
  3873. X    There is fequently a long wait, sometimes several days, before
  3874. X    a change is integrated.     In that time other developers will
  3875. X    want to synchronize their changes to match the about-to-be-
  3876. X    integrated change.       The -ANticipate option allows them
  3877. X    to do this.
  3878. X
  3879. X    My thanks to David I. Bell <dbell@auug.org.au> for this
  3880. X    suggestion.
  3881. X
  3882. XCAUSE
  3883. X    This change was caused by internal_enhancement.
  3884. X
  3885. XFILES
  3886. X    Type    Action    Edit    File Name
  3887. X    ------- ------- ------- -----------
  3888. X    source    modify    4    aegis/diff.c
  3889. X    source    modify    5    aux/new.2.0.so
  3890. X    test    create    1    test/00/t0017a.sh
  3891. X
  3892. XHISTORY
  3893. X    What        When        Who    Comment
  3894. X    ------        ------        -----    ---------
  3895. X    new_change    Tue Aug     3    pmiller
  3896. X            21:43:45 1993
  3897. X    develop_begin    Tue Aug     3    pmiller Elapsed time: 1.986
  3898. X            21:43:50 1993        days.
  3899. X    develop_end    Fri Aug     6    pmiller
  3900. X            14:07:20 1993
  3901. X    review_pass    Fri Aug     6    pmiller
  3902. X            14:07:37 1993
  3903. X    integrate_begin Fri Aug     6    pmiller Elapsed time: 0.000
  3904. X            14:08:56 1993        days.
  3905. X    integrate_pass    Sat Aug     7    pmiller
  3906. X            21:48:58 1993
  3907. X
  3908. X
  3909. X
  3910. XProject "aegis.2.0", Change 22                     Page 1
  3911. XChange Details                       Tue Aug 17 23:24:37 1993
  3912. X
  3913. XNAME
  3914. X    Project "aegis.2.0", Delta 23, Change 22.
  3915. X
  3916. XSUMMARY
  3917. X    project attributes could be edited by anyone
  3918. X
  3919. XDESCRIPTION
  3920. X    There was no check that the user editing the projewct
  3921. X    attributes was an administrator.  This is not fixed.
  3922. X
  3923. X    This change is exempt from testing against the development
  3924. X    directory.  This change is exempt from testing against the
  3925. X    baseline.
  3926. X
  3927. XCAUSE
  3928. X    This change was caused by internal_bug.
  3929. X
  3930. XFILES
  3931. X    Type    Action    Edit    File Name
  3932. X    ------- ------- ------- -----------
  3933. X    source    modify    6    aegis/copyfile.c
  3934. X    source    modify    5    aegis/diff.c
  3935. X    source    modify    4    aegis/pattr_ed.c
  3936. X    source    modify    4    man1/aecp.1
  3937. X    source    modify    3    man1/aed.1
  3938. X    source    modify    2    man1/o_anticip.so
  3939. X
  3940. XHISTORY
  3941. X    What        When        Who    Comment
  3942. X    ------        ------        -----    ---------
  3943. X    new_change    Sat Aug     7    pmiller
  3944. X            21:52:55 1993
  3945. X    develop_begin    Sat Aug     7    pmiller Elapsed time: 0.289
  3946. X            21:53:00 1993        days.
  3947. X    develop_end    Sun Aug     8    pmiller
  3948. X            00:03:06 1993
  3949. X    review_pass    Sun Aug     8    pmiller
  3950. X            00:03:49 1993
  3951. X    integrate_begin Sun Aug     8    pmiller Elapsed time: 0.749
  3952. X            00:05:37 1993        days.
  3953. X    integrate_pass    Sun Aug     8    pmiller
  3954. X            22:12:51 1993
  3955. X
  3956. X
  3957. X
  3958. XProject "aegis.2.0", Change 23                     Page 1
  3959. XChange Details                       Tue Aug 17 23:24:38 1993
  3960. X
  3961. XNAME
  3962. X    Project "aegis.2.0", Delta 24, Change 23.
  3963. X
  3964. XSUMMARY
  3965. X    additional terse listings
  3966. X
  3967. XDESCRIPTION
  3968. X    1. Add unformatted variants of existing listings, to
  3969. X    facilitate doing things with shell scripts.
  3970. X    2. Add the skeleton of a ``wish'' script to give aegis a GUI
  3971. X    interface.  Very little is functional, as yet.
  3972. X
  3973. X    My thanks to David Robison <david@hccw.com> for these
  3974. X    suggestions.
  3975. X
  3976. X    This change is exempt from testing against the development
  3977. X    directory.  This change is exempt from testing against the
  3978. X    baseline.
  3979. X
  3980. XCAUSE
  3981. X    This change was caused by external_improvement.
  3982. X
  3983. XFILES
  3984. X    Type    Action    Edit    File Name
  3985. X    ------- ------- ------- -----------
  3986. X    source    modify    4    aegis/arglex2.h
  3987. X    source    modify    3    aegis/col.c
  3988. X    source    modify    7    aegis/copyfile.c
  3989. X    source    modify    3    aegis/help.c
  3990. X    source    modify    7    aegis/list.c
  3991. X    source    modify    3    aegis/list.h
  3992. X    source    modify    5    aegis/main.c
  3993. X    source    modify    2    aegis/pager.c
  3994. X    source    modify    4    aux/Howto.cook
  3995. X    source    modify    3    common/option.c
  3996. X    source    modify    3    common/option.h
  3997. X    source    create    1    lib/aegis.icon
  3998. X    source    create    1    lib/aegis.mask
  3999. X    source    create    1    lib/aegis.pgm
  4000. X    source    modify    4    man1/aegis.1
  4001. X    source    modify    3    man1/ael.1
  4002. X    source    create    1    man1/o_unforma.so
  4003. X    source    create    1    script/aegis.synpic
  4004. X    source    create    1    script/xaegis.tcl
  4005. X
  4006. XHISTORY
  4007. X    What        When        Who    Comment
  4008. X    ------        ------        -----    ---------
  4009. X    new_change    Sun Aug     8    pmiller
  4010. X            22:33:17 1993
  4011. X    develop_begin    Sun Aug     8    pmiller Elapsed time: 3.970
  4012. X            22:33:21 1993        days.
  4013. X    develop_end    Thu Aug 12    pmiller
  4014. X            22:20:02 1993
  4015. X    develop_end_    Thu Aug 12    pmiller Elapsed time: 0.086
  4016. X    undo        22:21:06 1993        days.
  4017. X    develop_end    Thu Aug 12    pmiller
  4018. X
  4019. X
  4020. X
  4021. XProject "aegis.2.0", Change 23                     Page 2
  4022. XChange Details                       Tue Aug 17 23:24:38 1993
  4023. X
  4024. X    What        When        Who    Comment
  4025. X    ------        ------        -----    ---------
  4026. X            22:59:49 1993
  4027. X    review_pass    Thu Aug 12    pmiller
  4028. X            23:02:39 1993
  4029. X    integrate_begin Thu Aug 12    pmiller Elapsed time: 0.843
  4030. X            23:04:14 1993        days.
  4031. X    integrate_pass    Fri Aug 13    pmiller
  4032. X            21:53:28 1993
  4033. X
  4034. X
  4035. X
  4036. XProject "aegis.2.0", Change 24                     Page 1
  4037. XChange Details                       Tue Aug 17 23:24:38 1993
  4038. X
  4039. XNAME
  4040. X    Project "aegis.2.0", Delta 25, Change 24.
  4041. X
  4042. XSUMMARY
  4043. X    fix bug in pattr_ed
  4044. X
  4045. XDESCRIPTION
  4046. X    My thanks to Timothy Shimeall
  4047. X    <shimeall@gravy3.cs.nps.navy.mil> for reporting this problem.
  4048. X
  4049. X    I found one true bug in your source code, located near line
  4050. X    435 in the  file "aegis/pattr_ed.c".  Your distributed code
  4051. X    calls "str_free", deallocating a structure called "pstate_
  4052. X    data", then immediatelty references pstate_data, where it
  4053. X    should be referencing pattr_data.
  4054. X
  4055. X    Other than using the System V config.h file, the porting
  4056. X    changes were  restricted to "aegis/os.c" had to deal with two
  4057. X    incompatabilities: a) the routine "readlink" returns ENXIO
  4058. X    when called with a non-symbolic on the IRIS workstations
  4059. X    (instead of EINVAL); b) the symbol TIOCGETPGRP is not defined
  4060. X    on the IRIS, but TIOCGPGRP is, with equivalent functionality.
  4061. X
  4062. X    This change is exempt from testing against the development
  4063. X    directory.  This change is exempt from testing against the
  4064. X    baseline.
  4065. X
  4066. XCAUSE
  4067. X    This change was caused by internal_bug.
  4068. X
  4069. XFILES
  4070. X    Type    Action    Edit    File Name
  4071. X    ------- ------- ------- -----------
  4072. X    source    modify    4    aegis/os.c
  4073. X    source    modify    5    aegis/pattr_ed.c
  4074. X    source    modify    7    aux/BUILDING.man
  4075. X    source    modify    3    aux/Makefile.sh
  4076. X    source    create    1    conf/IRIX-4.0
  4077. X
  4078. XHISTORY
  4079. X    What        When        Who    Comment
  4080. X    ------        ------        -----    ---------
  4081. X    new_change    Sat Aug 14    pmiller
  4082. X            21:52:40 1993
  4083. X    develop_begin    Sat Aug 14    pmiller Elapsed time: 0.218
  4084. X            21:52:58 1993        days.
  4085. X    develop_end    Sat Aug 14    pmiller
  4086. X            23:30:55 1993
  4087. X    review_pass    Sat Aug 14    pmiller
  4088. X            23:31:06 1993
  4089. X    integrate_begin Sat Aug 14    pmiller Elapsed time: 0.104
  4090. X            23:32:41 1993        days.
  4091. X    integrate_pass    Sun Aug 15    pmiller
  4092. X            00:19:26 1993
  4093. X
  4094. X
  4095. X
  4096. XProject "aegis.2.0", Change 25                     Page 1
  4097. XChange Details                       Tue Aug 17 23:24:39 1993
  4098. X
  4099. XNAME
  4100. X    Project "aegis.2.0", Delta 26, Change 25.
  4101. X
  4102. XSUMMARY
  4103. X    add list outstanding changes
  4104. X
  4105. XDESCRIPTION
  4106. X     The list command did not provide a listing of all the
  4107. X    outstanding changes.
  4108. X
  4109. X    My thanks to Gary Evesson <kcs@extro.ucc.su.OZ.AU> for this
  4110. X    suggestion.
  4111. X
  4112. X    This change is exempt from testing against the development
  4113. X    directory.  This change is exempt from testing against the
  4114. X    baseline.
  4115. X
  4116. XCAUSE
  4117. X    This change was caused by external_enhancement.
  4118. X
  4119. XFILES
  4120. X    Type    Action    Edit    File Name
  4121. X    ------- ------- ------- -----------
  4122. X    source    modify    8    aegis/list.c
  4123. X    source    modify    4    aegis/list.h
  4124. X    source    modify    6    aux/new.2.0.so
  4125. X    source    modify    4    man1/ael.1
  4126. X
  4127. XHISTORY
  4128. X    What        When        Who    Comment
  4129. X    ------        ------        -----    ---------
  4130. X    new_change    Mon Aug 16    pmiller
  4131. X            10:21:28 1993
  4132. X    develop_begin    Mon Aug 16    pmiller Elapsed time: 0.212
  4133. X            10:21:36 1993        days.
  4134. X    develop_end    Mon Aug 16    pmiller
  4135. X            11:56:52 1993
  4136. X    review_pass    Mon Aug 16    pmiller
  4137. X            11:57:04 1993
  4138. X    integrate_begin Mon Aug 16    pmiller Elapsed time: 0.130
  4139. X            11:58:33 1993        days.
  4140. X    integrate_pass    Mon Aug 16    pmiller
  4141. X            12:56:54 1993
  4142. X
  4143. X
  4144. X
  4145. XProject "aegis.2.0", Change 26                     Page 1
  4146. XChange Details                       Tue Aug 17 23:24:40 1993
  4147. X
  4148. XNAME
  4149. X    Project "aegis.2.0", Delta 27, Change 26.
  4150. X
  4151. XSUMMARY
  4152. X    interface improvements
  4153. X
  4154. XDESCRIPTION
  4155. X    1. The aeipass command should let you know all the problems in
  4156. X    one go, not just one.  Also, the check for the current
  4157. X    directory was much too early, and hid more useful errors.
  4158. X    2. It is possible for the generic options to be given befor
  4159. X    the function slector.
  4160. X
  4161. X    My thanks to Ian Darwin <ian@sq.com> for this suggestion.
  4162. X
  4163. X    This change is exempt from testing against the development
  4164. X    directory.  This change is exempt from testing against the
  4165. X    baseline.
  4166. X
  4167. XCAUSE
  4168. X    This change was caused by external_improvement.
  4169. X
  4170. XFILES
  4171. X    Type    Action    Edit    File Name
  4172. X    ------- ------- ------- -----------
  4173. X    source    modify    6    aegis/integra2.c
  4174. X    source    modify    6    aegis/main.c
  4175. X
  4176. XHISTORY
  4177. X    What        When        Who    Comment
  4178. X    ------        ------        -----    ---------
  4179. X    new_change    Mon Aug 16    pmiller
  4180. X            12:58:35 1993
  4181. X    develop_begin    Mon Aug 16    pmiller Elapsed time: 0.078
  4182. X            12:58:42 1993        days.
  4183. X    develop_end    Mon Aug 16    pmiller
  4184. X            13:33:57 1993
  4185. X    review_pass    Mon Aug 16    pmiller
  4186. X            13:34:10 1993
  4187. X    integrate_begin Mon Aug 16    pmiller Elapsed time: 0.123
  4188. X            13:35:44 1993        days.
  4189. X    integrate_pass    Mon Aug 16    pmiller
  4190. X            14:31:11 1993
  4191. X
  4192. X
  4193. X
  4194. XProject "aegis.2.0", Change 27                     Page 1
  4195. XChange Details                       Tue Aug 17 23:24:41 1993
  4196. X
  4197. XNAME
  4198. X    Project "aegis.2.0", Delta 28, Change 27.
  4199. X
  4200. XSUMMARY
  4201. X    documentation example fails on convex
  4202. X
  4203. XDESCRIPTION
  4204. X    need to place yyerror function in main.c of documentation
  4205. X    example, -ly not available on convex
  4206. X
  4207. X    This change is exempt from testing against the baseline.
  4208. X
  4209. XCAUSE
  4210. X    This change was caused by internal_bug.
  4211. X
  4212. XSTATE
  4213. X    This change is in 'being_integrated' state.
  4214. X
  4215. XFILES
  4216. X    Type    Action    Edit    File Name
  4217. X    ------- ------- ------- -----------
  4218. X    source    modify    4    aux/Howto.cook
  4219. X    test    modify    3    test/00/t0011a.sh
  4220. X
  4221. XHISTORY
  4222. X    What        When        Who    Comment
  4223. X    ------        ------        -----    ---------
  4224. X    new_change    Tue Aug 17    pmiller
  4225. X            23:01:36 1993
  4226. X    develop_begin    Tue Aug 17    pmiller Elapsed time: 0.036
  4227. X            23:01:42 1993        days.
  4228. X    develop_end    Tue Aug 17    pmiller
  4229. X            23:17:53 1993
  4230. X    review_pass    Tue Aug 17    pmiller
  4231. X            23:19:03 1993
  4232. X    integrate_begin Tue Aug 17    pmiller
  4233. X            23:20:44 1993
  4234. END_OF_FILE
  4235. if test 52993 -ne `wc -c <'aux/CHANGES.2.0'`; then
  4236.     echo shar: \"'aux/CHANGES.2.0'\" unpacked with wrong size!
  4237. fi
  4238. # end of 'aux/CHANGES.2.0'
  4239. fi
  4240. echo shar: End of archive 16 \(of 19\).
  4241. cp /dev/null ark16isdone
  4242. MISSING=""
  4243. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
  4244.     if test ! -f ark${I}isdone ; then
  4245.     MISSING="${MISSING} ${I}"
  4246.     fi
  4247. done
  4248. if test "${MISSING}" = "" ; then
  4249.     echo You have unpacked all 19 archives.
  4250.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  4251. else
  4252.     echo You still need to unpack the following archives:
  4253.     echo "        " ${MISSING}
  4254. fi
  4255. ##  End of shell archive.
  4256. exit 0
  4257.