/* * To the "ignore list", add the hard-coded default ignored wildcards above, * the wildcards found in $CVSROOT/CVSROOT/cvsignore, the wildcards found in * ~/.cvsignore and the wildcards found in the CVSIGNORE environment * variable. */ void ign_setup () { char *home_dir; char *tmp; ign_inhibit_server = 0; /* Start with default list and special case */ tmp = xstrdup (ign_default); ign_add (tmp, 0); free (tmp); #ifdef CLIENT_SUPPORT /* The client handles another way, by (after it does its own ignore file processing, and only if !ign_inhibit_server), letting the server know about the files and letting it decide whether to ignore them based on CVSROOOTADM_IGNORE. */ if (!current_parsed_root->isremote) #endif { char *file = xmalloc (strlen (current_parsed_root->directory) + sizeof (CVSROOTADM) + sizeof (CVSROOTADM_IGNORE) + 10); /* Then add entries found in repository, if it exists */ (void) sprintf (file, "%s/%s/%s", current_parsed_root->directory, CVSROOTADM, CVSROOTADM_IGNORE); ign_add_file (file, 0); free (file); } /* Then add entries found in home dir, (if user has one) and file exists */ home_dir = get_homedir (); /* If we can't find a home directory, ignore ~/.cvsignore. This may make tracking down problems a bit of a pain, but on the other hand it might be obnoxious to complain when CVS will function just fine without .cvsignore (and many users won't even know what .cvsignore is). */ if (home_dir) { char *file = xmalloc (strlen (home_dir) + sizeof (CVSDOTIGNORE) + 10); (void) sprintf (file, "%s/%s", home_dir, CVSDOTIGNORE); ign_add_file (file, 0); free (file); } /* Then add entries found in CVSIGNORE environment variable. */ ign_add (getenv (IGNORE_ENV), 0); /* Later, add ignore entries found in -I arguments */ }
// Do update ignored list void DoUpdateIgnoredList() { TDEBUG_ENTER("DoUpdateIgnoredList"); defIgnoredList.clear(); defIgnoreListTimeStamp = GetTickCount(); // Default ignored list from cvsnt/src/ignore.c static const char* ign_default = ". .. RCSLOG tags TAGS RCS SCCS .make.state " ".nse_depinfo #* .#* cvslog.* ,* CVS CVS.adm .del-* *.a *.olb *.o *.obj " "*.so *.Z *~ *.old *.elc *.ln *.bak *.orig *.rej _$* *$"; ign_add(ign_default, defIgnoredList); // .cvsignore from homedir std::string homeDir; bool GotHomeDir = GetHomeDirectory(homeDir); if (GotHomeDir) { // Read .cvsignore file from HOME directory. homeDir = EnsureTrailingDelimiter(homeDir); homeDir += ".cvsignore"; ReadIgnoredFile(homeDir, defIgnoredList); } }
/* * To the "ignore list", add the hard-coded default ignored wildcards above, * the wildcards found in $CVSROOT/CVSROOT/cvsignore, the wildcards found in * ~/.cvsignore and the wildcards found in the CVSIGNORE environment * variable. */ void ign_setup () { char *home_dir; char *tmp; ign_inhibit_server = 0; /* Start with default list and special case */ tmp = xstrdup (ign_default); ign_add (tmp, 0); free (tmp); #ifdef CLIENT_SUPPORT /* The client handles another way, by (after it does its own ignore file processing, and only if !ign_inhibit_server), letting the server know about the files and letting it decide whether to ignore them based on CVSROOOTADM_IGNORE. */ if (!client_active) #endif { char *file = xmalloc (strlen (CVSroot_directory) + sizeof (CVSROOTADM) + sizeof (CVSROOTADM_IGNORE) + 10); /* Then add entries found in repository, if it exists */ (void) sprintf (file, "%s/%s/%s", CVSroot_directory, CVSROOTADM, CVSROOTADM_IGNORE); ign_add_file (file, 0); free (file); } /* Then add entries found in home dir, (if user has one) and file exists */ home_dir = get_homedir (); if (home_dir) { char *file = xmalloc (strlen (home_dir) + sizeof (CVSDOTIGNORE) + 10); (void) sprintf (file, "%s/%s", home_dir, CVSDOTIGNORE); ign_add_file (file, 0); free (file); } /* Then add entries found in CVSIGNORE environment variable. */ ign_add (getenv (IGNORE_ENV), 0); /* Later, add ignore entries found in -I arguments */ }
/* * Open a file and read lines, feeding each line to a line parser. Arrange * for keeping a temporary list of wildcards at the end, if the "hold" * argument is set. */ void ign_add_file (char *file, int hold) { FILE *fp; char *line = NULL; size_t line_allocated = 0; /* restore the saved list (if any) */ if (s_ign_list != NULL) { int i; for (i = 0; i < s_ign_count; i++) ign_list[i] = s_ign_list[i]; ign_count = s_ign_count; ign_list[ign_count] = NULL; s_ign_count = 0; free (s_ign_list); s_ign_list = NULL; } /* is this a temporary ignore file? */ if (hold) { /* re-set if we had already done a temporary file */ if (ign_hold >= 0) { int i; for (i = ign_hold; i < ign_count; i++) free (ign_list[i]); ign_count = ign_hold; ign_list[ign_count] = NULL; } else { ign_hold = ign_count; } } /* load the file */ fp = CVS_FOPEN (file, "r"); if (fp == NULL) { if (! existence_error (errno)) error (0, errno, "cannot open %s", file); return; } while (getline (&line, &line_allocated, fp) >= 0) ign_add (line, hold); if (ferror (fp)) error (0, errno, "cannot read %s", file); if (fclose (fp) < 0) error (0, errno, "cannot close %s", file); free (line); }
// Read .cvsignore file and append entries to ignlist static bool ReadIgnoredFile(const std::string& fileName, std::vector<std::string> & ignlist) { std::ifstream in(fileName.c_str()); if (!in) return false; while (1) { std::string line; std::getline(in, line); if (!in) break; ign_add(line.c_str(), ignlist); } return true; }
/* * To the "ignore list", add the hard-coded default ignored wildcards above, * the wildcards found in $CVSROOT/CVSROOT/cvsignore, the wildcards found in * ~/.cvsignore and the wildcards found in the CVSIGNORE environment * variable. */ void ign_setup () { char *home_dir; char *tmp, *ptr, *server_line; int len; ign_inhibit_server = 0; /* Start with default list and special case */ tmp = xstrdup (ign_default); ign_add (tmp, 0); xfree (tmp); /* The client handles another way, by (after it does its own ignore file processing, and only if !ign_inhibit_server), letting the server know about the files and letting it decide whether to ignore them based on CVSROOOTADM_IGNORE. */ if (current_parsed_root && !current_parsed_root->isremote) { char *file = (char*)xmalloc (strlen (current_parsed_root->directory) + sizeof (CVSROOTADM) + sizeof (CVSROOTADM_IGNORE) + 10); /* Then add entries found in repository, if it exists */ sprintf (file, "%s/%s/%s", current_parsed_root->directory, CVSROOTADM, CVSROOTADM_IGNORE); ign_add_file (file, 0); xfree (file); } else if(supported_request("read-cvsignore")) { TRACE(1,"Requesting server cvsignore"); send_to_server ("read-cvsignore\n", 0); read_line(&server_line); if(server_line[0]=='E' && server_line[1]==' ') { fprintf (stderr, "%s\n", server_line + 2); error_exit(); } len = atoi(server_line); tmp = (char*)xmalloc(len+1); ptr = tmp; while (len > 0) { size_t n; n = try_read_from_server (ptr, len); len -= n; ptr += n; } *ptr = '\0'; ptr=strtok(tmp,"\n"); while(ptr && *ptr) { ign_add(ptr,0); ptr=strtok(NULL,"\n"); } xfree(tmp); xfree(server_line); ign_inhibit_server = 1; /* We have all the server-side ignore stuff... ignore any more */ } /* Then add entries found in home dir, (if user has one) and file exists */ home_dir = get_homedir (); /* If we can't find a home directory, ignore ~/.cvsignore. This may make tracking down problems a bit of a pain, but on the other hand it might be obnoxious to complain when CVS will function just fine without .cvsignore (and many users won't even know what .cvsignore is). */ if (home_dir) { char *file = (char*)xmalloc (strlen (home_dir) + sizeof (CVSDOTIGNORE) + 10); sprintf (file, "%s/%s", home_dir, CVSDOTIGNORE); ign_add_file (file, 0); xfree (file); } /* Then add entries found in CVSIGNORE environment variable. */ ign_add (CProtocolLibrary::GetEnvironment (IGNORE_ENV), 0); /* Later, add ignore entries found in -I arguments */ }